diff --git a/3rdparty/openexr/AUTHORS.ilmbase b/3rdparty/openexr/AUTHORS.ilmbase deleted file mode 100644 index 51c1f9cea5..0000000000 --- a/3rdparty/openexr/AUTHORS.ilmbase +++ /dev/null @@ -1,21 +0,0 @@ -Developers: ------------ - -Florian Kainz -Rod Bogart -Drew Hess -Bill Anderson -Wojciech Jarosz - -Contributors: -------------- - -Rito Trevino -Josh Pines -Christian Rouet - -Win32 build system: -------------------- - -Nick Porcino -Kimball Thurston diff --git a/3rdparty/openexr/AUTHORS.openexr b/3rdparty/openexr/AUTHORS.openexr deleted file mode 100644 index 57299bc391..0000000000 --- a/3rdparty/openexr/AUTHORS.openexr +++ /dev/null @@ -1,49 +0,0 @@ -Developers: ------------ - -Florian Kainz -Rod Bogart -Drew Hess -Paul Schneider -Bill Anderson -Wojciech Jarosz -Andrew Kunz -Piotr Stanczyk -Peter Hillman -Nick Porcino -Kimball Thurston - -Contributors: -------------- - -Simon Green -Rito Trevino -Josh Pines -Christian Rouet -Rodrigo Damazio -Greg Ward -Joseph Goldstone -Loren Carpenter, Pixar Animation Studios -Nicholas Yue -Yunfeng Bai (ILM) -Pascal Jette (Autodesk) -Karl Rasche, DreamWorks Animation - -Win32 build system: -------------------- - -Nick Porcino -Kimball Thurston - -Win32 port contributors: ------------------------- - -Dustin Graves -Jukka Liimatta -Baumann Konstantin -Daniel Koch -E. Scott Larsen -stephan mantler -Andreas Kahler -Frank Jargstorff -Lutz Latta diff --git a/3rdparty/openexr/CMakeLists.txt b/3rdparty/openexr/CMakeLists.txt deleted file mode 100644 index aeb5a55f31..0000000000 --- a/3rdparty/openexr/CMakeLists.txt +++ /dev/null @@ -1,152 +0,0 @@ -# ---------------------------------------------------------------------------- -# CMake file for openexr -# -# ---------------------------------------------------------------------------- - -project(openexr CXX) - - -if(NOT HAVE_CXX11) - ocv_check_compiler_flag(CXX "-std=c++11" HAVE_STD_CXX11 "${OpenCV_SOURCE_DIR}/cmake/checks/cxx11.cpp") - if(HAVE_STD_CXX11) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") - else() - if(BUILD_OPENEXR) - message(WARNING "OpenCV: builtin OpenEXR requires C++11 support. OpenEXR is disabled.") - endif() - return() - endif() -endif() - - - -set(ILMBASE_VERSION_MAJOR "2") -set(ILMBASE_VERSION_MINOR "3") -set(ILMBASE_VERSION_PATCH "0") - -set(ILMBASE_VERSION "${ILMBASE_VERSION_MAJOR}.${ILMBASE_VERSION_MINOR}.${ILMBASE_VERSION_PATCH}") -set(ILMBASE_VERSION_API ${ILMBASE_VERSION_MAJOR}_${ILMBASE_VERSION_MINOR}) - -set(OPENEXR_VERSION_MAJOR "2") -set(OPENEXR_VERSION_MINOR "3") -set(OPENEXR_VERSION_PATCH "0") - -set(OPENEXR_VERSION "${OPENEXR_VERSION_MAJOR}.${OPENEXR_VERSION_MINOR}.${OPENEXR_VERSION_PATCH}") -set(OPENEXR_VERSION_API ${OPENEXR_VERSION_MAJOR}_${OPENEXR_VERSION_MINOR}) - -set(OPENEXR_VERSION "${OPENEXR_VERSION}" PARENT_SCOPE) - -if(WIN32) - set(HAVE_COMPLETE_IOMANIP 1) - set(OPENEXR_IMF_HAVE_COMPLETE_IOMANIP 1) - set(PLATFORM_WINDOWS 1) -elseif(APPLE) - set(HAVE_POSIX_SEMAPHORES 0) # Unnamed semaphores are not supported: https://github.com/opencv/opencv/issues/9361 - if(DARWIN) - set(OPENEXR_IMF_HAVE_DARWIN 1) - endif() -elseif(UNIX) - include(CheckIncludeFile) - check_include_file(semaphore.h HAVE_POSIX_SEMAPHORES) -endif() - -set(ILMBASE_VERSION_API "opencv") -set(ILMBASE_INTERNAL_NAMESPACE_CUSTOM 1) -set(IMATH_INTERNAL_NAMESPACE "Imath_${ILMBASE_VERSION_API}") -set(IEX_INTERNAL_NAMESPACE "Iex_${ILMBASE_VERSION_API}") -set(ILMTHREAD_INTERNAL_NAMESPACE "IlmThread_${ILMBASE_VERSION_API}") - -set(ILMBASE_NAMESPACE_CUSTOM 0) -set(IMATH_NAMESPACE "Imath") -set(IEX_NAMESPACE "Iex") -set(ILMTHREAD_NAMESPACE "IlmThread") -set(ILMBASE_VERSION_STRING "\"${ILMBASE_VERSION}\"" ) -set(ILMBASE_PACKAGE_STRING "\"IlmBase ${ILMBASE_VERSION}\"" ) - - -set(OPENEXR_VERSION_API "opencv") -set(OPENEXR_IMF_INTERNAL_NAMESPACE_CUSTOM 1) -set(OPENEXR_IMF_INTERNAL_NAMESPACE "Imf_${ILMBASE_VERSION_API}") -set(OPENEXR_IMF_NAMESPACE_CUSTOM 0) -set(OPENEXR_IMF_NAMESPACE "Imf") - -set(OPENEXR_VERSION_STRING "\"${OPENEXR_VERSION}\"" ) -set(OPENEXR_PACKAGE_STRING "\"OpenEXR ${OPENEXR_VERSION}\"" ) - - -configure_file("${CMAKE_CURRENT_SOURCE_DIR}/IlmBaseConfig.h.cmakein" - "${CMAKE_CURRENT_BINARY_DIR}/IlmBaseConfig.h" @ONLY) -configure_file("${CMAKE_CURRENT_SOURCE_DIR}/OpenEXRConfig.h.cmakein" - "${CMAKE_CURRENT_BINARY_DIR}/OpenEXRConfig.h" @ONLY) - -set(OPENEXR_INCLUDE_PATHS "${CMAKE_CURRENT_SOURCE_DIR}/Half" - "${CMAKE_CURRENT_SOURCE_DIR}/Iex" - "${CMAKE_CURRENT_SOURCE_DIR}/IlmThread" - "${CMAKE_CURRENT_SOURCE_DIR}/Imath" - "${CMAKE_CURRENT_SOURCE_DIR}/IlmImf" - "${CMAKE_CURRENT_BINARY_DIR}") - -ocv_include_directories("${CMAKE_CURRENT_BINARY_DIR}" ${ZLIB_INCLUDE_DIRS} ${OPENEXR_INCLUDE_PATHS}) - -file(GLOB lib_srcs Half/half.cpp Iex/*.cpp IlmThread/*.cpp Imath/*.cpp IlmImf/*.cpp) -file(GLOB lib_hdrs Half/*.h Iex/Iex*.h IlmThread/IlmThread*.h Imath/Imath*.h IlmImf/*.h) -list(APPEND lib_hdrs "${CMAKE_CURRENT_BINARY_DIR}/IlmBaseConfig.h" "${CMAKE_CURRENT_BINARY_DIR}/OpenEXRConfig.h") - -if(WIN32) - ocv_list_filterout(lib_srcs Posix.*cpp) -else() - ocv_list_filterout(lib_srcs Win32.cpp) -endif() - -source_group("Include" FILES ${lib_hdrs} ) -source_group("Src" FILES ${lib_srcs}) - -ocv_warnings_disable(CMAKE_CXX_FLAGS -Wshadow -Wunused -Wsign-compare -Wundef -Wmissing-declarations -Wuninitialized -Wswitch -Wparentheses -Warray-bounds -Wextra - -Wdeprecated-declarations -Wmisleading-indentation -Wdeprecated - -Wsuggest-override -Winconsistent-missing-override - -Wimplicit-fallthrough - -Wtautological-compare # clang - -Wmissing-prototypes # gcc/clang - -Wreorder - -Wunused-result - -Wimplicit-const-int-float-conversion # clang -) -if(CV_GCC AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 8.0) - ocv_warnings_disable(CMAKE_CXX_FLAGS -Wclass-memaccess) -endif() - -ocv_warnings_disable(CMAKE_CXX_FLAGS /wd4018 /wd4099 /wd4100 /wd4101 /wd4127 /wd4189 /wd4245 /wd4305 /wd4389 /wd4512 /wd4701 /wd4702 /wd4706 /wd4800) # vs2005 -ocv_warnings_disable(CMAKE_CXX_FLAGS /wd4334) # vs2005 Win64 -ocv_warnings_disable(CMAKE_CXX_FLAGS /wd4244) # vs2008 -ocv_warnings_disable(CMAKE_CXX_FLAGS /wd4267) # vs2008 Win64 -ocv_warnings_disable(CMAKE_CXX_FLAGS /wd4456) # vs2015 -ocv_warnings_disable(CMAKE_CXX_FLAGS /wd4819) # vs2019 Win64 - -if(MSVC AND CV_ICC) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /Qrestrict") - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /Qrestrict") -endif() - -add_library(IlmImf STATIC ${OPENCV_3RDPARTY_EXCLUDE_FROM_ALL} ${lib_hdrs} ${lib_srcs}) -target_link_libraries(IlmImf ${ZLIB_LIBRARIES}) - -set_target_properties(IlmImf - PROPERTIES - OUTPUT_NAME "IlmImf" - DEBUG_POSTFIX "${OPENCV_DEBUG_POSTFIX}" - COMPILE_PDB_NAME "IlmImf" - COMPILE_PDB_NAME_DEBUG "IlmImf${OPENCV_DEBUG_POSTFIX}" - ARCHIVE_OUTPUT_DIRECTORY ${3P_LIBRARY_OUTPUT_PATH} - ) - -if(ENABLE_SOLUTION_FOLDERS) - set_target_properties(IlmImf PROPERTIES FOLDER "3rdparty") -endif() - -if(NOT BUILD_SHARED_LIBS) - ocv_install_target(IlmImf EXPORT OpenCVModules ARCHIVE DESTINATION ${OPENCV_3P_LIB_INSTALL_PATH} COMPONENT dev OPTIONAL) -endif() - -ocv_install_3rdparty_licenses(openexr LICENSE AUTHORS.ilmbase AUTHORS.openexr) - -set(OPENEXR_INCLUDE_PATHS ${OPENEXR_INCLUDE_PATHS} PARENT_SCOPE) diff --git a/3rdparty/openexr/ChangeLog.ilmbase b/3rdparty/openexr/ChangeLog.ilmbase deleted file mode 100644 index 2e79c0f44f..0000000000 --- a/3rdparty/openexr/ChangeLog.ilmbase +++ /dev/null @@ -1,136 +0,0 @@ -Version 2.x.x - * Bumped version to track OpenEXR - (Piotr Stanczyk) - -Version 2.0.1 - * Bumped version to track OpenEXR - (Piotr Stanczyk) - -Version 2.0.0 - * Bumped version to track OpenEXR - (Piotr Stanczyk) - * Numerous minor fixes, missing includes etc - -Version 1.1.0.beta.1 - * Added new module PyIlmBase : python bindings for IlmBase - (Nick Rasmussen) - * Added git specific files - (Piotr Stanczyk) - * Minor fixes for newer gcc versions and OS X. - (misc) - * Preparation for OpenEXR v2 release { remove message for final release } - (Piotr Stanczyk) - * Updated the so verison to 10 - (Piotr Stanczyk) - * Initial use of the CMake build system - (Nicholas Yue) - -Version 1.0.3 - * Added support for enabling/disabling large stack optimisations, used in - halfFunction.h. - (Piotr Stanczyk) - * Added ImathNoise.(h/cpp) files. Initializes Perlin noise to match the - Renderman implmenetation. - (Pixar Contribution) - * Fixed a number of missing includes to comply with stricter - enforcement by gnu compilers. - (Piotr Stanczyk) - * Depracated compiler flag: -Wno-long-double since it is no longer - supported under OS X. - (Piotr Stanczyk) - * A minor API change to Imath::Frustum has been made: the functions - 'near' and 'far' have been renamed to 'nearPlane' and 'farPlane' due - to conflicts with certain windows headers. The former alternate - accessor names for these values on windows ('hither' and 'yon') - remain, though should be considered deprecated. - (David Lenihan) - * Added SVD, eigenvalue solver, and procrustes fit calculations - to ImathMatrixAlgo. - (Chris Twigg, Ji Hun Yu) - * Added Imath::FrustumTest for frustum visibility testing. - (Eric Johnston) - * Fixed a stack corruption in the matrix minorOf functions. - (Nick Rasmussen) - * Visual studio 2008 project files have been added to the vc/vc9 - directory, and several minor visual studio compile fixes have - been applied. - (Nick Rasmussen) - * Updated the so verison to 7. - (Piotr Stanczyk) - * Depracated the MacCode_Warrior and Shake submodules. - (Piotr Stanczyk) - -Version 1.0.2 - * Added support for targetting builds on 64bit Windows and minimising - number of compiler warnings on Windows. Thanks to Ger Hobbelt for his - contributions to CreateDLL. - (Ji Hun Yu) - * Removed a spurious restrict qualifier in the matrix manipulation code - that was causing the 64-bit MS compiler to generate code in release - mode that caused incorrect results. - (Ji Hun Yu) - * Added patches for improving universal binaries on OS X. Thanks to - Paul Schneider for the contribution - (Piotr Stanczyk) - * Imath::Box optimization: remove loops from methods by partially - specializing the class, for boxes of two and three dimensions. - (Piotr Stanczyk) - * Added explicit copy constructors to Imath::Matrix33 and - ImathMatrix44 to make conversions between float and double - matrices more convenient. - (Florian Kainz) - * Added slerpShortestArc() and euclideanInnerProduct() functions - to Imath::Quat. - (Nick Porcino) - * Added 4D vector class template Imath::Vec4. - (Nick Porcino) - * Copy constructors and assignment operators for Matrix33 - and Matrix44 are up to 25% faster. Added matrix constructors - that do not initialize the matrix (this is faster in cases where - the initial value of the matrix is immediately overwritten anyway). - (Nick Porcino) - * Rewrote function closestPointOnBox(point,box). Shortened - the code, improved numerical accuracy, fixed a bug where - closestPointOnBox(box.center(),box) would return the center - of the +Z side of the box, even if the +/-X or +/-Y sides - were closer. - (Florian Kainz) - * Rewrote function findEntryAndExitPoints() in ImathBoxAlgo.h. - Results are now consistent with those from intersect(), also - in ImathBoxAlgo.h. - (Florian Kainz) - * Made Vec2::length() and Vec3::length() more accurate for - vectors whose length is less than sqrt(limits::smallest()); - (Florian Kainz) - * Made Quat::angle() more accurate for small angles. - (Don Hatch) - -Version 1.0.1: - * Removed Windows .suo files from distribution. - (Eric Wimmer) - -Version 1.0.0: - * Bumped DSO version number to 6.0 - (Florian Kainz) - * Rounding during float-to-half conversion now implements - "round to nearest even" mode: if the original float value - is exactly in the middle between the two closest half values - then rounding chooses the half value whose least significant - bit is zero. - (Florian Kainz) - * Installation Tuning: - - Corrected version number on dso's (libtool) - now 5.0 - - Separated ILMBASE_LDFLAGS and ILMBASE_LIBS so that test programs - in configure scripts of packages dependent on IlmBase can link - with static libraries properly - - eliminated some warning messages during install - (Andrew Kunz) - -Version 0.9.0: - * Initial release of this code as a separate library. - Previously the libraries contained were part of - version 1.4.0 of OpenEXR - * New build scripts for Linux/Unix - (Andrew Kunz) - * New Windows project files and build scripts - (Kimball Thurston) diff --git a/3rdparty/openexr/ChangeLog.openexr b/3rdparty/openexr/ChangeLog.openexr deleted file mode 100644 index 32a2cae774..0000000000 --- a/3rdparty/openexr/ChangeLog.openexr +++ /dev/null @@ -1,704 +0,0 @@ -Version 2.0.1 - * Temporarily turning off optimisation code path - (Piotr Stanczyk) - * Added additional tests for future optimisation refactoring - (Piotr Stanczyk / Peter Hillman) - * Fixes for StringVectors - (Peter Hillman) - * Additional checks for type mismatches - (Peter Hillman) - * Fix for Composite Deep Scanline - (Brendan Bolles) - -Version 2.0.0 - * Updated Documentation - (Peter Hillman) - * Updated Namespacing mechanism - (Piotr Stanczyk) - * Fixes for succd & predd - (Peter Hillman) - * Fixes for FPE control registers - (Piotr Stanczyk) - * Additional checks and tests on DeepImages, scanlines and tiles - (Peter Hillman) - * Folded in Autodesk read optimisations for RGB(A) files - (Pascal Jette, Peter Hillman) - * Updated the bootstrap scripts to use libtoolize if glibtoolize isn't available on darwin. - (Nick Rasmussen) - * Numerous minor fixes, missing includes etc - -Version 2.0.0.beta.1: -* Please read the separate file for v2 additions and changes. - * Added git specific files - (Piotr Stanczyk) - * Updated the so verison to 20 - (Piotr Stanczyk) - * Initial use of the CMake build system - (Nicholas Yue) - -Version 1.7.1: - * Updated the .so verison to 7. - (Piotr Stanczyk) - -Version 1.7.0: - * Added support for targetting builds on 64bit Windows and minimising - number of compiler warnings on Windows. Thanks to Ger Hobbelt for his - contributions to CreateDLL. - (Ji Hun Yu) - * Added new atttribute types: - M33dAttribute 3x3 double-precision matrix - M44dAttribute 4x4 double-precision matrix - V2d 2D double-precision vector - V3d 3D double-precision vector - (Florian Kainz) - * Bug fix: crash when reading a damaged image file (found - by Apple). An exception thrown inside the PIZ Huffman - decoder bypasses initialization of an array of pointers. - The uninitialized pointers are later passed to operator - delete. - (Florian Kainz) - * Bug fix: crash when reading a damaged image file (found by - Apple). Computing the size of input certain buffers may - overflow and wrap around to a small number, later causing - writes beyond the end of the buffer. - (Florian Kainz) - * In the "Technical Introduction" document, added - Premultiplied vs. Un-Premulitiplied Color section: - states explicitly that pixels with zero alpha and non-zero - RGB are allowed, points out that preserving such a pixel can - be a problem in application programs with un-premultiplied - internal image representations. - (Florian Kainz) - * exrenvmap improvements: - - New command line flags set the type of the input image to - latitude-longitude map or cube-face map, overriding the - envmap attribute in the input file header. - - Cube-face maps can now be assembled from or split into six - square sub-images. - - Converting a cube-face map into a new cube-face map with - the same face size copies the image instead of resampling - it. This avoids blurring when a cube-face map is assembled - from or split into sub-images. - (Florian Kainz) - * Updated standard chromaticities in ImfAcesFile.cpp to match - final ACES (Academy Color Encoding Specification) document. - (Florian Kainz) - * Added worldToCamera and worldToNDC matrices to - ImfStandardAttributes.h (Florian Kainz) - * Increased the maximum length of attribute and channel names - from 31 to 255 characters. For files that do contain names - longer than 31 characters, a new LONG_NAMES_FLAG in the fil - version number is set. This flag causes older versions of - the IlmImf library (1.6.1 and earlier) to reject files with - long names. Without the flag, older library versions would - mis-interpret files with long names as broken. - (Florian Kainz) - * Reading luminance/chroma-encoded files via the RGBA - interface is faster: buffer padding avoids cache thrashing - for certain image sizes, redundant calls to saturation() - have been eliminated. - (Mike Wall) - * Added "hemispherical blur" option to exrenvmap. - (Florian Kainz) - * Added experimental version of I/O classes for ACES file - format (restricted OpenEXR format with special primaries - and white point); added exr2aces file converter. - (Florian Kainz) - * Added new constructors to classes Imf::RgbaInputFile and - Imf::TiledRgbaInputFile. The new constructors have a - layerName parameter, which allows the caller to specify - which layer of a multi-layer or multi-view image will - be read. - (Florian Kainz) - * A number of member functions in classes Imf::Header, - Imf::ChannelList and Imf::FrameBuffer have parameters - of type "const char *". Added equivalent functions that - take "const std::string &" parameters. - (Florian Kainz) - * Added library support for Weta Digital multi-view images: - StringVector attribute type, multiView standard attribute - of type StringVector, utility functions related to grouping - channels into separate views. - (Peter Hillman, Florian Kainz) - -Version 1.6.1: - * Removed Windows .suo files from distribution. - (Eric Wimmer) - * Bug fix: crashes, memory leaks and file descriptor leaks - when reading damaged image files (some reported by Apple, - others found by running IlmImfFuzzTest). - (Florian Kainz) - * Added new IlmImfFuzzTest program to test how resilient the - IlmImf library is with respect broken input files: the program - first damages OpenEXR files by partially overwriting them with - random data; then it tries to read the damaged files. If all - goes well, the program doesn't crash. - (Florian Kainz) - -Version 1.6.0: - * Bumped DSO version number to 6.0 - (Florian Kainz) - * Added new standard attributes related to color rendering with - CTL (Color Transformation Language): renderingTransform, - lookModTransform and adoptedNeutral. - (Florian Kainz) - * Bug fix: for pixels with luminance near HALF_MIN, conversion - from RGB to luminance/chroma produces NaNs and infinities - (Florian Kainz) - * Bug fix: excessive desaturation of small details with certain - colors after repeatedly loading and saving luminance/chroma - encoded images with B44 compression. - (Florian Kainz) - * Added B44A compression, a minor variation of B44: in most cases, - the compression ratio is 2.28:1, the same as with B44, but in - uniform image areas where all pixels have the same value, the - compression ratio increases to 10.66:1. Uniform areas occur, for - example, in an image's alpha channel, which typically contains - large patches that are solid black or white, or in computer- - generated images with a black background. - (Florian Kainz) - * Added flag to configure.ac to enable or disable use of large - auto arrays in the IlmImf library. Default is "enable" for - Linux, "disable" for everything else. - (Darby Johnston, Florian Kainz) - * corrected version number on dso's (libtool) - now 5.0 - * Separated ILMBASE_LDFLAGS and ILMBASE_LIBS so that test programs - can link with static libraries properly - * eliminated some warning messages during install - (Andrew Kunz) - -Version 1.5.0: - * reorganized packaging of OpenEXR libraries to facilitate - integration with CTL. Now this library depends on the library - IlmBase. Some functionality has been moved into OpenEXR_Viewers, - which depends on two other libraries, CTL and OpenEXR_CTL. - Note: previously there were separate releases of - OpenEXR-related plugins for Renderman, Shake and Photoshop. - OpenEXR is supported natively by Rendermand and Photoshop, so - these plugins will not be supported for this or future - versions of OpenEXR. - (Andrew Kunz) - * New build scripts for Linux/Unix - (Andrew Kunz) - * New Windows project files and build scripts - (Kimball Thurston) - * float-to-half conversion now preserves the sign of float zeroes - and of floats that are so small that they become half zeroes. - (Florian Kainz) - * Bug fix: Imath::Frustum::planes() returns incorrect planes - if the frustum is orthogonal. - (Philip Hubbard) - * added new framesPerSecond optional standard attribute - (Florian Kainz) - * Imath cleanup: - - Rewrote function Imath::Quat::setRotation() to make it - numerically more accurate, added confidence tests - - Rewrote function Imath::Quat::slerp() using Don Hatch's - method, which is numerically more accurate, added confidence - tests. - - Rewrote functions Imath::closestPoints(), Imath::intersect(), - added confidence tests. - - Removed broken function Imath::nearestPointOnTriangle(). - - Rewrote Imath::drand48(), Imath::lrand48(), etc. to make - them functionally identical with the Unix/Linux versions - of drand48(), lrand48() and friends. - - Replaced redundant definitions of Int64 in Imath and IlmImf - with a single definition in ImathInt64.h. - (Florian Kainz) - * exrdisplay: if the file's and the display's RGB chromaticities - differ, the pixels RGB values are transformed from the file's - to the display's RGB space. - (Florian Kainz) - * Added new lossy B44 compression method. HALF channels are - compressed with a fixed ratio of 2.28:1. UINT and FLOAT - channels are stored verbatim, without compression. - (Florian Kainz) - -Version 1.4.0a: - * Fixed the ReleaseDLL targets for Visual Studio 2003. - (Barnaby Robson) - -Version 1.4.0: - * Production release. - * Bug Fix: calling setFrameBuffer() for every scan line - while reading a tiled file through the scan line API - returns bad pixel data. (Paul Schneider, Florian Kainz) - -Version 1.3.1: - * Fixed the ReleaseDLL targets for Visual Studio 2005. - (Nick Porcino, Drew Hess) - * Fixes/enhancements for createDLL. - (Nick Porcino) - -Version 1.3.0: - * Removed openexr.spec file, it's out of date and broken to - boot. - (Drew Hess) - * Support for Visual Studio 2005. - (Drew Hess, Nick Porcino) - * When compiling against OpenEXR headers on Windows, you - no longer need to define any HAVE_* or PLATFORM_* - macros in your projects. If you are using any OpenEXR - DLLs, however, you must define OPENEXR_DLL in your - project's preprocessor directives. - (Drew Hess) - * Many fixes to the Windows VC7 build system. - (Drew Hess, Nick Porcino) - * Support for building universal binaries on OS X 10.4. - (Drew Hess, Paul Schneider) - * Minor configure.ac fix to accomodate OS X's automake. - (Drew Hess) - * Removed CPU-specific optimizations from configure.ac, - autoconf's guess at the CPU type isn't very useful, - anyway. Closes #13429. - (Drew Hess) - * Fixed quoting for tests in configure.ac. Closes #13428. - (Drew Hess) - * Use host specification instead of target in configure.ac. - Closes #13427. - (Drew Hess) - * Fix use of AC_ARG_ENABLE in configure.ac. Closes - #13426. - (Drew Hess) - * Removed workaround for OS X istream::read bug. - (Drew Hess) - * Added pthread support to OpenEXR pkg-config file. - (Drew Hess) - * Added -no-undefined to LDFLAGS and required libs to LIBADD - for library projects with other library dependencies, per - Rex Dieter's patch. - (Drew Hess) - * HAVE_* macros are now defined in the OpenEXRConfig.h header - file instead of via compiler flags. There are a handful of - public headers which rely on the value of these macros, - and projects including these headers have previously needed - to define the same macros and values as used by OpenEXR's - 'configure', which is bad form. Now 'configure' writes these - values to the OpenEXRConfig.h header file, which is included - by any OpenEXR source files that need these macros. This - method of specifying HAVE_* macros guarantees that projects - will get the proper settings without needing to add compile- - time flags to accomodate OpenEXR. Note that this isn't - implemented properly for Windows yet. - (Drew Hess) - * Platform cleanups: - - No more support for IRIX or OSF1. - - No more explicit support for SunOS, because we have no way to - verify that it's working. I suspect that newish versions of - SunOS will just work out of the box, but let me know if not. - - No more PLATFORM_* macros (vestiges of the ILM internal build - system). PLATFORM_DARWIN_PPC is replaced by HAVE_DARWIN. - PLATFORM_REDHAT_IA32 (which was only used in IlmImfTest) is - replaced by HAVE_LINUX_PROCFS. - - OS X 10.4, which is the minimum version we're going to support - with this version, appears to have support for nrand48 and friends, - so no need to use the Imath-supplied version of them anymore. - (Drew Hess) - * No more PLATFORM_WINDOWS or PLATFORM_WIN32, replace with - proper standard Windows macros. (Drew Hess) - * Remove support for gcc 2.95, no longer supported. (Drew Hess) - * Eliminate HAVE_IOS_BASE macro, OpenEXR now requires support for - ios_base. (Drew Hess) - * Eliminate HAVE_STL_LIMITS macro, OpenEXR now requires the ISO C++ - header. (Drew Hess) - * Use double quote-style include dirctives for OpenEXR - includes. (Drew Hess) - * Added a document that gives an overview of the on-disk - layout of OpenEXR files (Florian Kainz) - * Added sections on layers and on memory-mapped file input - to the documentation. (Florian Kainz) - * Bug fix: reading an incomplete file causes a deadlock while - waiting on a semaphore. (Florian Kainz) - * Updated documentation (ReadingAndWritingImageFiles.sxw) and - sample code (IlmImfExamples): - Added a section about multi-threading, updated section on - thread-safety, changed documentation and sample code to use - readTiles()/writeTiles() instead of readTile()/writeTile() - where possible, mentioned that environment maps contain - redundant pixels, updated section on testing if a file is - an OpenEXR file. - (Florian Kainz) - * Multi-threading bug fixes (exceptions could be thrown - multiple times, some operations were not thread safe), - updated some comments, added comments, more multithreaded - testing. - (Florian Kainz) - * Added multi-threading support: multiple threads - cooperate to read or write a single OpenEXR file. - (Wojciech Jarosz) - * Added operator== and operator!= to Imath::Frustum. - (Andre Mazzone) - * Bug fix: Reading a PIZ-compressed file with an invalid - Huffman code table caused crashes by indexing off the - end of an array. - (Florian Kainz) - -Version 1.2.2: - * Updated README to remove option for building with Visual C++ 6.0. - (Drew Hess) - * Some older versions of gcc don't support a full iomanip - implemenation; check for this during configuration. - (Drew Hess) - * Install PDF versions of documentation, remove old/out-of-date - HTML documentation. (Florian Kainz) - * Removed vc/vc6 directory; Visual C++ 6.0 is no longer - supported. (Drew Hess) - * Updated README.win32 with details of new build system. - (Florian Kainz, Drew Hess) - * New build system for Windows / Visual C++ 7 builds both - static libraries and DLLs. - (Nick Porcino) - * Removed Imath::TMatrix and related classes, which are not - used anywhere in OpenEXR. - (Florian Kainz) - * Added minimal support for "image layers" to class Imf::ChannelList - (Florian Kainz) - * Added new isComplete() method to InputFile, TiledInputFile - etc., that checks if a file is complete or if any pixels - are missing (for example, because writing the file was - aborted prematurely). - (Florian Kainz) - * Exposed staticInitialize() function in ImfHeader.h in order - to allow thread-safe library initialization in multithreaded - programs. - (Florian Kainz) - * Added a new "time code" attribute - (Florian Kainz) - * exrmaketiled: when a MIPMAP_LEVELS or RIPMAP_LEVELS image - is produced, low-pass filtering takes samples outside the - image's data window. This requires extrapolating the image. - The user can now specify how the image is extrapolated - horizontally and vertically (image is surrounded by black / - outermost row of pixels repeats / entire image repeats / - entire image repeats, every other copy is a mirror image). - exrdisplay: added option to swap the top and botton half, - and the left and right half of an image, so that the image's - four corners end up in the center. This is useful for checking - the seams of wrap-around texture map images. - IlmImf library: Added new "wrapmodes" standard attribute - to indicate the extrapolation mode for MIPMAP_LEVELS and - RIPMAP_LEVELS images. - (Florian Kainz) - * Added a new "key code" attribute to identify motion picture - film frames. - (Florian Kainz) - * Removed #include from ImfAttribute.h, ImfHeader.h - and ImfXdr.h so that including header files such as - ImfInputFile.h no longer defines ASSERT and THROW macros, - which may conflict with similar macros defined by - application programs. - (Florian Kainz) - * Converted HTML documentation to OpenOffice format to - make maintaining the documents easier: - api.html -> ReadingAndWritingImageFiles.sxw - details.html -> TechnicalIntroduction.sxw - (Florian Kainz) - -Version 1.2.1: - * exrenvmap and exrmaketiled use slightly less memory - (Florian Kainz) - * Added functions to IlmImf for quickly testing if a file - is an OpenEXR file, and whether the file is scan-line - based or tiled. (Florian Kainz) - * Added preview image examples to IlmImfExamples. Added - description of preview images and environment maps to - docs/api.html (Florian Kainz) - * Bug fix: PXR24 compression did not work properly for channels - with ySampling != 1. - (Florian Kainz) - * Made template become template for - the transform(ObjectS, ObjectT) methods. This was done to allow - for differing templated objects to be passed in e.g. say a - Box> and a Matrix44, where S=float and T=double. - (Jeff Yost, Arkell Rasiah) - * New method Matrix44::setTheMatrix(). Used for assigning a - M44f to a M44d. (Jeff Yost, Arkell Rasiah) - * Added convenience Color typedefs for half versions of Color3 - and Color4. Note the Makefile.am for both Imath and ImathTest - have been updated with -I and/or -L pathing to Half. - (Max Chen, Arkell Rasiah) - * Methods equalWithAbsError() and equalWithRelError() are now - declared as const. (Colette Mullenhoff, Arkell Rasiah) - * Fixes for gcc34. Mainly typename/template/using/this syntax - correctness changes. (Nick Ramussen, Arkell Rasiah) - * Added Custom low-level file I/O examples to IlmImfExamples - and to the docs/api.html document. (Florian Kainz) - * Eliminated most warnings messages when OpenEXR is compiled - with Visual C++. The OpenEXR code uses lots of (intentional - and unintended) implicit type conversions. By default, Visual - C++ warns about almost all of them. Most implicit conversions - have been removed from the .h files, so that including them - should not generate warnings even at warning level 3. Most - .cpp files are now compiled with warning level 1. - (Florian Kainz) - -Version 1.2.0: - * Production-ready release. - * Disable long double warnings on OS X. (Drew Hess) - * Add new source files to VC7 IlmImfDll target. (Drew Hess) - * Iex: change the way that APPEND_EXC and REPLACE_EXC modify - their what() string to work around an issue with Visual C++ - 7.1. (Florian Kainz, Nick Porcino) - * Bumped OpenEXR version to 1.2 and .so versions to 2.0.0 in - preparation for the release. (Drew Hess) - * Imath: fixed ImathTMatrix.h to work with gcc 3.4. (Drew Hess) - * Another quoting fix in openexr.m4. (Drew Hess) - * Quoting fix in acinclude.m4 for automake 1.8. (Brad Hards) - * Imath: put inline at beginning of declaration in ImathMatrix.h - to fix a warning. (Ken McGaugh) - * Imath: made Vec equalWith*Error () methods const. - * Cleaned up compile-time Win32 support. (Florian Kainz) - * Bug fix: Reading a particular broken PIZ-compressed file - caused crashes by indexing off the end of an array. - (Florian Kainz) - -Version 1.1.1: - * Half: operator= and variants now return by reference rather - than by value. This brings half into conformance with - built-in types. (Drew Hess) - * Half: remove copy constructor, let compiler supply its - own. This improves performance up to 25% on some - expressions using half. (Drew Hess) - * configure: don't try to be fancy with CXXFLAGS, just use - what the user supplies or let configure choose a sensible - default if CXXFLAGS is not defined. - * IlmImf: fixed a bug in reading scanline files on big-endian - architectures. (Drew Hess) - * exrmaketiled: Added an option to select compression type. - (Florian Kainz) - * exrenvmap: Added an option to select compression type. - (Florian Kainz) - * exrdisplay: Added some new command-line options. (Florian Kainz) - * IlmImf: Added Pixar's new "slightly lossy" image compression - method. The new method, named PXR24, preserves HALF and - UINT data without loss, but FLOAT pixels are converted to - a 24-bit representation. PXR24 appears to compress - FLOAT depth buffers very well without losing much accuracy. - (Loren Carpenter, Florian Kainz) - * Changed top-level LICENSE file to allow for other copyright - holders for individual files. - * IlmImf: TILED FILE FORMAT CHANGE. TiledOutputFile was - incorrectly interleaving channels and scanlines before - passing pixel data to a compressor. The lossless compressors - still work, but lossy compressors do not. Fix the bug by - interleaving channels and scanlines in tiled files in the - same way as ScanLineOutputFile does. Programs compiled with - the new version of IlmImf cannot read tiled images produced - with version 1.1.0. (Florian Kainz) - * IlmImf: ImfXdr.h fix for 64-bit architectures. (Florian Kainz) - * IlmImf: OpenEXR now supports YCA (luminance/chroma/alpha) - images with subsampled chroma channels. When an image - is written with the RGBA convenience interface, selecting - WRITE_YCA instead of WRITE_RGBA causes the library to - convert the pixels to YCA format. If WRITE_Y is selected, - only luminance is stored in the file (for black and white - images). When an image file is read with the RGBA convenience - interface, YCA data are automatically converted back to RGBA. - (Florian Kainz) - * IlmImf: speed up reading tiled files as scan lines. - (Florian Kainz) - * Half: Fixed subtle bug in Half where signaling float NaNs - were being converted to inf in half. (Florian Kainz) - * gcc 3.3 compiler warning cleanups. (various) - * Imath: ImathEuler.h fixes for gcc 3.4. (Garrick Meeker) - -Version 1.1.0: - * Added new targets to Visual C++ .NET 2003 project - for exrmaketiled, exrenvmap, exrmakepreview, and exrstdattr. - (Drew Hess) - * A few assorted Win32 fixes for Imath. (Drew Hess) - * GNU autoconf builds now produce versioned libraries. - This release is 1:0:0. (Drew Hess) - * Fixes for Visual C++ .NET 2003. (Paul Schneider) - * Updated Visual C++ zlib project file to zlib 1.2.1. - (Drew Hess) - * exrdisplay: Fixed fragment shader version. (Drew Hess) - * *Test: Fixed some compiler issues. (Drew Hess) - * Imath: Handle "restrict" keyword properly. (Drew Hess) - * IlmImfExamples: Updated to latest versions of example - source code, includes tiling and multi-res images. - (Florian Kainz) - * exrmakepreview: A new utility to create preview images. - (Florian Kainz) - * exrenvmap: A new utility to create OpenEXR environment - maps. (Florian Kainz) - * exrstdattr: A new utility to modify standard - attributes. (Florian Kainz) - * Updated exrheader to print level rounding mode and - preview image size. (Florian Kainz) - * Updated exrmaketiled to use level rounding mode. - (Florian Kainz) - * IlmImf: Changed the orientation of lat-long envmaps to - match typical panoramic camera setups. (Florian Kainz) - * IlmImf: Fixed a bug where partially-completed files with - DECREASING_Y could not be read. (Florian Kainz) - * IlmImf: Added support for selectable rounding mode (up/down) - when generating multiresolution files. (Florian Kainz) - * exrdisplay: Support for tiled images, mip/ripmaps, preview - images, and display windows. (Florian Kainz, Drew Hess) - * exrmaketiled: A new utility which generates tiled - versions of OpenEXR images. (Florian Kainz) - * IlmImf: Changed Imf::VERSION to Imf::EXR_VERSION to - work around problems with autoconf VERSION macro - conflict. (Drew Hess) - * exrheader: Support for tiles, mipmaps, environment - maps. (Florian Kainz) - * IlmImf: Environment map support. (Florian Kainz) - * IlmImf: Abstracted stream I/O support. (Florian Kainz) - * IlmImf: Support for tiled and mip/ripmapped files; - requires new file format. (Wojciech Jarosz, Florian Kainz) - * Imath: TMatrix*, generic 2D matricies and algorithms. - (Francesco Callari) - * Imath: major quaternions cleanup. (Cary Phillips) - * Imath: added GLBegin, GLPushAttrib, GLPushMatrix objects - for automatic cleanup on exceptions. (Cary Phillips) - * Imath: removed implicit scalar->vector promotions and vector - comparisons. (Nick Rasmussen) - -Version 1.0.7: - * Fixed a typo in one of the IlmImfTest tests. (Paul Schneider) - * Fixed a bug in exrdisplay that causes the image to display - as all black if there's a NaN or infinity in an OpenEXR - image. (Florian Kainz) - * Updated exrheader per recent changes to IlmImf library. - (Florian Kainz) - * Changed an errant float to a T in ImathFrame.h nextFrame(). - (Cary Phillips) - * Support for new "optional standard" attributes - (chromaticities, luminance, comments, etc.). - (Florian Kainz, Greg Ward, Joseph Goldstone) - * Fixed a buffer overrun in ImfOpaqueAttribute. (Paul Schneider) - * Added new function, isImfMagic (). (Florian Kainz) - -Version 1.0.6: - * Added README.win32 to disted files. - * Fixed OpenEXR.pc.in pkg-config file, OpenEXR now works - with pkg-config. - * Random fixes to readme files for new release. - * Fixed openexr.m4, now looks in /usr by default. - * Added Visual Studio .NET 2003 "solution." - * Fixes for Visual Studio .NET 2003 w/ Microsoft C++ compiler. - (Various) - * Random Imath fixes and enhancements. Note that - extractSHRT now takes an additional optional - argument, see ImathMatrixAlgo.h for details. (Various) - * Added Wojciech Jarosz to AUTHORS file. - * Added test cases for uncompressed case, preview images, - frame buffer type conversion. (Wojciech Jarosz, - Florian Kainz) - * Fix a bug in IlmImf where uncompressed data doesn't get - read/written correctly. (Wojciech Jarosz) - * Added support for preview images and preview image - attributes (thumbnail images) in IlmImf. (Florian Kainz) - * Added support for automatic frame buffer type conversion - in IlmImf. (Florian Kainz) - * Cleaned up some compile-time checks. - * Added HalfTest unit tests. - * [exrdisplay] Download half framebuffer to texture memory - instead of converting to float first. Requires latest - Nvidia drivers. - -Version 1.0.5: - * Fixed IlmImf.dll to use static runtime libs (Andreas). - * Added exrheader project to Visual Studio 6.0 workspace. - * Added some example code showing how to use the IlmImf library. - (Florian) - * Use DLL runtime libs for Win32 libraries rather than static - runtime libs. - * Add an exrdisplay_fragshader project to the Visual Studio 6.0 - workspace to enable fragment shaders in Win32. - * Add an IlmImfDll project to the Visual Studio 6.0 workspace. - * In Win32, export the ImfCRgbaFile C interface via a DLL so - that Visual C++ 6.0 users can link against an Intel-compiled - IlmImf. (Andreas Kahler) - * Use auto_ptr in ImfAutoArray on Win32, it doesn't like large - automatic stacks. - * Performance improvements in PIZ decoding, between - 20 and 60% speedup on Athlon and Pentium 4 systems. - (Florian) - * Updated the README with various information, made - some cosmetic changes for readability. - * Added fragment shader support to exrdisplay. - * Bumped the version to 1.0.5 in prep for release. - * Updated README and README.OSX to talk about CodeWarrior - project files. - * Incorporated Rodrigo Damazio's patch for an openexr.m4 - macro file and an openexr.spec file for building RPMs. - * Small change in ImfAttribute.h to make IlmImf compile with gcc 2.95. - * Updated ImfDoubleAttribute.h for Codewarrior on MacOS. - * Added exrheader utility. - * Update to AUTHORS file. - * Added a README.win32 file. - * Added project files for Visual Studio 6.0. - * Initial Win32 port. Requires Visual Studio 6.0 and Intel C++ - compiler version 7.0. - * Added new intersectT method in ImathSphere.h - * Fixed some bugs in ImathQuat.h - * Proper use of fltk-config to get platform-specific FLTK - compile- and link-time flags. - * exrdisplay uses Imath::Math::pow instead of powf now. - powf is not availble on all platforms. - * Roll OS X "hack" into the source until Apple fixes their - istream implementation. - -Version 1.0.4: - * OpenEXR is now covered by a modified BSD license. See LICENSE - for the new terms. - -Version 1.0.3: - - * OpenEXR is now in sf.net CVS. - * Imf::Xdr namespace cleanups. - * Some IlmImfTest cleanups for OS X. - * Use .cpp extension in exrdisplay sources. - * Iex cleanups. - * Make IlmImf compile with Metrowerks Codewarrior. - * Change large automatic stacks in ImfHuf.C to auto_ptrs allocated - off the heap. MacOS X default stack size isn't large enough. - * std::ios fix for MacOS X in ImfInputFile.C. - * Added new FP predecessor/successor functions to Imath, added - tests to ImathTest - * Fixed a bug in Imath::extractSHRT for 3x3 matricies when - exactly one of the original scaling factors is negative, updated - ImathTest to check this case. - * Install include files when 'make install' is run. - * exrdisplay requires fltk 1.1+ now in an effort to support - a MacOS X display program (fltk 1.1 runs on OS X), though this - is untested. - * renamed configure.in to configure.ac - * Removed some tests from IexTest that are no longer used. - * Removed ImfHalfXdr.h, it's not used anymore. - * Revamped the autoconf system, added some compile-time - optimizations, a pkgconfig target, and some maintainer-specific - stuff. - -Version 1.0.2: - - * More OS X fixes in Imath, IlmImf and IlmImfTest. - * Imath updates. - * Fixed a rotation bug in Imath - -Version 1.0.1: - - * Used autoconf 2.53 and automake 1.6 to generate build environment. - * Makefile.am cleanups. - * OS X fixes. - * removed images directory (now distributed separately). - -Version 1.0: - - * first official release. - * added some high-level documentation, removed the old OpenEXR.html - documentation. - * fixed a few nagging build problems. - * bumped IMV_VERSION_NUMBER to 2 - -Version 0.9: - - * added exrdisplay viewer application. - * cleanup _data in Imf::InputFile and Imf::OutputFile constructors. - * removed old ILM copyright notices. - -Version 0.8: - - * Initial release. diff --git a/3rdparty/openexr/Half/eLut.h b/3rdparty/openexr/Half/eLut.h deleted file mode 100644 index f028cdbb70..0000000000 --- a/3rdparty/openexr/Half/eLut.h +++ /dev/null @@ -1,71 +0,0 @@ -// -// This is an automatically generated file. -// Do not edit. -// - -{ - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1024, 2048, 3072, 4096, 5120, 6144, 7168, - 8192, 9216, 10240, 11264, 12288, 13312, 14336, 15360, - 16384, 17408, 18432, 19456, 20480, 21504, 22528, 23552, - 24576, 25600, 26624, 27648, 28672, 29696, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 33792, 34816, 35840, 36864, 37888, 38912, 39936, - 40960, 41984, 43008, 44032, 45056, 46080, 47104, 48128, - 49152, 50176, 51200, 52224, 53248, 54272, 55296, 56320, - 57344, 58368, 59392, 60416, 61440, 62464, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -}; diff --git a/3rdparty/openexr/Half/half.cpp b/3rdparty/openexr/Half/half.cpp deleted file mode 100644 index 09a50aa2fc..0000000000 --- a/3rdparty/openexr/Half/half.cpp +++ /dev/null @@ -1,310 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - -// Primary authors: -// Florian Kainz -// Rod Bogart - - -//--------------------------------------------------------------------------- -// -// class half -- -// implementation of non-inline members -// -//--------------------------------------------------------------------------- - -#include -#include "half.h" - -using namespace std; - -//------------------------------------------------------------- -// Lookup tables for half-to-float and float-to-half conversion -//------------------------------------------------------------- - -HALF_EXPORT const half::uif half::_toFloat[1 << 16] = - #include "toFloat.h" -HALF_EXPORT const unsigned short half::_eLut[1 << 9] = - #include "eLut.h" - -//----------------------------------------------- -// Overflow handler for float-to-half conversion; -// generates a hardware floating-point overflow, -// which may be trapped by the operating system. -//----------------------------------------------- - -HALF_EXPORT float -half::overflow () -{ - volatile float f = 1e10; - - for (int i = 0; i < 10; i++) - f *= f; // this will overflow before - // the for­loop terminates - return f; -} - - -//----------------------------------------------------- -// Float-to-half conversion -- general case, including -// zeroes, denormalized numbers and exponent overflows. -//----------------------------------------------------- - -HALF_EXPORT short -half::convert (int i) -{ - // - // Our floating point number, f, is represented by the bit - // pattern in integer i. Disassemble that bit pattern into - // the sign, s, the exponent, e, and the significand, m. - // Shift s into the position where it will go in in the - // resulting half number. - // Adjust e, accounting for the different exponent bias - // of float and half (127 versus 15). - // - - int s = (i >> 16) & 0x00008000; - int e = ((i >> 23) & 0x000000ff) - (127 - 15); - int m = i & 0x007fffff; - - // - // Now reassemble s, e and m into a half: - // - - if (e <= 0) - { - if (e < -10) - { - // - // E is less than -10. The absolute value of f is - // less than HALF_MIN (f may be a small normalized - // float, a denormalized float or a zero). - // - // We convert f to a half zero with the same sign as f. - // - - return s; - } - - // - // E is between -10 and 0. F is a normalized float - // whose magnitude is less than HALF_NRM_MIN. - // - // We convert f to a denormalized half. - // - - // - // Add an explicit leading 1 to the significand. - // - - m = m | 0x00800000; - - // - // Round to m to the nearest (10+e)-bit value (with e between - // -10 and 0); in case of a tie, round to the nearest even value. - // - // Rounding may cause the significand to overflow and make - // our number normalized. Because of the way a half's bits - // are laid out, we don't have to treat this case separately; - // the code below will handle it correctly. - // - - int t = 14 - e; - int a = (1 << (t - 1)) - 1; - int b = (m >> t) & 1; - - m = (m + a + b) >> t; - - // - // Assemble the half from s, e (zero) and m. - // - - return s | m; - } - else if (e == 0xff - (127 - 15)) - { - if (m == 0) - { - // - // F is an infinity; convert f to a half - // infinity with the same sign as f. - // - - return s | 0x7c00; - } - else - { - // - // F is a NAN; we produce a half NAN that preserves - // the sign bit and the 10 leftmost bits of the - // significand of f, with one exception: If the 10 - // leftmost bits are all zero, the NAN would turn - // into an infinity, so we have to set at least one - // bit in the significand. - // - - m >>= 13; - return s | 0x7c00 | m | (m == 0); - } - } - else - { - // - // E is greater than zero. F is a normalized float. - // We try to convert f to a normalized half. - // - - // - // Round to m to the nearest 10-bit value. In case of - // a tie, round to the nearest even value. - // - - m = m + 0x00000fff + ((m >> 13) & 1); - - if (m & 0x00800000) - { - m = 0; // overflow in significand, - e += 1; // adjust exponent - } - - // - // Handle exponent overflow - // - - if (e > 30) - { - overflow (); // Cause a hardware floating point overflow; - return s | 0x7c00; // if this returns, the half becomes an - } // infinity with the same sign as f. - - // - // Assemble the half from s, e and m. - // - - return s | (e << 10) | (m >> 13); - } -} - - -//--------------------- -// Stream I/O operators -//--------------------- - -HALF_EXPORT ostream & -operator << (ostream &os, half h) -{ - os << float (h); - return os; -} - - -HALF_EXPORT istream & -operator >> (istream &is, half &h) -{ - float f; - is >> f; - h = half (f); - return is; -} - - -//--------------------------------------- -// Functions to print the bit-layout of -// floats and halfs, mostly for debugging -//--------------------------------------- - -HALF_EXPORT void -printBits (ostream &os, half h) -{ - unsigned short b = h.bits(); - - for (int i = 15; i >= 0; i--) - { - os << (((b >> i) & 1)? '1': '0'); - - if (i == 15 || i == 10) - os << ' '; - } -} - - -HALF_EXPORT void -printBits (ostream &os, float f) -{ - half::uif x; - x.f = f; - - for (int i = 31; i >= 0; i--) - { - os << (((x.i >> i) & 1)? '1': '0'); - - if (i == 31 || i == 23) - os << ' '; - } -} - - -HALF_EXPORT void -printBits (char c[19], half h) -{ - unsigned short b = h.bits(); - - for (int i = 15, j = 0; i >= 0; i--, j++) - { - c[j] = (((b >> i) & 1)? '1': '0'); - - if (i == 15 || i == 10) - c[++j] = ' '; - } - - c[18] = 0; -} - - -HALF_EXPORT void -printBits (char c[35], float f) -{ - half::uif x; - x.f = f; - - for (int i = 31, j = 0; i >= 0; i--, j++) - { - c[j] = (((x.i >> i) & 1)? '1': '0'); - - if (i == 31 || i == 23) - c[++j] = ' '; - } - - c[34] = 0; -} diff --git a/3rdparty/openexr/Half/half.h b/3rdparty/openexr/Half/half.h deleted file mode 100644 index fe8c0a149b..0000000000 --- a/3rdparty/openexr/Half/half.h +++ /dev/null @@ -1,761 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - -// Primary authors: -// Florian Kainz -// Rod Bogart - -//--------------------------------------------------------------------------- -// -// half -- a 16-bit floating point number class: -// -// Type half can represent positive and negative numbers whose -// magnitude is between roughly 6.1e-5 and 6.5e+4 with a relative -// error of 9.8e-4; numbers smaller than 6.1e-5 can be represented -// with an absolute error of 6.0e-8. All integers from -2048 to -// +2048 can be represented exactly. -// -// Type half behaves (almost) like the built-in C++ floating point -// types. In arithmetic expressions, half, float and double can be -// mixed freely. Here are a few examples: -// -// half a (3.5); -// float b (a + sqrt (a)); -// a += b; -// b += a; -// b = a + 7; -// -// Conversions from half to float are lossless; all half numbers -// are exactly representable as floats. -// -// Conversions from float to half may not preserve a float's value -// exactly. If a float is not representable as a half, then the -// float value is rounded to the nearest representable half. If a -// float value is exactly in the middle between the two closest -// representable half values, then the float value is rounded to -// the closest half whose least significant bit is zero. -// -// Overflows during float-to-half conversions cause arithmetic -// exceptions. An overflow occurs when the float value to be -// converted is too large to be represented as a half, or if the -// float value is an infinity or a NAN. -// -// The implementation of type half makes the following assumptions -// about the implementation of the built-in C++ types: -// -// float is an IEEE 754 single-precision number -// sizeof (float) == 4 -// sizeof (unsigned int) == sizeof (float) -// alignof (unsigned int) == alignof (float) -// sizeof (unsigned short) == 2 -// -//--------------------------------------------------------------------------- - -#ifndef _HALF_H_ -#define _HALF_H_ - -#include "halfExport.h" // for definition of HALF_EXPORT -#include - -class half -{ - public: - - //------------- - // Constructors - //------------- - - half (); // no initialization - half (float f); - - - //-------------------- - // Conversion to float - //-------------------- - - operator float () const; - - - //------------ - // Unary minus - //------------ - - half operator - () const; - - - //----------- - // Assignment - //----------- - - half & operator = (half h); - half & operator = (float f); - - half & operator += (half h); - half & operator += (float f); - - half & operator -= (half h); - half & operator -= (float f); - - half & operator *= (half h); - half & operator *= (float f); - - half & operator /= (half h); - half & operator /= (float f); - - - //--------------------------------------------------------- - // Round to n-bit precision (n should be between 0 and 10). - // After rounding, the significand's 10-n least significant - // bits will be zero. - //--------------------------------------------------------- - - half round (unsigned int n) const; - - - //-------------------------------------------------------------------- - // Classification: - // - // h.isFinite() returns true if h is a normalized number, - // a denormalized number or zero - // - // h.isNormalized() returns true if h is a normalized number - // - // h.isDenormalized() returns true if h is a denormalized number - // - // h.isZero() returns true if h is zero - // - // h.isNan() returns true if h is a NAN - // - // h.isInfinity() returns true if h is a positive - // or a negative infinity - // - // h.isNegative() returns true if the sign bit of h - // is set (negative) - //-------------------------------------------------------------------- - - bool isFinite () const; - bool isNormalized () const; - bool isDenormalized () const; - bool isZero () const; - bool isNan () const; - bool isInfinity () const; - bool isNegative () const; - - - //-------------------------------------------- - // Special values - // - // posInf() returns +infinity - // - // negInf() returns -infinity - // - // qNan() returns a NAN with the bit - // pattern 0111111111111111 - // - // sNan() returns a NAN with the bit - // pattern 0111110111111111 - //-------------------------------------------- - - static half posInf (); - static half negInf (); - static half qNan (); - static half sNan (); - - - //-------------------------------------- - // Access to the internal representation - //-------------------------------------- - - HALF_EXPORT unsigned short bits () const; - HALF_EXPORT void setBits (unsigned short bits); - - - public: - - union uif - { - unsigned int i; - float f; - }; - - private: - - HALF_EXPORT static short convert (int i); - HALF_EXPORT static float overflow (); - - unsigned short _h; - - HALF_EXPORT static const uif _toFloat[1 << 16]; - HALF_EXPORT static const unsigned short _eLut[1 << 9]; -}; - - - -//----------- -// Stream I/O -//----------- - -HALF_EXPORT std::ostream & operator << (std::ostream &os, half h); -HALF_EXPORT std::istream & operator >> (std::istream &is, half &h); - - -//---------- -// Debugging -//---------- - -HALF_EXPORT void printBits (std::ostream &os, half h); -HALF_EXPORT void printBits (std::ostream &os, float f); -HALF_EXPORT void printBits (char c[19], half h); -HALF_EXPORT void printBits (char c[35], float f); - - -//------------------------------------------------------------------------- -// Limits -// -// Visual C++ will complain if HALF_MIN, HALF_NRM_MIN etc. are not float -// constants, but at least one other compiler (gcc 2.96) produces incorrect -// results if they are. -//------------------------------------------------------------------------- - -#if (defined _WIN32 || defined _WIN64) && defined _MSC_VER - - #define HALF_MIN 5.96046448e-08f // Smallest positive half - - #define HALF_NRM_MIN 6.10351562e-05f // Smallest positive normalized half - - #define HALF_MAX 65504.0f // Largest positive half - - #define HALF_EPSILON 0.00097656f // Smallest positive e for which - // half (1.0 + e) != half (1.0) -#else - - #define HALF_MIN 5.96046448e-08 // Smallest positive half - - #define HALF_NRM_MIN 6.10351562e-05 // Smallest positive normalized half - - #define HALF_MAX 65504.0 // Largest positive half - - #define HALF_EPSILON 0.00097656 // Smallest positive e for which - // half (1.0 + e) != half (1.0) -#endif - - -#define HALF_MANT_DIG 11 // Number of digits in mantissa - // (significand + hidden leading 1) - -#define HALF_DIG 2 // Number of base 10 digits that - // can be represented without change - -#define HALF_DECIMAL_DIG 5 // Number of base-10 digits that are - // necessary to uniquely represent all - // distinct values - -#define HALF_RADIX 2 // Base of the exponent - -#define HALF_MIN_EXP -13 // Minimum negative integer such that - // HALF_RADIX raised to the power of - // one less than that integer is a - // normalized half - -#define HALF_MAX_EXP 16 // Maximum positive integer such that - // HALF_RADIX raised to the power of - // one less than that integer is a - // normalized half - -#define HALF_MIN_10_EXP -4 // Minimum positive integer such - // that 10 raised to that power is - // a normalized half - -#define HALF_MAX_10_EXP 4 // Maximum positive integer such - // that 10 raised to that power is - // a normalized half - - -//--------------------------------------------------------------------------- -// -// Implementation -- -// -// Representation of a float: -// -// We assume that a float, f, is an IEEE 754 single-precision -// floating point number, whose bits are arranged as follows: -// -// 31 (msb) -// | -// | 30 23 -// | | | -// | | | 22 0 (lsb) -// | | | | | -// X XXXXXXXX XXXXXXXXXXXXXXXXXXXXXXX -// -// s e m -// -// S is the sign-bit, e is the exponent and m is the significand. -// -// If e is between 1 and 254, f is a normalized number: -// -// s e-127 -// f = (-1) * 2 * 1.m -// -// If e is 0, and m is not zero, f is a denormalized number: -// -// s -126 -// f = (-1) * 2 * 0.m -// -// If e and m are both zero, f is zero: -// -// f = 0.0 -// -// If e is 255, f is an "infinity" or "not a number" (NAN), -// depending on whether m is zero or not. -// -// Examples: -// -// 0 00000000 00000000000000000000000 = 0.0 -// 0 01111110 00000000000000000000000 = 0.5 -// 0 01111111 00000000000000000000000 = 1.0 -// 0 10000000 00000000000000000000000 = 2.0 -// 0 10000000 10000000000000000000000 = 3.0 -// 1 10000101 11110000010000000000000 = -124.0625 -// 0 11111111 00000000000000000000000 = +infinity -// 1 11111111 00000000000000000000000 = -infinity -// 0 11111111 10000000000000000000000 = NAN -// 1 11111111 11111111111111111111111 = NAN -// -// Representation of a half: -// -// Here is the bit-layout for a half number, h: -// -// 15 (msb) -// | -// | 14 10 -// | | | -// | | | 9 0 (lsb) -// | | | | | -// X XXXXX XXXXXXXXXX -// -// s e m -// -// S is the sign-bit, e is the exponent and m is the significand. -// -// If e is between 1 and 30, h is a normalized number: -// -// s e-15 -// h = (-1) * 2 * 1.m -// -// If e is 0, and m is not zero, h is a denormalized number: -// -// S -14 -// h = (-1) * 2 * 0.m -// -// If e and m are both zero, h is zero: -// -// h = 0.0 -// -// If e is 31, h is an "infinity" or "not a number" (NAN), -// depending on whether m is zero or not. -// -// Examples: -// -// 0 00000 0000000000 = 0.0 -// 0 01110 0000000000 = 0.5 -// 0 01111 0000000000 = 1.0 -// 0 10000 0000000000 = 2.0 -// 0 10000 1000000000 = 3.0 -// 1 10101 1111000001 = -124.0625 -// 0 11111 0000000000 = +infinity -// 1 11111 0000000000 = -infinity -// 0 11111 1000000000 = NAN -// 1 11111 1111111111 = NAN -// -// Conversion: -// -// Converting from a float to a half requires some non-trivial bit -// manipulations. In some cases, this makes conversion relatively -// slow, but the most common case is accelerated via table lookups. -// -// Converting back from a half to a float is easier because we don't -// have to do any rounding. In addition, there are only 65536 -// different half numbers; we can convert each of those numbers once -// and store the results in a table. Later, all conversions can be -// done using only simple table lookups. -// -//--------------------------------------------------------------------------- - - -//-------------------- -// Simple constructors -//-------------------- - -inline -half::half () -{ - // no initialization -} - - -//---------------------------- -// Half-from-float constructor -//---------------------------- - -inline -half::half (float f) -{ - uif x; - - x.f = f; - - if (f == 0) - { - // - // Common special case - zero. - // Preserve the zero's sign bit. - // - - _h = (x.i >> 16); - } - else - { - // - // We extract the combined sign and exponent, e, from our - // floating-point number, f. Then we convert e to the sign - // and exponent of the half number via a table lookup. - // - // For the most common case, where a normalized half is produced, - // the table lookup returns a non-zero value; in this case, all - // we have to do is round f's significand to 10 bits and combine - // the result with e. - // - // For all other cases (overflow, zeroes, denormalized numbers - // resulting from underflow, infinities and NANs), the table - // lookup returns zero, and we call a longer, non-inline function - // to do the float-to-half conversion. - // - - int e = (x.i >> 23) & 0x000001ff; - - e = _eLut[e]; - - if (e) - { - // - // Simple case - round the significand, m, to 10 - // bits and combine it with the sign and exponent. - // - - int m = x.i & 0x007fffff; - _h = (unsigned short)(e + ((m + 0x00000fff + ((m >> 13) & 1)) >> 13)); - } - else - { - // - // Difficult case - call a function. - // - - _h = convert (x.i); - } - } -} - - -//------------------------------------------ -// Half-to-float conversion via table lookup -//------------------------------------------ - -inline -half::operator float () const -{ - return _toFloat[_h].f; -} - - -//------------------------- -// Round to n-bit precision -//------------------------- - -inline half -half::round (unsigned int n) const -{ - // - // Parameter check. - // - - if (n >= 10) - return *this; - - // - // Disassemble h into the sign, s, - // and the combined exponent and significand, e. - // - - unsigned short s = _h & 0x8000; - unsigned short e = _h & 0x7fff; - - // - // Round the exponent and significand to the nearest value - // where ones occur only in the (10-n) most significant bits. - // Note that the exponent adjusts automatically if rounding - // up causes the significand to overflow. - // - - e >>= 9 - n; - e += e & 1; - e <<= 9 - n; - - // - // Check for exponent overflow. - // - - if (e >= 0x7c00) - { - // - // Overflow occurred -- truncate instead of rounding. - // - - e = _h; - e >>= 10 - n; - e <<= 10 - n; - } - - // - // Put the original sign bit back. - // - - half h; - h._h = s | e; - - return h; -} - - -//----------------------- -// Other inline functions -//----------------------- - -inline half -half::operator - () const -{ - half h; - h._h = _h ^ 0x8000; - return h; -} - - -inline half & -half::operator = (half h) -{ - _h = h._h; - return *this; -} - - -inline half & -half::operator = (float f) -{ - *this = half (f); - return *this; -} - - -inline half & -half::operator += (half h) -{ - *this = half (float (*this) + float (h)); - return *this; -} - - -inline half & -half::operator += (float f) -{ - *this = half (float (*this) + f); - return *this; -} - - -inline half & -half::operator -= (half h) -{ - *this = half (float (*this) - float (h)); - return *this; -} - - -inline half & -half::operator -= (float f) -{ - *this = half (float (*this) - f); - return *this; -} - - -inline half & -half::operator *= (half h) -{ - *this = half (float (*this) * float (h)); - return *this; -} - - -inline half & -half::operator *= (float f) -{ - *this = half (float (*this) * f); - return *this; -} - - -inline half & -half::operator /= (half h) -{ - *this = half (float (*this) / float (h)); - return *this; -} - - -inline half & -half::operator /= (float f) -{ - *this = half (float (*this) / f); - return *this; -} - - -inline bool -half::isFinite () const -{ - unsigned short e = (_h >> 10) & 0x001f; - return e < 31; -} - - -inline bool -half::isNormalized () const -{ - unsigned short e = (_h >> 10) & 0x001f; - return e > 0 && e < 31; -} - - -inline bool -half::isDenormalized () const -{ - unsigned short e = (_h >> 10) & 0x001f; - unsigned short m = _h & 0x3ff; - return e == 0 && m != 0; -} - - -inline bool -half::isZero () const -{ - return (_h & 0x7fff) == 0; -} - - -inline bool -half::isNan () const -{ - unsigned short e = (_h >> 10) & 0x001f; - unsigned short m = _h & 0x3ff; - return e == 31 && m != 0; -} - - -inline bool -half::isInfinity () const -{ - unsigned short e = (_h >> 10) & 0x001f; - unsigned short m = _h & 0x3ff; - return e == 31 && m == 0; -} - - -inline bool -half::isNegative () const -{ - return (_h & 0x8000) != 0; -} - - -inline half -half::posInf () -{ - half h; - h._h = 0x7c00; - return h; -} - - -inline half -half::negInf () -{ - half h; - h._h = 0xfc00; - return h; -} - - -inline half -half::qNan () -{ - half h; - h._h = 0x7fff; - return h; -} - - -inline half -half::sNan () -{ - half h; - h._h = 0x7dff; - return h; -} - - -inline unsigned short -half::bits () const -{ - return _h; -} - - -inline void -half::setBits (unsigned short bits) -{ - _h = bits; -} - -#endif diff --git a/3rdparty/openexr/Half/halfExport.h b/3rdparty/openexr/Half/halfExport.h deleted file mode 100644 index 6ae84e78e7..0000000000 --- a/3rdparty/openexr/Half/halfExport.h +++ /dev/null @@ -1,51 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2008, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - -#ifndef HALFEXPORT_H -#define HALFEXPORT_H - -#if defined(OPENEXR_DLL) - #if defined(HALF_EXPORTS) - #define HALF_EXPORT __declspec(dllexport) - #else - #define HALF_EXPORT __declspec(dllimport) - #endif - #define HALF_EXPORT_CONST -#else - #define HALF_EXPORT - #define HALF_EXPORT_CONST const -#endif - -#endif // #ifndef HALFEXPORT_H - diff --git a/3rdparty/openexr/Half/halfFunction.h b/3rdparty/openexr/Half/halfFunction.h deleted file mode 100644 index 98c1d17bd3..0000000000 --- a/3rdparty/openexr/Half/halfFunction.h +++ /dev/null @@ -1,179 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - -// Primary authors: -// Florian Kainz -// Rod Bogart - - -//--------------------------------------------------------------------------- -// -// halfFunction -- a class for fast evaluation -// of half --> T functions -// -// The constructor for a halfFunction object, -// -// halfFunction (function, -// domainMin, domainMax, -// defaultValue, -// posInfValue, negInfValue, -// nanValue); -// -// evaluates the function for all finite half values in the interval -// [domainMin, domainMax], and stores the results in a lookup table. -// For finite half values that are not in [domainMin, domainMax], the -// constructor stores defaultValue in the table. For positive infinity, -// negative infinity and NANs, posInfValue, negInfValue and nanValue -// are stored in the table. -// -// The tabulated function can then be evaluated quickly for arbitrary -// half values by calling the the halfFunction object's operator() -// method. -// -// Example: -// -// #include -// #include -// -// halfFunction hsin (sin); -// -// halfFunction hsqrt (sqrt, // function -// 0, HALF_MAX, // domain -// half::qNan(), // sqrt(x) for x < 0 -// half::posInf(), // sqrt(+inf) -// half::qNan(), // sqrt(-inf) -// half::qNan()); // sqrt(nan) -// -// half x = hsin (1); -// half y = hsqrt (3.5); -// -//--------------------------------------------------------------------------- - -#ifndef _HALF_FUNCTION_H_ -#define _HALF_FUNCTION_H_ - -#include "half.h" - -#include "IlmBaseConfig.h" -#ifndef ILMBASE_HAVE_LARGE_STACK -#include // need this for memset -#else -#endif - -#include - - -template -class halfFunction -{ - public: - - //------------ - // Constructor - //------------ - - template - halfFunction (Function f, - half domainMin = -HALF_MAX, - half domainMax = HALF_MAX, - T defaultValue = 0, - T posInfValue = 0, - T negInfValue = 0, - T nanValue = 0); - -#ifndef ILMBASE_HAVE_LARGE_STACK - ~halfFunction () { delete [] _lut; } -#endif - - //----------- - // Evaluation - //----------- - - T operator () (half x) const; - - private: - -#ifdef ILMBASE_HAVE_LARGE_STACK - T _lut[1 << 16]; -#else - T * _lut; -#endif -}; - - -//--------------- -// Implementation -//--------------- - -template -template -halfFunction::halfFunction (Function f, - half domainMin, - half domainMax, - T defaultValue, - T posInfValue, - T negInfValue, - T nanValue) -{ -#ifndef ILMBASE_HAVE_LARGE_STACK - _lut = new T[1<<16]; - memset (_lut, 0 , (1<<16) * sizeof(T)); -#endif - - for (int i = 0; i < (1 << 16); i++) - { - half x; - x.setBits (i); - - if (x.isNan()) - _lut[i] = nanValue; - else if (x.isInfinity()) - _lut[i] = x.isNegative()? negInfValue: posInfValue; - else if (x < domainMin || x > domainMax) - _lut[i] = defaultValue; - else - _lut[i] = f (x); - } -} - - -template -inline T -halfFunction::operator () (half x) const -{ - return _lut[x.bits()]; -} - - -#endif diff --git a/3rdparty/openexr/Half/halfLimits.h b/3rdparty/openexr/Half/halfLimits.h deleted file mode 100644 index 351db8f7a0..0000000000 --- a/3rdparty/openexr/Half/halfLimits.h +++ /dev/null @@ -1,111 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - -// Primary authors: -// Florian Kainz -// Rod Bogart - - -#ifndef INCLUDED_HALF_LIMITS_H -#define INCLUDED_HALF_LIMITS_H - - -//------------------------------------------------------------------------ -// -// C++ standard library-style numeric_limits for class half -// -//------------------------------------------------------------------------ - -#include -#include "half.h" - -namespace std { - -template <> -class numeric_limits -{ - public: - - static const bool is_specialized = true; - - static half min () throw () {return HALF_NRM_MIN;} - static half max () throw () {return HALF_MAX;} - - static const int digits = HALF_MANT_DIG; - static const int digits10 = HALF_DIG; - static const bool is_signed = true; - static const bool is_integer = false; - static const bool is_exact = false; - static const int radix = HALF_RADIX; - static half epsilon () throw () {return HALF_EPSILON;} - static half round_error () throw () {return HALF_EPSILON / 2;} - - static const int min_exponent = HALF_MIN_EXP; - static const int min_exponent10 = HALF_MIN_10_EXP; - static const int max_exponent = HALF_MAX_EXP; - static const int max_exponent10 = HALF_MAX_10_EXP; - - static const bool has_infinity = true; - static const bool has_quiet_NaN = true; - static const bool has_signaling_NaN = true; - static const float_denorm_style has_denorm = denorm_present; - static const bool has_denorm_loss = false; - static half infinity () throw () {return half::posInf();} - static half quiet_NaN () throw () {return half::qNan();} - static half signaling_NaN () throw () {return half::sNan();} - static half denorm_min () throw () {return HALF_MIN;} - - static const bool is_iec559 = false; - static const bool is_bounded = false; - static const bool is_modulo = false; - - static const bool traps = true; - static const bool tinyness_before = false; - static const float_round_style round_style = round_to_nearest; - -#if __cplusplus >= 201103L - - // C++11 additions. - static constexpr int max_digits10 = HALF_DECIMAL_DIG; - static half lowest () {return -HALF_MAX;} - -#endif - -}; - - -} // namespace std - -#endif diff --git a/3rdparty/openexr/Half/toFloat.h b/3rdparty/openexr/Half/toFloat.h deleted file mode 100644 index b942afdffe..0000000000 --- a/3rdparty/openexr/Half/toFloat.h +++ /dev/null @@ -1,16391 +0,0 @@ -// -// This is an automatically generated file. -// Do not edit. -// - -{ - {0x00000000}, {0x33800000}, {0x34000000}, {0x34400000}, - {0x34800000}, {0x34a00000}, {0x34c00000}, {0x34e00000}, - {0x35000000}, {0x35100000}, {0x35200000}, {0x35300000}, - {0x35400000}, {0x35500000}, {0x35600000}, {0x35700000}, - {0x35800000}, {0x35880000}, {0x35900000}, {0x35980000}, - {0x35a00000}, {0x35a80000}, {0x35b00000}, {0x35b80000}, - {0x35c00000}, {0x35c80000}, {0x35d00000}, {0x35d80000}, - {0x35e00000}, {0x35e80000}, {0x35f00000}, {0x35f80000}, - {0x36000000}, {0x36040000}, {0x36080000}, {0x360c0000}, - {0x36100000}, {0x36140000}, {0x36180000}, {0x361c0000}, - {0x36200000}, {0x36240000}, {0x36280000}, {0x362c0000}, - {0x36300000}, {0x36340000}, {0x36380000}, {0x363c0000}, - {0x36400000}, {0x36440000}, {0x36480000}, {0x364c0000}, - {0x36500000}, {0x36540000}, {0x36580000}, {0x365c0000}, - {0x36600000}, {0x36640000}, {0x36680000}, {0x366c0000}, - {0x36700000}, {0x36740000}, {0x36780000}, {0x367c0000}, - {0x36800000}, {0x36820000}, {0x36840000}, {0x36860000}, - {0x36880000}, {0x368a0000}, {0x368c0000}, {0x368e0000}, - {0x36900000}, {0x36920000}, {0x36940000}, {0x36960000}, - {0x36980000}, {0x369a0000}, {0x369c0000}, {0x369e0000}, - {0x36a00000}, {0x36a20000}, {0x36a40000}, {0x36a60000}, - {0x36a80000}, {0x36aa0000}, {0x36ac0000}, {0x36ae0000}, - {0x36b00000}, {0x36b20000}, {0x36b40000}, {0x36b60000}, - {0x36b80000}, {0x36ba0000}, {0x36bc0000}, {0x36be0000}, - {0x36c00000}, {0x36c20000}, {0x36c40000}, {0x36c60000}, - {0x36c80000}, {0x36ca0000}, {0x36cc0000}, {0x36ce0000}, - {0x36d00000}, {0x36d20000}, {0x36d40000}, {0x36d60000}, - {0x36d80000}, {0x36da0000}, {0x36dc0000}, {0x36de0000}, - {0x36e00000}, {0x36e20000}, {0x36e40000}, {0x36e60000}, - {0x36e80000}, {0x36ea0000}, {0x36ec0000}, {0x36ee0000}, - {0x36f00000}, {0x36f20000}, {0x36f40000}, {0x36f60000}, - {0x36f80000}, {0x36fa0000}, {0x36fc0000}, {0x36fe0000}, - {0x37000000}, {0x37010000}, {0x37020000}, {0x37030000}, - {0x37040000}, {0x37050000}, {0x37060000}, {0x37070000}, - {0x37080000}, {0x37090000}, {0x370a0000}, {0x370b0000}, - {0x370c0000}, {0x370d0000}, {0x370e0000}, {0x370f0000}, - {0x37100000}, {0x37110000}, {0x37120000}, {0x37130000}, - {0x37140000}, {0x37150000}, {0x37160000}, {0x37170000}, - {0x37180000}, {0x37190000}, {0x371a0000}, {0x371b0000}, - {0x371c0000}, {0x371d0000}, {0x371e0000}, {0x371f0000}, - {0x37200000}, {0x37210000}, {0x37220000}, {0x37230000}, - {0x37240000}, {0x37250000}, {0x37260000}, {0x37270000}, - {0x37280000}, {0x37290000}, {0x372a0000}, {0x372b0000}, - {0x372c0000}, {0x372d0000}, {0x372e0000}, {0x372f0000}, - {0x37300000}, {0x37310000}, {0x37320000}, {0x37330000}, - {0x37340000}, {0x37350000}, {0x37360000}, {0x37370000}, - {0x37380000}, {0x37390000}, {0x373a0000}, {0x373b0000}, - {0x373c0000}, {0x373d0000}, {0x373e0000}, {0x373f0000}, - {0x37400000}, {0x37410000}, {0x37420000}, {0x37430000}, - {0x37440000}, {0x37450000}, {0x37460000}, {0x37470000}, - {0x37480000}, {0x37490000}, {0x374a0000}, {0x374b0000}, - {0x374c0000}, {0x374d0000}, {0x374e0000}, {0x374f0000}, - {0x37500000}, {0x37510000}, {0x37520000}, {0x37530000}, - {0x37540000}, {0x37550000}, {0x37560000}, {0x37570000}, - {0x37580000}, {0x37590000}, {0x375a0000}, {0x375b0000}, - {0x375c0000}, {0x375d0000}, {0x375e0000}, {0x375f0000}, - {0x37600000}, {0x37610000}, {0x37620000}, {0x37630000}, - {0x37640000}, {0x37650000}, {0x37660000}, {0x37670000}, - {0x37680000}, {0x37690000}, {0x376a0000}, {0x376b0000}, - {0x376c0000}, {0x376d0000}, {0x376e0000}, {0x376f0000}, - {0x37700000}, {0x37710000}, {0x37720000}, {0x37730000}, - {0x37740000}, {0x37750000}, {0x37760000}, {0x37770000}, - {0x37780000}, {0x37790000}, {0x377a0000}, {0x377b0000}, - {0x377c0000}, {0x377d0000}, {0x377e0000}, {0x377f0000}, - {0x37800000}, {0x37808000}, {0x37810000}, {0x37818000}, - {0x37820000}, {0x37828000}, {0x37830000}, {0x37838000}, - {0x37840000}, {0x37848000}, {0x37850000}, {0x37858000}, - {0x37860000}, {0x37868000}, {0x37870000}, {0x37878000}, - {0x37880000}, {0x37888000}, {0x37890000}, {0x37898000}, - {0x378a0000}, {0x378a8000}, {0x378b0000}, {0x378b8000}, - {0x378c0000}, {0x378c8000}, {0x378d0000}, {0x378d8000}, - {0x378e0000}, {0x378e8000}, {0x378f0000}, {0x378f8000}, - {0x37900000}, {0x37908000}, {0x37910000}, {0x37918000}, - {0x37920000}, {0x37928000}, {0x37930000}, {0x37938000}, - {0x37940000}, {0x37948000}, {0x37950000}, {0x37958000}, - {0x37960000}, {0x37968000}, {0x37970000}, {0x37978000}, - {0x37980000}, {0x37988000}, {0x37990000}, {0x37998000}, - {0x379a0000}, {0x379a8000}, {0x379b0000}, {0x379b8000}, - {0x379c0000}, {0x379c8000}, {0x379d0000}, {0x379d8000}, - {0x379e0000}, {0x379e8000}, {0x379f0000}, {0x379f8000}, - {0x37a00000}, {0x37a08000}, {0x37a10000}, {0x37a18000}, - {0x37a20000}, {0x37a28000}, {0x37a30000}, {0x37a38000}, - {0x37a40000}, {0x37a48000}, {0x37a50000}, {0x37a58000}, - {0x37a60000}, {0x37a68000}, {0x37a70000}, {0x37a78000}, - {0x37a80000}, {0x37a88000}, {0x37a90000}, {0x37a98000}, - {0x37aa0000}, {0x37aa8000}, {0x37ab0000}, {0x37ab8000}, - {0x37ac0000}, {0x37ac8000}, {0x37ad0000}, {0x37ad8000}, - {0x37ae0000}, {0x37ae8000}, {0x37af0000}, {0x37af8000}, - {0x37b00000}, {0x37b08000}, {0x37b10000}, {0x37b18000}, - {0x37b20000}, {0x37b28000}, {0x37b30000}, {0x37b38000}, - {0x37b40000}, {0x37b48000}, {0x37b50000}, {0x37b58000}, - {0x37b60000}, {0x37b68000}, {0x37b70000}, {0x37b78000}, - {0x37b80000}, {0x37b88000}, {0x37b90000}, {0x37b98000}, - {0x37ba0000}, {0x37ba8000}, {0x37bb0000}, {0x37bb8000}, - {0x37bc0000}, {0x37bc8000}, {0x37bd0000}, {0x37bd8000}, - {0x37be0000}, {0x37be8000}, {0x37bf0000}, {0x37bf8000}, - {0x37c00000}, {0x37c08000}, {0x37c10000}, {0x37c18000}, - {0x37c20000}, {0x37c28000}, {0x37c30000}, {0x37c38000}, - {0x37c40000}, {0x37c48000}, {0x37c50000}, {0x37c58000}, - {0x37c60000}, {0x37c68000}, {0x37c70000}, {0x37c78000}, - {0x37c80000}, {0x37c88000}, {0x37c90000}, {0x37c98000}, - {0x37ca0000}, {0x37ca8000}, {0x37cb0000}, {0x37cb8000}, - {0x37cc0000}, {0x37cc8000}, {0x37cd0000}, {0x37cd8000}, - {0x37ce0000}, {0x37ce8000}, {0x37cf0000}, {0x37cf8000}, - {0x37d00000}, {0x37d08000}, {0x37d10000}, {0x37d18000}, - {0x37d20000}, {0x37d28000}, {0x37d30000}, {0x37d38000}, - {0x37d40000}, {0x37d48000}, {0x37d50000}, {0x37d58000}, - {0x37d60000}, {0x37d68000}, {0x37d70000}, {0x37d78000}, - {0x37d80000}, {0x37d88000}, {0x37d90000}, {0x37d98000}, - {0x37da0000}, {0x37da8000}, {0x37db0000}, {0x37db8000}, - {0x37dc0000}, {0x37dc8000}, {0x37dd0000}, {0x37dd8000}, - {0x37de0000}, {0x37de8000}, {0x37df0000}, {0x37df8000}, - {0x37e00000}, {0x37e08000}, {0x37e10000}, {0x37e18000}, - {0x37e20000}, {0x37e28000}, {0x37e30000}, {0x37e38000}, - {0x37e40000}, {0x37e48000}, {0x37e50000}, {0x37e58000}, - {0x37e60000}, {0x37e68000}, {0x37e70000}, {0x37e78000}, - {0x37e80000}, {0x37e88000}, {0x37e90000}, {0x37e98000}, - {0x37ea0000}, {0x37ea8000}, {0x37eb0000}, {0x37eb8000}, - {0x37ec0000}, {0x37ec8000}, {0x37ed0000}, {0x37ed8000}, - {0x37ee0000}, {0x37ee8000}, {0x37ef0000}, {0x37ef8000}, - {0x37f00000}, {0x37f08000}, {0x37f10000}, {0x37f18000}, - {0x37f20000}, {0x37f28000}, {0x37f30000}, {0x37f38000}, - {0x37f40000}, {0x37f48000}, {0x37f50000}, {0x37f58000}, - {0x37f60000}, {0x37f68000}, {0x37f70000}, {0x37f78000}, - {0x37f80000}, {0x37f88000}, {0x37f90000}, {0x37f98000}, - {0x37fa0000}, {0x37fa8000}, {0x37fb0000}, {0x37fb8000}, - {0x37fc0000}, {0x37fc8000}, {0x37fd0000}, {0x37fd8000}, - {0x37fe0000}, {0x37fe8000}, {0x37ff0000}, {0x37ff8000}, - {0x38000000}, {0x38004000}, {0x38008000}, {0x3800c000}, - {0x38010000}, {0x38014000}, {0x38018000}, {0x3801c000}, - {0x38020000}, {0x38024000}, {0x38028000}, {0x3802c000}, - {0x38030000}, {0x38034000}, {0x38038000}, {0x3803c000}, - {0x38040000}, {0x38044000}, {0x38048000}, {0x3804c000}, - {0x38050000}, {0x38054000}, {0x38058000}, {0x3805c000}, - {0x38060000}, {0x38064000}, {0x38068000}, {0x3806c000}, - {0x38070000}, {0x38074000}, {0x38078000}, {0x3807c000}, - {0x38080000}, {0x38084000}, {0x38088000}, {0x3808c000}, - {0x38090000}, {0x38094000}, {0x38098000}, {0x3809c000}, - {0x380a0000}, {0x380a4000}, {0x380a8000}, {0x380ac000}, - {0x380b0000}, {0x380b4000}, {0x380b8000}, {0x380bc000}, - {0x380c0000}, {0x380c4000}, {0x380c8000}, {0x380cc000}, - {0x380d0000}, {0x380d4000}, {0x380d8000}, {0x380dc000}, - {0x380e0000}, {0x380e4000}, {0x380e8000}, {0x380ec000}, - {0x380f0000}, {0x380f4000}, {0x380f8000}, {0x380fc000}, - {0x38100000}, {0x38104000}, {0x38108000}, {0x3810c000}, - {0x38110000}, {0x38114000}, {0x38118000}, {0x3811c000}, - {0x38120000}, {0x38124000}, {0x38128000}, {0x3812c000}, - {0x38130000}, {0x38134000}, {0x38138000}, {0x3813c000}, - {0x38140000}, {0x38144000}, {0x38148000}, {0x3814c000}, - {0x38150000}, {0x38154000}, {0x38158000}, {0x3815c000}, - {0x38160000}, {0x38164000}, {0x38168000}, {0x3816c000}, - {0x38170000}, {0x38174000}, {0x38178000}, {0x3817c000}, - {0x38180000}, {0x38184000}, {0x38188000}, {0x3818c000}, - {0x38190000}, {0x38194000}, {0x38198000}, {0x3819c000}, - {0x381a0000}, {0x381a4000}, {0x381a8000}, {0x381ac000}, - {0x381b0000}, {0x381b4000}, {0x381b8000}, {0x381bc000}, - {0x381c0000}, {0x381c4000}, {0x381c8000}, {0x381cc000}, - {0x381d0000}, {0x381d4000}, {0x381d8000}, {0x381dc000}, - {0x381e0000}, {0x381e4000}, {0x381e8000}, {0x381ec000}, - {0x381f0000}, {0x381f4000}, {0x381f8000}, {0x381fc000}, - {0x38200000}, {0x38204000}, {0x38208000}, {0x3820c000}, - {0x38210000}, {0x38214000}, {0x38218000}, {0x3821c000}, - {0x38220000}, {0x38224000}, {0x38228000}, {0x3822c000}, - {0x38230000}, {0x38234000}, {0x38238000}, {0x3823c000}, - {0x38240000}, {0x38244000}, {0x38248000}, {0x3824c000}, - {0x38250000}, {0x38254000}, {0x38258000}, {0x3825c000}, - {0x38260000}, {0x38264000}, {0x38268000}, {0x3826c000}, - {0x38270000}, {0x38274000}, {0x38278000}, {0x3827c000}, - {0x38280000}, {0x38284000}, {0x38288000}, {0x3828c000}, - {0x38290000}, {0x38294000}, {0x38298000}, {0x3829c000}, - {0x382a0000}, {0x382a4000}, {0x382a8000}, {0x382ac000}, - {0x382b0000}, {0x382b4000}, {0x382b8000}, {0x382bc000}, - {0x382c0000}, {0x382c4000}, {0x382c8000}, {0x382cc000}, - {0x382d0000}, {0x382d4000}, {0x382d8000}, {0x382dc000}, - {0x382e0000}, {0x382e4000}, {0x382e8000}, {0x382ec000}, - {0x382f0000}, {0x382f4000}, {0x382f8000}, {0x382fc000}, - {0x38300000}, {0x38304000}, {0x38308000}, {0x3830c000}, - {0x38310000}, {0x38314000}, {0x38318000}, {0x3831c000}, - {0x38320000}, {0x38324000}, {0x38328000}, {0x3832c000}, - {0x38330000}, {0x38334000}, {0x38338000}, {0x3833c000}, - {0x38340000}, {0x38344000}, {0x38348000}, {0x3834c000}, - {0x38350000}, {0x38354000}, {0x38358000}, {0x3835c000}, - {0x38360000}, {0x38364000}, {0x38368000}, {0x3836c000}, - {0x38370000}, {0x38374000}, {0x38378000}, {0x3837c000}, - {0x38380000}, {0x38384000}, {0x38388000}, {0x3838c000}, - {0x38390000}, {0x38394000}, {0x38398000}, {0x3839c000}, - {0x383a0000}, {0x383a4000}, {0x383a8000}, {0x383ac000}, - {0x383b0000}, {0x383b4000}, {0x383b8000}, {0x383bc000}, - {0x383c0000}, {0x383c4000}, {0x383c8000}, {0x383cc000}, - {0x383d0000}, {0x383d4000}, {0x383d8000}, {0x383dc000}, - {0x383e0000}, {0x383e4000}, {0x383e8000}, {0x383ec000}, - {0x383f0000}, {0x383f4000}, {0x383f8000}, {0x383fc000}, - {0x38400000}, {0x38404000}, {0x38408000}, {0x3840c000}, - {0x38410000}, {0x38414000}, {0x38418000}, {0x3841c000}, - {0x38420000}, {0x38424000}, {0x38428000}, {0x3842c000}, - {0x38430000}, {0x38434000}, {0x38438000}, {0x3843c000}, - {0x38440000}, {0x38444000}, {0x38448000}, {0x3844c000}, - {0x38450000}, {0x38454000}, {0x38458000}, {0x3845c000}, - {0x38460000}, {0x38464000}, {0x38468000}, {0x3846c000}, - {0x38470000}, {0x38474000}, {0x38478000}, {0x3847c000}, - {0x38480000}, {0x38484000}, {0x38488000}, {0x3848c000}, - {0x38490000}, {0x38494000}, {0x38498000}, {0x3849c000}, - {0x384a0000}, {0x384a4000}, {0x384a8000}, {0x384ac000}, - {0x384b0000}, {0x384b4000}, {0x384b8000}, {0x384bc000}, - {0x384c0000}, {0x384c4000}, {0x384c8000}, {0x384cc000}, - {0x384d0000}, {0x384d4000}, {0x384d8000}, {0x384dc000}, - {0x384e0000}, {0x384e4000}, {0x384e8000}, {0x384ec000}, - {0x384f0000}, {0x384f4000}, {0x384f8000}, {0x384fc000}, - {0x38500000}, {0x38504000}, {0x38508000}, {0x3850c000}, - {0x38510000}, {0x38514000}, {0x38518000}, {0x3851c000}, - {0x38520000}, {0x38524000}, {0x38528000}, {0x3852c000}, - {0x38530000}, {0x38534000}, {0x38538000}, {0x3853c000}, - {0x38540000}, {0x38544000}, {0x38548000}, {0x3854c000}, - {0x38550000}, {0x38554000}, {0x38558000}, {0x3855c000}, - {0x38560000}, {0x38564000}, {0x38568000}, {0x3856c000}, - {0x38570000}, {0x38574000}, {0x38578000}, {0x3857c000}, - {0x38580000}, {0x38584000}, {0x38588000}, {0x3858c000}, - {0x38590000}, {0x38594000}, {0x38598000}, {0x3859c000}, - {0x385a0000}, {0x385a4000}, {0x385a8000}, {0x385ac000}, - {0x385b0000}, {0x385b4000}, {0x385b8000}, {0x385bc000}, - {0x385c0000}, {0x385c4000}, {0x385c8000}, {0x385cc000}, - {0x385d0000}, {0x385d4000}, {0x385d8000}, {0x385dc000}, - {0x385e0000}, {0x385e4000}, {0x385e8000}, {0x385ec000}, - {0x385f0000}, {0x385f4000}, {0x385f8000}, {0x385fc000}, - {0x38600000}, {0x38604000}, {0x38608000}, {0x3860c000}, - {0x38610000}, {0x38614000}, {0x38618000}, {0x3861c000}, - {0x38620000}, {0x38624000}, {0x38628000}, {0x3862c000}, - {0x38630000}, {0x38634000}, {0x38638000}, {0x3863c000}, - {0x38640000}, {0x38644000}, {0x38648000}, {0x3864c000}, - {0x38650000}, {0x38654000}, {0x38658000}, {0x3865c000}, - {0x38660000}, {0x38664000}, {0x38668000}, {0x3866c000}, - {0x38670000}, {0x38674000}, {0x38678000}, {0x3867c000}, - {0x38680000}, {0x38684000}, {0x38688000}, {0x3868c000}, - {0x38690000}, {0x38694000}, {0x38698000}, {0x3869c000}, - {0x386a0000}, {0x386a4000}, {0x386a8000}, {0x386ac000}, - {0x386b0000}, {0x386b4000}, {0x386b8000}, {0x386bc000}, - {0x386c0000}, {0x386c4000}, {0x386c8000}, {0x386cc000}, - {0x386d0000}, {0x386d4000}, {0x386d8000}, {0x386dc000}, - {0x386e0000}, {0x386e4000}, {0x386e8000}, {0x386ec000}, - {0x386f0000}, {0x386f4000}, {0x386f8000}, {0x386fc000}, - {0x38700000}, {0x38704000}, {0x38708000}, {0x3870c000}, - {0x38710000}, {0x38714000}, {0x38718000}, {0x3871c000}, - {0x38720000}, {0x38724000}, {0x38728000}, {0x3872c000}, - {0x38730000}, {0x38734000}, {0x38738000}, {0x3873c000}, - {0x38740000}, {0x38744000}, {0x38748000}, {0x3874c000}, - {0x38750000}, {0x38754000}, {0x38758000}, {0x3875c000}, - {0x38760000}, {0x38764000}, {0x38768000}, {0x3876c000}, - {0x38770000}, {0x38774000}, {0x38778000}, {0x3877c000}, - {0x38780000}, {0x38784000}, {0x38788000}, {0x3878c000}, - {0x38790000}, {0x38794000}, {0x38798000}, {0x3879c000}, - {0x387a0000}, {0x387a4000}, {0x387a8000}, {0x387ac000}, - {0x387b0000}, {0x387b4000}, {0x387b8000}, {0x387bc000}, - {0x387c0000}, {0x387c4000}, {0x387c8000}, {0x387cc000}, - {0x387d0000}, {0x387d4000}, {0x387d8000}, {0x387dc000}, - {0x387e0000}, {0x387e4000}, {0x387e8000}, {0x387ec000}, - {0x387f0000}, {0x387f4000}, {0x387f8000}, {0x387fc000}, - {0x38800000}, {0x38802000}, {0x38804000}, {0x38806000}, - {0x38808000}, {0x3880a000}, {0x3880c000}, {0x3880e000}, - {0x38810000}, {0x38812000}, {0x38814000}, {0x38816000}, - {0x38818000}, {0x3881a000}, {0x3881c000}, {0x3881e000}, - {0x38820000}, {0x38822000}, {0x38824000}, {0x38826000}, - {0x38828000}, {0x3882a000}, {0x3882c000}, {0x3882e000}, - {0x38830000}, {0x38832000}, {0x38834000}, {0x38836000}, - {0x38838000}, {0x3883a000}, {0x3883c000}, {0x3883e000}, - {0x38840000}, {0x38842000}, {0x38844000}, {0x38846000}, - {0x38848000}, {0x3884a000}, {0x3884c000}, {0x3884e000}, - {0x38850000}, {0x38852000}, {0x38854000}, {0x38856000}, - {0x38858000}, {0x3885a000}, {0x3885c000}, {0x3885e000}, - {0x38860000}, {0x38862000}, {0x38864000}, {0x38866000}, - {0x38868000}, {0x3886a000}, {0x3886c000}, {0x3886e000}, - {0x38870000}, {0x38872000}, {0x38874000}, {0x38876000}, - {0x38878000}, {0x3887a000}, {0x3887c000}, {0x3887e000}, - {0x38880000}, {0x38882000}, {0x38884000}, {0x38886000}, - {0x38888000}, {0x3888a000}, {0x3888c000}, {0x3888e000}, - {0x38890000}, {0x38892000}, {0x38894000}, {0x38896000}, - {0x38898000}, {0x3889a000}, {0x3889c000}, {0x3889e000}, - {0x388a0000}, {0x388a2000}, {0x388a4000}, {0x388a6000}, - {0x388a8000}, {0x388aa000}, {0x388ac000}, {0x388ae000}, - {0x388b0000}, {0x388b2000}, {0x388b4000}, {0x388b6000}, - {0x388b8000}, {0x388ba000}, {0x388bc000}, {0x388be000}, - {0x388c0000}, {0x388c2000}, {0x388c4000}, {0x388c6000}, - {0x388c8000}, {0x388ca000}, {0x388cc000}, {0x388ce000}, - {0x388d0000}, {0x388d2000}, {0x388d4000}, {0x388d6000}, - {0x388d8000}, {0x388da000}, {0x388dc000}, {0x388de000}, - {0x388e0000}, {0x388e2000}, {0x388e4000}, {0x388e6000}, - {0x388e8000}, {0x388ea000}, {0x388ec000}, {0x388ee000}, - {0x388f0000}, {0x388f2000}, {0x388f4000}, {0x388f6000}, - {0x388f8000}, {0x388fa000}, {0x388fc000}, {0x388fe000}, - {0x38900000}, {0x38902000}, {0x38904000}, {0x38906000}, - {0x38908000}, {0x3890a000}, {0x3890c000}, {0x3890e000}, - {0x38910000}, {0x38912000}, {0x38914000}, {0x38916000}, - {0x38918000}, {0x3891a000}, {0x3891c000}, {0x3891e000}, - {0x38920000}, {0x38922000}, {0x38924000}, {0x38926000}, - {0x38928000}, {0x3892a000}, {0x3892c000}, {0x3892e000}, - {0x38930000}, {0x38932000}, {0x38934000}, {0x38936000}, - {0x38938000}, {0x3893a000}, {0x3893c000}, {0x3893e000}, - {0x38940000}, {0x38942000}, {0x38944000}, {0x38946000}, - {0x38948000}, {0x3894a000}, {0x3894c000}, {0x3894e000}, - {0x38950000}, {0x38952000}, {0x38954000}, {0x38956000}, - {0x38958000}, {0x3895a000}, {0x3895c000}, {0x3895e000}, - {0x38960000}, {0x38962000}, {0x38964000}, {0x38966000}, - {0x38968000}, {0x3896a000}, {0x3896c000}, {0x3896e000}, - {0x38970000}, {0x38972000}, {0x38974000}, {0x38976000}, - {0x38978000}, {0x3897a000}, {0x3897c000}, {0x3897e000}, - {0x38980000}, {0x38982000}, {0x38984000}, {0x38986000}, - {0x38988000}, {0x3898a000}, {0x3898c000}, {0x3898e000}, - {0x38990000}, {0x38992000}, {0x38994000}, {0x38996000}, - {0x38998000}, {0x3899a000}, {0x3899c000}, {0x3899e000}, - {0x389a0000}, {0x389a2000}, {0x389a4000}, {0x389a6000}, - {0x389a8000}, {0x389aa000}, {0x389ac000}, {0x389ae000}, - {0x389b0000}, {0x389b2000}, {0x389b4000}, {0x389b6000}, - {0x389b8000}, {0x389ba000}, {0x389bc000}, {0x389be000}, - {0x389c0000}, {0x389c2000}, {0x389c4000}, {0x389c6000}, - {0x389c8000}, {0x389ca000}, {0x389cc000}, {0x389ce000}, - {0x389d0000}, {0x389d2000}, {0x389d4000}, {0x389d6000}, - {0x389d8000}, {0x389da000}, {0x389dc000}, {0x389de000}, - {0x389e0000}, {0x389e2000}, {0x389e4000}, {0x389e6000}, - {0x389e8000}, {0x389ea000}, {0x389ec000}, {0x389ee000}, - {0x389f0000}, {0x389f2000}, {0x389f4000}, {0x389f6000}, - {0x389f8000}, {0x389fa000}, {0x389fc000}, {0x389fe000}, - {0x38a00000}, {0x38a02000}, {0x38a04000}, {0x38a06000}, - {0x38a08000}, {0x38a0a000}, {0x38a0c000}, {0x38a0e000}, - {0x38a10000}, {0x38a12000}, {0x38a14000}, {0x38a16000}, - {0x38a18000}, {0x38a1a000}, {0x38a1c000}, {0x38a1e000}, - {0x38a20000}, {0x38a22000}, {0x38a24000}, {0x38a26000}, - {0x38a28000}, {0x38a2a000}, {0x38a2c000}, {0x38a2e000}, - {0x38a30000}, {0x38a32000}, {0x38a34000}, {0x38a36000}, - {0x38a38000}, {0x38a3a000}, {0x38a3c000}, {0x38a3e000}, - {0x38a40000}, {0x38a42000}, {0x38a44000}, {0x38a46000}, - {0x38a48000}, {0x38a4a000}, {0x38a4c000}, {0x38a4e000}, - {0x38a50000}, {0x38a52000}, {0x38a54000}, {0x38a56000}, - {0x38a58000}, {0x38a5a000}, {0x38a5c000}, {0x38a5e000}, - {0x38a60000}, {0x38a62000}, {0x38a64000}, {0x38a66000}, - {0x38a68000}, {0x38a6a000}, {0x38a6c000}, {0x38a6e000}, - {0x38a70000}, {0x38a72000}, {0x38a74000}, {0x38a76000}, - {0x38a78000}, {0x38a7a000}, {0x38a7c000}, {0x38a7e000}, - {0x38a80000}, {0x38a82000}, {0x38a84000}, {0x38a86000}, - {0x38a88000}, {0x38a8a000}, {0x38a8c000}, {0x38a8e000}, - {0x38a90000}, {0x38a92000}, {0x38a94000}, {0x38a96000}, - {0x38a98000}, {0x38a9a000}, {0x38a9c000}, {0x38a9e000}, - {0x38aa0000}, {0x38aa2000}, {0x38aa4000}, {0x38aa6000}, - {0x38aa8000}, {0x38aaa000}, {0x38aac000}, {0x38aae000}, - {0x38ab0000}, {0x38ab2000}, {0x38ab4000}, {0x38ab6000}, - {0x38ab8000}, {0x38aba000}, {0x38abc000}, {0x38abe000}, - {0x38ac0000}, {0x38ac2000}, {0x38ac4000}, {0x38ac6000}, - {0x38ac8000}, {0x38aca000}, {0x38acc000}, {0x38ace000}, - {0x38ad0000}, {0x38ad2000}, {0x38ad4000}, {0x38ad6000}, - {0x38ad8000}, {0x38ada000}, {0x38adc000}, {0x38ade000}, - {0x38ae0000}, {0x38ae2000}, {0x38ae4000}, {0x38ae6000}, - {0x38ae8000}, {0x38aea000}, {0x38aec000}, {0x38aee000}, - {0x38af0000}, {0x38af2000}, {0x38af4000}, {0x38af6000}, - {0x38af8000}, {0x38afa000}, {0x38afc000}, {0x38afe000}, - {0x38b00000}, {0x38b02000}, {0x38b04000}, {0x38b06000}, - {0x38b08000}, {0x38b0a000}, {0x38b0c000}, {0x38b0e000}, - {0x38b10000}, {0x38b12000}, {0x38b14000}, {0x38b16000}, - {0x38b18000}, {0x38b1a000}, {0x38b1c000}, {0x38b1e000}, - {0x38b20000}, {0x38b22000}, {0x38b24000}, {0x38b26000}, - {0x38b28000}, {0x38b2a000}, {0x38b2c000}, {0x38b2e000}, - {0x38b30000}, {0x38b32000}, {0x38b34000}, {0x38b36000}, - {0x38b38000}, {0x38b3a000}, {0x38b3c000}, {0x38b3e000}, - {0x38b40000}, {0x38b42000}, {0x38b44000}, {0x38b46000}, - {0x38b48000}, {0x38b4a000}, {0x38b4c000}, {0x38b4e000}, - {0x38b50000}, {0x38b52000}, {0x38b54000}, {0x38b56000}, - {0x38b58000}, {0x38b5a000}, {0x38b5c000}, {0x38b5e000}, - {0x38b60000}, {0x38b62000}, {0x38b64000}, {0x38b66000}, - {0x38b68000}, {0x38b6a000}, {0x38b6c000}, {0x38b6e000}, - {0x38b70000}, {0x38b72000}, {0x38b74000}, {0x38b76000}, - {0x38b78000}, {0x38b7a000}, {0x38b7c000}, {0x38b7e000}, - {0x38b80000}, {0x38b82000}, {0x38b84000}, {0x38b86000}, - {0x38b88000}, {0x38b8a000}, {0x38b8c000}, {0x38b8e000}, - {0x38b90000}, {0x38b92000}, {0x38b94000}, {0x38b96000}, - {0x38b98000}, {0x38b9a000}, {0x38b9c000}, {0x38b9e000}, - {0x38ba0000}, {0x38ba2000}, {0x38ba4000}, {0x38ba6000}, - {0x38ba8000}, {0x38baa000}, {0x38bac000}, {0x38bae000}, - {0x38bb0000}, {0x38bb2000}, {0x38bb4000}, {0x38bb6000}, - {0x38bb8000}, {0x38bba000}, {0x38bbc000}, {0x38bbe000}, - {0x38bc0000}, {0x38bc2000}, {0x38bc4000}, {0x38bc6000}, - {0x38bc8000}, {0x38bca000}, {0x38bcc000}, {0x38bce000}, - {0x38bd0000}, {0x38bd2000}, {0x38bd4000}, {0x38bd6000}, - {0x38bd8000}, {0x38bda000}, {0x38bdc000}, {0x38bde000}, - {0x38be0000}, {0x38be2000}, {0x38be4000}, {0x38be6000}, - {0x38be8000}, {0x38bea000}, {0x38bec000}, {0x38bee000}, - {0x38bf0000}, {0x38bf2000}, {0x38bf4000}, {0x38bf6000}, - {0x38bf8000}, {0x38bfa000}, {0x38bfc000}, {0x38bfe000}, - {0x38c00000}, {0x38c02000}, {0x38c04000}, {0x38c06000}, - {0x38c08000}, {0x38c0a000}, {0x38c0c000}, {0x38c0e000}, - {0x38c10000}, {0x38c12000}, {0x38c14000}, {0x38c16000}, - {0x38c18000}, {0x38c1a000}, {0x38c1c000}, {0x38c1e000}, - {0x38c20000}, {0x38c22000}, {0x38c24000}, {0x38c26000}, - {0x38c28000}, {0x38c2a000}, {0x38c2c000}, {0x38c2e000}, - {0x38c30000}, {0x38c32000}, {0x38c34000}, {0x38c36000}, - {0x38c38000}, {0x38c3a000}, {0x38c3c000}, {0x38c3e000}, - {0x38c40000}, {0x38c42000}, {0x38c44000}, {0x38c46000}, - {0x38c48000}, {0x38c4a000}, {0x38c4c000}, {0x38c4e000}, - {0x38c50000}, {0x38c52000}, {0x38c54000}, {0x38c56000}, - {0x38c58000}, {0x38c5a000}, {0x38c5c000}, {0x38c5e000}, - {0x38c60000}, {0x38c62000}, {0x38c64000}, {0x38c66000}, - {0x38c68000}, {0x38c6a000}, {0x38c6c000}, {0x38c6e000}, - {0x38c70000}, {0x38c72000}, {0x38c74000}, {0x38c76000}, - {0x38c78000}, {0x38c7a000}, {0x38c7c000}, {0x38c7e000}, - {0x38c80000}, {0x38c82000}, {0x38c84000}, {0x38c86000}, - {0x38c88000}, {0x38c8a000}, {0x38c8c000}, {0x38c8e000}, - {0x38c90000}, {0x38c92000}, {0x38c94000}, {0x38c96000}, - {0x38c98000}, {0x38c9a000}, {0x38c9c000}, {0x38c9e000}, - {0x38ca0000}, {0x38ca2000}, {0x38ca4000}, {0x38ca6000}, - {0x38ca8000}, {0x38caa000}, {0x38cac000}, {0x38cae000}, - {0x38cb0000}, {0x38cb2000}, {0x38cb4000}, {0x38cb6000}, - {0x38cb8000}, {0x38cba000}, {0x38cbc000}, {0x38cbe000}, - {0x38cc0000}, {0x38cc2000}, {0x38cc4000}, {0x38cc6000}, - {0x38cc8000}, {0x38cca000}, {0x38ccc000}, {0x38cce000}, - {0x38cd0000}, {0x38cd2000}, {0x38cd4000}, {0x38cd6000}, - {0x38cd8000}, {0x38cda000}, {0x38cdc000}, {0x38cde000}, - {0x38ce0000}, {0x38ce2000}, {0x38ce4000}, {0x38ce6000}, - {0x38ce8000}, {0x38cea000}, {0x38cec000}, {0x38cee000}, - {0x38cf0000}, {0x38cf2000}, {0x38cf4000}, {0x38cf6000}, - {0x38cf8000}, {0x38cfa000}, {0x38cfc000}, {0x38cfe000}, - {0x38d00000}, {0x38d02000}, {0x38d04000}, {0x38d06000}, - {0x38d08000}, {0x38d0a000}, {0x38d0c000}, {0x38d0e000}, - {0x38d10000}, {0x38d12000}, {0x38d14000}, {0x38d16000}, - {0x38d18000}, {0x38d1a000}, {0x38d1c000}, {0x38d1e000}, - {0x38d20000}, {0x38d22000}, {0x38d24000}, {0x38d26000}, - {0x38d28000}, {0x38d2a000}, {0x38d2c000}, {0x38d2e000}, - {0x38d30000}, {0x38d32000}, {0x38d34000}, {0x38d36000}, - {0x38d38000}, {0x38d3a000}, {0x38d3c000}, {0x38d3e000}, - {0x38d40000}, {0x38d42000}, {0x38d44000}, {0x38d46000}, - {0x38d48000}, {0x38d4a000}, {0x38d4c000}, {0x38d4e000}, - {0x38d50000}, {0x38d52000}, {0x38d54000}, {0x38d56000}, - {0x38d58000}, {0x38d5a000}, {0x38d5c000}, {0x38d5e000}, - {0x38d60000}, {0x38d62000}, {0x38d64000}, {0x38d66000}, - {0x38d68000}, {0x38d6a000}, {0x38d6c000}, {0x38d6e000}, - {0x38d70000}, {0x38d72000}, {0x38d74000}, {0x38d76000}, - {0x38d78000}, {0x38d7a000}, {0x38d7c000}, {0x38d7e000}, - {0x38d80000}, {0x38d82000}, {0x38d84000}, {0x38d86000}, - {0x38d88000}, {0x38d8a000}, {0x38d8c000}, {0x38d8e000}, - {0x38d90000}, {0x38d92000}, {0x38d94000}, {0x38d96000}, - {0x38d98000}, {0x38d9a000}, {0x38d9c000}, {0x38d9e000}, - {0x38da0000}, {0x38da2000}, {0x38da4000}, {0x38da6000}, - {0x38da8000}, {0x38daa000}, {0x38dac000}, {0x38dae000}, - {0x38db0000}, {0x38db2000}, {0x38db4000}, {0x38db6000}, - {0x38db8000}, {0x38dba000}, {0x38dbc000}, {0x38dbe000}, - {0x38dc0000}, {0x38dc2000}, {0x38dc4000}, {0x38dc6000}, - {0x38dc8000}, {0x38dca000}, {0x38dcc000}, {0x38dce000}, - {0x38dd0000}, {0x38dd2000}, {0x38dd4000}, {0x38dd6000}, - {0x38dd8000}, {0x38dda000}, {0x38ddc000}, {0x38dde000}, - {0x38de0000}, {0x38de2000}, {0x38de4000}, {0x38de6000}, - {0x38de8000}, {0x38dea000}, {0x38dec000}, {0x38dee000}, - {0x38df0000}, {0x38df2000}, {0x38df4000}, {0x38df6000}, - {0x38df8000}, {0x38dfa000}, {0x38dfc000}, {0x38dfe000}, - {0x38e00000}, {0x38e02000}, {0x38e04000}, {0x38e06000}, - {0x38e08000}, {0x38e0a000}, {0x38e0c000}, {0x38e0e000}, - {0x38e10000}, {0x38e12000}, {0x38e14000}, {0x38e16000}, - {0x38e18000}, {0x38e1a000}, {0x38e1c000}, {0x38e1e000}, - {0x38e20000}, {0x38e22000}, {0x38e24000}, {0x38e26000}, - {0x38e28000}, {0x38e2a000}, {0x38e2c000}, {0x38e2e000}, - {0x38e30000}, {0x38e32000}, {0x38e34000}, {0x38e36000}, - {0x38e38000}, {0x38e3a000}, {0x38e3c000}, {0x38e3e000}, - {0x38e40000}, {0x38e42000}, {0x38e44000}, {0x38e46000}, - {0x38e48000}, {0x38e4a000}, {0x38e4c000}, {0x38e4e000}, - {0x38e50000}, {0x38e52000}, {0x38e54000}, {0x38e56000}, - {0x38e58000}, {0x38e5a000}, {0x38e5c000}, {0x38e5e000}, - {0x38e60000}, {0x38e62000}, {0x38e64000}, {0x38e66000}, - {0x38e68000}, {0x38e6a000}, {0x38e6c000}, {0x38e6e000}, - {0x38e70000}, {0x38e72000}, {0x38e74000}, {0x38e76000}, - {0x38e78000}, {0x38e7a000}, {0x38e7c000}, {0x38e7e000}, - {0x38e80000}, {0x38e82000}, {0x38e84000}, {0x38e86000}, - {0x38e88000}, {0x38e8a000}, {0x38e8c000}, {0x38e8e000}, - {0x38e90000}, {0x38e92000}, {0x38e94000}, {0x38e96000}, - {0x38e98000}, {0x38e9a000}, {0x38e9c000}, {0x38e9e000}, - {0x38ea0000}, {0x38ea2000}, {0x38ea4000}, {0x38ea6000}, - {0x38ea8000}, {0x38eaa000}, {0x38eac000}, {0x38eae000}, - {0x38eb0000}, {0x38eb2000}, {0x38eb4000}, {0x38eb6000}, - {0x38eb8000}, {0x38eba000}, {0x38ebc000}, {0x38ebe000}, - {0x38ec0000}, {0x38ec2000}, {0x38ec4000}, {0x38ec6000}, - {0x38ec8000}, {0x38eca000}, {0x38ecc000}, {0x38ece000}, - {0x38ed0000}, {0x38ed2000}, {0x38ed4000}, {0x38ed6000}, - {0x38ed8000}, {0x38eda000}, {0x38edc000}, {0x38ede000}, - {0x38ee0000}, {0x38ee2000}, {0x38ee4000}, {0x38ee6000}, - {0x38ee8000}, {0x38eea000}, {0x38eec000}, {0x38eee000}, - {0x38ef0000}, {0x38ef2000}, {0x38ef4000}, {0x38ef6000}, - {0x38ef8000}, {0x38efa000}, {0x38efc000}, {0x38efe000}, - {0x38f00000}, {0x38f02000}, {0x38f04000}, {0x38f06000}, - {0x38f08000}, {0x38f0a000}, {0x38f0c000}, {0x38f0e000}, - {0x38f10000}, {0x38f12000}, {0x38f14000}, {0x38f16000}, - {0x38f18000}, {0x38f1a000}, {0x38f1c000}, {0x38f1e000}, - {0x38f20000}, {0x38f22000}, {0x38f24000}, {0x38f26000}, - {0x38f28000}, {0x38f2a000}, {0x38f2c000}, {0x38f2e000}, - {0x38f30000}, {0x38f32000}, {0x38f34000}, {0x38f36000}, - {0x38f38000}, {0x38f3a000}, {0x38f3c000}, {0x38f3e000}, - {0x38f40000}, {0x38f42000}, {0x38f44000}, {0x38f46000}, - {0x38f48000}, {0x38f4a000}, {0x38f4c000}, {0x38f4e000}, - {0x38f50000}, {0x38f52000}, {0x38f54000}, {0x38f56000}, - {0x38f58000}, {0x38f5a000}, {0x38f5c000}, {0x38f5e000}, - {0x38f60000}, {0x38f62000}, {0x38f64000}, {0x38f66000}, - {0x38f68000}, {0x38f6a000}, {0x38f6c000}, {0x38f6e000}, - {0x38f70000}, {0x38f72000}, {0x38f74000}, {0x38f76000}, - {0x38f78000}, {0x38f7a000}, {0x38f7c000}, {0x38f7e000}, - {0x38f80000}, {0x38f82000}, {0x38f84000}, {0x38f86000}, - {0x38f88000}, {0x38f8a000}, {0x38f8c000}, {0x38f8e000}, - {0x38f90000}, {0x38f92000}, {0x38f94000}, {0x38f96000}, - {0x38f98000}, {0x38f9a000}, {0x38f9c000}, {0x38f9e000}, - {0x38fa0000}, {0x38fa2000}, {0x38fa4000}, {0x38fa6000}, - {0x38fa8000}, {0x38faa000}, {0x38fac000}, {0x38fae000}, - {0x38fb0000}, {0x38fb2000}, {0x38fb4000}, {0x38fb6000}, - {0x38fb8000}, {0x38fba000}, {0x38fbc000}, {0x38fbe000}, - {0x38fc0000}, {0x38fc2000}, {0x38fc4000}, {0x38fc6000}, - {0x38fc8000}, {0x38fca000}, {0x38fcc000}, {0x38fce000}, - {0x38fd0000}, {0x38fd2000}, {0x38fd4000}, {0x38fd6000}, - {0x38fd8000}, {0x38fda000}, {0x38fdc000}, {0x38fde000}, - {0x38fe0000}, {0x38fe2000}, {0x38fe4000}, {0x38fe6000}, - {0x38fe8000}, {0x38fea000}, {0x38fec000}, {0x38fee000}, - {0x38ff0000}, {0x38ff2000}, {0x38ff4000}, {0x38ff6000}, - {0x38ff8000}, {0x38ffa000}, {0x38ffc000}, {0x38ffe000}, - {0x39000000}, {0x39002000}, {0x39004000}, {0x39006000}, - {0x39008000}, {0x3900a000}, {0x3900c000}, {0x3900e000}, - {0x39010000}, {0x39012000}, {0x39014000}, {0x39016000}, - {0x39018000}, {0x3901a000}, {0x3901c000}, {0x3901e000}, - {0x39020000}, {0x39022000}, {0x39024000}, {0x39026000}, - {0x39028000}, {0x3902a000}, {0x3902c000}, {0x3902e000}, - {0x39030000}, {0x39032000}, {0x39034000}, {0x39036000}, - {0x39038000}, {0x3903a000}, {0x3903c000}, {0x3903e000}, - {0x39040000}, {0x39042000}, {0x39044000}, {0x39046000}, - {0x39048000}, {0x3904a000}, {0x3904c000}, {0x3904e000}, - {0x39050000}, {0x39052000}, {0x39054000}, {0x39056000}, - {0x39058000}, {0x3905a000}, {0x3905c000}, {0x3905e000}, - {0x39060000}, {0x39062000}, {0x39064000}, {0x39066000}, - {0x39068000}, {0x3906a000}, {0x3906c000}, {0x3906e000}, - {0x39070000}, {0x39072000}, {0x39074000}, {0x39076000}, - {0x39078000}, {0x3907a000}, {0x3907c000}, {0x3907e000}, - {0x39080000}, {0x39082000}, {0x39084000}, {0x39086000}, - {0x39088000}, {0x3908a000}, {0x3908c000}, {0x3908e000}, - {0x39090000}, {0x39092000}, {0x39094000}, {0x39096000}, - {0x39098000}, {0x3909a000}, {0x3909c000}, {0x3909e000}, - {0x390a0000}, {0x390a2000}, {0x390a4000}, {0x390a6000}, - {0x390a8000}, {0x390aa000}, {0x390ac000}, {0x390ae000}, - {0x390b0000}, {0x390b2000}, {0x390b4000}, {0x390b6000}, - {0x390b8000}, {0x390ba000}, {0x390bc000}, {0x390be000}, - {0x390c0000}, {0x390c2000}, {0x390c4000}, {0x390c6000}, - {0x390c8000}, {0x390ca000}, {0x390cc000}, {0x390ce000}, - {0x390d0000}, {0x390d2000}, {0x390d4000}, {0x390d6000}, - {0x390d8000}, {0x390da000}, {0x390dc000}, {0x390de000}, - {0x390e0000}, {0x390e2000}, {0x390e4000}, {0x390e6000}, - {0x390e8000}, {0x390ea000}, {0x390ec000}, {0x390ee000}, - {0x390f0000}, {0x390f2000}, {0x390f4000}, {0x390f6000}, - {0x390f8000}, {0x390fa000}, {0x390fc000}, {0x390fe000}, - {0x39100000}, {0x39102000}, {0x39104000}, {0x39106000}, - {0x39108000}, {0x3910a000}, {0x3910c000}, {0x3910e000}, - {0x39110000}, {0x39112000}, {0x39114000}, {0x39116000}, - {0x39118000}, {0x3911a000}, {0x3911c000}, {0x3911e000}, - {0x39120000}, {0x39122000}, {0x39124000}, {0x39126000}, - {0x39128000}, {0x3912a000}, {0x3912c000}, {0x3912e000}, - {0x39130000}, {0x39132000}, {0x39134000}, {0x39136000}, - {0x39138000}, {0x3913a000}, {0x3913c000}, {0x3913e000}, - {0x39140000}, {0x39142000}, {0x39144000}, {0x39146000}, - {0x39148000}, {0x3914a000}, {0x3914c000}, {0x3914e000}, - {0x39150000}, {0x39152000}, {0x39154000}, {0x39156000}, - {0x39158000}, {0x3915a000}, {0x3915c000}, {0x3915e000}, - {0x39160000}, {0x39162000}, {0x39164000}, {0x39166000}, - {0x39168000}, {0x3916a000}, {0x3916c000}, {0x3916e000}, - {0x39170000}, {0x39172000}, {0x39174000}, {0x39176000}, - {0x39178000}, {0x3917a000}, {0x3917c000}, {0x3917e000}, - {0x39180000}, {0x39182000}, {0x39184000}, {0x39186000}, - {0x39188000}, {0x3918a000}, {0x3918c000}, {0x3918e000}, - {0x39190000}, {0x39192000}, {0x39194000}, {0x39196000}, - {0x39198000}, {0x3919a000}, {0x3919c000}, {0x3919e000}, - {0x391a0000}, {0x391a2000}, {0x391a4000}, {0x391a6000}, - {0x391a8000}, {0x391aa000}, {0x391ac000}, {0x391ae000}, - {0x391b0000}, {0x391b2000}, {0x391b4000}, {0x391b6000}, - {0x391b8000}, {0x391ba000}, {0x391bc000}, {0x391be000}, - {0x391c0000}, {0x391c2000}, {0x391c4000}, {0x391c6000}, - {0x391c8000}, {0x391ca000}, {0x391cc000}, {0x391ce000}, - {0x391d0000}, {0x391d2000}, {0x391d4000}, {0x391d6000}, - {0x391d8000}, {0x391da000}, {0x391dc000}, {0x391de000}, - {0x391e0000}, {0x391e2000}, {0x391e4000}, {0x391e6000}, - {0x391e8000}, {0x391ea000}, {0x391ec000}, {0x391ee000}, - {0x391f0000}, {0x391f2000}, {0x391f4000}, {0x391f6000}, - {0x391f8000}, {0x391fa000}, {0x391fc000}, {0x391fe000}, - {0x39200000}, {0x39202000}, {0x39204000}, {0x39206000}, - {0x39208000}, {0x3920a000}, {0x3920c000}, {0x3920e000}, - {0x39210000}, {0x39212000}, {0x39214000}, {0x39216000}, - {0x39218000}, {0x3921a000}, {0x3921c000}, {0x3921e000}, - {0x39220000}, {0x39222000}, {0x39224000}, {0x39226000}, - {0x39228000}, {0x3922a000}, {0x3922c000}, {0x3922e000}, - {0x39230000}, {0x39232000}, {0x39234000}, {0x39236000}, - {0x39238000}, {0x3923a000}, {0x3923c000}, {0x3923e000}, - {0x39240000}, {0x39242000}, {0x39244000}, {0x39246000}, - {0x39248000}, {0x3924a000}, {0x3924c000}, {0x3924e000}, - {0x39250000}, {0x39252000}, {0x39254000}, {0x39256000}, - {0x39258000}, {0x3925a000}, {0x3925c000}, {0x3925e000}, - {0x39260000}, {0x39262000}, {0x39264000}, {0x39266000}, - {0x39268000}, {0x3926a000}, {0x3926c000}, {0x3926e000}, - {0x39270000}, {0x39272000}, {0x39274000}, {0x39276000}, - {0x39278000}, {0x3927a000}, {0x3927c000}, {0x3927e000}, - {0x39280000}, {0x39282000}, {0x39284000}, {0x39286000}, - {0x39288000}, {0x3928a000}, {0x3928c000}, {0x3928e000}, - {0x39290000}, {0x39292000}, {0x39294000}, {0x39296000}, - {0x39298000}, {0x3929a000}, {0x3929c000}, {0x3929e000}, - {0x392a0000}, {0x392a2000}, {0x392a4000}, {0x392a6000}, - {0x392a8000}, {0x392aa000}, {0x392ac000}, {0x392ae000}, - {0x392b0000}, {0x392b2000}, {0x392b4000}, {0x392b6000}, - {0x392b8000}, {0x392ba000}, {0x392bc000}, {0x392be000}, - {0x392c0000}, {0x392c2000}, {0x392c4000}, {0x392c6000}, - {0x392c8000}, {0x392ca000}, {0x392cc000}, {0x392ce000}, - {0x392d0000}, {0x392d2000}, {0x392d4000}, {0x392d6000}, - {0x392d8000}, {0x392da000}, {0x392dc000}, {0x392de000}, - {0x392e0000}, {0x392e2000}, {0x392e4000}, {0x392e6000}, - {0x392e8000}, {0x392ea000}, {0x392ec000}, {0x392ee000}, - {0x392f0000}, {0x392f2000}, {0x392f4000}, {0x392f6000}, - {0x392f8000}, {0x392fa000}, {0x392fc000}, {0x392fe000}, - {0x39300000}, {0x39302000}, {0x39304000}, {0x39306000}, - {0x39308000}, {0x3930a000}, {0x3930c000}, {0x3930e000}, - {0x39310000}, {0x39312000}, {0x39314000}, {0x39316000}, - {0x39318000}, {0x3931a000}, {0x3931c000}, {0x3931e000}, - {0x39320000}, {0x39322000}, {0x39324000}, {0x39326000}, - {0x39328000}, {0x3932a000}, {0x3932c000}, {0x3932e000}, - {0x39330000}, {0x39332000}, {0x39334000}, {0x39336000}, - {0x39338000}, {0x3933a000}, {0x3933c000}, {0x3933e000}, - {0x39340000}, {0x39342000}, {0x39344000}, {0x39346000}, - {0x39348000}, {0x3934a000}, {0x3934c000}, {0x3934e000}, - {0x39350000}, {0x39352000}, {0x39354000}, {0x39356000}, - {0x39358000}, {0x3935a000}, {0x3935c000}, {0x3935e000}, - {0x39360000}, {0x39362000}, {0x39364000}, {0x39366000}, - {0x39368000}, {0x3936a000}, {0x3936c000}, {0x3936e000}, - {0x39370000}, {0x39372000}, {0x39374000}, {0x39376000}, - {0x39378000}, {0x3937a000}, {0x3937c000}, {0x3937e000}, - {0x39380000}, {0x39382000}, {0x39384000}, {0x39386000}, - {0x39388000}, {0x3938a000}, {0x3938c000}, {0x3938e000}, - {0x39390000}, {0x39392000}, {0x39394000}, {0x39396000}, - {0x39398000}, {0x3939a000}, {0x3939c000}, {0x3939e000}, - {0x393a0000}, {0x393a2000}, {0x393a4000}, {0x393a6000}, - {0x393a8000}, {0x393aa000}, {0x393ac000}, {0x393ae000}, - {0x393b0000}, {0x393b2000}, {0x393b4000}, {0x393b6000}, - {0x393b8000}, {0x393ba000}, {0x393bc000}, {0x393be000}, - {0x393c0000}, {0x393c2000}, {0x393c4000}, {0x393c6000}, - {0x393c8000}, {0x393ca000}, {0x393cc000}, {0x393ce000}, - {0x393d0000}, {0x393d2000}, {0x393d4000}, {0x393d6000}, - {0x393d8000}, {0x393da000}, {0x393dc000}, {0x393de000}, - {0x393e0000}, {0x393e2000}, {0x393e4000}, {0x393e6000}, - {0x393e8000}, {0x393ea000}, {0x393ec000}, {0x393ee000}, - {0x393f0000}, {0x393f2000}, {0x393f4000}, {0x393f6000}, - {0x393f8000}, {0x393fa000}, {0x393fc000}, {0x393fe000}, - {0x39400000}, {0x39402000}, {0x39404000}, {0x39406000}, - {0x39408000}, {0x3940a000}, {0x3940c000}, {0x3940e000}, - {0x39410000}, {0x39412000}, {0x39414000}, {0x39416000}, - {0x39418000}, {0x3941a000}, {0x3941c000}, {0x3941e000}, - {0x39420000}, {0x39422000}, {0x39424000}, {0x39426000}, - {0x39428000}, {0x3942a000}, {0x3942c000}, {0x3942e000}, - {0x39430000}, {0x39432000}, {0x39434000}, {0x39436000}, - {0x39438000}, {0x3943a000}, {0x3943c000}, {0x3943e000}, - {0x39440000}, {0x39442000}, {0x39444000}, {0x39446000}, - {0x39448000}, {0x3944a000}, {0x3944c000}, {0x3944e000}, - {0x39450000}, {0x39452000}, {0x39454000}, {0x39456000}, - {0x39458000}, {0x3945a000}, {0x3945c000}, {0x3945e000}, - {0x39460000}, {0x39462000}, {0x39464000}, {0x39466000}, - {0x39468000}, {0x3946a000}, {0x3946c000}, {0x3946e000}, - {0x39470000}, {0x39472000}, {0x39474000}, {0x39476000}, - {0x39478000}, {0x3947a000}, {0x3947c000}, {0x3947e000}, - {0x39480000}, {0x39482000}, {0x39484000}, {0x39486000}, - {0x39488000}, {0x3948a000}, {0x3948c000}, {0x3948e000}, - {0x39490000}, {0x39492000}, {0x39494000}, {0x39496000}, - {0x39498000}, {0x3949a000}, {0x3949c000}, {0x3949e000}, - {0x394a0000}, {0x394a2000}, {0x394a4000}, {0x394a6000}, - {0x394a8000}, {0x394aa000}, {0x394ac000}, {0x394ae000}, - {0x394b0000}, {0x394b2000}, {0x394b4000}, {0x394b6000}, - {0x394b8000}, {0x394ba000}, {0x394bc000}, {0x394be000}, - {0x394c0000}, {0x394c2000}, {0x394c4000}, {0x394c6000}, - {0x394c8000}, {0x394ca000}, {0x394cc000}, {0x394ce000}, - {0x394d0000}, {0x394d2000}, {0x394d4000}, {0x394d6000}, - {0x394d8000}, {0x394da000}, {0x394dc000}, {0x394de000}, - {0x394e0000}, {0x394e2000}, {0x394e4000}, {0x394e6000}, - {0x394e8000}, {0x394ea000}, {0x394ec000}, {0x394ee000}, - {0x394f0000}, {0x394f2000}, {0x394f4000}, {0x394f6000}, - {0x394f8000}, {0x394fa000}, {0x394fc000}, {0x394fe000}, - {0x39500000}, {0x39502000}, {0x39504000}, {0x39506000}, - {0x39508000}, {0x3950a000}, {0x3950c000}, {0x3950e000}, - {0x39510000}, {0x39512000}, {0x39514000}, {0x39516000}, - {0x39518000}, {0x3951a000}, {0x3951c000}, {0x3951e000}, - {0x39520000}, {0x39522000}, {0x39524000}, {0x39526000}, - {0x39528000}, {0x3952a000}, {0x3952c000}, {0x3952e000}, - {0x39530000}, {0x39532000}, {0x39534000}, {0x39536000}, - {0x39538000}, {0x3953a000}, {0x3953c000}, {0x3953e000}, - {0x39540000}, {0x39542000}, {0x39544000}, {0x39546000}, - {0x39548000}, {0x3954a000}, {0x3954c000}, {0x3954e000}, - {0x39550000}, {0x39552000}, {0x39554000}, {0x39556000}, - {0x39558000}, {0x3955a000}, {0x3955c000}, {0x3955e000}, - {0x39560000}, {0x39562000}, {0x39564000}, {0x39566000}, - {0x39568000}, {0x3956a000}, {0x3956c000}, {0x3956e000}, - {0x39570000}, {0x39572000}, {0x39574000}, {0x39576000}, - {0x39578000}, {0x3957a000}, {0x3957c000}, {0x3957e000}, - {0x39580000}, {0x39582000}, {0x39584000}, {0x39586000}, - {0x39588000}, {0x3958a000}, {0x3958c000}, {0x3958e000}, - {0x39590000}, {0x39592000}, {0x39594000}, {0x39596000}, - {0x39598000}, {0x3959a000}, {0x3959c000}, {0x3959e000}, - {0x395a0000}, {0x395a2000}, {0x395a4000}, {0x395a6000}, - {0x395a8000}, {0x395aa000}, {0x395ac000}, {0x395ae000}, - {0x395b0000}, {0x395b2000}, {0x395b4000}, {0x395b6000}, - {0x395b8000}, {0x395ba000}, {0x395bc000}, {0x395be000}, - {0x395c0000}, {0x395c2000}, {0x395c4000}, {0x395c6000}, - {0x395c8000}, {0x395ca000}, {0x395cc000}, {0x395ce000}, - {0x395d0000}, {0x395d2000}, {0x395d4000}, {0x395d6000}, - {0x395d8000}, {0x395da000}, {0x395dc000}, {0x395de000}, - {0x395e0000}, {0x395e2000}, {0x395e4000}, {0x395e6000}, - {0x395e8000}, {0x395ea000}, {0x395ec000}, {0x395ee000}, - {0x395f0000}, {0x395f2000}, {0x395f4000}, {0x395f6000}, - {0x395f8000}, {0x395fa000}, {0x395fc000}, {0x395fe000}, - {0x39600000}, {0x39602000}, {0x39604000}, {0x39606000}, - {0x39608000}, {0x3960a000}, {0x3960c000}, {0x3960e000}, - {0x39610000}, {0x39612000}, {0x39614000}, {0x39616000}, - {0x39618000}, {0x3961a000}, {0x3961c000}, {0x3961e000}, - {0x39620000}, {0x39622000}, {0x39624000}, {0x39626000}, - {0x39628000}, {0x3962a000}, {0x3962c000}, {0x3962e000}, - {0x39630000}, {0x39632000}, {0x39634000}, {0x39636000}, - {0x39638000}, {0x3963a000}, {0x3963c000}, {0x3963e000}, - {0x39640000}, {0x39642000}, {0x39644000}, {0x39646000}, - {0x39648000}, {0x3964a000}, {0x3964c000}, {0x3964e000}, - {0x39650000}, {0x39652000}, {0x39654000}, {0x39656000}, - {0x39658000}, {0x3965a000}, {0x3965c000}, {0x3965e000}, - {0x39660000}, {0x39662000}, {0x39664000}, {0x39666000}, - {0x39668000}, {0x3966a000}, {0x3966c000}, {0x3966e000}, - {0x39670000}, {0x39672000}, {0x39674000}, {0x39676000}, - {0x39678000}, {0x3967a000}, {0x3967c000}, {0x3967e000}, - {0x39680000}, {0x39682000}, {0x39684000}, {0x39686000}, - {0x39688000}, {0x3968a000}, {0x3968c000}, {0x3968e000}, - {0x39690000}, {0x39692000}, {0x39694000}, {0x39696000}, - {0x39698000}, {0x3969a000}, {0x3969c000}, {0x3969e000}, - {0x396a0000}, {0x396a2000}, {0x396a4000}, {0x396a6000}, - {0x396a8000}, {0x396aa000}, {0x396ac000}, {0x396ae000}, - {0x396b0000}, {0x396b2000}, {0x396b4000}, {0x396b6000}, - {0x396b8000}, {0x396ba000}, {0x396bc000}, {0x396be000}, - {0x396c0000}, {0x396c2000}, {0x396c4000}, {0x396c6000}, - {0x396c8000}, {0x396ca000}, {0x396cc000}, {0x396ce000}, - {0x396d0000}, {0x396d2000}, {0x396d4000}, {0x396d6000}, - {0x396d8000}, {0x396da000}, {0x396dc000}, {0x396de000}, - {0x396e0000}, {0x396e2000}, {0x396e4000}, {0x396e6000}, - {0x396e8000}, {0x396ea000}, {0x396ec000}, {0x396ee000}, - {0x396f0000}, {0x396f2000}, {0x396f4000}, {0x396f6000}, - {0x396f8000}, {0x396fa000}, {0x396fc000}, {0x396fe000}, - {0x39700000}, {0x39702000}, {0x39704000}, {0x39706000}, - {0x39708000}, {0x3970a000}, {0x3970c000}, {0x3970e000}, - {0x39710000}, {0x39712000}, {0x39714000}, {0x39716000}, - {0x39718000}, {0x3971a000}, {0x3971c000}, {0x3971e000}, - {0x39720000}, {0x39722000}, {0x39724000}, {0x39726000}, - {0x39728000}, {0x3972a000}, {0x3972c000}, {0x3972e000}, - {0x39730000}, {0x39732000}, {0x39734000}, {0x39736000}, - {0x39738000}, {0x3973a000}, {0x3973c000}, {0x3973e000}, - {0x39740000}, {0x39742000}, {0x39744000}, {0x39746000}, - {0x39748000}, {0x3974a000}, {0x3974c000}, {0x3974e000}, - {0x39750000}, {0x39752000}, {0x39754000}, {0x39756000}, - {0x39758000}, {0x3975a000}, {0x3975c000}, {0x3975e000}, - {0x39760000}, {0x39762000}, {0x39764000}, {0x39766000}, - {0x39768000}, {0x3976a000}, {0x3976c000}, {0x3976e000}, - {0x39770000}, {0x39772000}, {0x39774000}, {0x39776000}, - {0x39778000}, {0x3977a000}, {0x3977c000}, {0x3977e000}, - {0x39780000}, {0x39782000}, {0x39784000}, {0x39786000}, - {0x39788000}, {0x3978a000}, {0x3978c000}, {0x3978e000}, - {0x39790000}, {0x39792000}, {0x39794000}, {0x39796000}, - {0x39798000}, {0x3979a000}, {0x3979c000}, {0x3979e000}, - {0x397a0000}, {0x397a2000}, {0x397a4000}, {0x397a6000}, - {0x397a8000}, {0x397aa000}, {0x397ac000}, {0x397ae000}, - {0x397b0000}, {0x397b2000}, {0x397b4000}, {0x397b6000}, - {0x397b8000}, {0x397ba000}, {0x397bc000}, {0x397be000}, - {0x397c0000}, {0x397c2000}, {0x397c4000}, {0x397c6000}, - {0x397c8000}, {0x397ca000}, {0x397cc000}, {0x397ce000}, - {0x397d0000}, {0x397d2000}, {0x397d4000}, {0x397d6000}, - {0x397d8000}, {0x397da000}, {0x397dc000}, {0x397de000}, - {0x397e0000}, {0x397e2000}, {0x397e4000}, {0x397e6000}, - {0x397e8000}, {0x397ea000}, {0x397ec000}, {0x397ee000}, - {0x397f0000}, {0x397f2000}, {0x397f4000}, {0x397f6000}, - {0x397f8000}, {0x397fa000}, {0x397fc000}, {0x397fe000}, - {0x39800000}, {0x39802000}, {0x39804000}, {0x39806000}, - {0x39808000}, {0x3980a000}, {0x3980c000}, {0x3980e000}, - {0x39810000}, {0x39812000}, {0x39814000}, {0x39816000}, - {0x39818000}, {0x3981a000}, {0x3981c000}, {0x3981e000}, - {0x39820000}, {0x39822000}, {0x39824000}, {0x39826000}, - {0x39828000}, {0x3982a000}, {0x3982c000}, {0x3982e000}, - {0x39830000}, {0x39832000}, {0x39834000}, {0x39836000}, - {0x39838000}, {0x3983a000}, {0x3983c000}, {0x3983e000}, - {0x39840000}, {0x39842000}, {0x39844000}, {0x39846000}, - {0x39848000}, {0x3984a000}, {0x3984c000}, {0x3984e000}, - {0x39850000}, {0x39852000}, {0x39854000}, {0x39856000}, - {0x39858000}, {0x3985a000}, {0x3985c000}, {0x3985e000}, - {0x39860000}, {0x39862000}, {0x39864000}, {0x39866000}, - {0x39868000}, {0x3986a000}, {0x3986c000}, {0x3986e000}, - {0x39870000}, {0x39872000}, {0x39874000}, {0x39876000}, - {0x39878000}, {0x3987a000}, {0x3987c000}, {0x3987e000}, - {0x39880000}, {0x39882000}, {0x39884000}, {0x39886000}, - {0x39888000}, {0x3988a000}, {0x3988c000}, {0x3988e000}, - {0x39890000}, {0x39892000}, {0x39894000}, {0x39896000}, - {0x39898000}, {0x3989a000}, {0x3989c000}, {0x3989e000}, - {0x398a0000}, {0x398a2000}, {0x398a4000}, {0x398a6000}, - {0x398a8000}, {0x398aa000}, {0x398ac000}, {0x398ae000}, - {0x398b0000}, {0x398b2000}, {0x398b4000}, {0x398b6000}, - {0x398b8000}, {0x398ba000}, {0x398bc000}, {0x398be000}, - {0x398c0000}, {0x398c2000}, {0x398c4000}, {0x398c6000}, - {0x398c8000}, {0x398ca000}, {0x398cc000}, {0x398ce000}, - {0x398d0000}, {0x398d2000}, {0x398d4000}, {0x398d6000}, - {0x398d8000}, {0x398da000}, {0x398dc000}, {0x398de000}, - {0x398e0000}, {0x398e2000}, {0x398e4000}, {0x398e6000}, - {0x398e8000}, {0x398ea000}, {0x398ec000}, {0x398ee000}, - {0x398f0000}, {0x398f2000}, {0x398f4000}, {0x398f6000}, - {0x398f8000}, {0x398fa000}, {0x398fc000}, {0x398fe000}, - {0x39900000}, {0x39902000}, {0x39904000}, {0x39906000}, - {0x39908000}, {0x3990a000}, {0x3990c000}, {0x3990e000}, - {0x39910000}, {0x39912000}, {0x39914000}, {0x39916000}, - {0x39918000}, {0x3991a000}, {0x3991c000}, {0x3991e000}, - {0x39920000}, {0x39922000}, {0x39924000}, {0x39926000}, - {0x39928000}, {0x3992a000}, {0x3992c000}, {0x3992e000}, - {0x39930000}, {0x39932000}, {0x39934000}, {0x39936000}, - {0x39938000}, {0x3993a000}, {0x3993c000}, {0x3993e000}, - {0x39940000}, {0x39942000}, {0x39944000}, {0x39946000}, - {0x39948000}, {0x3994a000}, {0x3994c000}, {0x3994e000}, - {0x39950000}, {0x39952000}, {0x39954000}, {0x39956000}, - {0x39958000}, {0x3995a000}, {0x3995c000}, {0x3995e000}, - {0x39960000}, {0x39962000}, {0x39964000}, {0x39966000}, - {0x39968000}, {0x3996a000}, {0x3996c000}, {0x3996e000}, - {0x39970000}, {0x39972000}, {0x39974000}, {0x39976000}, - {0x39978000}, {0x3997a000}, {0x3997c000}, {0x3997e000}, - {0x39980000}, {0x39982000}, {0x39984000}, {0x39986000}, - {0x39988000}, {0x3998a000}, {0x3998c000}, {0x3998e000}, - {0x39990000}, {0x39992000}, {0x39994000}, {0x39996000}, - {0x39998000}, {0x3999a000}, {0x3999c000}, {0x3999e000}, - {0x399a0000}, {0x399a2000}, {0x399a4000}, {0x399a6000}, - {0x399a8000}, {0x399aa000}, {0x399ac000}, {0x399ae000}, - {0x399b0000}, {0x399b2000}, {0x399b4000}, {0x399b6000}, - {0x399b8000}, {0x399ba000}, {0x399bc000}, {0x399be000}, - {0x399c0000}, {0x399c2000}, {0x399c4000}, {0x399c6000}, - {0x399c8000}, {0x399ca000}, {0x399cc000}, {0x399ce000}, - {0x399d0000}, {0x399d2000}, {0x399d4000}, {0x399d6000}, - {0x399d8000}, {0x399da000}, {0x399dc000}, {0x399de000}, - {0x399e0000}, {0x399e2000}, {0x399e4000}, {0x399e6000}, - {0x399e8000}, {0x399ea000}, {0x399ec000}, {0x399ee000}, - {0x399f0000}, {0x399f2000}, {0x399f4000}, {0x399f6000}, - {0x399f8000}, {0x399fa000}, {0x399fc000}, {0x399fe000}, - {0x39a00000}, {0x39a02000}, {0x39a04000}, {0x39a06000}, - {0x39a08000}, {0x39a0a000}, {0x39a0c000}, {0x39a0e000}, - {0x39a10000}, {0x39a12000}, {0x39a14000}, {0x39a16000}, - {0x39a18000}, {0x39a1a000}, {0x39a1c000}, {0x39a1e000}, - {0x39a20000}, {0x39a22000}, {0x39a24000}, {0x39a26000}, - {0x39a28000}, {0x39a2a000}, {0x39a2c000}, {0x39a2e000}, - {0x39a30000}, {0x39a32000}, {0x39a34000}, {0x39a36000}, - {0x39a38000}, {0x39a3a000}, {0x39a3c000}, {0x39a3e000}, - {0x39a40000}, {0x39a42000}, {0x39a44000}, {0x39a46000}, - {0x39a48000}, {0x39a4a000}, {0x39a4c000}, {0x39a4e000}, - {0x39a50000}, {0x39a52000}, {0x39a54000}, {0x39a56000}, - {0x39a58000}, {0x39a5a000}, {0x39a5c000}, {0x39a5e000}, - {0x39a60000}, {0x39a62000}, {0x39a64000}, {0x39a66000}, - {0x39a68000}, {0x39a6a000}, {0x39a6c000}, {0x39a6e000}, - {0x39a70000}, {0x39a72000}, {0x39a74000}, {0x39a76000}, - {0x39a78000}, {0x39a7a000}, {0x39a7c000}, {0x39a7e000}, - {0x39a80000}, {0x39a82000}, {0x39a84000}, {0x39a86000}, - {0x39a88000}, {0x39a8a000}, {0x39a8c000}, {0x39a8e000}, - {0x39a90000}, {0x39a92000}, {0x39a94000}, {0x39a96000}, - {0x39a98000}, {0x39a9a000}, {0x39a9c000}, {0x39a9e000}, - {0x39aa0000}, {0x39aa2000}, {0x39aa4000}, {0x39aa6000}, - {0x39aa8000}, {0x39aaa000}, {0x39aac000}, {0x39aae000}, - {0x39ab0000}, {0x39ab2000}, {0x39ab4000}, {0x39ab6000}, - {0x39ab8000}, {0x39aba000}, {0x39abc000}, {0x39abe000}, - {0x39ac0000}, {0x39ac2000}, {0x39ac4000}, {0x39ac6000}, - {0x39ac8000}, {0x39aca000}, {0x39acc000}, {0x39ace000}, - {0x39ad0000}, {0x39ad2000}, {0x39ad4000}, {0x39ad6000}, - {0x39ad8000}, {0x39ada000}, {0x39adc000}, {0x39ade000}, - {0x39ae0000}, {0x39ae2000}, {0x39ae4000}, {0x39ae6000}, - {0x39ae8000}, {0x39aea000}, {0x39aec000}, {0x39aee000}, - {0x39af0000}, {0x39af2000}, {0x39af4000}, {0x39af6000}, - {0x39af8000}, {0x39afa000}, {0x39afc000}, {0x39afe000}, - {0x39b00000}, {0x39b02000}, {0x39b04000}, {0x39b06000}, - {0x39b08000}, {0x39b0a000}, {0x39b0c000}, {0x39b0e000}, - {0x39b10000}, {0x39b12000}, {0x39b14000}, {0x39b16000}, - {0x39b18000}, {0x39b1a000}, {0x39b1c000}, {0x39b1e000}, - {0x39b20000}, {0x39b22000}, {0x39b24000}, {0x39b26000}, - {0x39b28000}, {0x39b2a000}, {0x39b2c000}, {0x39b2e000}, - {0x39b30000}, {0x39b32000}, {0x39b34000}, {0x39b36000}, - {0x39b38000}, {0x39b3a000}, {0x39b3c000}, {0x39b3e000}, - {0x39b40000}, {0x39b42000}, {0x39b44000}, {0x39b46000}, - {0x39b48000}, {0x39b4a000}, {0x39b4c000}, {0x39b4e000}, - {0x39b50000}, {0x39b52000}, {0x39b54000}, {0x39b56000}, - {0x39b58000}, {0x39b5a000}, {0x39b5c000}, {0x39b5e000}, - {0x39b60000}, {0x39b62000}, {0x39b64000}, {0x39b66000}, - {0x39b68000}, {0x39b6a000}, {0x39b6c000}, {0x39b6e000}, - {0x39b70000}, {0x39b72000}, {0x39b74000}, {0x39b76000}, - {0x39b78000}, {0x39b7a000}, {0x39b7c000}, {0x39b7e000}, - {0x39b80000}, {0x39b82000}, {0x39b84000}, {0x39b86000}, - {0x39b88000}, {0x39b8a000}, {0x39b8c000}, {0x39b8e000}, - {0x39b90000}, {0x39b92000}, {0x39b94000}, {0x39b96000}, - {0x39b98000}, {0x39b9a000}, {0x39b9c000}, {0x39b9e000}, - {0x39ba0000}, {0x39ba2000}, {0x39ba4000}, {0x39ba6000}, - {0x39ba8000}, {0x39baa000}, {0x39bac000}, {0x39bae000}, - {0x39bb0000}, {0x39bb2000}, {0x39bb4000}, {0x39bb6000}, - {0x39bb8000}, {0x39bba000}, {0x39bbc000}, {0x39bbe000}, - {0x39bc0000}, {0x39bc2000}, {0x39bc4000}, {0x39bc6000}, - {0x39bc8000}, {0x39bca000}, {0x39bcc000}, {0x39bce000}, - {0x39bd0000}, {0x39bd2000}, {0x39bd4000}, {0x39bd6000}, - {0x39bd8000}, {0x39bda000}, {0x39bdc000}, {0x39bde000}, - {0x39be0000}, {0x39be2000}, {0x39be4000}, {0x39be6000}, - {0x39be8000}, {0x39bea000}, {0x39bec000}, {0x39bee000}, - {0x39bf0000}, {0x39bf2000}, {0x39bf4000}, {0x39bf6000}, - {0x39bf8000}, {0x39bfa000}, {0x39bfc000}, {0x39bfe000}, - {0x39c00000}, {0x39c02000}, {0x39c04000}, {0x39c06000}, - {0x39c08000}, {0x39c0a000}, {0x39c0c000}, {0x39c0e000}, - {0x39c10000}, {0x39c12000}, {0x39c14000}, {0x39c16000}, - {0x39c18000}, {0x39c1a000}, {0x39c1c000}, {0x39c1e000}, - {0x39c20000}, {0x39c22000}, {0x39c24000}, {0x39c26000}, - {0x39c28000}, {0x39c2a000}, {0x39c2c000}, {0x39c2e000}, - {0x39c30000}, {0x39c32000}, {0x39c34000}, {0x39c36000}, - {0x39c38000}, {0x39c3a000}, {0x39c3c000}, {0x39c3e000}, - {0x39c40000}, {0x39c42000}, {0x39c44000}, {0x39c46000}, - {0x39c48000}, {0x39c4a000}, {0x39c4c000}, {0x39c4e000}, - {0x39c50000}, {0x39c52000}, {0x39c54000}, {0x39c56000}, - {0x39c58000}, {0x39c5a000}, {0x39c5c000}, {0x39c5e000}, - {0x39c60000}, {0x39c62000}, {0x39c64000}, {0x39c66000}, - {0x39c68000}, {0x39c6a000}, {0x39c6c000}, {0x39c6e000}, - {0x39c70000}, {0x39c72000}, {0x39c74000}, {0x39c76000}, - {0x39c78000}, {0x39c7a000}, {0x39c7c000}, {0x39c7e000}, - {0x39c80000}, {0x39c82000}, {0x39c84000}, {0x39c86000}, - {0x39c88000}, {0x39c8a000}, {0x39c8c000}, {0x39c8e000}, - {0x39c90000}, {0x39c92000}, {0x39c94000}, {0x39c96000}, - {0x39c98000}, {0x39c9a000}, {0x39c9c000}, {0x39c9e000}, - {0x39ca0000}, {0x39ca2000}, {0x39ca4000}, {0x39ca6000}, - {0x39ca8000}, {0x39caa000}, {0x39cac000}, {0x39cae000}, - {0x39cb0000}, {0x39cb2000}, {0x39cb4000}, {0x39cb6000}, - {0x39cb8000}, {0x39cba000}, {0x39cbc000}, {0x39cbe000}, - {0x39cc0000}, {0x39cc2000}, {0x39cc4000}, {0x39cc6000}, - {0x39cc8000}, {0x39cca000}, {0x39ccc000}, {0x39cce000}, - {0x39cd0000}, {0x39cd2000}, {0x39cd4000}, {0x39cd6000}, - {0x39cd8000}, {0x39cda000}, {0x39cdc000}, {0x39cde000}, - {0x39ce0000}, {0x39ce2000}, {0x39ce4000}, {0x39ce6000}, - {0x39ce8000}, {0x39cea000}, {0x39cec000}, {0x39cee000}, - {0x39cf0000}, {0x39cf2000}, {0x39cf4000}, {0x39cf6000}, - {0x39cf8000}, {0x39cfa000}, {0x39cfc000}, {0x39cfe000}, - {0x39d00000}, {0x39d02000}, {0x39d04000}, {0x39d06000}, - {0x39d08000}, {0x39d0a000}, {0x39d0c000}, {0x39d0e000}, - {0x39d10000}, {0x39d12000}, {0x39d14000}, {0x39d16000}, - {0x39d18000}, {0x39d1a000}, {0x39d1c000}, {0x39d1e000}, - {0x39d20000}, {0x39d22000}, {0x39d24000}, {0x39d26000}, - {0x39d28000}, {0x39d2a000}, {0x39d2c000}, {0x39d2e000}, - {0x39d30000}, {0x39d32000}, {0x39d34000}, {0x39d36000}, - {0x39d38000}, {0x39d3a000}, {0x39d3c000}, {0x39d3e000}, - {0x39d40000}, {0x39d42000}, {0x39d44000}, {0x39d46000}, - {0x39d48000}, {0x39d4a000}, {0x39d4c000}, {0x39d4e000}, - {0x39d50000}, {0x39d52000}, {0x39d54000}, {0x39d56000}, - {0x39d58000}, {0x39d5a000}, {0x39d5c000}, {0x39d5e000}, - {0x39d60000}, {0x39d62000}, {0x39d64000}, {0x39d66000}, - {0x39d68000}, {0x39d6a000}, {0x39d6c000}, {0x39d6e000}, - {0x39d70000}, {0x39d72000}, {0x39d74000}, {0x39d76000}, - {0x39d78000}, {0x39d7a000}, {0x39d7c000}, {0x39d7e000}, - {0x39d80000}, {0x39d82000}, {0x39d84000}, {0x39d86000}, - {0x39d88000}, {0x39d8a000}, {0x39d8c000}, {0x39d8e000}, - {0x39d90000}, {0x39d92000}, {0x39d94000}, {0x39d96000}, - {0x39d98000}, {0x39d9a000}, {0x39d9c000}, {0x39d9e000}, - {0x39da0000}, {0x39da2000}, {0x39da4000}, {0x39da6000}, - {0x39da8000}, {0x39daa000}, {0x39dac000}, {0x39dae000}, - {0x39db0000}, {0x39db2000}, {0x39db4000}, {0x39db6000}, - {0x39db8000}, {0x39dba000}, {0x39dbc000}, {0x39dbe000}, - {0x39dc0000}, {0x39dc2000}, {0x39dc4000}, {0x39dc6000}, - {0x39dc8000}, {0x39dca000}, {0x39dcc000}, {0x39dce000}, - {0x39dd0000}, {0x39dd2000}, {0x39dd4000}, {0x39dd6000}, - {0x39dd8000}, {0x39dda000}, {0x39ddc000}, {0x39dde000}, - {0x39de0000}, {0x39de2000}, {0x39de4000}, {0x39de6000}, - {0x39de8000}, {0x39dea000}, {0x39dec000}, {0x39dee000}, - {0x39df0000}, {0x39df2000}, {0x39df4000}, {0x39df6000}, - {0x39df8000}, {0x39dfa000}, {0x39dfc000}, {0x39dfe000}, - {0x39e00000}, {0x39e02000}, {0x39e04000}, {0x39e06000}, - {0x39e08000}, {0x39e0a000}, {0x39e0c000}, {0x39e0e000}, - {0x39e10000}, {0x39e12000}, {0x39e14000}, {0x39e16000}, - {0x39e18000}, {0x39e1a000}, {0x39e1c000}, {0x39e1e000}, - {0x39e20000}, {0x39e22000}, {0x39e24000}, {0x39e26000}, - {0x39e28000}, {0x39e2a000}, {0x39e2c000}, {0x39e2e000}, - {0x39e30000}, {0x39e32000}, {0x39e34000}, {0x39e36000}, - {0x39e38000}, {0x39e3a000}, {0x39e3c000}, {0x39e3e000}, - {0x39e40000}, {0x39e42000}, {0x39e44000}, {0x39e46000}, - {0x39e48000}, {0x39e4a000}, {0x39e4c000}, {0x39e4e000}, - {0x39e50000}, {0x39e52000}, {0x39e54000}, {0x39e56000}, - {0x39e58000}, {0x39e5a000}, {0x39e5c000}, {0x39e5e000}, - {0x39e60000}, {0x39e62000}, {0x39e64000}, {0x39e66000}, - {0x39e68000}, {0x39e6a000}, {0x39e6c000}, {0x39e6e000}, - {0x39e70000}, {0x39e72000}, {0x39e74000}, {0x39e76000}, - {0x39e78000}, {0x39e7a000}, {0x39e7c000}, {0x39e7e000}, - {0x39e80000}, {0x39e82000}, {0x39e84000}, {0x39e86000}, - {0x39e88000}, {0x39e8a000}, {0x39e8c000}, {0x39e8e000}, - {0x39e90000}, {0x39e92000}, {0x39e94000}, {0x39e96000}, - {0x39e98000}, {0x39e9a000}, {0x39e9c000}, {0x39e9e000}, - {0x39ea0000}, {0x39ea2000}, {0x39ea4000}, {0x39ea6000}, - {0x39ea8000}, {0x39eaa000}, {0x39eac000}, {0x39eae000}, - {0x39eb0000}, {0x39eb2000}, {0x39eb4000}, {0x39eb6000}, - {0x39eb8000}, {0x39eba000}, {0x39ebc000}, {0x39ebe000}, - {0x39ec0000}, {0x39ec2000}, {0x39ec4000}, {0x39ec6000}, - {0x39ec8000}, {0x39eca000}, {0x39ecc000}, {0x39ece000}, - {0x39ed0000}, {0x39ed2000}, {0x39ed4000}, {0x39ed6000}, - {0x39ed8000}, {0x39eda000}, {0x39edc000}, {0x39ede000}, - {0x39ee0000}, {0x39ee2000}, {0x39ee4000}, {0x39ee6000}, - {0x39ee8000}, {0x39eea000}, {0x39eec000}, {0x39eee000}, - {0x39ef0000}, {0x39ef2000}, {0x39ef4000}, {0x39ef6000}, - {0x39ef8000}, {0x39efa000}, {0x39efc000}, {0x39efe000}, - {0x39f00000}, {0x39f02000}, {0x39f04000}, {0x39f06000}, - {0x39f08000}, {0x39f0a000}, {0x39f0c000}, {0x39f0e000}, - {0x39f10000}, {0x39f12000}, {0x39f14000}, {0x39f16000}, - {0x39f18000}, {0x39f1a000}, {0x39f1c000}, {0x39f1e000}, - {0x39f20000}, {0x39f22000}, {0x39f24000}, {0x39f26000}, - {0x39f28000}, {0x39f2a000}, {0x39f2c000}, {0x39f2e000}, - {0x39f30000}, {0x39f32000}, {0x39f34000}, {0x39f36000}, - {0x39f38000}, {0x39f3a000}, {0x39f3c000}, {0x39f3e000}, - {0x39f40000}, {0x39f42000}, {0x39f44000}, {0x39f46000}, - {0x39f48000}, {0x39f4a000}, {0x39f4c000}, {0x39f4e000}, - {0x39f50000}, {0x39f52000}, {0x39f54000}, {0x39f56000}, - {0x39f58000}, {0x39f5a000}, {0x39f5c000}, {0x39f5e000}, - {0x39f60000}, {0x39f62000}, {0x39f64000}, {0x39f66000}, - {0x39f68000}, {0x39f6a000}, {0x39f6c000}, {0x39f6e000}, - {0x39f70000}, {0x39f72000}, {0x39f74000}, {0x39f76000}, - {0x39f78000}, {0x39f7a000}, {0x39f7c000}, {0x39f7e000}, - {0x39f80000}, {0x39f82000}, {0x39f84000}, {0x39f86000}, - {0x39f88000}, {0x39f8a000}, {0x39f8c000}, {0x39f8e000}, - {0x39f90000}, {0x39f92000}, {0x39f94000}, {0x39f96000}, - {0x39f98000}, {0x39f9a000}, {0x39f9c000}, {0x39f9e000}, - {0x39fa0000}, {0x39fa2000}, {0x39fa4000}, {0x39fa6000}, - {0x39fa8000}, {0x39faa000}, {0x39fac000}, {0x39fae000}, - {0x39fb0000}, {0x39fb2000}, {0x39fb4000}, {0x39fb6000}, - {0x39fb8000}, {0x39fba000}, {0x39fbc000}, {0x39fbe000}, - {0x39fc0000}, {0x39fc2000}, {0x39fc4000}, {0x39fc6000}, - {0x39fc8000}, {0x39fca000}, {0x39fcc000}, {0x39fce000}, - {0x39fd0000}, {0x39fd2000}, {0x39fd4000}, {0x39fd6000}, - {0x39fd8000}, {0x39fda000}, {0x39fdc000}, {0x39fde000}, - {0x39fe0000}, {0x39fe2000}, {0x39fe4000}, {0x39fe6000}, - {0x39fe8000}, {0x39fea000}, {0x39fec000}, {0x39fee000}, - {0x39ff0000}, {0x39ff2000}, {0x39ff4000}, {0x39ff6000}, - {0x39ff8000}, {0x39ffa000}, {0x39ffc000}, {0x39ffe000}, - {0x3a000000}, {0x3a002000}, {0x3a004000}, {0x3a006000}, - {0x3a008000}, {0x3a00a000}, {0x3a00c000}, {0x3a00e000}, - {0x3a010000}, {0x3a012000}, {0x3a014000}, {0x3a016000}, - {0x3a018000}, {0x3a01a000}, {0x3a01c000}, {0x3a01e000}, - {0x3a020000}, {0x3a022000}, {0x3a024000}, {0x3a026000}, - {0x3a028000}, {0x3a02a000}, {0x3a02c000}, {0x3a02e000}, - {0x3a030000}, {0x3a032000}, {0x3a034000}, {0x3a036000}, - {0x3a038000}, {0x3a03a000}, {0x3a03c000}, {0x3a03e000}, - {0x3a040000}, {0x3a042000}, {0x3a044000}, {0x3a046000}, - {0x3a048000}, {0x3a04a000}, {0x3a04c000}, {0x3a04e000}, - {0x3a050000}, {0x3a052000}, {0x3a054000}, {0x3a056000}, - {0x3a058000}, {0x3a05a000}, {0x3a05c000}, {0x3a05e000}, - {0x3a060000}, {0x3a062000}, {0x3a064000}, {0x3a066000}, - {0x3a068000}, {0x3a06a000}, {0x3a06c000}, {0x3a06e000}, - {0x3a070000}, {0x3a072000}, {0x3a074000}, {0x3a076000}, - {0x3a078000}, {0x3a07a000}, {0x3a07c000}, {0x3a07e000}, - {0x3a080000}, {0x3a082000}, {0x3a084000}, {0x3a086000}, - {0x3a088000}, {0x3a08a000}, {0x3a08c000}, {0x3a08e000}, - {0x3a090000}, {0x3a092000}, {0x3a094000}, {0x3a096000}, - {0x3a098000}, {0x3a09a000}, {0x3a09c000}, {0x3a09e000}, - {0x3a0a0000}, {0x3a0a2000}, {0x3a0a4000}, {0x3a0a6000}, - {0x3a0a8000}, {0x3a0aa000}, {0x3a0ac000}, {0x3a0ae000}, - {0x3a0b0000}, {0x3a0b2000}, {0x3a0b4000}, {0x3a0b6000}, - {0x3a0b8000}, {0x3a0ba000}, {0x3a0bc000}, {0x3a0be000}, - {0x3a0c0000}, {0x3a0c2000}, {0x3a0c4000}, {0x3a0c6000}, - {0x3a0c8000}, {0x3a0ca000}, {0x3a0cc000}, {0x3a0ce000}, - {0x3a0d0000}, {0x3a0d2000}, {0x3a0d4000}, {0x3a0d6000}, - {0x3a0d8000}, {0x3a0da000}, {0x3a0dc000}, {0x3a0de000}, - {0x3a0e0000}, {0x3a0e2000}, {0x3a0e4000}, {0x3a0e6000}, - {0x3a0e8000}, {0x3a0ea000}, {0x3a0ec000}, {0x3a0ee000}, - {0x3a0f0000}, {0x3a0f2000}, {0x3a0f4000}, {0x3a0f6000}, - {0x3a0f8000}, {0x3a0fa000}, {0x3a0fc000}, {0x3a0fe000}, - {0x3a100000}, {0x3a102000}, {0x3a104000}, {0x3a106000}, - {0x3a108000}, {0x3a10a000}, {0x3a10c000}, {0x3a10e000}, - {0x3a110000}, {0x3a112000}, {0x3a114000}, {0x3a116000}, - {0x3a118000}, {0x3a11a000}, {0x3a11c000}, {0x3a11e000}, - {0x3a120000}, {0x3a122000}, {0x3a124000}, {0x3a126000}, - {0x3a128000}, {0x3a12a000}, {0x3a12c000}, {0x3a12e000}, - {0x3a130000}, {0x3a132000}, {0x3a134000}, {0x3a136000}, - {0x3a138000}, {0x3a13a000}, {0x3a13c000}, {0x3a13e000}, - {0x3a140000}, {0x3a142000}, {0x3a144000}, {0x3a146000}, - {0x3a148000}, {0x3a14a000}, {0x3a14c000}, {0x3a14e000}, - {0x3a150000}, {0x3a152000}, {0x3a154000}, {0x3a156000}, - {0x3a158000}, {0x3a15a000}, {0x3a15c000}, {0x3a15e000}, - {0x3a160000}, {0x3a162000}, {0x3a164000}, {0x3a166000}, - {0x3a168000}, {0x3a16a000}, {0x3a16c000}, {0x3a16e000}, - {0x3a170000}, {0x3a172000}, {0x3a174000}, {0x3a176000}, - {0x3a178000}, {0x3a17a000}, {0x3a17c000}, {0x3a17e000}, - {0x3a180000}, {0x3a182000}, {0x3a184000}, {0x3a186000}, - {0x3a188000}, {0x3a18a000}, {0x3a18c000}, {0x3a18e000}, - {0x3a190000}, {0x3a192000}, {0x3a194000}, {0x3a196000}, - {0x3a198000}, {0x3a19a000}, {0x3a19c000}, {0x3a19e000}, - {0x3a1a0000}, {0x3a1a2000}, {0x3a1a4000}, {0x3a1a6000}, - {0x3a1a8000}, {0x3a1aa000}, {0x3a1ac000}, {0x3a1ae000}, - {0x3a1b0000}, {0x3a1b2000}, {0x3a1b4000}, {0x3a1b6000}, - {0x3a1b8000}, {0x3a1ba000}, {0x3a1bc000}, {0x3a1be000}, - {0x3a1c0000}, {0x3a1c2000}, {0x3a1c4000}, {0x3a1c6000}, - {0x3a1c8000}, {0x3a1ca000}, {0x3a1cc000}, {0x3a1ce000}, - {0x3a1d0000}, {0x3a1d2000}, {0x3a1d4000}, {0x3a1d6000}, - {0x3a1d8000}, {0x3a1da000}, {0x3a1dc000}, {0x3a1de000}, - {0x3a1e0000}, {0x3a1e2000}, {0x3a1e4000}, {0x3a1e6000}, - {0x3a1e8000}, {0x3a1ea000}, {0x3a1ec000}, {0x3a1ee000}, - {0x3a1f0000}, {0x3a1f2000}, {0x3a1f4000}, {0x3a1f6000}, - {0x3a1f8000}, {0x3a1fa000}, {0x3a1fc000}, {0x3a1fe000}, - {0x3a200000}, {0x3a202000}, {0x3a204000}, {0x3a206000}, - {0x3a208000}, {0x3a20a000}, {0x3a20c000}, {0x3a20e000}, - {0x3a210000}, {0x3a212000}, {0x3a214000}, {0x3a216000}, - {0x3a218000}, {0x3a21a000}, {0x3a21c000}, {0x3a21e000}, - {0x3a220000}, {0x3a222000}, {0x3a224000}, {0x3a226000}, - {0x3a228000}, {0x3a22a000}, {0x3a22c000}, {0x3a22e000}, - {0x3a230000}, {0x3a232000}, {0x3a234000}, {0x3a236000}, - {0x3a238000}, {0x3a23a000}, {0x3a23c000}, {0x3a23e000}, - {0x3a240000}, {0x3a242000}, {0x3a244000}, {0x3a246000}, - {0x3a248000}, {0x3a24a000}, {0x3a24c000}, {0x3a24e000}, - {0x3a250000}, {0x3a252000}, {0x3a254000}, {0x3a256000}, - {0x3a258000}, {0x3a25a000}, {0x3a25c000}, {0x3a25e000}, - {0x3a260000}, {0x3a262000}, {0x3a264000}, {0x3a266000}, - {0x3a268000}, {0x3a26a000}, {0x3a26c000}, {0x3a26e000}, - {0x3a270000}, {0x3a272000}, {0x3a274000}, {0x3a276000}, - {0x3a278000}, {0x3a27a000}, {0x3a27c000}, {0x3a27e000}, - {0x3a280000}, {0x3a282000}, {0x3a284000}, {0x3a286000}, - {0x3a288000}, {0x3a28a000}, {0x3a28c000}, {0x3a28e000}, - {0x3a290000}, {0x3a292000}, {0x3a294000}, {0x3a296000}, - {0x3a298000}, {0x3a29a000}, {0x3a29c000}, {0x3a29e000}, - {0x3a2a0000}, {0x3a2a2000}, {0x3a2a4000}, {0x3a2a6000}, - {0x3a2a8000}, {0x3a2aa000}, {0x3a2ac000}, {0x3a2ae000}, - {0x3a2b0000}, {0x3a2b2000}, {0x3a2b4000}, {0x3a2b6000}, - {0x3a2b8000}, {0x3a2ba000}, {0x3a2bc000}, {0x3a2be000}, - {0x3a2c0000}, {0x3a2c2000}, {0x3a2c4000}, {0x3a2c6000}, - {0x3a2c8000}, {0x3a2ca000}, {0x3a2cc000}, {0x3a2ce000}, - {0x3a2d0000}, {0x3a2d2000}, {0x3a2d4000}, {0x3a2d6000}, - {0x3a2d8000}, {0x3a2da000}, {0x3a2dc000}, {0x3a2de000}, - {0x3a2e0000}, {0x3a2e2000}, {0x3a2e4000}, {0x3a2e6000}, - {0x3a2e8000}, {0x3a2ea000}, {0x3a2ec000}, {0x3a2ee000}, - {0x3a2f0000}, {0x3a2f2000}, {0x3a2f4000}, {0x3a2f6000}, - {0x3a2f8000}, {0x3a2fa000}, {0x3a2fc000}, {0x3a2fe000}, - {0x3a300000}, {0x3a302000}, {0x3a304000}, {0x3a306000}, - {0x3a308000}, {0x3a30a000}, {0x3a30c000}, {0x3a30e000}, - {0x3a310000}, {0x3a312000}, {0x3a314000}, {0x3a316000}, - {0x3a318000}, {0x3a31a000}, {0x3a31c000}, {0x3a31e000}, - {0x3a320000}, {0x3a322000}, {0x3a324000}, {0x3a326000}, - {0x3a328000}, {0x3a32a000}, {0x3a32c000}, {0x3a32e000}, - {0x3a330000}, {0x3a332000}, {0x3a334000}, {0x3a336000}, - {0x3a338000}, {0x3a33a000}, {0x3a33c000}, {0x3a33e000}, - {0x3a340000}, {0x3a342000}, {0x3a344000}, {0x3a346000}, - {0x3a348000}, {0x3a34a000}, {0x3a34c000}, {0x3a34e000}, - {0x3a350000}, {0x3a352000}, {0x3a354000}, {0x3a356000}, - {0x3a358000}, {0x3a35a000}, {0x3a35c000}, {0x3a35e000}, - {0x3a360000}, {0x3a362000}, {0x3a364000}, {0x3a366000}, - {0x3a368000}, {0x3a36a000}, {0x3a36c000}, {0x3a36e000}, - {0x3a370000}, {0x3a372000}, {0x3a374000}, {0x3a376000}, - {0x3a378000}, {0x3a37a000}, {0x3a37c000}, {0x3a37e000}, - {0x3a380000}, {0x3a382000}, {0x3a384000}, {0x3a386000}, - {0x3a388000}, {0x3a38a000}, {0x3a38c000}, {0x3a38e000}, - {0x3a390000}, {0x3a392000}, {0x3a394000}, {0x3a396000}, - {0x3a398000}, {0x3a39a000}, {0x3a39c000}, {0x3a39e000}, - {0x3a3a0000}, {0x3a3a2000}, {0x3a3a4000}, {0x3a3a6000}, - {0x3a3a8000}, {0x3a3aa000}, {0x3a3ac000}, {0x3a3ae000}, - {0x3a3b0000}, {0x3a3b2000}, {0x3a3b4000}, {0x3a3b6000}, - {0x3a3b8000}, {0x3a3ba000}, {0x3a3bc000}, {0x3a3be000}, - {0x3a3c0000}, {0x3a3c2000}, {0x3a3c4000}, {0x3a3c6000}, - {0x3a3c8000}, {0x3a3ca000}, {0x3a3cc000}, {0x3a3ce000}, - {0x3a3d0000}, {0x3a3d2000}, {0x3a3d4000}, {0x3a3d6000}, - {0x3a3d8000}, {0x3a3da000}, {0x3a3dc000}, {0x3a3de000}, - {0x3a3e0000}, {0x3a3e2000}, {0x3a3e4000}, {0x3a3e6000}, - {0x3a3e8000}, {0x3a3ea000}, {0x3a3ec000}, {0x3a3ee000}, - {0x3a3f0000}, {0x3a3f2000}, {0x3a3f4000}, {0x3a3f6000}, - {0x3a3f8000}, {0x3a3fa000}, {0x3a3fc000}, {0x3a3fe000}, - {0x3a400000}, {0x3a402000}, {0x3a404000}, {0x3a406000}, - {0x3a408000}, {0x3a40a000}, {0x3a40c000}, {0x3a40e000}, - {0x3a410000}, {0x3a412000}, {0x3a414000}, {0x3a416000}, - {0x3a418000}, {0x3a41a000}, {0x3a41c000}, {0x3a41e000}, - {0x3a420000}, {0x3a422000}, {0x3a424000}, {0x3a426000}, - {0x3a428000}, {0x3a42a000}, {0x3a42c000}, {0x3a42e000}, - {0x3a430000}, {0x3a432000}, {0x3a434000}, {0x3a436000}, - {0x3a438000}, {0x3a43a000}, {0x3a43c000}, {0x3a43e000}, - {0x3a440000}, {0x3a442000}, {0x3a444000}, {0x3a446000}, - {0x3a448000}, {0x3a44a000}, {0x3a44c000}, {0x3a44e000}, - {0x3a450000}, {0x3a452000}, {0x3a454000}, {0x3a456000}, - {0x3a458000}, {0x3a45a000}, {0x3a45c000}, {0x3a45e000}, - {0x3a460000}, {0x3a462000}, {0x3a464000}, {0x3a466000}, - {0x3a468000}, {0x3a46a000}, {0x3a46c000}, {0x3a46e000}, - {0x3a470000}, {0x3a472000}, {0x3a474000}, {0x3a476000}, - {0x3a478000}, {0x3a47a000}, {0x3a47c000}, {0x3a47e000}, - {0x3a480000}, {0x3a482000}, {0x3a484000}, {0x3a486000}, - {0x3a488000}, {0x3a48a000}, {0x3a48c000}, {0x3a48e000}, - {0x3a490000}, {0x3a492000}, {0x3a494000}, {0x3a496000}, - {0x3a498000}, {0x3a49a000}, {0x3a49c000}, {0x3a49e000}, - {0x3a4a0000}, {0x3a4a2000}, {0x3a4a4000}, {0x3a4a6000}, - {0x3a4a8000}, {0x3a4aa000}, {0x3a4ac000}, {0x3a4ae000}, - {0x3a4b0000}, {0x3a4b2000}, {0x3a4b4000}, {0x3a4b6000}, - {0x3a4b8000}, {0x3a4ba000}, {0x3a4bc000}, {0x3a4be000}, - {0x3a4c0000}, {0x3a4c2000}, {0x3a4c4000}, {0x3a4c6000}, - {0x3a4c8000}, {0x3a4ca000}, {0x3a4cc000}, {0x3a4ce000}, - {0x3a4d0000}, {0x3a4d2000}, {0x3a4d4000}, {0x3a4d6000}, - {0x3a4d8000}, {0x3a4da000}, {0x3a4dc000}, {0x3a4de000}, - {0x3a4e0000}, {0x3a4e2000}, {0x3a4e4000}, {0x3a4e6000}, - {0x3a4e8000}, {0x3a4ea000}, {0x3a4ec000}, {0x3a4ee000}, - {0x3a4f0000}, {0x3a4f2000}, {0x3a4f4000}, {0x3a4f6000}, - {0x3a4f8000}, {0x3a4fa000}, {0x3a4fc000}, {0x3a4fe000}, - {0x3a500000}, {0x3a502000}, {0x3a504000}, {0x3a506000}, - {0x3a508000}, {0x3a50a000}, {0x3a50c000}, {0x3a50e000}, - {0x3a510000}, {0x3a512000}, {0x3a514000}, {0x3a516000}, - {0x3a518000}, {0x3a51a000}, {0x3a51c000}, {0x3a51e000}, - {0x3a520000}, {0x3a522000}, {0x3a524000}, {0x3a526000}, - {0x3a528000}, {0x3a52a000}, {0x3a52c000}, {0x3a52e000}, - {0x3a530000}, {0x3a532000}, {0x3a534000}, {0x3a536000}, - {0x3a538000}, {0x3a53a000}, {0x3a53c000}, {0x3a53e000}, - {0x3a540000}, {0x3a542000}, {0x3a544000}, {0x3a546000}, - {0x3a548000}, {0x3a54a000}, {0x3a54c000}, {0x3a54e000}, - {0x3a550000}, {0x3a552000}, {0x3a554000}, {0x3a556000}, - {0x3a558000}, {0x3a55a000}, {0x3a55c000}, {0x3a55e000}, - {0x3a560000}, {0x3a562000}, {0x3a564000}, {0x3a566000}, - {0x3a568000}, {0x3a56a000}, {0x3a56c000}, {0x3a56e000}, - {0x3a570000}, {0x3a572000}, {0x3a574000}, {0x3a576000}, - {0x3a578000}, {0x3a57a000}, {0x3a57c000}, {0x3a57e000}, - {0x3a580000}, {0x3a582000}, {0x3a584000}, {0x3a586000}, - {0x3a588000}, {0x3a58a000}, {0x3a58c000}, {0x3a58e000}, - {0x3a590000}, {0x3a592000}, {0x3a594000}, {0x3a596000}, - {0x3a598000}, {0x3a59a000}, {0x3a59c000}, {0x3a59e000}, - {0x3a5a0000}, {0x3a5a2000}, {0x3a5a4000}, {0x3a5a6000}, - {0x3a5a8000}, {0x3a5aa000}, {0x3a5ac000}, {0x3a5ae000}, - {0x3a5b0000}, {0x3a5b2000}, {0x3a5b4000}, {0x3a5b6000}, - {0x3a5b8000}, {0x3a5ba000}, {0x3a5bc000}, {0x3a5be000}, - {0x3a5c0000}, {0x3a5c2000}, {0x3a5c4000}, {0x3a5c6000}, - {0x3a5c8000}, {0x3a5ca000}, {0x3a5cc000}, {0x3a5ce000}, - {0x3a5d0000}, {0x3a5d2000}, {0x3a5d4000}, {0x3a5d6000}, - {0x3a5d8000}, {0x3a5da000}, {0x3a5dc000}, {0x3a5de000}, - {0x3a5e0000}, {0x3a5e2000}, {0x3a5e4000}, {0x3a5e6000}, - {0x3a5e8000}, {0x3a5ea000}, {0x3a5ec000}, {0x3a5ee000}, - {0x3a5f0000}, {0x3a5f2000}, {0x3a5f4000}, {0x3a5f6000}, - {0x3a5f8000}, {0x3a5fa000}, {0x3a5fc000}, {0x3a5fe000}, - {0x3a600000}, {0x3a602000}, {0x3a604000}, {0x3a606000}, - {0x3a608000}, {0x3a60a000}, {0x3a60c000}, {0x3a60e000}, - {0x3a610000}, {0x3a612000}, {0x3a614000}, {0x3a616000}, - {0x3a618000}, {0x3a61a000}, {0x3a61c000}, {0x3a61e000}, - {0x3a620000}, {0x3a622000}, {0x3a624000}, {0x3a626000}, - {0x3a628000}, {0x3a62a000}, {0x3a62c000}, {0x3a62e000}, - {0x3a630000}, {0x3a632000}, {0x3a634000}, {0x3a636000}, - {0x3a638000}, {0x3a63a000}, {0x3a63c000}, {0x3a63e000}, - {0x3a640000}, {0x3a642000}, {0x3a644000}, {0x3a646000}, - {0x3a648000}, {0x3a64a000}, {0x3a64c000}, {0x3a64e000}, - {0x3a650000}, {0x3a652000}, {0x3a654000}, {0x3a656000}, - {0x3a658000}, {0x3a65a000}, {0x3a65c000}, {0x3a65e000}, - {0x3a660000}, {0x3a662000}, {0x3a664000}, {0x3a666000}, - {0x3a668000}, {0x3a66a000}, {0x3a66c000}, {0x3a66e000}, - {0x3a670000}, {0x3a672000}, {0x3a674000}, {0x3a676000}, - {0x3a678000}, {0x3a67a000}, {0x3a67c000}, {0x3a67e000}, - {0x3a680000}, {0x3a682000}, {0x3a684000}, {0x3a686000}, - {0x3a688000}, {0x3a68a000}, {0x3a68c000}, {0x3a68e000}, - {0x3a690000}, {0x3a692000}, {0x3a694000}, {0x3a696000}, - {0x3a698000}, {0x3a69a000}, {0x3a69c000}, {0x3a69e000}, - {0x3a6a0000}, {0x3a6a2000}, {0x3a6a4000}, {0x3a6a6000}, - {0x3a6a8000}, {0x3a6aa000}, {0x3a6ac000}, {0x3a6ae000}, - {0x3a6b0000}, {0x3a6b2000}, {0x3a6b4000}, {0x3a6b6000}, - {0x3a6b8000}, {0x3a6ba000}, {0x3a6bc000}, {0x3a6be000}, - {0x3a6c0000}, {0x3a6c2000}, {0x3a6c4000}, {0x3a6c6000}, - {0x3a6c8000}, {0x3a6ca000}, {0x3a6cc000}, {0x3a6ce000}, - {0x3a6d0000}, {0x3a6d2000}, {0x3a6d4000}, {0x3a6d6000}, - {0x3a6d8000}, {0x3a6da000}, {0x3a6dc000}, {0x3a6de000}, - {0x3a6e0000}, {0x3a6e2000}, {0x3a6e4000}, {0x3a6e6000}, - {0x3a6e8000}, {0x3a6ea000}, {0x3a6ec000}, {0x3a6ee000}, - {0x3a6f0000}, {0x3a6f2000}, {0x3a6f4000}, {0x3a6f6000}, - {0x3a6f8000}, {0x3a6fa000}, {0x3a6fc000}, {0x3a6fe000}, - {0x3a700000}, {0x3a702000}, {0x3a704000}, {0x3a706000}, - {0x3a708000}, {0x3a70a000}, {0x3a70c000}, {0x3a70e000}, - {0x3a710000}, {0x3a712000}, {0x3a714000}, {0x3a716000}, - {0x3a718000}, {0x3a71a000}, {0x3a71c000}, {0x3a71e000}, - {0x3a720000}, {0x3a722000}, {0x3a724000}, {0x3a726000}, - {0x3a728000}, {0x3a72a000}, {0x3a72c000}, {0x3a72e000}, - {0x3a730000}, {0x3a732000}, {0x3a734000}, {0x3a736000}, - {0x3a738000}, {0x3a73a000}, {0x3a73c000}, {0x3a73e000}, - {0x3a740000}, {0x3a742000}, {0x3a744000}, {0x3a746000}, - {0x3a748000}, {0x3a74a000}, {0x3a74c000}, {0x3a74e000}, - {0x3a750000}, {0x3a752000}, {0x3a754000}, {0x3a756000}, - {0x3a758000}, {0x3a75a000}, {0x3a75c000}, {0x3a75e000}, - {0x3a760000}, {0x3a762000}, {0x3a764000}, {0x3a766000}, - {0x3a768000}, {0x3a76a000}, {0x3a76c000}, {0x3a76e000}, - {0x3a770000}, {0x3a772000}, {0x3a774000}, {0x3a776000}, - {0x3a778000}, {0x3a77a000}, {0x3a77c000}, {0x3a77e000}, - {0x3a780000}, {0x3a782000}, {0x3a784000}, {0x3a786000}, - {0x3a788000}, {0x3a78a000}, {0x3a78c000}, {0x3a78e000}, - {0x3a790000}, {0x3a792000}, {0x3a794000}, {0x3a796000}, - {0x3a798000}, {0x3a79a000}, {0x3a79c000}, {0x3a79e000}, - {0x3a7a0000}, {0x3a7a2000}, {0x3a7a4000}, {0x3a7a6000}, - {0x3a7a8000}, {0x3a7aa000}, {0x3a7ac000}, {0x3a7ae000}, - {0x3a7b0000}, {0x3a7b2000}, {0x3a7b4000}, {0x3a7b6000}, - {0x3a7b8000}, {0x3a7ba000}, {0x3a7bc000}, {0x3a7be000}, - {0x3a7c0000}, {0x3a7c2000}, {0x3a7c4000}, {0x3a7c6000}, - {0x3a7c8000}, {0x3a7ca000}, {0x3a7cc000}, {0x3a7ce000}, - {0x3a7d0000}, {0x3a7d2000}, {0x3a7d4000}, {0x3a7d6000}, - {0x3a7d8000}, {0x3a7da000}, {0x3a7dc000}, {0x3a7de000}, - {0x3a7e0000}, {0x3a7e2000}, {0x3a7e4000}, {0x3a7e6000}, - {0x3a7e8000}, {0x3a7ea000}, {0x3a7ec000}, {0x3a7ee000}, - {0x3a7f0000}, {0x3a7f2000}, {0x3a7f4000}, {0x3a7f6000}, - {0x3a7f8000}, {0x3a7fa000}, {0x3a7fc000}, {0x3a7fe000}, - {0x3a800000}, {0x3a802000}, {0x3a804000}, {0x3a806000}, - {0x3a808000}, {0x3a80a000}, {0x3a80c000}, {0x3a80e000}, - {0x3a810000}, {0x3a812000}, {0x3a814000}, {0x3a816000}, - {0x3a818000}, {0x3a81a000}, {0x3a81c000}, {0x3a81e000}, - {0x3a820000}, {0x3a822000}, {0x3a824000}, {0x3a826000}, - {0x3a828000}, {0x3a82a000}, {0x3a82c000}, {0x3a82e000}, - {0x3a830000}, {0x3a832000}, {0x3a834000}, {0x3a836000}, - {0x3a838000}, {0x3a83a000}, {0x3a83c000}, {0x3a83e000}, - {0x3a840000}, {0x3a842000}, {0x3a844000}, {0x3a846000}, - {0x3a848000}, {0x3a84a000}, {0x3a84c000}, {0x3a84e000}, - {0x3a850000}, {0x3a852000}, {0x3a854000}, {0x3a856000}, - {0x3a858000}, {0x3a85a000}, {0x3a85c000}, {0x3a85e000}, - {0x3a860000}, {0x3a862000}, {0x3a864000}, {0x3a866000}, - {0x3a868000}, {0x3a86a000}, {0x3a86c000}, {0x3a86e000}, - {0x3a870000}, {0x3a872000}, {0x3a874000}, {0x3a876000}, - {0x3a878000}, {0x3a87a000}, {0x3a87c000}, {0x3a87e000}, - {0x3a880000}, {0x3a882000}, {0x3a884000}, {0x3a886000}, - {0x3a888000}, {0x3a88a000}, {0x3a88c000}, {0x3a88e000}, - {0x3a890000}, {0x3a892000}, {0x3a894000}, {0x3a896000}, - {0x3a898000}, {0x3a89a000}, {0x3a89c000}, {0x3a89e000}, - {0x3a8a0000}, {0x3a8a2000}, {0x3a8a4000}, {0x3a8a6000}, - {0x3a8a8000}, {0x3a8aa000}, {0x3a8ac000}, {0x3a8ae000}, - {0x3a8b0000}, {0x3a8b2000}, {0x3a8b4000}, {0x3a8b6000}, - {0x3a8b8000}, {0x3a8ba000}, {0x3a8bc000}, {0x3a8be000}, - {0x3a8c0000}, {0x3a8c2000}, {0x3a8c4000}, {0x3a8c6000}, - {0x3a8c8000}, {0x3a8ca000}, {0x3a8cc000}, {0x3a8ce000}, - {0x3a8d0000}, {0x3a8d2000}, {0x3a8d4000}, {0x3a8d6000}, - {0x3a8d8000}, {0x3a8da000}, {0x3a8dc000}, {0x3a8de000}, - {0x3a8e0000}, {0x3a8e2000}, {0x3a8e4000}, {0x3a8e6000}, - {0x3a8e8000}, {0x3a8ea000}, {0x3a8ec000}, {0x3a8ee000}, - {0x3a8f0000}, {0x3a8f2000}, {0x3a8f4000}, {0x3a8f6000}, - {0x3a8f8000}, {0x3a8fa000}, {0x3a8fc000}, {0x3a8fe000}, - {0x3a900000}, {0x3a902000}, {0x3a904000}, {0x3a906000}, - {0x3a908000}, {0x3a90a000}, {0x3a90c000}, {0x3a90e000}, - {0x3a910000}, {0x3a912000}, {0x3a914000}, {0x3a916000}, - {0x3a918000}, {0x3a91a000}, {0x3a91c000}, {0x3a91e000}, - {0x3a920000}, {0x3a922000}, {0x3a924000}, {0x3a926000}, - {0x3a928000}, {0x3a92a000}, {0x3a92c000}, {0x3a92e000}, - {0x3a930000}, {0x3a932000}, {0x3a934000}, {0x3a936000}, - {0x3a938000}, {0x3a93a000}, {0x3a93c000}, {0x3a93e000}, - {0x3a940000}, {0x3a942000}, {0x3a944000}, {0x3a946000}, - {0x3a948000}, {0x3a94a000}, {0x3a94c000}, {0x3a94e000}, - {0x3a950000}, {0x3a952000}, {0x3a954000}, {0x3a956000}, - {0x3a958000}, {0x3a95a000}, {0x3a95c000}, {0x3a95e000}, - {0x3a960000}, {0x3a962000}, {0x3a964000}, {0x3a966000}, - {0x3a968000}, {0x3a96a000}, {0x3a96c000}, {0x3a96e000}, - {0x3a970000}, {0x3a972000}, {0x3a974000}, {0x3a976000}, - {0x3a978000}, {0x3a97a000}, {0x3a97c000}, {0x3a97e000}, - {0x3a980000}, {0x3a982000}, {0x3a984000}, {0x3a986000}, - {0x3a988000}, {0x3a98a000}, {0x3a98c000}, {0x3a98e000}, - {0x3a990000}, {0x3a992000}, {0x3a994000}, {0x3a996000}, - {0x3a998000}, {0x3a99a000}, {0x3a99c000}, {0x3a99e000}, - {0x3a9a0000}, {0x3a9a2000}, {0x3a9a4000}, {0x3a9a6000}, - {0x3a9a8000}, {0x3a9aa000}, {0x3a9ac000}, {0x3a9ae000}, - {0x3a9b0000}, {0x3a9b2000}, {0x3a9b4000}, {0x3a9b6000}, - {0x3a9b8000}, {0x3a9ba000}, {0x3a9bc000}, {0x3a9be000}, - {0x3a9c0000}, {0x3a9c2000}, {0x3a9c4000}, {0x3a9c6000}, - {0x3a9c8000}, {0x3a9ca000}, {0x3a9cc000}, {0x3a9ce000}, - {0x3a9d0000}, {0x3a9d2000}, {0x3a9d4000}, {0x3a9d6000}, - {0x3a9d8000}, {0x3a9da000}, {0x3a9dc000}, {0x3a9de000}, - {0x3a9e0000}, {0x3a9e2000}, {0x3a9e4000}, {0x3a9e6000}, - {0x3a9e8000}, {0x3a9ea000}, {0x3a9ec000}, {0x3a9ee000}, - {0x3a9f0000}, {0x3a9f2000}, {0x3a9f4000}, {0x3a9f6000}, - {0x3a9f8000}, {0x3a9fa000}, {0x3a9fc000}, {0x3a9fe000}, - {0x3aa00000}, {0x3aa02000}, {0x3aa04000}, {0x3aa06000}, - {0x3aa08000}, {0x3aa0a000}, {0x3aa0c000}, {0x3aa0e000}, - {0x3aa10000}, {0x3aa12000}, {0x3aa14000}, {0x3aa16000}, - {0x3aa18000}, {0x3aa1a000}, {0x3aa1c000}, {0x3aa1e000}, - {0x3aa20000}, {0x3aa22000}, {0x3aa24000}, {0x3aa26000}, - {0x3aa28000}, {0x3aa2a000}, {0x3aa2c000}, {0x3aa2e000}, - {0x3aa30000}, {0x3aa32000}, {0x3aa34000}, {0x3aa36000}, - {0x3aa38000}, {0x3aa3a000}, {0x3aa3c000}, {0x3aa3e000}, - {0x3aa40000}, {0x3aa42000}, {0x3aa44000}, {0x3aa46000}, - {0x3aa48000}, {0x3aa4a000}, {0x3aa4c000}, {0x3aa4e000}, - {0x3aa50000}, {0x3aa52000}, {0x3aa54000}, {0x3aa56000}, - {0x3aa58000}, {0x3aa5a000}, {0x3aa5c000}, {0x3aa5e000}, - {0x3aa60000}, {0x3aa62000}, {0x3aa64000}, {0x3aa66000}, - {0x3aa68000}, {0x3aa6a000}, {0x3aa6c000}, {0x3aa6e000}, - {0x3aa70000}, {0x3aa72000}, {0x3aa74000}, {0x3aa76000}, - {0x3aa78000}, {0x3aa7a000}, {0x3aa7c000}, {0x3aa7e000}, - {0x3aa80000}, {0x3aa82000}, {0x3aa84000}, {0x3aa86000}, - {0x3aa88000}, {0x3aa8a000}, {0x3aa8c000}, {0x3aa8e000}, - {0x3aa90000}, {0x3aa92000}, {0x3aa94000}, {0x3aa96000}, - {0x3aa98000}, {0x3aa9a000}, {0x3aa9c000}, {0x3aa9e000}, - {0x3aaa0000}, {0x3aaa2000}, {0x3aaa4000}, {0x3aaa6000}, - {0x3aaa8000}, {0x3aaaa000}, {0x3aaac000}, {0x3aaae000}, - {0x3aab0000}, {0x3aab2000}, {0x3aab4000}, {0x3aab6000}, - {0x3aab8000}, {0x3aaba000}, {0x3aabc000}, {0x3aabe000}, - {0x3aac0000}, {0x3aac2000}, {0x3aac4000}, {0x3aac6000}, - {0x3aac8000}, {0x3aaca000}, {0x3aacc000}, {0x3aace000}, - {0x3aad0000}, {0x3aad2000}, {0x3aad4000}, {0x3aad6000}, - {0x3aad8000}, {0x3aada000}, {0x3aadc000}, {0x3aade000}, - {0x3aae0000}, {0x3aae2000}, {0x3aae4000}, {0x3aae6000}, - {0x3aae8000}, {0x3aaea000}, {0x3aaec000}, {0x3aaee000}, - {0x3aaf0000}, {0x3aaf2000}, {0x3aaf4000}, {0x3aaf6000}, - {0x3aaf8000}, {0x3aafa000}, {0x3aafc000}, {0x3aafe000}, - {0x3ab00000}, {0x3ab02000}, {0x3ab04000}, {0x3ab06000}, - {0x3ab08000}, {0x3ab0a000}, {0x3ab0c000}, {0x3ab0e000}, - {0x3ab10000}, {0x3ab12000}, {0x3ab14000}, {0x3ab16000}, - {0x3ab18000}, {0x3ab1a000}, {0x3ab1c000}, {0x3ab1e000}, - {0x3ab20000}, {0x3ab22000}, {0x3ab24000}, {0x3ab26000}, - {0x3ab28000}, {0x3ab2a000}, {0x3ab2c000}, {0x3ab2e000}, - {0x3ab30000}, {0x3ab32000}, {0x3ab34000}, {0x3ab36000}, - {0x3ab38000}, {0x3ab3a000}, {0x3ab3c000}, {0x3ab3e000}, - {0x3ab40000}, {0x3ab42000}, {0x3ab44000}, {0x3ab46000}, - {0x3ab48000}, {0x3ab4a000}, {0x3ab4c000}, {0x3ab4e000}, - {0x3ab50000}, {0x3ab52000}, {0x3ab54000}, {0x3ab56000}, - {0x3ab58000}, {0x3ab5a000}, {0x3ab5c000}, {0x3ab5e000}, - {0x3ab60000}, {0x3ab62000}, {0x3ab64000}, {0x3ab66000}, - {0x3ab68000}, {0x3ab6a000}, {0x3ab6c000}, {0x3ab6e000}, - {0x3ab70000}, {0x3ab72000}, {0x3ab74000}, {0x3ab76000}, - {0x3ab78000}, {0x3ab7a000}, {0x3ab7c000}, {0x3ab7e000}, - {0x3ab80000}, {0x3ab82000}, {0x3ab84000}, {0x3ab86000}, - {0x3ab88000}, {0x3ab8a000}, {0x3ab8c000}, {0x3ab8e000}, - {0x3ab90000}, {0x3ab92000}, {0x3ab94000}, {0x3ab96000}, - {0x3ab98000}, {0x3ab9a000}, {0x3ab9c000}, {0x3ab9e000}, - {0x3aba0000}, {0x3aba2000}, {0x3aba4000}, {0x3aba6000}, - {0x3aba8000}, {0x3abaa000}, {0x3abac000}, {0x3abae000}, - {0x3abb0000}, {0x3abb2000}, {0x3abb4000}, {0x3abb6000}, - {0x3abb8000}, {0x3abba000}, {0x3abbc000}, {0x3abbe000}, - {0x3abc0000}, {0x3abc2000}, {0x3abc4000}, {0x3abc6000}, - {0x3abc8000}, {0x3abca000}, {0x3abcc000}, {0x3abce000}, - {0x3abd0000}, {0x3abd2000}, {0x3abd4000}, {0x3abd6000}, - {0x3abd8000}, {0x3abda000}, {0x3abdc000}, {0x3abde000}, - {0x3abe0000}, {0x3abe2000}, {0x3abe4000}, {0x3abe6000}, - {0x3abe8000}, {0x3abea000}, {0x3abec000}, {0x3abee000}, - {0x3abf0000}, {0x3abf2000}, {0x3abf4000}, {0x3abf6000}, - {0x3abf8000}, {0x3abfa000}, {0x3abfc000}, {0x3abfe000}, - {0x3ac00000}, {0x3ac02000}, {0x3ac04000}, {0x3ac06000}, - {0x3ac08000}, {0x3ac0a000}, {0x3ac0c000}, {0x3ac0e000}, - {0x3ac10000}, {0x3ac12000}, {0x3ac14000}, {0x3ac16000}, - {0x3ac18000}, {0x3ac1a000}, {0x3ac1c000}, {0x3ac1e000}, - {0x3ac20000}, {0x3ac22000}, {0x3ac24000}, {0x3ac26000}, - {0x3ac28000}, {0x3ac2a000}, {0x3ac2c000}, {0x3ac2e000}, - {0x3ac30000}, {0x3ac32000}, {0x3ac34000}, {0x3ac36000}, - {0x3ac38000}, {0x3ac3a000}, {0x3ac3c000}, {0x3ac3e000}, - {0x3ac40000}, {0x3ac42000}, {0x3ac44000}, {0x3ac46000}, - {0x3ac48000}, {0x3ac4a000}, {0x3ac4c000}, {0x3ac4e000}, - {0x3ac50000}, {0x3ac52000}, {0x3ac54000}, {0x3ac56000}, - {0x3ac58000}, {0x3ac5a000}, {0x3ac5c000}, {0x3ac5e000}, - {0x3ac60000}, {0x3ac62000}, {0x3ac64000}, {0x3ac66000}, - {0x3ac68000}, {0x3ac6a000}, {0x3ac6c000}, {0x3ac6e000}, - {0x3ac70000}, {0x3ac72000}, {0x3ac74000}, {0x3ac76000}, - {0x3ac78000}, {0x3ac7a000}, {0x3ac7c000}, {0x3ac7e000}, - {0x3ac80000}, {0x3ac82000}, {0x3ac84000}, {0x3ac86000}, - {0x3ac88000}, {0x3ac8a000}, {0x3ac8c000}, {0x3ac8e000}, - {0x3ac90000}, {0x3ac92000}, {0x3ac94000}, {0x3ac96000}, - {0x3ac98000}, {0x3ac9a000}, {0x3ac9c000}, {0x3ac9e000}, - {0x3aca0000}, {0x3aca2000}, {0x3aca4000}, {0x3aca6000}, - {0x3aca8000}, {0x3acaa000}, {0x3acac000}, {0x3acae000}, - {0x3acb0000}, {0x3acb2000}, {0x3acb4000}, {0x3acb6000}, - {0x3acb8000}, {0x3acba000}, {0x3acbc000}, {0x3acbe000}, - {0x3acc0000}, {0x3acc2000}, {0x3acc4000}, {0x3acc6000}, - {0x3acc8000}, {0x3acca000}, {0x3accc000}, {0x3acce000}, - {0x3acd0000}, {0x3acd2000}, {0x3acd4000}, {0x3acd6000}, - {0x3acd8000}, {0x3acda000}, {0x3acdc000}, {0x3acde000}, - {0x3ace0000}, {0x3ace2000}, {0x3ace4000}, {0x3ace6000}, - {0x3ace8000}, {0x3acea000}, {0x3acec000}, {0x3acee000}, - {0x3acf0000}, {0x3acf2000}, {0x3acf4000}, {0x3acf6000}, - {0x3acf8000}, {0x3acfa000}, {0x3acfc000}, {0x3acfe000}, - {0x3ad00000}, {0x3ad02000}, {0x3ad04000}, {0x3ad06000}, - {0x3ad08000}, {0x3ad0a000}, {0x3ad0c000}, {0x3ad0e000}, - {0x3ad10000}, {0x3ad12000}, {0x3ad14000}, {0x3ad16000}, - {0x3ad18000}, {0x3ad1a000}, {0x3ad1c000}, {0x3ad1e000}, - {0x3ad20000}, {0x3ad22000}, {0x3ad24000}, {0x3ad26000}, - {0x3ad28000}, {0x3ad2a000}, {0x3ad2c000}, {0x3ad2e000}, - {0x3ad30000}, {0x3ad32000}, {0x3ad34000}, {0x3ad36000}, - {0x3ad38000}, {0x3ad3a000}, {0x3ad3c000}, {0x3ad3e000}, - {0x3ad40000}, {0x3ad42000}, {0x3ad44000}, {0x3ad46000}, - {0x3ad48000}, {0x3ad4a000}, {0x3ad4c000}, {0x3ad4e000}, - {0x3ad50000}, {0x3ad52000}, {0x3ad54000}, {0x3ad56000}, - {0x3ad58000}, {0x3ad5a000}, {0x3ad5c000}, {0x3ad5e000}, - {0x3ad60000}, {0x3ad62000}, {0x3ad64000}, {0x3ad66000}, - {0x3ad68000}, {0x3ad6a000}, {0x3ad6c000}, {0x3ad6e000}, - {0x3ad70000}, {0x3ad72000}, {0x3ad74000}, {0x3ad76000}, - {0x3ad78000}, {0x3ad7a000}, {0x3ad7c000}, {0x3ad7e000}, - {0x3ad80000}, {0x3ad82000}, {0x3ad84000}, {0x3ad86000}, - {0x3ad88000}, {0x3ad8a000}, {0x3ad8c000}, {0x3ad8e000}, - {0x3ad90000}, {0x3ad92000}, {0x3ad94000}, {0x3ad96000}, - {0x3ad98000}, {0x3ad9a000}, {0x3ad9c000}, {0x3ad9e000}, - {0x3ada0000}, {0x3ada2000}, {0x3ada4000}, {0x3ada6000}, - {0x3ada8000}, {0x3adaa000}, {0x3adac000}, {0x3adae000}, - {0x3adb0000}, {0x3adb2000}, {0x3adb4000}, {0x3adb6000}, - {0x3adb8000}, {0x3adba000}, {0x3adbc000}, {0x3adbe000}, - {0x3adc0000}, {0x3adc2000}, {0x3adc4000}, {0x3adc6000}, - {0x3adc8000}, {0x3adca000}, {0x3adcc000}, {0x3adce000}, - {0x3add0000}, {0x3add2000}, {0x3add4000}, {0x3add6000}, - {0x3add8000}, {0x3adda000}, {0x3addc000}, {0x3adde000}, - {0x3ade0000}, {0x3ade2000}, {0x3ade4000}, {0x3ade6000}, - {0x3ade8000}, {0x3adea000}, {0x3adec000}, {0x3adee000}, - {0x3adf0000}, {0x3adf2000}, {0x3adf4000}, {0x3adf6000}, - {0x3adf8000}, {0x3adfa000}, {0x3adfc000}, {0x3adfe000}, - {0x3ae00000}, {0x3ae02000}, {0x3ae04000}, {0x3ae06000}, - {0x3ae08000}, {0x3ae0a000}, {0x3ae0c000}, {0x3ae0e000}, - {0x3ae10000}, {0x3ae12000}, {0x3ae14000}, {0x3ae16000}, - {0x3ae18000}, {0x3ae1a000}, {0x3ae1c000}, {0x3ae1e000}, - {0x3ae20000}, {0x3ae22000}, {0x3ae24000}, {0x3ae26000}, - {0x3ae28000}, {0x3ae2a000}, {0x3ae2c000}, {0x3ae2e000}, - {0x3ae30000}, {0x3ae32000}, {0x3ae34000}, {0x3ae36000}, - {0x3ae38000}, {0x3ae3a000}, {0x3ae3c000}, {0x3ae3e000}, - {0x3ae40000}, {0x3ae42000}, {0x3ae44000}, {0x3ae46000}, - {0x3ae48000}, {0x3ae4a000}, {0x3ae4c000}, {0x3ae4e000}, - {0x3ae50000}, {0x3ae52000}, {0x3ae54000}, {0x3ae56000}, - {0x3ae58000}, {0x3ae5a000}, {0x3ae5c000}, {0x3ae5e000}, - {0x3ae60000}, {0x3ae62000}, {0x3ae64000}, {0x3ae66000}, - {0x3ae68000}, {0x3ae6a000}, {0x3ae6c000}, {0x3ae6e000}, - {0x3ae70000}, {0x3ae72000}, {0x3ae74000}, {0x3ae76000}, - {0x3ae78000}, {0x3ae7a000}, {0x3ae7c000}, {0x3ae7e000}, - {0x3ae80000}, {0x3ae82000}, {0x3ae84000}, {0x3ae86000}, - {0x3ae88000}, {0x3ae8a000}, {0x3ae8c000}, {0x3ae8e000}, - {0x3ae90000}, {0x3ae92000}, {0x3ae94000}, {0x3ae96000}, - {0x3ae98000}, {0x3ae9a000}, {0x3ae9c000}, {0x3ae9e000}, - {0x3aea0000}, {0x3aea2000}, {0x3aea4000}, {0x3aea6000}, - {0x3aea8000}, {0x3aeaa000}, {0x3aeac000}, {0x3aeae000}, - {0x3aeb0000}, {0x3aeb2000}, {0x3aeb4000}, {0x3aeb6000}, - {0x3aeb8000}, {0x3aeba000}, {0x3aebc000}, {0x3aebe000}, - {0x3aec0000}, {0x3aec2000}, {0x3aec4000}, {0x3aec6000}, - {0x3aec8000}, {0x3aeca000}, {0x3aecc000}, {0x3aece000}, - {0x3aed0000}, {0x3aed2000}, {0x3aed4000}, {0x3aed6000}, - {0x3aed8000}, {0x3aeda000}, {0x3aedc000}, {0x3aede000}, - {0x3aee0000}, {0x3aee2000}, {0x3aee4000}, {0x3aee6000}, - {0x3aee8000}, {0x3aeea000}, {0x3aeec000}, {0x3aeee000}, - {0x3aef0000}, {0x3aef2000}, {0x3aef4000}, {0x3aef6000}, - {0x3aef8000}, {0x3aefa000}, {0x3aefc000}, {0x3aefe000}, - {0x3af00000}, {0x3af02000}, {0x3af04000}, {0x3af06000}, - {0x3af08000}, {0x3af0a000}, {0x3af0c000}, {0x3af0e000}, - {0x3af10000}, {0x3af12000}, {0x3af14000}, {0x3af16000}, - {0x3af18000}, {0x3af1a000}, {0x3af1c000}, {0x3af1e000}, - {0x3af20000}, {0x3af22000}, {0x3af24000}, {0x3af26000}, - {0x3af28000}, {0x3af2a000}, {0x3af2c000}, {0x3af2e000}, - {0x3af30000}, {0x3af32000}, {0x3af34000}, {0x3af36000}, - {0x3af38000}, {0x3af3a000}, {0x3af3c000}, {0x3af3e000}, - {0x3af40000}, {0x3af42000}, {0x3af44000}, {0x3af46000}, - {0x3af48000}, {0x3af4a000}, {0x3af4c000}, {0x3af4e000}, - {0x3af50000}, {0x3af52000}, {0x3af54000}, {0x3af56000}, - {0x3af58000}, {0x3af5a000}, {0x3af5c000}, {0x3af5e000}, - {0x3af60000}, {0x3af62000}, {0x3af64000}, {0x3af66000}, - {0x3af68000}, {0x3af6a000}, {0x3af6c000}, {0x3af6e000}, - {0x3af70000}, {0x3af72000}, {0x3af74000}, {0x3af76000}, - {0x3af78000}, {0x3af7a000}, {0x3af7c000}, {0x3af7e000}, - {0x3af80000}, {0x3af82000}, {0x3af84000}, {0x3af86000}, - {0x3af88000}, {0x3af8a000}, {0x3af8c000}, {0x3af8e000}, - {0x3af90000}, {0x3af92000}, {0x3af94000}, {0x3af96000}, - {0x3af98000}, {0x3af9a000}, {0x3af9c000}, {0x3af9e000}, - {0x3afa0000}, {0x3afa2000}, {0x3afa4000}, {0x3afa6000}, - {0x3afa8000}, {0x3afaa000}, {0x3afac000}, {0x3afae000}, - {0x3afb0000}, {0x3afb2000}, {0x3afb4000}, {0x3afb6000}, - {0x3afb8000}, {0x3afba000}, {0x3afbc000}, {0x3afbe000}, - {0x3afc0000}, {0x3afc2000}, {0x3afc4000}, {0x3afc6000}, - {0x3afc8000}, {0x3afca000}, {0x3afcc000}, {0x3afce000}, - {0x3afd0000}, {0x3afd2000}, {0x3afd4000}, {0x3afd6000}, - {0x3afd8000}, {0x3afda000}, {0x3afdc000}, {0x3afde000}, - {0x3afe0000}, {0x3afe2000}, {0x3afe4000}, {0x3afe6000}, - {0x3afe8000}, {0x3afea000}, {0x3afec000}, {0x3afee000}, - {0x3aff0000}, {0x3aff2000}, {0x3aff4000}, {0x3aff6000}, - {0x3aff8000}, {0x3affa000}, {0x3affc000}, {0x3affe000}, - {0x3b000000}, {0x3b002000}, {0x3b004000}, {0x3b006000}, - {0x3b008000}, {0x3b00a000}, {0x3b00c000}, {0x3b00e000}, - {0x3b010000}, {0x3b012000}, {0x3b014000}, {0x3b016000}, - {0x3b018000}, {0x3b01a000}, {0x3b01c000}, {0x3b01e000}, - {0x3b020000}, {0x3b022000}, {0x3b024000}, {0x3b026000}, - {0x3b028000}, {0x3b02a000}, {0x3b02c000}, {0x3b02e000}, - {0x3b030000}, {0x3b032000}, {0x3b034000}, {0x3b036000}, - {0x3b038000}, {0x3b03a000}, {0x3b03c000}, {0x3b03e000}, - {0x3b040000}, {0x3b042000}, {0x3b044000}, {0x3b046000}, - {0x3b048000}, {0x3b04a000}, {0x3b04c000}, {0x3b04e000}, - {0x3b050000}, {0x3b052000}, {0x3b054000}, {0x3b056000}, - {0x3b058000}, {0x3b05a000}, {0x3b05c000}, {0x3b05e000}, - {0x3b060000}, {0x3b062000}, {0x3b064000}, {0x3b066000}, - {0x3b068000}, {0x3b06a000}, {0x3b06c000}, {0x3b06e000}, - {0x3b070000}, {0x3b072000}, {0x3b074000}, {0x3b076000}, - {0x3b078000}, {0x3b07a000}, {0x3b07c000}, {0x3b07e000}, - {0x3b080000}, {0x3b082000}, {0x3b084000}, {0x3b086000}, - {0x3b088000}, {0x3b08a000}, {0x3b08c000}, {0x3b08e000}, - {0x3b090000}, {0x3b092000}, {0x3b094000}, {0x3b096000}, - {0x3b098000}, {0x3b09a000}, {0x3b09c000}, {0x3b09e000}, - {0x3b0a0000}, {0x3b0a2000}, {0x3b0a4000}, {0x3b0a6000}, - {0x3b0a8000}, {0x3b0aa000}, {0x3b0ac000}, {0x3b0ae000}, - {0x3b0b0000}, {0x3b0b2000}, {0x3b0b4000}, {0x3b0b6000}, - {0x3b0b8000}, {0x3b0ba000}, {0x3b0bc000}, {0x3b0be000}, - {0x3b0c0000}, {0x3b0c2000}, {0x3b0c4000}, {0x3b0c6000}, - {0x3b0c8000}, {0x3b0ca000}, {0x3b0cc000}, {0x3b0ce000}, - {0x3b0d0000}, {0x3b0d2000}, {0x3b0d4000}, {0x3b0d6000}, - {0x3b0d8000}, {0x3b0da000}, {0x3b0dc000}, {0x3b0de000}, - {0x3b0e0000}, {0x3b0e2000}, {0x3b0e4000}, {0x3b0e6000}, - {0x3b0e8000}, {0x3b0ea000}, {0x3b0ec000}, {0x3b0ee000}, - {0x3b0f0000}, {0x3b0f2000}, {0x3b0f4000}, {0x3b0f6000}, - {0x3b0f8000}, {0x3b0fa000}, {0x3b0fc000}, {0x3b0fe000}, - {0x3b100000}, {0x3b102000}, {0x3b104000}, {0x3b106000}, - {0x3b108000}, {0x3b10a000}, {0x3b10c000}, {0x3b10e000}, - {0x3b110000}, {0x3b112000}, {0x3b114000}, {0x3b116000}, - {0x3b118000}, {0x3b11a000}, {0x3b11c000}, {0x3b11e000}, - {0x3b120000}, {0x3b122000}, {0x3b124000}, {0x3b126000}, - {0x3b128000}, {0x3b12a000}, {0x3b12c000}, {0x3b12e000}, - {0x3b130000}, {0x3b132000}, {0x3b134000}, {0x3b136000}, - {0x3b138000}, {0x3b13a000}, {0x3b13c000}, {0x3b13e000}, - {0x3b140000}, {0x3b142000}, {0x3b144000}, {0x3b146000}, - {0x3b148000}, {0x3b14a000}, {0x3b14c000}, {0x3b14e000}, - {0x3b150000}, {0x3b152000}, {0x3b154000}, {0x3b156000}, - {0x3b158000}, {0x3b15a000}, {0x3b15c000}, {0x3b15e000}, - {0x3b160000}, {0x3b162000}, {0x3b164000}, {0x3b166000}, - {0x3b168000}, {0x3b16a000}, {0x3b16c000}, {0x3b16e000}, - {0x3b170000}, {0x3b172000}, {0x3b174000}, {0x3b176000}, - {0x3b178000}, {0x3b17a000}, {0x3b17c000}, {0x3b17e000}, - {0x3b180000}, {0x3b182000}, {0x3b184000}, {0x3b186000}, - {0x3b188000}, {0x3b18a000}, {0x3b18c000}, {0x3b18e000}, - {0x3b190000}, {0x3b192000}, {0x3b194000}, {0x3b196000}, - {0x3b198000}, {0x3b19a000}, {0x3b19c000}, {0x3b19e000}, - {0x3b1a0000}, {0x3b1a2000}, {0x3b1a4000}, {0x3b1a6000}, - {0x3b1a8000}, {0x3b1aa000}, {0x3b1ac000}, {0x3b1ae000}, - {0x3b1b0000}, {0x3b1b2000}, {0x3b1b4000}, {0x3b1b6000}, - {0x3b1b8000}, {0x3b1ba000}, {0x3b1bc000}, {0x3b1be000}, - {0x3b1c0000}, {0x3b1c2000}, {0x3b1c4000}, {0x3b1c6000}, - {0x3b1c8000}, {0x3b1ca000}, {0x3b1cc000}, {0x3b1ce000}, - {0x3b1d0000}, {0x3b1d2000}, {0x3b1d4000}, {0x3b1d6000}, - {0x3b1d8000}, {0x3b1da000}, {0x3b1dc000}, {0x3b1de000}, - {0x3b1e0000}, {0x3b1e2000}, {0x3b1e4000}, {0x3b1e6000}, - {0x3b1e8000}, {0x3b1ea000}, {0x3b1ec000}, {0x3b1ee000}, - {0x3b1f0000}, {0x3b1f2000}, {0x3b1f4000}, {0x3b1f6000}, - {0x3b1f8000}, {0x3b1fa000}, {0x3b1fc000}, {0x3b1fe000}, - {0x3b200000}, {0x3b202000}, {0x3b204000}, {0x3b206000}, - {0x3b208000}, {0x3b20a000}, {0x3b20c000}, {0x3b20e000}, - {0x3b210000}, {0x3b212000}, {0x3b214000}, {0x3b216000}, - {0x3b218000}, {0x3b21a000}, {0x3b21c000}, {0x3b21e000}, - {0x3b220000}, {0x3b222000}, {0x3b224000}, {0x3b226000}, - {0x3b228000}, {0x3b22a000}, {0x3b22c000}, {0x3b22e000}, - {0x3b230000}, {0x3b232000}, {0x3b234000}, {0x3b236000}, - {0x3b238000}, {0x3b23a000}, {0x3b23c000}, {0x3b23e000}, - {0x3b240000}, {0x3b242000}, {0x3b244000}, {0x3b246000}, - {0x3b248000}, {0x3b24a000}, {0x3b24c000}, {0x3b24e000}, - {0x3b250000}, {0x3b252000}, {0x3b254000}, {0x3b256000}, - {0x3b258000}, {0x3b25a000}, {0x3b25c000}, {0x3b25e000}, - {0x3b260000}, {0x3b262000}, {0x3b264000}, {0x3b266000}, - {0x3b268000}, {0x3b26a000}, {0x3b26c000}, {0x3b26e000}, - {0x3b270000}, {0x3b272000}, {0x3b274000}, {0x3b276000}, - {0x3b278000}, {0x3b27a000}, {0x3b27c000}, {0x3b27e000}, - {0x3b280000}, {0x3b282000}, {0x3b284000}, {0x3b286000}, - {0x3b288000}, {0x3b28a000}, {0x3b28c000}, {0x3b28e000}, - {0x3b290000}, {0x3b292000}, {0x3b294000}, {0x3b296000}, - {0x3b298000}, {0x3b29a000}, {0x3b29c000}, {0x3b29e000}, - {0x3b2a0000}, {0x3b2a2000}, {0x3b2a4000}, {0x3b2a6000}, - {0x3b2a8000}, {0x3b2aa000}, {0x3b2ac000}, {0x3b2ae000}, - {0x3b2b0000}, {0x3b2b2000}, {0x3b2b4000}, {0x3b2b6000}, - {0x3b2b8000}, {0x3b2ba000}, {0x3b2bc000}, {0x3b2be000}, - {0x3b2c0000}, {0x3b2c2000}, {0x3b2c4000}, {0x3b2c6000}, - {0x3b2c8000}, {0x3b2ca000}, {0x3b2cc000}, {0x3b2ce000}, - {0x3b2d0000}, {0x3b2d2000}, {0x3b2d4000}, {0x3b2d6000}, - {0x3b2d8000}, {0x3b2da000}, {0x3b2dc000}, {0x3b2de000}, - {0x3b2e0000}, {0x3b2e2000}, {0x3b2e4000}, {0x3b2e6000}, - {0x3b2e8000}, {0x3b2ea000}, {0x3b2ec000}, {0x3b2ee000}, - {0x3b2f0000}, {0x3b2f2000}, {0x3b2f4000}, {0x3b2f6000}, - {0x3b2f8000}, {0x3b2fa000}, {0x3b2fc000}, {0x3b2fe000}, - {0x3b300000}, {0x3b302000}, {0x3b304000}, {0x3b306000}, - {0x3b308000}, {0x3b30a000}, {0x3b30c000}, {0x3b30e000}, - {0x3b310000}, {0x3b312000}, {0x3b314000}, {0x3b316000}, - {0x3b318000}, {0x3b31a000}, {0x3b31c000}, {0x3b31e000}, - {0x3b320000}, {0x3b322000}, {0x3b324000}, {0x3b326000}, - {0x3b328000}, {0x3b32a000}, {0x3b32c000}, {0x3b32e000}, - {0x3b330000}, {0x3b332000}, {0x3b334000}, {0x3b336000}, - {0x3b338000}, {0x3b33a000}, {0x3b33c000}, {0x3b33e000}, - {0x3b340000}, {0x3b342000}, {0x3b344000}, {0x3b346000}, - {0x3b348000}, {0x3b34a000}, {0x3b34c000}, {0x3b34e000}, - {0x3b350000}, {0x3b352000}, {0x3b354000}, {0x3b356000}, - {0x3b358000}, {0x3b35a000}, {0x3b35c000}, {0x3b35e000}, - {0x3b360000}, {0x3b362000}, {0x3b364000}, {0x3b366000}, - {0x3b368000}, {0x3b36a000}, {0x3b36c000}, {0x3b36e000}, - {0x3b370000}, {0x3b372000}, {0x3b374000}, {0x3b376000}, - {0x3b378000}, {0x3b37a000}, {0x3b37c000}, {0x3b37e000}, - {0x3b380000}, {0x3b382000}, {0x3b384000}, {0x3b386000}, - {0x3b388000}, {0x3b38a000}, {0x3b38c000}, {0x3b38e000}, - {0x3b390000}, {0x3b392000}, {0x3b394000}, {0x3b396000}, - {0x3b398000}, {0x3b39a000}, {0x3b39c000}, {0x3b39e000}, - {0x3b3a0000}, {0x3b3a2000}, {0x3b3a4000}, {0x3b3a6000}, - {0x3b3a8000}, {0x3b3aa000}, {0x3b3ac000}, {0x3b3ae000}, - {0x3b3b0000}, {0x3b3b2000}, {0x3b3b4000}, {0x3b3b6000}, - {0x3b3b8000}, {0x3b3ba000}, {0x3b3bc000}, {0x3b3be000}, - {0x3b3c0000}, {0x3b3c2000}, {0x3b3c4000}, {0x3b3c6000}, - {0x3b3c8000}, {0x3b3ca000}, {0x3b3cc000}, {0x3b3ce000}, - {0x3b3d0000}, {0x3b3d2000}, {0x3b3d4000}, {0x3b3d6000}, - {0x3b3d8000}, {0x3b3da000}, {0x3b3dc000}, {0x3b3de000}, - {0x3b3e0000}, {0x3b3e2000}, {0x3b3e4000}, {0x3b3e6000}, - {0x3b3e8000}, {0x3b3ea000}, {0x3b3ec000}, {0x3b3ee000}, - {0x3b3f0000}, {0x3b3f2000}, {0x3b3f4000}, {0x3b3f6000}, - {0x3b3f8000}, {0x3b3fa000}, {0x3b3fc000}, {0x3b3fe000}, - {0x3b400000}, {0x3b402000}, {0x3b404000}, {0x3b406000}, - {0x3b408000}, {0x3b40a000}, {0x3b40c000}, {0x3b40e000}, - {0x3b410000}, {0x3b412000}, {0x3b414000}, {0x3b416000}, - {0x3b418000}, {0x3b41a000}, {0x3b41c000}, {0x3b41e000}, - {0x3b420000}, {0x3b422000}, {0x3b424000}, {0x3b426000}, - {0x3b428000}, {0x3b42a000}, {0x3b42c000}, {0x3b42e000}, - {0x3b430000}, {0x3b432000}, {0x3b434000}, {0x3b436000}, - {0x3b438000}, {0x3b43a000}, {0x3b43c000}, {0x3b43e000}, - {0x3b440000}, {0x3b442000}, {0x3b444000}, {0x3b446000}, - {0x3b448000}, {0x3b44a000}, {0x3b44c000}, {0x3b44e000}, - {0x3b450000}, {0x3b452000}, {0x3b454000}, {0x3b456000}, - {0x3b458000}, {0x3b45a000}, {0x3b45c000}, {0x3b45e000}, - {0x3b460000}, {0x3b462000}, {0x3b464000}, {0x3b466000}, - {0x3b468000}, {0x3b46a000}, {0x3b46c000}, {0x3b46e000}, - {0x3b470000}, {0x3b472000}, {0x3b474000}, {0x3b476000}, - {0x3b478000}, {0x3b47a000}, {0x3b47c000}, {0x3b47e000}, - {0x3b480000}, {0x3b482000}, {0x3b484000}, {0x3b486000}, - {0x3b488000}, {0x3b48a000}, {0x3b48c000}, {0x3b48e000}, - {0x3b490000}, {0x3b492000}, {0x3b494000}, {0x3b496000}, - {0x3b498000}, {0x3b49a000}, {0x3b49c000}, {0x3b49e000}, - {0x3b4a0000}, {0x3b4a2000}, {0x3b4a4000}, {0x3b4a6000}, - {0x3b4a8000}, {0x3b4aa000}, {0x3b4ac000}, {0x3b4ae000}, - {0x3b4b0000}, {0x3b4b2000}, {0x3b4b4000}, {0x3b4b6000}, - {0x3b4b8000}, {0x3b4ba000}, {0x3b4bc000}, {0x3b4be000}, - {0x3b4c0000}, {0x3b4c2000}, {0x3b4c4000}, {0x3b4c6000}, - {0x3b4c8000}, {0x3b4ca000}, {0x3b4cc000}, {0x3b4ce000}, - {0x3b4d0000}, {0x3b4d2000}, {0x3b4d4000}, {0x3b4d6000}, - {0x3b4d8000}, {0x3b4da000}, {0x3b4dc000}, {0x3b4de000}, - {0x3b4e0000}, {0x3b4e2000}, {0x3b4e4000}, {0x3b4e6000}, - {0x3b4e8000}, {0x3b4ea000}, {0x3b4ec000}, {0x3b4ee000}, - {0x3b4f0000}, {0x3b4f2000}, {0x3b4f4000}, {0x3b4f6000}, - {0x3b4f8000}, {0x3b4fa000}, {0x3b4fc000}, {0x3b4fe000}, - {0x3b500000}, {0x3b502000}, {0x3b504000}, {0x3b506000}, - {0x3b508000}, {0x3b50a000}, {0x3b50c000}, {0x3b50e000}, - {0x3b510000}, {0x3b512000}, {0x3b514000}, {0x3b516000}, - {0x3b518000}, {0x3b51a000}, {0x3b51c000}, {0x3b51e000}, - {0x3b520000}, {0x3b522000}, {0x3b524000}, {0x3b526000}, - {0x3b528000}, {0x3b52a000}, {0x3b52c000}, {0x3b52e000}, - {0x3b530000}, {0x3b532000}, {0x3b534000}, {0x3b536000}, - {0x3b538000}, {0x3b53a000}, {0x3b53c000}, {0x3b53e000}, - {0x3b540000}, {0x3b542000}, {0x3b544000}, {0x3b546000}, - {0x3b548000}, {0x3b54a000}, {0x3b54c000}, {0x3b54e000}, - {0x3b550000}, {0x3b552000}, {0x3b554000}, {0x3b556000}, - {0x3b558000}, {0x3b55a000}, {0x3b55c000}, {0x3b55e000}, - {0x3b560000}, {0x3b562000}, {0x3b564000}, {0x3b566000}, - {0x3b568000}, {0x3b56a000}, {0x3b56c000}, {0x3b56e000}, - {0x3b570000}, {0x3b572000}, {0x3b574000}, {0x3b576000}, - {0x3b578000}, {0x3b57a000}, {0x3b57c000}, {0x3b57e000}, - {0x3b580000}, {0x3b582000}, {0x3b584000}, {0x3b586000}, - {0x3b588000}, {0x3b58a000}, {0x3b58c000}, {0x3b58e000}, - {0x3b590000}, {0x3b592000}, {0x3b594000}, {0x3b596000}, - {0x3b598000}, {0x3b59a000}, {0x3b59c000}, {0x3b59e000}, - {0x3b5a0000}, {0x3b5a2000}, {0x3b5a4000}, {0x3b5a6000}, - {0x3b5a8000}, {0x3b5aa000}, {0x3b5ac000}, {0x3b5ae000}, - {0x3b5b0000}, {0x3b5b2000}, {0x3b5b4000}, {0x3b5b6000}, - {0x3b5b8000}, {0x3b5ba000}, {0x3b5bc000}, {0x3b5be000}, - {0x3b5c0000}, {0x3b5c2000}, {0x3b5c4000}, {0x3b5c6000}, - {0x3b5c8000}, {0x3b5ca000}, {0x3b5cc000}, {0x3b5ce000}, - {0x3b5d0000}, {0x3b5d2000}, {0x3b5d4000}, {0x3b5d6000}, - {0x3b5d8000}, {0x3b5da000}, {0x3b5dc000}, {0x3b5de000}, - {0x3b5e0000}, {0x3b5e2000}, {0x3b5e4000}, {0x3b5e6000}, - {0x3b5e8000}, {0x3b5ea000}, {0x3b5ec000}, {0x3b5ee000}, - {0x3b5f0000}, {0x3b5f2000}, {0x3b5f4000}, {0x3b5f6000}, - {0x3b5f8000}, {0x3b5fa000}, {0x3b5fc000}, {0x3b5fe000}, - {0x3b600000}, {0x3b602000}, {0x3b604000}, {0x3b606000}, - {0x3b608000}, {0x3b60a000}, {0x3b60c000}, {0x3b60e000}, - {0x3b610000}, {0x3b612000}, {0x3b614000}, {0x3b616000}, - {0x3b618000}, {0x3b61a000}, {0x3b61c000}, {0x3b61e000}, - {0x3b620000}, {0x3b622000}, {0x3b624000}, {0x3b626000}, - {0x3b628000}, {0x3b62a000}, {0x3b62c000}, {0x3b62e000}, - {0x3b630000}, {0x3b632000}, {0x3b634000}, {0x3b636000}, - {0x3b638000}, {0x3b63a000}, {0x3b63c000}, {0x3b63e000}, - {0x3b640000}, {0x3b642000}, {0x3b644000}, {0x3b646000}, - {0x3b648000}, {0x3b64a000}, {0x3b64c000}, {0x3b64e000}, - {0x3b650000}, {0x3b652000}, {0x3b654000}, {0x3b656000}, - {0x3b658000}, {0x3b65a000}, {0x3b65c000}, {0x3b65e000}, - {0x3b660000}, {0x3b662000}, {0x3b664000}, {0x3b666000}, - {0x3b668000}, {0x3b66a000}, {0x3b66c000}, {0x3b66e000}, - {0x3b670000}, {0x3b672000}, {0x3b674000}, {0x3b676000}, - {0x3b678000}, {0x3b67a000}, {0x3b67c000}, {0x3b67e000}, - {0x3b680000}, {0x3b682000}, {0x3b684000}, {0x3b686000}, - {0x3b688000}, {0x3b68a000}, {0x3b68c000}, {0x3b68e000}, - {0x3b690000}, {0x3b692000}, {0x3b694000}, {0x3b696000}, - {0x3b698000}, {0x3b69a000}, {0x3b69c000}, {0x3b69e000}, - {0x3b6a0000}, {0x3b6a2000}, {0x3b6a4000}, {0x3b6a6000}, - {0x3b6a8000}, {0x3b6aa000}, {0x3b6ac000}, {0x3b6ae000}, - {0x3b6b0000}, {0x3b6b2000}, {0x3b6b4000}, {0x3b6b6000}, - {0x3b6b8000}, {0x3b6ba000}, {0x3b6bc000}, {0x3b6be000}, - {0x3b6c0000}, {0x3b6c2000}, {0x3b6c4000}, {0x3b6c6000}, - {0x3b6c8000}, {0x3b6ca000}, {0x3b6cc000}, {0x3b6ce000}, - {0x3b6d0000}, {0x3b6d2000}, {0x3b6d4000}, {0x3b6d6000}, - {0x3b6d8000}, {0x3b6da000}, {0x3b6dc000}, {0x3b6de000}, - {0x3b6e0000}, {0x3b6e2000}, {0x3b6e4000}, {0x3b6e6000}, - {0x3b6e8000}, {0x3b6ea000}, {0x3b6ec000}, {0x3b6ee000}, - {0x3b6f0000}, {0x3b6f2000}, {0x3b6f4000}, {0x3b6f6000}, - {0x3b6f8000}, {0x3b6fa000}, {0x3b6fc000}, {0x3b6fe000}, - {0x3b700000}, {0x3b702000}, {0x3b704000}, {0x3b706000}, - {0x3b708000}, {0x3b70a000}, {0x3b70c000}, {0x3b70e000}, - {0x3b710000}, {0x3b712000}, {0x3b714000}, {0x3b716000}, - {0x3b718000}, {0x3b71a000}, {0x3b71c000}, {0x3b71e000}, - {0x3b720000}, {0x3b722000}, {0x3b724000}, {0x3b726000}, - {0x3b728000}, {0x3b72a000}, {0x3b72c000}, {0x3b72e000}, - {0x3b730000}, {0x3b732000}, {0x3b734000}, {0x3b736000}, - {0x3b738000}, {0x3b73a000}, {0x3b73c000}, {0x3b73e000}, - {0x3b740000}, {0x3b742000}, {0x3b744000}, {0x3b746000}, - {0x3b748000}, {0x3b74a000}, {0x3b74c000}, {0x3b74e000}, - {0x3b750000}, {0x3b752000}, {0x3b754000}, {0x3b756000}, - {0x3b758000}, {0x3b75a000}, {0x3b75c000}, {0x3b75e000}, - {0x3b760000}, {0x3b762000}, {0x3b764000}, {0x3b766000}, - {0x3b768000}, {0x3b76a000}, {0x3b76c000}, {0x3b76e000}, - {0x3b770000}, {0x3b772000}, {0x3b774000}, {0x3b776000}, - {0x3b778000}, {0x3b77a000}, {0x3b77c000}, {0x3b77e000}, - {0x3b780000}, {0x3b782000}, {0x3b784000}, {0x3b786000}, - {0x3b788000}, {0x3b78a000}, {0x3b78c000}, {0x3b78e000}, - {0x3b790000}, {0x3b792000}, {0x3b794000}, {0x3b796000}, - {0x3b798000}, {0x3b79a000}, {0x3b79c000}, {0x3b79e000}, - {0x3b7a0000}, {0x3b7a2000}, {0x3b7a4000}, {0x3b7a6000}, - {0x3b7a8000}, {0x3b7aa000}, {0x3b7ac000}, {0x3b7ae000}, - {0x3b7b0000}, {0x3b7b2000}, {0x3b7b4000}, {0x3b7b6000}, - {0x3b7b8000}, {0x3b7ba000}, {0x3b7bc000}, {0x3b7be000}, - {0x3b7c0000}, {0x3b7c2000}, {0x3b7c4000}, {0x3b7c6000}, - {0x3b7c8000}, {0x3b7ca000}, {0x3b7cc000}, {0x3b7ce000}, - {0x3b7d0000}, {0x3b7d2000}, {0x3b7d4000}, {0x3b7d6000}, - {0x3b7d8000}, {0x3b7da000}, {0x3b7dc000}, {0x3b7de000}, - {0x3b7e0000}, {0x3b7e2000}, {0x3b7e4000}, {0x3b7e6000}, - {0x3b7e8000}, {0x3b7ea000}, {0x3b7ec000}, {0x3b7ee000}, - {0x3b7f0000}, {0x3b7f2000}, {0x3b7f4000}, {0x3b7f6000}, - {0x3b7f8000}, {0x3b7fa000}, {0x3b7fc000}, {0x3b7fe000}, - {0x3b800000}, {0x3b802000}, {0x3b804000}, {0x3b806000}, - {0x3b808000}, {0x3b80a000}, {0x3b80c000}, {0x3b80e000}, - {0x3b810000}, {0x3b812000}, {0x3b814000}, {0x3b816000}, - {0x3b818000}, {0x3b81a000}, {0x3b81c000}, {0x3b81e000}, - {0x3b820000}, {0x3b822000}, {0x3b824000}, {0x3b826000}, - {0x3b828000}, {0x3b82a000}, {0x3b82c000}, {0x3b82e000}, - {0x3b830000}, {0x3b832000}, {0x3b834000}, {0x3b836000}, - {0x3b838000}, {0x3b83a000}, {0x3b83c000}, {0x3b83e000}, - {0x3b840000}, {0x3b842000}, {0x3b844000}, {0x3b846000}, - {0x3b848000}, {0x3b84a000}, {0x3b84c000}, {0x3b84e000}, - {0x3b850000}, {0x3b852000}, {0x3b854000}, {0x3b856000}, - {0x3b858000}, {0x3b85a000}, {0x3b85c000}, {0x3b85e000}, - {0x3b860000}, {0x3b862000}, {0x3b864000}, {0x3b866000}, - {0x3b868000}, {0x3b86a000}, {0x3b86c000}, {0x3b86e000}, - {0x3b870000}, {0x3b872000}, {0x3b874000}, {0x3b876000}, - {0x3b878000}, {0x3b87a000}, {0x3b87c000}, {0x3b87e000}, - {0x3b880000}, {0x3b882000}, {0x3b884000}, {0x3b886000}, - {0x3b888000}, {0x3b88a000}, {0x3b88c000}, {0x3b88e000}, - {0x3b890000}, {0x3b892000}, {0x3b894000}, {0x3b896000}, - {0x3b898000}, {0x3b89a000}, {0x3b89c000}, {0x3b89e000}, - {0x3b8a0000}, {0x3b8a2000}, {0x3b8a4000}, {0x3b8a6000}, - {0x3b8a8000}, {0x3b8aa000}, {0x3b8ac000}, {0x3b8ae000}, - {0x3b8b0000}, {0x3b8b2000}, {0x3b8b4000}, {0x3b8b6000}, - {0x3b8b8000}, {0x3b8ba000}, {0x3b8bc000}, {0x3b8be000}, - {0x3b8c0000}, {0x3b8c2000}, {0x3b8c4000}, {0x3b8c6000}, - {0x3b8c8000}, {0x3b8ca000}, {0x3b8cc000}, {0x3b8ce000}, - {0x3b8d0000}, {0x3b8d2000}, {0x3b8d4000}, {0x3b8d6000}, - {0x3b8d8000}, {0x3b8da000}, {0x3b8dc000}, {0x3b8de000}, - {0x3b8e0000}, {0x3b8e2000}, {0x3b8e4000}, {0x3b8e6000}, - {0x3b8e8000}, {0x3b8ea000}, {0x3b8ec000}, {0x3b8ee000}, - {0x3b8f0000}, {0x3b8f2000}, {0x3b8f4000}, {0x3b8f6000}, - {0x3b8f8000}, {0x3b8fa000}, {0x3b8fc000}, {0x3b8fe000}, - {0x3b900000}, {0x3b902000}, {0x3b904000}, {0x3b906000}, - {0x3b908000}, {0x3b90a000}, {0x3b90c000}, {0x3b90e000}, - {0x3b910000}, {0x3b912000}, {0x3b914000}, {0x3b916000}, - {0x3b918000}, {0x3b91a000}, {0x3b91c000}, {0x3b91e000}, - {0x3b920000}, {0x3b922000}, {0x3b924000}, {0x3b926000}, - {0x3b928000}, {0x3b92a000}, {0x3b92c000}, {0x3b92e000}, - {0x3b930000}, {0x3b932000}, {0x3b934000}, {0x3b936000}, - {0x3b938000}, {0x3b93a000}, {0x3b93c000}, {0x3b93e000}, - {0x3b940000}, {0x3b942000}, {0x3b944000}, {0x3b946000}, - {0x3b948000}, {0x3b94a000}, {0x3b94c000}, {0x3b94e000}, - {0x3b950000}, {0x3b952000}, {0x3b954000}, {0x3b956000}, - {0x3b958000}, {0x3b95a000}, {0x3b95c000}, {0x3b95e000}, - {0x3b960000}, {0x3b962000}, {0x3b964000}, {0x3b966000}, - {0x3b968000}, {0x3b96a000}, {0x3b96c000}, {0x3b96e000}, - {0x3b970000}, {0x3b972000}, {0x3b974000}, {0x3b976000}, - {0x3b978000}, {0x3b97a000}, {0x3b97c000}, {0x3b97e000}, - {0x3b980000}, {0x3b982000}, {0x3b984000}, {0x3b986000}, - {0x3b988000}, {0x3b98a000}, {0x3b98c000}, {0x3b98e000}, - {0x3b990000}, {0x3b992000}, {0x3b994000}, {0x3b996000}, - {0x3b998000}, {0x3b99a000}, {0x3b99c000}, {0x3b99e000}, - {0x3b9a0000}, {0x3b9a2000}, {0x3b9a4000}, {0x3b9a6000}, - {0x3b9a8000}, {0x3b9aa000}, {0x3b9ac000}, {0x3b9ae000}, - {0x3b9b0000}, {0x3b9b2000}, {0x3b9b4000}, {0x3b9b6000}, - {0x3b9b8000}, {0x3b9ba000}, {0x3b9bc000}, {0x3b9be000}, - {0x3b9c0000}, {0x3b9c2000}, {0x3b9c4000}, {0x3b9c6000}, - {0x3b9c8000}, {0x3b9ca000}, {0x3b9cc000}, {0x3b9ce000}, - {0x3b9d0000}, {0x3b9d2000}, {0x3b9d4000}, {0x3b9d6000}, - {0x3b9d8000}, {0x3b9da000}, {0x3b9dc000}, {0x3b9de000}, - {0x3b9e0000}, {0x3b9e2000}, {0x3b9e4000}, {0x3b9e6000}, - {0x3b9e8000}, {0x3b9ea000}, {0x3b9ec000}, {0x3b9ee000}, - {0x3b9f0000}, {0x3b9f2000}, {0x3b9f4000}, {0x3b9f6000}, - {0x3b9f8000}, {0x3b9fa000}, {0x3b9fc000}, {0x3b9fe000}, - {0x3ba00000}, {0x3ba02000}, {0x3ba04000}, {0x3ba06000}, - {0x3ba08000}, {0x3ba0a000}, {0x3ba0c000}, {0x3ba0e000}, - {0x3ba10000}, {0x3ba12000}, {0x3ba14000}, {0x3ba16000}, - {0x3ba18000}, {0x3ba1a000}, {0x3ba1c000}, {0x3ba1e000}, - {0x3ba20000}, {0x3ba22000}, {0x3ba24000}, {0x3ba26000}, - {0x3ba28000}, {0x3ba2a000}, {0x3ba2c000}, {0x3ba2e000}, - {0x3ba30000}, {0x3ba32000}, {0x3ba34000}, {0x3ba36000}, - {0x3ba38000}, {0x3ba3a000}, {0x3ba3c000}, {0x3ba3e000}, - {0x3ba40000}, {0x3ba42000}, {0x3ba44000}, {0x3ba46000}, - {0x3ba48000}, {0x3ba4a000}, {0x3ba4c000}, {0x3ba4e000}, - {0x3ba50000}, {0x3ba52000}, {0x3ba54000}, {0x3ba56000}, - {0x3ba58000}, {0x3ba5a000}, {0x3ba5c000}, {0x3ba5e000}, - {0x3ba60000}, {0x3ba62000}, {0x3ba64000}, {0x3ba66000}, - {0x3ba68000}, {0x3ba6a000}, {0x3ba6c000}, {0x3ba6e000}, - {0x3ba70000}, {0x3ba72000}, {0x3ba74000}, {0x3ba76000}, - {0x3ba78000}, {0x3ba7a000}, {0x3ba7c000}, {0x3ba7e000}, - {0x3ba80000}, {0x3ba82000}, {0x3ba84000}, {0x3ba86000}, - {0x3ba88000}, {0x3ba8a000}, {0x3ba8c000}, {0x3ba8e000}, - {0x3ba90000}, {0x3ba92000}, {0x3ba94000}, {0x3ba96000}, - {0x3ba98000}, {0x3ba9a000}, {0x3ba9c000}, {0x3ba9e000}, - {0x3baa0000}, {0x3baa2000}, {0x3baa4000}, {0x3baa6000}, - {0x3baa8000}, {0x3baaa000}, {0x3baac000}, {0x3baae000}, - {0x3bab0000}, {0x3bab2000}, {0x3bab4000}, {0x3bab6000}, - {0x3bab8000}, {0x3baba000}, {0x3babc000}, {0x3babe000}, - {0x3bac0000}, {0x3bac2000}, {0x3bac4000}, {0x3bac6000}, - {0x3bac8000}, {0x3baca000}, {0x3bacc000}, {0x3bace000}, - {0x3bad0000}, {0x3bad2000}, {0x3bad4000}, {0x3bad6000}, - {0x3bad8000}, {0x3bada000}, {0x3badc000}, {0x3bade000}, - {0x3bae0000}, {0x3bae2000}, {0x3bae4000}, {0x3bae6000}, - {0x3bae8000}, {0x3baea000}, {0x3baec000}, {0x3baee000}, - {0x3baf0000}, {0x3baf2000}, {0x3baf4000}, {0x3baf6000}, - {0x3baf8000}, {0x3bafa000}, {0x3bafc000}, {0x3bafe000}, - {0x3bb00000}, {0x3bb02000}, {0x3bb04000}, {0x3bb06000}, - {0x3bb08000}, {0x3bb0a000}, {0x3bb0c000}, {0x3bb0e000}, - {0x3bb10000}, {0x3bb12000}, {0x3bb14000}, {0x3bb16000}, - {0x3bb18000}, {0x3bb1a000}, {0x3bb1c000}, {0x3bb1e000}, - {0x3bb20000}, {0x3bb22000}, {0x3bb24000}, {0x3bb26000}, - {0x3bb28000}, {0x3bb2a000}, {0x3bb2c000}, {0x3bb2e000}, - {0x3bb30000}, {0x3bb32000}, {0x3bb34000}, {0x3bb36000}, - {0x3bb38000}, {0x3bb3a000}, {0x3bb3c000}, {0x3bb3e000}, - {0x3bb40000}, {0x3bb42000}, {0x3bb44000}, {0x3bb46000}, - {0x3bb48000}, {0x3bb4a000}, {0x3bb4c000}, {0x3bb4e000}, - {0x3bb50000}, {0x3bb52000}, {0x3bb54000}, {0x3bb56000}, - {0x3bb58000}, {0x3bb5a000}, {0x3bb5c000}, {0x3bb5e000}, - {0x3bb60000}, {0x3bb62000}, {0x3bb64000}, {0x3bb66000}, - {0x3bb68000}, {0x3bb6a000}, {0x3bb6c000}, {0x3bb6e000}, - {0x3bb70000}, {0x3bb72000}, {0x3bb74000}, {0x3bb76000}, - {0x3bb78000}, {0x3bb7a000}, {0x3bb7c000}, {0x3bb7e000}, - {0x3bb80000}, {0x3bb82000}, {0x3bb84000}, {0x3bb86000}, - {0x3bb88000}, {0x3bb8a000}, {0x3bb8c000}, {0x3bb8e000}, - {0x3bb90000}, {0x3bb92000}, {0x3bb94000}, {0x3bb96000}, - {0x3bb98000}, {0x3bb9a000}, {0x3bb9c000}, {0x3bb9e000}, - {0x3bba0000}, {0x3bba2000}, {0x3bba4000}, {0x3bba6000}, - {0x3bba8000}, {0x3bbaa000}, {0x3bbac000}, {0x3bbae000}, - {0x3bbb0000}, {0x3bbb2000}, {0x3bbb4000}, {0x3bbb6000}, - {0x3bbb8000}, {0x3bbba000}, {0x3bbbc000}, {0x3bbbe000}, - {0x3bbc0000}, {0x3bbc2000}, {0x3bbc4000}, {0x3bbc6000}, - {0x3bbc8000}, {0x3bbca000}, {0x3bbcc000}, {0x3bbce000}, - {0x3bbd0000}, {0x3bbd2000}, {0x3bbd4000}, {0x3bbd6000}, - {0x3bbd8000}, {0x3bbda000}, {0x3bbdc000}, {0x3bbde000}, - {0x3bbe0000}, {0x3bbe2000}, {0x3bbe4000}, {0x3bbe6000}, - {0x3bbe8000}, {0x3bbea000}, {0x3bbec000}, {0x3bbee000}, - {0x3bbf0000}, {0x3bbf2000}, {0x3bbf4000}, {0x3bbf6000}, - {0x3bbf8000}, {0x3bbfa000}, {0x3bbfc000}, {0x3bbfe000}, - {0x3bc00000}, {0x3bc02000}, {0x3bc04000}, {0x3bc06000}, - {0x3bc08000}, {0x3bc0a000}, {0x3bc0c000}, {0x3bc0e000}, - {0x3bc10000}, {0x3bc12000}, {0x3bc14000}, {0x3bc16000}, - {0x3bc18000}, {0x3bc1a000}, {0x3bc1c000}, {0x3bc1e000}, - {0x3bc20000}, {0x3bc22000}, {0x3bc24000}, {0x3bc26000}, - {0x3bc28000}, {0x3bc2a000}, {0x3bc2c000}, {0x3bc2e000}, - {0x3bc30000}, {0x3bc32000}, {0x3bc34000}, {0x3bc36000}, - {0x3bc38000}, {0x3bc3a000}, {0x3bc3c000}, {0x3bc3e000}, - {0x3bc40000}, {0x3bc42000}, {0x3bc44000}, {0x3bc46000}, - {0x3bc48000}, {0x3bc4a000}, {0x3bc4c000}, {0x3bc4e000}, - {0x3bc50000}, {0x3bc52000}, {0x3bc54000}, {0x3bc56000}, - {0x3bc58000}, {0x3bc5a000}, {0x3bc5c000}, {0x3bc5e000}, - {0x3bc60000}, {0x3bc62000}, {0x3bc64000}, {0x3bc66000}, - {0x3bc68000}, {0x3bc6a000}, {0x3bc6c000}, {0x3bc6e000}, - {0x3bc70000}, {0x3bc72000}, {0x3bc74000}, {0x3bc76000}, - {0x3bc78000}, {0x3bc7a000}, {0x3bc7c000}, {0x3bc7e000}, - {0x3bc80000}, {0x3bc82000}, {0x3bc84000}, {0x3bc86000}, - {0x3bc88000}, {0x3bc8a000}, {0x3bc8c000}, {0x3bc8e000}, - {0x3bc90000}, {0x3bc92000}, {0x3bc94000}, {0x3bc96000}, - {0x3bc98000}, {0x3bc9a000}, {0x3bc9c000}, {0x3bc9e000}, - {0x3bca0000}, {0x3bca2000}, {0x3bca4000}, {0x3bca6000}, - {0x3bca8000}, {0x3bcaa000}, {0x3bcac000}, {0x3bcae000}, - {0x3bcb0000}, {0x3bcb2000}, {0x3bcb4000}, {0x3bcb6000}, - {0x3bcb8000}, {0x3bcba000}, {0x3bcbc000}, {0x3bcbe000}, - {0x3bcc0000}, {0x3bcc2000}, {0x3bcc4000}, {0x3bcc6000}, - {0x3bcc8000}, {0x3bcca000}, {0x3bccc000}, {0x3bcce000}, - {0x3bcd0000}, {0x3bcd2000}, {0x3bcd4000}, {0x3bcd6000}, - {0x3bcd8000}, {0x3bcda000}, {0x3bcdc000}, {0x3bcde000}, - {0x3bce0000}, {0x3bce2000}, {0x3bce4000}, {0x3bce6000}, - {0x3bce8000}, {0x3bcea000}, {0x3bcec000}, {0x3bcee000}, - {0x3bcf0000}, {0x3bcf2000}, {0x3bcf4000}, {0x3bcf6000}, - {0x3bcf8000}, {0x3bcfa000}, {0x3bcfc000}, {0x3bcfe000}, - {0x3bd00000}, {0x3bd02000}, {0x3bd04000}, {0x3bd06000}, - {0x3bd08000}, {0x3bd0a000}, {0x3bd0c000}, {0x3bd0e000}, - {0x3bd10000}, {0x3bd12000}, {0x3bd14000}, {0x3bd16000}, - {0x3bd18000}, {0x3bd1a000}, {0x3bd1c000}, {0x3bd1e000}, - {0x3bd20000}, {0x3bd22000}, {0x3bd24000}, {0x3bd26000}, - {0x3bd28000}, {0x3bd2a000}, {0x3bd2c000}, {0x3bd2e000}, - {0x3bd30000}, {0x3bd32000}, {0x3bd34000}, {0x3bd36000}, - {0x3bd38000}, {0x3bd3a000}, {0x3bd3c000}, {0x3bd3e000}, - {0x3bd40000}, {0x3bd42000}, {0x3bd44000}, {0x3bd46000}, - {0x3bd48000}, {0x3bd4a000}, {0x3bd4c000}, {0x3bd4e000}, - {0x3bd50000}, {0x3bd52000}, {0x3bd54000}, {0x3bd56000}, - {0x3bd58000}, {0x3bd5a000}, {0x3bd5c000}, {0x3bd5e000}, - {0x3bd60000}, {0x3bd62000}, {0x3bd64000}, {0x3bd66000}, - {0x3bd68000}, {0x3bd6a000}, {0x3bd6c000}, {0x3bd6e000}, - {0x3bd70000}, {0x3bd72000}, {0x3bd74000}, {0x3bd76000}, - {0x3bd78000}, {0x3bd7a000}, {0x3bd7c000}, {0x3bd7e000}, - {0x3bd80000}, {0x3bd82000}, {0x3bd84000}, {0x3bd86000}, - {0x3bd88000}, {0x3bd8a000}, {0x3bd8c000}, {0x3bd8e000}, - {0x3bd90000}, {0x3bd92000}, {0x3bd94000}, {0x3bd96000}, - {0x3bd98000}, {0x3bd9a000}, {0x3bd9c000}, {0x3bd9e000}, - {0x3bda0000}, {0x3bda2000}, {0x3bda4000}, {0x3bda6000}, - {0x3bda8000}, {0x3bdaa000}, {0x3bdac000}, {0x3bdae000}, - {0x3bdb0000}, {0x3bdb2000}, {0x3bdb4000}, {0x3bdb6000}, - {0x3bdb8000}, {0x3bdba000}, {0x3bdbc000}, {0x3bdbe000}, - {0x3bdc0000}, {0x3bdc2000}, {0x3bdc4000}, {0x3bdc6000}, - {0x3bdc8000}, {0x3bdca000}, {0x3bdcc000}, {0x3bdce000}, - {0x3bdd0000}, {0x3bdd2000}, {0x3bdd4000}, {0x3bdd6000}, - {0x3bdd8000}, {0x3bdda000}, {0x3bddc000}, {0x3bdde000}, - {0x3bde0000}, {0x3bde2000}, {0x3bde4000}, {0x3bde6000}, - {0x3bde8000}, {0x3bdea000}, {0x3bdec000}, {0x3bdee000}, - {0x3bdf0000}, {0x3bdf2000}, {0x3bdf4000}, {0x3bdf6000}, - {0x3bdf8000}, {0x3bdfa000}, {0x3bdfc000}, {0x3bdfe000}, - {0x3be00000}, {0x3be02000}, {0x3be04000}, {0x3be06000}, - {0x3be08000}, {0x3be0a000}, {0x3be0c000}, {0x3be0e000}, - {0x3be10000}, {0x3be12000}, {0x3be14000}, {0x3be16000}, - {0x3be18000}, {0x3be1a000}, {0x3be1c000}, {0x3be1e000}, - {0x3be20000}, {0x3be22000}, {0x3be24000}, {0x3be26000}, - {0x3be28000}, {0x3be2a000}, {0x3be2c000}, {0x3be2e000}, - {0x3be30000}, {0x3be32000}, {0x3be34000}, {0x3be36000}, - {0x3be38000}, {0x3be3a000}, {0x3be3c000}, {0x3be3e000}, - {0x3be40000}, {0x3be42000}, {0x3be44000}, {0x3be46000}, - {0x3be48000}, {0x3be4a000}, {0x3be4c000}, {0x3be4e000}, - {0x3be50000}, {0x3be52000}, {0x3be54000}, {0x3be56000}, - {0x3be58000}, {0x3be5a000}, {0x3be5c000}, {0x3be5e000}, - {0x3be60000}, {0x3be62000}, {0x3be64000}, {0x3be66000}, - {0x3be68000}, {0x3be6a000}, {0x3be6c000}, {0x3be6e000}, - {0x3be70000}, {0x3be72000}, {0x3be74000}, {0x3be76000}, - {0x3be78000}, {0x3be7a000}, {0x3be7c000}, {0x3be7e000}, - {0x3be80000}, {0x3be82000}, {0x3be84000}, {0x3be86000}, - {0x3be88000}, {0x3be8a000}, {0x3be8c000}, {0x3be8e000}, - {0x3be90000}, {0x3be92000}, {0x3be94000}, {0x3be96000}, - {0x3be98000}, {0x3be9a000}, {0x3be9c000}, {0x3be9e000}, - {0x3bea0000}, {0x3bea2000}, {0x3bea4000}, {0x3bea6000}, - {0x3bea8000}, {0x3beaa000}, {0x3beac000}, {0x3beae000}, - {0x3beb0000}, {0x3beb2000}, {0x3beb4000}, {0x3beb6000}, - {0x3beb8000}, {0x3beba000}, {0x3bebc000}, {0x3bebe000}, - {0x3bec0000}, {0x3bec2000}, {0x3bec4000}, {0x3bec6000}, - {0x3bec8000}, {0x3beca000}, {0x3becc000}, {0x3bece000}, - {0x3bed0000}, {0x3bed2000}, {0x3bed4000}, {0x3bed6000}, - {0x3bed8000}, {0x3beda000}, {0x3bedc000}, {0x3bede000}, - {0x3bee0000}, {0x3bee2000}, {0x3bee4000}, {0x3bee6000}, - {0x3bee8000}, {0x3beea000}, {0x3beec000}, {0x3beee000}, - {0x3bef0000}, {0x3bef2000}, {0x3bef4000}, {0x3bef6000}, - {0x3bef8000}, {0x3befa000}, {0x3befc000}, {0x3befe000}, - {0x3bf00000}, {0x3bf02000}, {0x3bf04000}, {0x3bf06000}, - {0x3bf08000}, {0x3bf0a000}, {0x3bf0c000}, {0x3bf0e000}, - {0x3bf10000}, {0x3bf12000}, {0x3bf14000}, {0x3bf16000}, - {0x3bf18000}, {0x3bf1a000}, {0x3bf1c000}, {0x3bf1e000}, - {0x3bf20000}, {0x3bf22000}, {0x3bf24000}, {0x3bf26000}, - {0x3bf28000}, {0x3bf2a000}, {0x3bf2c000}, {0x3bf2e000}, - {0x3bf30000}, {0x3bf32000}, {0x3bf34000}, {0x3bf36000}, - {0x3bf38000}, {0x3bf3a000}, {0x3bf3c000}, {0x3bf3e000}, - {0x3bf40000}, {0x3bf42000}, {0x3bf44000}, {0x3bf46000}, - {0x3bf48000}, {0x3bf4a000}, {0x3bf4c000}, {0x3bf4e000}, - {0x3bf50000}, {0x3bf52000}, {0x3bf54000}, {0x3bf56000}, - {0x3bf58000}, {0x3bf5a000}, {0x3bf5c000}, {0x3bf5e000}, - {0x3bf60000}, {0x3bf62000}, {0x3bf64000}, {0x3bf66000}, - {0x3bf68000}, {0x3bf6a000}, {0x3bf6c000}, {0x3bf6e000}, - {0x3bf70000}, {0x3bf72000}, {0x3bf74000}, {0x3bf76000}, - {0x3bf78000}, {0x3bf7a000}, {0x3bf7c000}, {0x3bf7e000}, - {0x3bf80000}, {0x3bf82000}, {0x3bf84000}, {0x3bf86000}, - {0x3bf88000}, {0x3bf8a000}, {0x3bf8c000}, {0x3bf8e000}, - {0x3bf90000}, {0x3bf92000}, {0x3bf94000}, {0x3bf96000}, - {0x3bf98000}, {0x3bf9a000}, {0x3bf9c000}, {0x3bf9e000}, - {0x3bfa0000}, {0x3bfa2000}, {0x3bfa4000}, {0x3bfa6000}, - {0x3bfa8000}, {0x3bfaa000}, {0x3bfac000}, {0x3bfae000}, - {0x3bfb0000}, {0x3bfb2000}, {0x3bfb4000}, {0x3bfb6000}, - {0x3bfb8000}, {0x3bfba000}, {0x3bfbc000}, {0x3bfbe000}, - {0x3bfc0000}, {0x3bfc2000}, {0x3bfc4000}, {0x3bfc6000}, - {0x3bfc8000}, {0x3bfca000}, {0x3bfcc000}, {0x3bfce000}, - {0x3bfd0000}, {0x3bfd2000}, {0x3bfd4000}, {0x3bfd6000}, - {0x3bfd8000}, {0x3bfda000}, {0x3bfdc000}, {0x3bfde000}, - {0x3bfe0000}, {0x3bfe2000}, {0x3bfe4000}, {0x3bfe6000}, - {0x3bfe8000}, {0x3bfea000}, {0x3bfec000}, {0x3bfee000}, - {0x3bff0000}, {0x3bff2000}, {0x3bff4000}, {0x3bff6000}, - {0x3bff8000}, {0x3bffa000}, {0x3bffc000}, {0x3bffe000}, - {0x3c000000}, {0x3c002000}, {0x3c004000}, {0x3c006000}, - {0x3c008000}, {0x3c00a000}, {0x3c00c000}, {0x3c00e000}, - {0x3c010000}, {0x3c012000}, {0x3c014000}, {0x3c016000}, - {0x3c018000}, {0x3c01a000}, {0x3c01c000}, {0x3c01e000}, - {0x3c020000}, {0x3c022000}, {0x3c024000}, {0x3c026000}, - {0x3c028000}, {0x3c02a000}, {0x3c02c000}, {0x3c02e000}, - {0x3c030000}, {0x3c032000}, {0x3c034000}, {0x3c036000}, - {0x3c038000}, {0x3c03a000}, {0x3c03c000}, {0x3c03e000}, - {0x3c040000}, {0x3c042000}, {0x3c044000}, {0x3c046000}, - {0x3c048000}, {0x3c04a000}, {0x3c04c000}, {0x3c04e000}, - {0x3c050000}, {0x3c052000}, {0x3c054000}, {0x3c056000}, - {0x3c058000}, {0x3c05a000}, {0x3c05c000}, {0x3c05e000}, - {0x3c060000}, {0x3c062000}, {0x3c064000}, {0x3c066000}, - {0x3c068000}, {0x3c06a000}, {0x3c06c000}, {0x3c06e000}, - {0x3c070000}, {0x3c072000}, {0x3c074000}, {0x3c076000}, - {0x3c078000}, {0x3c07a000}, {0x3c07c000}, {0x3c07e000}, - {0x3c080000}, {0x3c082000}, {0x3c084000}, {0x3c086000}, - {0x3c088000}, {0x3c08a000}, {0x3c08c000}, {0x3c08e000}, - {0x3c090000}, {0x3c092000}, {0x3c094000}, {0x3c096000}, - {0x3c098000}, {0x3c09a000}, {0x3c09c000}, {0x3c09e000}, - {0x3c0a0000}, {0x3c0a2000}, {0x3c0a4000}, {0x3c0a6000}, - {0x3c0a8000}, {0x3c0aa000}, {0x3c0ac000}, {0x3c0ae000}, - {0x3c0b0000}, {0x3c0b2000}, {0x3c0b4000}, {0x3c0b6000}, - {0x3c0b8000}, {0x3c0ba000}, {0x3c0bc000}, {0x3c0be000}, - {0x3c0c0000}, {0x3c0c2000}, {0x3c0c4000}, {0x3c0c6000}, - {0x3c0c8000}, {0x3c0ca000}, {0x3c0cc000}, {0x3c0ce000}, - {0x3c0d0000}, {0x3c0d2000}, {0x3c0d4000}, {0x3c0d6000}, - {0x3c0d8000}, {0x3c0da000}, {0x3c0dc000}, {0x3c0de000}, - {0x3c0e0000}, {0x3c0e2000}, {0x3c0e4000}, {0x3c0e6000}, - {0x3c0e8000}, {0x3c0ea000}, {0x3c0ec000}, {0x3c0ee000}, - {0x3c0f0000}, {0x3c0f2000}, {0x3c0f4000}, {0x3c0f6000}, - {0x3c0f8000}, {0x3c0fa000}, {0x3c0fc000}, {0x3c0fe000}, - {0x3c100000}, {0x3c102000}, {0x3c104000}, {0x3c106000}, - {0x3c108000}, {0x3c10a000}, {0x3c10c000}, {0x3c10e000}, - {0x3c110000}, {0x3c112000}, {0x3c114000}, {0x3c116000}, - {0x3c118000}, {0x3c11a000}, {0x3c11c000}, {0x3c11e000}, - {0x3c120000}, {0x3c122000}, {0x3c124000}, {0x3c126000}, - {0x3c128000}, {0x3c12a000}, {0x3c12c000}, {0x3c12e000}, - {0x3c130000}, {0x3c132000}, {0x3c134000}, {0x3c136000}, - {0x3c138000}, {0x3c13a000}, {0x3c13c000}, {0x3c13e000}, - {0x3c140000}, {0x3c142000}, {0x3c144000}, {0x3c146000}, - {0x3c148000}, {0x3c14a000}, {0x3c14c000}, {0x3c14e000}, - {0x3c150000}, {0x3c152000}, {0x3c154000}, {0x3c156000}, - {0x3c158000}, {0x3c15a000}, {0x3c15c000}, {0x3c15e000}, - {0x3c160000}, {0x3c162000}, {0x3c164000}, {0x3c166000}, - {0x3c168000}, {0x3c16a000}, {0x3c16c000}, {0x3c16e000}, - {0x3c170000}, {0x3c172000}, {0x3c174000}, {0x3c176000}, - {0x3c178000}, {0x3c17a000}, {0x3c17c000}, {0x3c17e000}, - {0x3c180000}, {0x3c182000}, {0x3c184000}, {0x3c186000}, - {0x3c188000}, {0x3c18a000}, {0x3c18c000}, {0x3c18e000}, - {0x3c190000}, {0x3c192000}, {0x3c194000}, {0x3c196000}, - {0x3c198000}, {0x3c19a000}, {0x3c19c000}, {0x3c19e000}, - {0x3c1a0000}, {0x3c1a2000}, {0x3c1a4000}, {0x3c1a6000}, - {0x3c1a8000}, {0x3c1aa000}, {0x3c1ac000}, {0x3c1ae000}, - {0x3c1b0000}, {0x3c1b2000}, {0x3c1b4000}, {0x3c1b6000}, - {0x3c1b8000}, {0x3c1ba000}, {0x3c1bc000}, {0x3c1be000}, - {0x3c1c0000}, {0x3c1c2000}, {0x3c1c4000}, {0x3c1c6000}, - {0x3c1c8000}, {0x3c1ca000}, {0x3c1cc000}, {0x3c1ce000}, - {0x3c1d0000}, {0x3c1d2000}, {0x3c1d4000}, {0x3c1d6000}, - {0x3c1d8000}, {0x3c1da000}, {0x3c1dc000}, {0x3c1de000}, - {0x3c1e0000}, {0x3c1e2000}, {0x3c1e4000}, {0x3c1e6000}, - {0x3c1e8000}, {0x3c1ea000}, {0x3c1ec000}, {0x3c1ee000}, - {0x3c1f0000}, {0x3c1f2000}, {0x3c1f4000}, {0x3c1f6000}, - {0x3c1f8000}, {0x3c1fa000}, {0x3c1fc000}, {0x3c1fe000}, - {0x3c200000}, {0x3c202000}, {0x3c204000}, {0x3c206000}, - {0x3c208000}, {0x3c20a000}, {0x3c20c000}, {0x3c20e000}, - {0x3c210000}, {0x3c212000}, {0x3c214000}, {0x3c216000}, - {0x3c218000}, {0x3c21a000}, {0x3c21c000}, {0x3c21e000}, - {0x3c220000}, {0x3c222000}, {0x3c224000}, {0x3c226000}, - {0x3c228000}, {0x3c22a000}, {0x3c22c000}, {0x3c22e000}, - {0x3c230000}, {0x3c232000}, {0x3c234000}, {0x3c236000}, - {0x3c238000}, {0x3c23a000}, {0x3c23c000}, {0x3c23e000}, - {0x3c240000}, {0x3c242000}, {0x3c244000}, {0x3c246000}, - {0x3c248000}, {0x3c24a000}, {0x3c24c000}, {0x3c24e000}, - {0x3c250000}, {0x3c252000}, {0x3c254000}, {0x3c256000}, - {0x3c258000}, {0x3c25a000}, {0x3c25c000}, {0x3c25e000}, - {0x3c260000}, {0x3c262000}, {0x3c264000}, {0x3c266000}, - {0x3c268000}, {0x3c26a000}, {0x3c26c000}, {0x3c26e000}, - {0x3c270000}, {0x3c272000}, {0x3c274000}, {0x3c276000}, - {0x3c278000}, {0x3c27a000}, {0x3c27c000}, {0x3c27e000}, - {0x3c280000}, {0x3c282000}, {0x3c284000}, {0x3c286000}, - {0x3c288000}, {0x3c28a000}, {0x3c28c000}, {0x3c28e000}, - {0x3c290000}, {0x3c292000}, {0x3c294000}, {0x3c296000}, - {0x3c298000}, {0x3c29a000}, {0x3c29c000}, {0x3c29e000}, - {0x3c2a0000}, {0x3c2a2000}, {0x3c2a4000}, {0x3c2a6000}, - {0x3c2a8000}, {0x3c2aa000}, {0x3c2ac000}, {0x3c2ae000}, - {0x3c2b0000}, {0x3c2b2000}, {0x3c2b4000}, {0x3c2b6000}, - {0x3c2b8000}, {0x3c2ba000}, {0x3c2bc000}, {0x3c2be000}, - {0x3c2c0000}, {0x3c2c2000}, {0x3c2c4000}, {0x3c2c6000}, - {0x3c2c8000}, {0x3c2ca000}, {0x3c2cc000}, {0x3c2ce000}, - {0x3c2d0000}, {0x3c2d2000}, {0x3c2d4000}, {0x3c2d6000}, - {0x3c2d8000}, {0x3c2da000}, {0x3c2dc000}, {0x3c2de000}, - {0x3c2e0000}, {0x3c2e2000}, {0x3c2e4000}, {0x3c2e6000}, - {0x3c2e8000}, {0x3c2ea000}, {0x3c2ec000}, {0x3c2ee000}, - {0x3c2f0000}, {0x3c2f2000}, {0x3c2f4000}, {0x3c2f6000}, - {0x3c2f8000}, {0x3c2fa000}, {0x3c2fc000}, {0x3c2fe000}, - {0x3c300000}, {0x3c302000}, {0x3c304000}, {0x3c306000}, - {0x3c308000}, {0x3c30a000}, {0x3c30c000}, {0x3c30e000}, - {0x3c310000}, {0x3c312000}, {0x3c314000}, {0x3c316000}, - {0x3c318000}, {0x3c31a000}, {0x3c31c000}, {0x3c31e000}, - {0x3c320000}, {0x3c322000}, {0x3c324000}, {0x3c326000}, - {0x3c328000}, {0x3c32a000}, {0x3c32c000}, {0x3c32e000}, - {0x3c330000}, {0x3c332000}, {0x3c334000}, {0x3c336000}, - {0x3c338000}, {0x3c33a000}, {0x3c33c000}, {0x3c33e000}, - {0x3c340000}, {0x3c342000}, {0x3c344000}, {0x3c346000}, - {0x3c348000}, {0x3c34a000}, {0x3c34c000}, {0x3c34e000}, - {0x3c350000}, {0x3c352000}, {0x3c354000}, {0x3c356000}, - {0x3c358000}, {0x3c35a000}, {0x3c35c000}, {0x3c35e000}, - {0x3c360000}, {0x3c362000}, {0x3c364000}, {0x3c366000}, - {0x3c368000}, {0x3c36a000}, {0x3c36c000}, {0x3c36e000}, - {0x3c370000}, {0x3c372000}, {0x3c374000}, {0x3c376000}, - {0x3c378000}, {0x3c37a000}, {0x3c37c000}, {0x3c37e000}, - {0x3c380000}, {0x3c382000}, {0x3c384000}, {0x3c386000}, - {0x3c388000}, {0x3c38a000}, {0x3c38c000}, {0x3c38e000}, - {0x3c390000}, {0x3c392000}, {0x3c394000}, {0x3c396000}, - {0x3c398000}, {0x3c39a000}, {0x3c39c000}, {0x3c39e000}, - {0x3c3a0000}, {0x3c3a2000}, {0x3c3a4000}, {0x3c3a6000}, - {0x3c3a8000}, {0x3c3aa000}, {0x3c3ac000}, {0x3c3ae000}, - {0x3c3b0000}, {0x3c3b2000}, {0x3c3b4000}, {0x3c3b6000}, - {0x3c3b8000}, {0x3c3ba000}, {0x3c3bc000}, {0x3c3be000}, - {0x3c3c0000}, {0x3c3c2000}, {0x3c3c4000}, {0x3c3c6000}, - {0x3c3c8000}, {0x3c3ca000}, {0x3c3cc000}, {0x3c3ce000}, - {0x3c3d0000}, {0x3c3d2000}, {0x3c3d4000}, {0x3c3d6000}, - {0x3c3d8000}, {0x3c3da000}, {0x3c3dc000}, {0x3c3de000}, - {0x3c3e0000}, {0x3c3e2000}, {0x3c3e4000}, {0x3c3e6000}, - {0x3c3e8000}, {0x3c3ea000}, {0x3c3ec000}, {0x3c3ee000}, - {0x3c3f0000}, {0x3c3f2000}, {0x3c3f4000}, {0x3c3f6000}, - {0x3c3f8000}, {0x3c3fa000}, {0x3c3fc000}, {0x3c3fe000}, - {0x3c400000}, {0x3c402000}, {0x3c404000}, {0x3c406000}, - {0x3c408000}, {0x3c40a000}, {0x3c40c000}, {0x3c40e000}, - {0x3c410000}, {0x3c412000}, {0x3c414000}, {0x3c416000}, - {0x3c418000}, {0x3c41a000}, {0x3c41c000}, {0x3c41e000}, - {0x3c420000}, {0x3c422000}, {0x3c424000}, {0x3c426000}, - {0x3c428000}, {0x3c42a000}, {0x3c42c000}, {0x3c42e000}, - {0x3c430000}, {0x3c432000}, {0x3c434000}, {0x3c436000}, - {0x3c438000}, {0x3c43a000}, {0x3c43c000}, {0x3c43e000}, - {0x3c440000}, {0x3c442000}, {0x3c444000}, {0x3c446000}, - {0x3c448000}, {0x3c44a000}, {0x3c44c000}, {0x3c44e000}, - {0x3c450000}, {0x3c452000}, {0x3c454000}, {0x3c456000}, - {0x3c458000}, {0x3c45a000}, {0x3c45c000}, {0x3c45e000}, - {0x3c460000}, {0x3c462000}, {0x3c464000}, {0x3c466000}, - {0x3c468000}, {0x3c46a000}, {0x3c46c000}, {0x3c46e000}, - {0x3c470000}, {0x3c472000}, {0x3c474000}, {0x3c476000}, - {0x3c478000}, {0x3c47a000}, {0x3c47c000}, {0x3c47e000}, - {0x3c480000}, {0x3c482000}, {0x3c484000}, {0x3c486000}, - {0x3c488000}, {0x3c48a000}, {0x3c48c000}, {0x3c48e000}, - {0x3c490000}, {0x3c492000}, {0x3c494000}, {0x3c496000}, - {0x3c498000}, {0x3c49a000}, {0x3c49c000}, {0x3c49e000}, - {0x3c4a0000}, {0x3c4a2000}, {0x3c4a4000}, {0x3c4a6000}, - {0x3c4a8000}, {0x3c4aa000}, {0x3c4ac000}, {0x3c4ae000}, - {0x3c4b0000}, {0x3c4b2000}, {0x3c4b4000}, {0x3c4b6000}, - {0x3c4b8000}, {0x3c4ba000}, {0x3c4bc000}, {0x3c4be000}, - {0x3c4c0000}, {0x3c4c2000}, {0x3c4c4000}, {0x3c4c6000}, - {0x3c4c8000}, {0x3c4ca000}, {0x3c4cc000}, {0x3c4ce000}, - {0x3c4d0000}, {0x3c4d2000}, {0x3c4d4000}, {0x3c4d6000}, - {0x3c4d8000}, {0x3c4da000}, {0x3c4dc000}, {0x3c4de000}, - {0x3c4e0000}, {0x3c4e2000}, {0x3c4e4000}, {0x3c4e6000}, - {0x3c4e8000}, {0x3c4ea000}, {0x3c4ec000}, {0x3c4ee000}, - {0x3c4f0000}, {0x3c4f2000}, {0x3c4f4000}, {0x3c4f6000}, - {0x3c4f8000}, {0x3c4fa000}, {0x3c4fc000}, {0x3c4fe000}, - {0x3c500000}, {0x3c502000}, {0x3c504000}, {0x3c506000}, - {0x3c508000}, {0x3c50a000}, {0x3c50c000}, {0x3c50e000}, - {0x3c510000}, {0x3c512000}, {0x3c514000}, {0x3c516000}, - {0x3c518000}, {0x3c51a000}, {0x3c51c000}, {0x3c51e000}, - {0x3c520000}, {0x3c522000}, {0x3c524000}, {0x3c526000}, - {0x3c528000}, {0x3c52a000}, {0x3c52c000}, {0x3c52e000}, - {0x3c530000}, {0x3c532000}, {0x3c534000}, {0x3c536000}, - {0x3c538000}, {0x3c53a000}, {0x3c53c000}, {0x3c53e000}, - {0x3c540000}, {0x3c542000}, {0x3c544000}, {0x3c546000}, - {0x3c548000}, {0x3c54a000}, {0x3c54c000}, {0x3c54e000}, - {0x3c550000}, {0x3c552000}, {0x3c554000}, {0x3c556000}, - {0x3c558000}, {0x3c55a000}, {0x3c55c000}, {0x3c55e000}, - {0x3c560000}, {0x3c562000}, {0x3c564000}, {0x3c566000}, - {0x3c568000}, {0x3c56a000}, {0x3c56c000}, {0x3c56e000}, - {0x3c570000}, {0x3c572000}, {0x3c574000}, {0x3c576000}, - {0x3c578000}, {0x3c57a000}, {0x3c57c000}, {0x3c57e000}, - {0x3c580000}, {0x3c582000}, {0x3c584000}, {0x3c586000}, - {0x3c588000}, {0x3c58a000}, {0x3c58c000}, {0x3c58e000}, - {0x3c590000}, {0x3c592000}, {0x3c594000}, {0x3c596000}, - {0x3c598000}, {0x3c59a000}, {0x3c59c000}, {0x3c59e000}, - {0x3c5a0000}, {0x3c5a2000}, {0x3c5a4000}, {0x3c5a6000}, - {0x3c5a8000}, {0x3c5aa000}, {0x3c5ac000}, {0x3c5ae000}, - {0x3c5b0000}, {0x3c5b2000}, {0x3c5b4000}, {0x3c5b6000}, - {0x3c5b8000}, {0x3c5ba000}, {0x3c5bc000}, {0x3c5be000}, - {0x3c5c0000}, {0x3c5c2000}, {0x3c5c4000}, {0x3c5c6000}, - {0x3c5c8000}, {0x3c5ca000}, {0x3c5cc000}, {0x3c5ce000}, - {0x3c5d0000}, {0x3c5d2000}, {0x3c5d4000}, {0x3c5d6000}, - {0x3c5d8000}, {0x3c5da000}, {0x3c5dc000}, {0x3c5de000}, - {0x3c5e0000}, {0x3c5e2000}, {0x3c5e4000}, {0x3c5e6000}, - {0x3c5e8000}, {0x3c5ea000}, {0x3c5ec000}, {0x3c5ee000}, - {0x3c5f0000}, {0x3c5f2000}, {0x3c5f4000}, {0x3c5f6000}, - {0x3c5f8000}, {0x3c5fa000}, {0x3c5fc000}, {0x3c5fe000}, - {0x3c600000}, {0x3c602000}, {0x3c604000}, {0x3c606000}, - {0x3c608000}, {0x3c60a000}, {0x3c60c000}, {0x3c60e000}, - {0x3c610000}, {0x3c612000}, {0x3c614000}, {0x3c616000}, - {0x3c618000}, {0x3c61a000}, {0x3c61c000}, {0x3c61e000}, - {0x3c620000}, {0x3c622000}, {0x3c624000}, {0x3c626000}, - {0x3c628000}, {0x3c62a000}, {0x3c62c000}, {0x3c62e000}, - {0x3c630000}, {0x3c632000}, {0x3c634000}, {0x3c636000}, - {0x3c638000}, {0x3c63a000}, {0x3c63c000}, {0x3c63e000}, - {0x3c640000}, {0x3c642000}, {0x3c644000}, {0x3c646000}, - {0x3c648000}, {0x3c64a000}, {0x3c64c000}, {0x3c64e000}, - {0x3c650000}, {0x3c652000}, {0x3c654000}, {0x3c656000}, - {0x3c658000}, {0x3c65a000}, {0x3c65c000}, {0x3c65e000}, - {0x3c660000}, {0x3c662000}, {0x3c664000}, {0x3c666000}, - {0x3c668000}, {0x3c66a000}, {0x3c66c000}, {0x3c66e000}, - {0x3c670000}, {0x3c672000}, {0x3c674000}, {0x3c676000}, - {0x3c678000}, {0x3c67a000}, {0x3c67c000}, {0x3c67e000}, - {0x3c680000}, {0x3c682000}, {0x3c684000}, {0x3c686000}, - {0x3c688000}, {0x3c68a000}, {0x3c68c000}, {0x3c68e000}, - {0x3c690000}, {0x3c692000}, {0x3c694000}, {0x3c696000}, - {0x3c698000}, {0x3c69a000}, {0x3c69c000}, {0x3c69e000}, - {0x3c6a0000}, {0x3c6a2000}, {0x3c6a4000}, {0x3c6a6000}, - {0x3c6a8000}, {0x3c6aa000}, {0x3c6ac000}, {0x3c6ae000}, - {0x3c6b0000}, {0x3c6b2000}, {0x3c6b4000}, {0x3c6b6000}, - {0x3c6b8000}, {0x3c6ba000}, {0x3c6bc000}, {0x3c6be000}, - {0x3c6c0000}, {0x3c6c2000}, {0x3c6c4000}, {0x3c6c6000}, - {0x3c6c8000}, {0x3c6ca000}, {0x3c6cc000}, {0x3c6ce000}, - {0x3c6d0000}, {0x3c6d2000}, {0x3c6d4000}, {0x3c6d6000}, - {0x3c6d8000}, {0x3c6da000}, {0x3c6dc000}, {0x3c6de000}, - {0x3c6e0000}, {0x3c6e2000}, {0x3c6e4000}, {0x3c6e6000}, - {0x3c6e8000}, {0x3c6ea000}, {0x3c6ec000}, {0x3c6ee000}, - {0x3c6f0000}, {0x3c6f2000}, {0x3c6f4000}, {0x3c6f6000}, - {0x3c6f8000}, {0x3c6fa000}, {0x3c6fc000}, {0x3c6fe000}, - {0x3c700000}, {0x3c702000}, {0x3c704000}, {0x3c706000}, - {0x3c708000}, {0x3c70a000}, {0x3c70c000}, {0x3c70e000}, - {0x3c710000}, {0x3c712000}, {0x3c714000}, {0x3c716000}, - {0x3c718000}, {0x3c71a000}, {0x3c71c000}, {0x3c71e000}, - {0x3c720000}, {0x3c722000}, {0x3c724000}, {0x3c726000}, - {0x3c728000}, {0x3c72a000}, {0x3c72c000}, {0x3c72e000}, - {0x3c730000}, {0x3c732000}, {0x3c734000}, {0x3c736000}, - {0x3c738000}, {0x3c73a000}, {0x3c73c000}, {0x3c73e000}, - {0x3c740000}, {0x3c742000}, {0x3c744000}, {0x3c746000}, - {0x3c748000}, {0x3c74a000}, {0x3c74c000}, {0x3c74e000}, - {0x3c750000}, {0x3c752000}, {0x3c754000}, {0x3c756000}, - {0x3c758000}, {0x3c75a000}, {0x3c75c000}, {0x3c75e000}, - {0x3c760000}, {0x3c762000}, {0x3c764000}, {0x3c766000}, - {0x3c768000}, {0x3c76a000}, {0x3c76c000}, {0x3c76e000}, - {0x3c770000}, {0x3c772000}, {0x3c774000}, {0x3c776000}, - {0x3c778000}, {0x3c77a000}, {0x3c77c000}, {0x3c77e000}, - {0x3c780000}, {0x3c782000}, {0x3c784000}, {0x3c786000}, - {0x3c788000}, {0x3c78a000}, {0x3c78c000}, {0x3c78e000}, - {0x3c790000}, {0x3c792000}, {0x3c794000}, {0x3c796000}, - {0x3c798000}, {0x3c79a000}, {0x3c79c000}, {0x3c79e000}, - {0x3c7a0000}, {0x3c7a2000}, {0x3c7a4000}, {0x3c7a6000}, - {0x3c7a8000}, {0x3c7aa000}, {0x3c7ac000}, {0x3c7ae000}, - {0x3c7b0000}, {0x3c7b2000}, {0x3c7b4000}, {0x3c7b6000}, - {0x3c7b8000}, {0x3c7ba000}, {0x3c7bc000}, {0x3c7be000}, - {0x3c7c0000}, {0x3c7c2000}, {0x3c7c4000}, {0x3c7c6000}, - {0x3c7c8000}, {0x3c7ca000}, {0x3c7cc000}, {0x3c7ce000}, - {0x3c7d0000}, {0x3c7d2000}, {0x3c7d4000}, {0x3c7d6000}, - {0x3c7d8000}, {0x3c7da000}, {0x3c7dc000}, {0x3c7de000}, - {0x3c7e0000}, {0x3c7e2000}, {0x3c7e4000}, {0x3c7e6000}, - {0x3c7e8000}, {0x3c7ea000}, {0x3c7ec000}, {0x3c7ee000}, - {0x3c7f0000}, {0x3c7f2000}, {0x3c7f4000}, {0x3c7f6000}, - {0x3c7f8000}, {0x3c7fa000}, {0x3c7fc000}, {0x3c7fe000}, - {0x3c800000}, {0x3c802000}, {0x3c804000}, {0x3c806000}, - {0x3c808000}, {0x3c80a000}, {0x3c80c000}, {0x3c80e000}, - {0x3c810000}, {0x3c812000}, {0x3c814000}, {0x3c816000}, - {0x3c818000}, {0x3c81a000}, {0x3c81c000}, {0x3c81e000}, - {0x3c820000}, {0x3c822000}, {0x3c824000}, {0x3c826000}, - {0x3c828000}, {0x3c82a000}, {0x3c82c000}, {0x3c82e000}, - {0x3c830000}, {0x3c832000}, {0x3c834000}, {0x3c836000}, - {0x3c838000}, {0x3c83a000}, {0x3c83c000}, {0x3c83e000}, - {0x3c840000}, {0x3c842000}, {0x3c844000}, {0x3c846000}, - {0x3c848000}, {0x3c84a000}, {0x3c84c000}, {0x3c84e000}, - {0x3c850000}, {0x3c852000}, {0x3c854000}, {0x3c856000}, - {0x3c858000}, {0x3c85a000}, {0x3c85c000}, {0x3c85e000}, - {0x3c860000}, {0x3c862000}, {0x3c864000}, {0x3c866000}, - {0x3c868000}, {0x3c86a000}, {0x3c86c000}, {0x3c86e000}, - {0x3c870000}, {0x3c872000}, {0x3c874000}, {0x3c876000}, - {0x3c878000}, {0x3c87a000}, {0x3c87c000}, {0x3c87e000}, - {0x3c880000}, {0x3c882000}, {0x3c884000}, {0x3c886000}, - {0x3c888000}, {0x3c88a000}, {0x3c88c000}, {0x3c88e000}, - {0x3c890000}, {0x3c892000}, {0x3c894000}, {0x3c896000}, - {0x3c898000}, {0x3c89a000}, {0x3c89c000}, {0x3c89e000}, - {0x3c8a0000}, {0x3c8a2000}, {0x3c8a4000}, {0x3c8a6000}, - {0x3c8a8000}, {0x3c8aa000}, {0x3c8ac000}, {0x3c8ae000}, - {0x3c8b0000}, {0x3c8b2000}, {0x3c8b4000}, {0x3c8b6000}, - {0x3c8b8000}, {0x3c8ba000}, {0x3c8bc000}, {0x3c8be000}, - {0x3c8c0000}, {0x3c8c2000}, {0x3c8c4000}, {0x3c8c6000}, - {0x3c8c8000}, {0x3c8ca000}, {0x3c8cc000}, {0x3c8ce000}, - {0x3c8d0000}, {0x3c8d2000}, {0x3c8d4000}, {0x3c8d6000}, - {0x3c8d8000}, {0x3c8da000}, {0x3c8dc000}, {0x3c8de000}, - {0x3c8e0000}, {0x3c8e2000}, {0x3c8e4000}, {0x3c8e6000}, - {0x3c8e8000}, {0x3c8ea000}, {0x3c8ec000}, {0x3c8ee000}, - {0x3c8f0000}, {0x3c8f2000}, {0x3c8f4000}, {0x3c8f6000}, - {0x3c8f8000}, {0x3c8fa000}, {0x3c8fc000}, {0x3c8fe000}, - {0x3c900000}, {0x3c902000}, {0x3c904000}, {0x3c906000}, - {0x3c908000}, {0x3c90a000}, {0x3c90c000}, {0x3c90e000}, - {0x3c910000}, {0x3c912000}, {0x3c914000}, {0x3c916000}, - {0x3c918000}, {0x3c91a000}, {0x3c91c000}, {0x3c91e000}, - {0x3c920000}, {0x3c922000}, {0x3c924000}, {0x3c926000}, - {0x3c928000}, {0x3c92a000}, {0x3c92c000}, {0x3c92e000}, - {0x3c930000}, {0x3c932000}, {0x3c934000}, {0x3c936000}, - {0x3c938000}, {0x3c93a000}, {0x3c93c000}, {0x3c93e000}, - {0x3c940000}, {0x3c942000}, {0x3c944000}, {0x3c946000}, - {0x3c948000}, {0x3c94a000}, {0x3c94c000}, {0x3c94e000}, - {0x3c950000}, {0x3c952000}, {0x3c954000}, {0x3c956000}, - {0x3c958000}, {0x3c95a000}, {0x3c95c000}, {0x3c95e000}, - {0x3c960000}, {0x3c962000}, {0x3c964000}, {0x3c966000}, - {0x3c968000}, {0x3c96a000}, {0x3c96c000}, {0x3c96e000}, - {0x3c970000}, {0x3c972000}, {0x3c974000}, {0x3c976000}, - {0x3c978000}, {0x3c97a000}, {0x3c97c000}, {0x3c97e000}, - {0x3c980000}, {0x3c982000}, {0x3c984000}, {0x3c986000}, - {0x3c988000}, {0x3c98a000}, {0x3c98c000}, {0x3c98e000}, - {0x3c990000}, {0x3c992000}, {0x3c994000}, {0x3c996000}, - {0x3c998000}, {0x3c99a000}, {0x3c99c000}, {0x3c99e000}, - {0x3c9a0000}, {0x3c9a2000}, {0x3c9a4000}, {0x3c9a6000}, - {0x3c9a8000}, {0x3c9aa000}, {0x3c9ac000}, {0x3c9ae000}, - {0x3c9b0000}, {0x3c9b2000}, {0x3c9b4000}, {0x3c9b6000}, - {0x3c9b8000}, {0x3c9ba000}, {0x3c9bc000}, {0x3c9be000}, - {0x3c9c0000}, {0x3c9c2000}, {0x3c9c4000}, {0x3c9c6000}, - {0x3c9c8000}, {0x3c9ca000}, {0x3c9cc000}, {0x3c9ce000}, - {0x3c9d0000}, {0x3c9d2000}, {0x3c9d4000}, {0x3c9d6000}, - {0x3c9d8000}, {0x3c9da000}, {0x3c9dc000}, {0x3c9de000}, - {0x3c9e0000}, {0x3c9e2000}, {0x3c9e4000}, {0x3c9e6000}, - {0x3c9e8000}, {0x3c9ea000}, {0x3c9ec000}, {0x3c9ee000}, - {0x3c9f0000}, {0x3c9f2000}, {0x3c9f4000}, {0x3c9f6000}, - {0x3c9f8000}, {0x3c9fa000}, {0x3c9fc000}, {0x3c9fe000}, - {0x3ca00000}, {0x3ca02000}, {0x3ca04000}, {0x3ca06000}, - {0x3ca08000}, {0x3ca0a000}, {0x3ca0c000}, {0x3ca0e000}, - {0x3ca10000}, {0x3ca12000}, {0x3ca14000}, {0x3ca16000}, - {0x3ca18000}, {0x3ca1a000}, {0x3ca1c000}, {0x3ca1e000}, - {0x3ca20000}, {0x3ca22000}, {0x3ca24000}, {0x3ca26000}, - {0x3ca28000}, {0x3ca2a000}, {0x3ca2c000}, {0x3ca2e000}, - {0x3ca30000}, {0x3ca32000}, {0x3ca34000}, {0x3ca36000}, - {0x3ca38000}, {0x3ca3a000}, {0x3ca3c000}, {0x3ca3e000}, - {0x3ca40000}, {0x3ca42000}, {0x3ca44000}, {0x3ca46000}, - {0x3ca48000}, {0x3ca4a000}, {0x3ca4c000}, {0x3ca4e000}, - {0x3ca50000}, {0x3ca52000}, {0x3ca54000}, {0x3ca56000}, - {0x3ca58000}, {0x3ca5a000}, {0x3ca5c000}, {0x3ca5e000}, - {0x3ca60000}, {0x3ca62000}, {0x3ca64000}, {0x3ca66000}, - {0x3ca68000}, {0x3ca6a000}, {0x3ca6c000}, {0x3ca6e000}, - {0x3ca70000}, {0x3ca72000}, {0x3ca74000}, {0x3ca76000}, - {0x3ca78000}, {0x3ca7a000}, {0x3ca7c000}, {0x3ca7e000}, - {0x3ca80000}, {0x3ca82000}, {0x3ca84000}, {0x3ca86000}, - {0x3ca88000}, {0x3ca8a000}, {0x3ca8c000}, {0x3ca8e000}, - {0x3ca90000}, {0x3ca92000}, {0x3ca94000}, {0x3ca96000}, - {0x3ca98000}, {0x3ca9a000}, {0x3ca9c000}, {0x3ca9e000}, - {0x3caa0000}, {0x3caa2000}, {0x3caa4000}, {0x3caa6000}, - {0x3caa8000}, {0x3caaa000}, {0x3caac000}, {0x3caae000}, - {0x3cab0000}, {0x3cab2000}, {0x3cab4000}, {0x3cab6000}, - {0x3cab8000}, {0x3caba000}, {0x3cabc000}, {0x3cabe000}, - {0x3cac0000}, {0x3cac2000}, {0x3cac4000}, {0x3cac6000}, - {0x3cac8000}, {0x3caca000}, {0x3cacc000}, {0x3cace000}, - {0x3cad0000}, {0x3cad2000}, {0x3cad4000}, {0x3cad6000}, - {0x3cad8000}, {0x3cada000}, {0x3cadc000}, {0x3cade000}, - {0x3cae0000}, {0x3cae2000}, {0x3cae4000}, {0x3cae6000}, - {0x3cae8000}, {0x3caea000}, {0x3caec000}, {0x3caee000}, - {0x3caf0000}, {0x3caf2000}, {0x3caf4000}, {0x3caf6000}, - {0x3caf8000}, {0x3cafa000}, {0x3cafc000}, {0x3cafe000}, - {0x3cb00000}, {0x3cb02000}, {0x3cb04000}, {0x3cb06000}, - {0x3cb08000}, {0x3cb0a000}, {0x3cb0c000}, {0x3cb0e000}, - {0x3cb10000}, {0x3cb12000}, {0x3cb14000}, {0x3cb16000}, - {0x3cb18000}, {0x3cb1a000}, {0x3cb1c000}, {0x3cb1e000}, - {0x3cb20000}, {0x3cb22000}, {0x3cb24000}, {0x3cb26000}, - {0x3cb28000}, {0x3cb2a000}, {0x3cb2c000}, {0x3cb2e000}, - {0x3cb30000}, {0x3cb32000}, {0x3cb34000}, {0x3cb36000}, - {0x3cb38000}, {0x3cb3a000}, {0x3cb3c000}, {0x3cb3e000}, - {0x3cb40000}, {0x3cb42000}, {0x3cb44000}, {0x3cb46000}, - {0x3cb48000}, {0x3cb4a000}, {0x3cb4c000}, {0x3cb4e000}, - {0x3cb50000}, {0x3cb52000}, {0x3cb54000}, {0x3cb56000}, - {0x3cb58000}, {0x3cb5a000}, {0x3cb5c000}, {0x3cb5e000}, - {0x3cb60000}, {0x3cb62000}, {0x3cb64000}, {0x3cb66000}, - {0x3cb68000}, {0x3cb6a000}, {0x3cb6c000}, {0x3cb6e000}, - {0x3cb70000}, {0x3cb72000}, {0x3cb74000}, {0x3cb76000}, - {0x3cb78000}, {0x3cb7a000}, {0x3cb7c000}, {0x3cb7e000}, - {0x3cb80000}, {0x3cb82000}, {0x3cb84000}, {0x3cb86000}, - {0x3cb88000}, {0x3cb8a000}, {0x3cb8c000}, {0x3cb8e000}, - {0x3cb90000}, {0x3cb92000}, {0x3cb94000}, {0x3cb96000}, - {0x3cb98000}, {0x3cb9a000}, {0x3cb9c000}, {0x3cb9e000}, - {0x3cba0000}, {0x3cba2000}, {0x3cba4000}, {0x3cba6000}, - {0x3cba8000}, {0x3cbaa000}, {0x3cbac000}, {0x3cbae000}, - {0x3cbb0000}, {0x3cbb2000}, {0x3cbb4000}, {0x3cbb6000}, - {0x3cbb8000}, {0x3cbba000}, {0x3cbbc000}, {0x3cbbe000}, - {0x3cbc0000}, {0x3cbc2000}, {0x3cbc4000}, {0x3cbc6000}, - {0x3cbc8000}, {0x3cbca000}, {0x3cbcc000}, {0x3cbce000}, - {0x3cbd0000}, {0x3cbd2000}, {0x3cbd4000}, {0x3cbd6000}, - {0x3cbd8000}, {0x3cbda000}, {0x3cbdc000}, {0x3cbde000}, - {0x3cbe0000}, {0x3cbe2000}, {0x3cbe4000}, {0x3cbe6000}, - {0x3cbe8000}, {0x3cbea000}, {0x3cbec000}, {0x3cbee000}, - {0x3cbf0000}, {0x3cbf2000}, {0x3cbf4000}, {0x3cbf6000}, - {0x3cbf8000}, {0x3cbfa000}, {0x3cbfc000}, {0x3cbfe000}, - {0x3cc00000}, {0x3cc02000}, {0x3cc04000}, {0x3cc06000}, - {0x3cc08000}, {0x3cc0a000}, {0x3cc0c000}, {0x3cc0e000}, - {0x3cc10000}, {0x3cc12000}, {0x3cc14000}, {0x3cc16000}, - {0x3cc18000}, {0x3cc1a000}, {0x3cc1c000}, {0x3cc1e000}, - {0x3cc20000}, {0x3cc22000}, {0x3cc24000}, {0x3cc26000}, - {0x3cc28000}, {0x3cc2a000}, {0x3cc2c000}, {0x3cc2e000}, - {0x3cc30000}, {0x3cc32000}, {0x3cc34000}, {0x3cc36000}, - {0x3cc38000}, {0x3cc3a000}, {0x3cc3c000}, {0x3cc3e000}, - {0x3cc40000}, {0x3cc42000}, {0x3cc44000}, {0x3cc46000}, - {0x3cc48000}, {0x3cc4a000}, {0x3cc4c000}, {0x3cc4e000}, - {0x3cc50000}, {0x3cc52000}, {0x3cc54000}, {0x3cc56000}, - {0x3cc58000}, {0x3cc5a000}, {0x3cc5c000}, {0x3cc5e000}, - {0x3cc60000}, {0x3cc62000}, {0x3cc64000}, {0x3cc66000}, - {0x3cc68000}, {0x3cc6a000}, {0x3cc6c000}, {0x3cc6e000}, - {0x3cc70000}, {0x3cc72000}, {0x3cc74000}, {0x3cc76000}, - {0x3cc78000}, {0x3cc7a000}, {0x3cc7c000}, {0x3cc7e000}, - {0x3cc80000}, {0x3cc82000}, {0x3cc84000}, {0x3cc86000}, - {0x3cc88000}, {0x3cc8a000}, {0x3cc8c000}, {0x3cc8e000}, - {0x3cc90000}, {0x3cc92000}, {0x3cc94000}, {0x3cc96000}, - {0x3cc98000}, {0x3cc9a000}, {0x3cc9c000}, {0x3cc9e000}, - {0x3cca0000}, {0x3cca2000}, {0x3cca4000}, {0x3cca6000}, - {0x3cca8000}, {0x3ccaa000}, {0x3ccac000}, {0x3ccae000}, - {0x3ccb0000}, {0x3ccb2000}, {0x3ccb4000}, {0x3ccb6000}, - {0x3ccb8000}, {0x3ccba000}, {0x3ccbc000}, {0x3ccbe000}, - {0x3ccc0000}, {0x3ccc2000}, {0x3ccc4000}, {0x3ccc6000}, - {0x3ccc8000}, {0x3ccca000}, {0x3cccc000}, {0x3ccce000}, - {0x3ccd0000}, {0x3ccd2000}, {0x3ccd4000}, {0x3ccd6000}, - {0x3ccd8000}, {0x3ccda000}, {0x3ccdc000}, {0x3ccde000}, - {0x3cce0000}, {0x3cce2000}, {0x3cce4000}, {0x3cce6000}, - {0x3cce8000}, {0x3ccea000}, {0x3ccec000}, {0x3ccee000}, - {0x3ccf0000}, {0x3ccf2000}, {0x3ccf4000}, {0x3ccf6000}, - {0x3ccf8000}, {0x3ccfa000}, {0x3ccfc000}, {0x3ccfe000}, - {0x3cd00000}, {0x3cd02000}, {0x3cd04000}, {0x3cd06000}, - {0x3cd08000}, {0x3cd0a000}, {0x3cd0c000}, {0x3cd0e000}, - {0x3cd10000}, {0x3cd12000}, {0x3cd14000}, {0x3cd16000}, - {0x3cd18000}, {0x3cd1a000}, {0x3cd1c000}, {0x3cd1e000}, - {0x3cd20000}, {0x3cd22000}, {0x3cd24000}, {0x3cd26000}, - {0x3cd28000}, {0x3cd2a000}, {0x3cd2c000}, {0x3cd2e000}, - {0x3cd30000}, {0x3cd32000}, {0x3cd34000}, {0x3cd36000}, - {0x3cd38000}, {0x3cd3a000}, {0x3cd3c000}, {0x3cd3e000}, - {0x3cd40000}, {0x3cd42000}, {0x3cd44000}, {0x3cd46000}, - {0x3cd48000}, {0x3cd4a000}, {0x3cd4c000}, {0x3cd4e000}, - {0x3cd50000}, {0x3cd52000}, {0x3cd54000}, {0x3cd56000}, - {0x3cd58000}, {0x3cd5a000}, {0x3cd5c000}, {0x3cd5e000}, - {0x3cd60000}, {0x3cd62000}, {0x3cd64000}, {0x3cd66000}, - {0x3cd68000}, {0x3cd6a000}, {0x3cd6c000}, {0x3cd6e000}, - {0x3cd70000}, {0x3cd72000}, {0x3cd74000}, {0x3cd76000}, - {0x3cd78000}, {0x3cd7a000}, {0x3cd7c000}, {0x3cd7e000}, - {0x3cd80000}, {0x3cd82000}, {0x3cd84000}, {0x3cd86000}, - {0x3cd88000}, {0x3cd8a000}, {0x3cd8c000}, {0x3cd8e000}, - {0x3cd90000}, {0x3cd92000}, {0x3cd94000}, {0x3cd96000}, - {0x3cd98000}, {0x3cd9a000}, {0x3cd9c000}, {0x3cd9e000}, - {0x3cda0000}, {0x3cda2000}, {0x3cda4000}, {0x3cda6000}, - {0x3cda8000}, {0x3cdaa000}, {0x3cdac000}, {0x3cdae000}, - {0x3cdb0000}, {0x3cdb2000}, {0x3cdb4000}, {0x3cdb6000}, - {0x3cdb8000}, {0x3cdba000}, {0x3cdbc000}, {0x3cdbe000}, - {0x3cdc0000}, {0x3cdc2000}, {0x3cdc4000}, {0x3cdc6000}, - {0x3cdc8000}, {0x3cdca000}, {0x3cdcc000}, {0x3cdce000}, - {0x3cdd0000}, {0x3cdd2000}, {0x3cdd4000}, {0x3cdd6000}, - {0x3cdd8000}, {0x3cdda000}, {0x3cddc000}, {0x3cdde000}, - {0x3cde0000}, {0x3cde2000}, {0x3cde4000}, {0x3cde6000}, - {0x3cde8000}, {0x3cdea000}, {0x3cdec000}, {0x3cdee000}, - {0x3cdf0000}, {0x3cdf2000}, {0x3cdf4000}, {0x3cdf6000}, - {0x3cdf8000}, {0x3cdfa000}, {0x3cdfc000}, {0x3cdfe000}, - {0x3ce00000}, {0x3ce02000}, {0x3ce04000}, {0x3ce06000}, - {0x3ce08000}, {0x3ce0a000}, {0x3ce0c000}, {0x3ce0e000}, - {0x3ce10000}, {0x3ce12000}, {0x3ce14000}, {0x3ce16000}, - {0x3ce18000}, {0x3ce1a000}, {0x3ce1c000}, {0x3ce1e000}, - {0x3ce20000}, {0x3ce22000}, {0x3ce24000}, {0x3ce26000}, - {0x3ce28000}, {0x3ce2a000}, {0x3ce2c000}, {0x3ce2e000}, - {0x3ce30000}, {0x3ce32000}, {0x3ce34000}, {0x3ce36000}, - {0x3ce38000}, {0x3ce3a000}, {0x3ce3c000}, {0x3ce3e000}, - {0x3ce40000}, {0x3ce42000}, {0x3ce44000}, {0x3ce46000}, - {0x3ce48000}, {0x3ce4a000}, {0x3ce4c000}, {0x3ce4e000}, - {0x3ce50000}, {0x3ce52000}, {0x3ce54000}, {0x3ce56000}, - {0x3ce58000}, {0x3ce5a000}, {0x3ce5c000}, {0x3ce5e000}, - {0x3ce60000}, {0x3ce62000}, {0x3ce64000}, {0x3ce66000}, - {0x3ce68000}, {0x3ce6a000}, {0x3ce6c000}, {0x3ce6e000}, - {0x3ce70000}, {0x3ce72000}, {0x3ce74000}, {0x3ce76000}, - {0x3ce78000}, {0x3ce7a000}, {0x3ce7c000}, {0x3ce7e000}, - {0x3ce80000}, {0x3ce82000}, {0x3ce84000}, {0x3ce86000}, - {0x3ce88000}, {0x3ce8a000}, {0x3ce8c000}, {0x3ce8e000}, - {0x3ce90000}, {0x3ce92000}, {0x3ce94000}, {0x3ce96000}, - {0x3ce98000}, {0x3ce9a000}, {0x3ce9c000}, {0x3ce9e000}, - {0x3cea0000}, {0x3cea2000}, {0x3cea4000}, {0x3cea6000}, - {0x3cea8000}, {0x3ceaa000}, {0x3ceac000}, {0x3ceae000}, - {0x3ceb0000}, {0x3ceb2000}, {0x3ceb4000}, {0x3ceb6000}, - {0x3ceb8000}, {0x3ceba000}, {0x3cebc000}, {0x3cebe000}, - {0x3cec0000}, {0x3cec2000}, {0x3cec4000}, {0x3cec6000}, - {0x3cec8000}, {0x3ceca000}, {0x3cecc000}, {0x3cece000}, - {0x3ced0000}, {0x3ced2000}, {0x3ced4000}, {0x3ced6000}, - {0x3ced8000}, {0x3ceda000}, {0x3cedc000}, {0x3cede000}, - {0x3cee0000}, {0x3cee2000}, {0x3cee4000}, {0x3cee6000}, - {0x3cee8000}, {0x3ceea000}, {0x3ceec000}, {0x3ceee000}, - {0x3cef0000}, {0x3cef2000}, {0x3cef4000}, {0x3cef6000}, - {0x3cef8000}, {0x3cefa000}, {0x3cefc000}, {0x3cefe000}, - {0x3cf00000}, {0x3cf02000}, {0x3cf04000}, {0x3cf06000}, - {0x3cf08000}, {0x3cf0a000}, {0x3cf0c000}, {0x3cf0e000}, - {0x3cf10000}, {0x3cf12000}, {0x3cf14000}, {0x3cf16000}, - {0x3cf18000}, {0x3cf1a000}, {0x3cf1c000}, {0x3cf1e000}, - {0x3cf20000}, {0x3cf22000}, {0x3cf24000}, {0x3cf26000}, - {0x3cf28000}, {0x3cf2a000}, {0x3cf2c000}, {0x3cf2e000}, - {0x3cf30000}, {0x3cf32000}, {0x3cf34000}, {0x3cf36000}, - {0x3cf38000}, {0x3cf3a000}, {0x3cf3c000}, {0x3cf3e000}, - {0x3cf40000}, {0x3cf42000}, {0x3cf44000}, {0x3cf46000}, - {0x3cf48000}, {0x3cf4a000}, {0x3cf4c000}, {0x3cf4e000}, - {0x3cf50000}, {0x3cf52000}, {0x3cf54000}, {0x3cf56000}, - {0x3cf58000}, {0x3cf5a000}, {0x3cf5c000}, {0x3cf5e000}, - {0x3cf60000}, {0x3cf62000}, {0x3cf64000}, {0x3cf66000}, - {0x3cf68000}, {0x3cf6a000}, {0x3cf6c000}, {0x3cf6e000}, - {0x3cf70000}, {0x3cf72000}, {0x3cf74000}, {0x3cf76000}, - {0x3cf78000}, {0x3cf7a000}, {0x3cf7c000}, {0x3cf7e000}, - {0x3cf80000}, {0x3cf82000}, {0x3cf84000}, {0x3cf86000}, - {0x3cf88000}, {0x3cf8a000}, {0x3cf8c000}, {0x3cf8e000}, - {0x3cf90000}, {0x3cf92000}, {0x3cf94000}, {0x3cf96000}, - {0x3cf98000}, {0x3cf9a000}, {0x3cf9c000}, {0x3cf9e000}, - {0x3cfa0000}, {0x3cfa2000}, {0x3cfa4000}, {0x3cfa6000}, - {0x3cfa8000}, {0x3cfaa000}, {0x3cfac000}, {0x3cfae000}, - {0x3cfb0000}, {0x3cfb2000}, {0x3cfb4000}, {0x3cfb6000}, - {0x3cfb8000}, {0x3cfba000}, {0x3cfbc000}, {0x3cfbe000}, - {0x3cfc0000}, {0x3cfc2000}, {0x3cfc4000}, {0x3cfc6000}, - {0x3cfc8000}, {0x3cfca000}, {0x3cfcc000}, {0x3cfce000}, - {0x3cfd0000}, {0x3cfd2000}, {0x3cfd4000}, {0x3cfd6000}, - {0x3cfd8000}, {0x3cfda000}, {0x3cfdc000}, {0x3cfde000}, - {0x3cfe0000}, {0x3cfe2000}, {0x3cfe4000}, {0x3cfe6000}, - {0x3cfe8000}, {0x3cfea000}, {0x3cfec000}, {0x3cfee000}, - {0x3cff0000}, {0x3cff2000}, {0x3cff4000}, {0x3cff6000}, - {0x3cff8000}, {0x3cffa000}, {0x3cffc000}, {0x3cffe000}, - {0x3d000000}, {0x3d002000}, {0x3d004000}, {0x3d006000}, - {0x3d008000}, {0x3d00a000}, {0x3d00c000}, {0x3d00e000}, - {0x3d010000}, {0x3d012000}, {0x3d014000}, {0x3d016000}, - {0x3d018000}, {0x3d01a000}, {0x3d01c000}, {0x3d01e000}, - {0x3d020000}, {0x3d022000}, {0x3d024000}, {0x3d026000}, - {0x3d028000}, {0x3d02a000}, {0x3d02c000}, {0x3d02e000}, - {0x3d030000}, {0x3d032000}, {0x3d034000}, {0x3d036000}, - {0x3d038000}, {0x3d03a000}, {0x3d03c000}, {0x3d03e000}, - {0x3d040000}, {0x3d042000}, {0x3d044000}, {0x3d046000}, - {0x3d048000}, {0x3d04a000}, {0x3d04c000}, {0x3d04e000}, - {0x3d050000}, {0x3d052000}, {0x3d054000}, {0x3d056000}, - {0x3d058000}, {0x3d05a000}, {0x3d05c000}, {0x3d05e000}, - {0x3d060000}, {0x3d062000}, {0x3d064000}, {0x3d066000}, - {0x3d068000}, {0x3d06a000}, {0x3d06c000}, {0x3d06e000}, - {0x3d070000}, {0x3d072000}, {0x3d074000}, {0x3d076000}, - {0x3d078000}, {0x3d07a000}, {0x3d07c000}, {0x3d07e000}, - {0x3d080000}, {0x3d082000}, {0x3d084000}, {0x3d086000}, - {0x3d088000}, {0x3d08a000}, {0x3d08c000}, {0x3d08e000}, - {0x3d090000}, {0x3d092000}, {0x3d094000}, {0x3d096000}, - {0x3d098000}, {0x3d09a000}, {0x3d09c000}, {0x3d09e000}, - {0x3d0a0000}, {0x3d0a2000}, {0x3d0a4000}, {0x3d0a6000}, - {0x3d0a8000}, {0x3d0aa000}, {0x3d0ac000}, {0x3d0ae000}, - {0x3d0b0000}, {0x3d0b2000}, {0x3d0b4000}, {0x3d0b6000}, - {0x3d0b8000}, {0x3d0ba000}, {0x3d0bc000}, {0x3d0be000}, - {0x3d0c0000}, {0x3d0c2000}, {0x3d0c4000}, {0x3d0c6000}, - {0x3d0c8000}, {0x3d0ca000}, {0x3d0cc000}, {0x3d0ce000}, - {0x3d0d0000}, {0x3d0d2000}, {0x3d0d4000}, {0x3d0d6000}, - {0x3d0d8000}, {0x3d0da000}, {0x3d0dc000}, {0x3d0de000}, - {0x3d0e0000}, {0x3d0e2000}, {0x3d0e4000}, {0x3d0e6000}, - {0x3d0e8000}, {0x3d0ea000}, {0x3d0ec000}, {0x3d0ee000}, - {0x3d0f0000}, {0x3d0f2000}, {0x3d0f4000}, {0x3d0f6000}, - {0x3d0f8000}, {0x3d0fa000}, {0x3d0fc000}, {0x3d0fe000}, - {0x3d100000}, {0x3d102000}, {0x3d104000}, {0x3d106000}, - {0x3d108000}, {0x3d10a000}, {0x3d10c000}, {0x3d10e000}, - {0x3d110000}, {0x3d112000}, {0x3d114000}, {0x3d116000}, - {0x3d118000}, {0x3d11a000}, {0x3d11c000}, {0x3d11e000}, - {0x3d120000}, {0x3d122000}, {0x3d124000}, {0x3d126000}, - {0x3d128000}, {0x3d12a000}, {0x3d12c000}, {0x3d12e000}, - {0x3d130000}, {0x3d132000}, {0x3d134000}, {0x3d136000}, - {0x3d138000}, {0x3d13a000}, {0x3d13c000}, {0x3d13e000}, - {0x3d140000}, {0x3d142000}, {0x3d144000}, {0x3d146000}, - {0x3d148000}, {0x3d14a000}, {0x3d14c000}, {0x3d14e000}, - {0x3d150000}, {0x3d152000}, {0x3d154000}, {0x3d156000}, - {0x3d158000}, {0x3d15a000}, {0x3d15c000}, {0x3d15e000}, - {0x3d160000}, {0x3d162000}, {0x3d164000}, {0x3d166000}, - {0x3d168000}, {0x3d16a000}, {0x3d16c000}, {0x3d16e000}, - {0x3d170000}, {0x3d172000}, {0x3d174000}, {0x3d176000}, - {0x3d178000}, {0x3d17a000}, {0x3d17c000}, {0x3d17e000}, - {0x3d180000}, {0x3d182000}, {0x3d184000}, {0x3d186000}, - {0x3d188000}, {0x3d18a000}, {0x3d18c000}, {0x3d18e000}, - {0x3d190000}, {0x3d192000}, {0x3d194000}, {0x3d196000}, - {0x3d198000}, {0x3d19a000}, {0x3d19c000}, {0x3d19e000}, - {0x3d1a0000}, {0x3d1a2000}, {0x3d1a4000}, {0x3d1a6000}, - {0x3d1a8000}, {0x3d1aa000}, {0x3d1ac000}, {0x3d1ae000}, - {0x3d1b0000}, {0x3d1b2000}, {0x3d1b4000}, {0x3d1b6000}, - {0x3d1b8000}, {0x3d1ba000}, {0x3d1bc000}, {0x3d1be000}, - {0x3d1c0000}, {0x3d1c2000}, {0x3d1c4000}, {0x3d1c6000}, - {0x3d1c8000}, {0x3d1ca000}, {0x3d1cc000}, {0x3d1ce000}, - {0x3d1d0000}, {0x3d1d2000}, {0x3d1d4000}, {0x3d1d6000}, - {0x3d1d8000}, {0x3d1da000}, {0x3d1dc000}, {0x3d1de000}, - {0x3d1e0000}, {0x3d1e2000}, {0x3d1e4000}, {0x3d1e6000}, - {0x3d1e8000}, {0x3d1ea000}, {0x3d1ec000}, {0x3d1ee000}, - {0x3d1f0000}, {0x3d1f2000}, {0x3d1f4000}, {0x3d1f6000}, - {0x3d1f8000}, {0x3d1fa000}, {0x3d1fc000}, {0x3d1fe000}, - {0x3d200000}, {0x3d202000}, {0x3d204000}, {0x3d206000}, - {0x3d208000}, {0x3d20a000}, {0x3d20c000}, {0x3d20e000}, - {0x3d210000}, {0x3d212000}, {0x3d214000}, {0x3d216000}, - {0x3d218000}, {0x3d21a000}, {0x3d21c000}, {0x3d21e000}, - {0x3d220000}, {0x3d222000}, {0x3d224000}, {0x3d226000}, - {0x3d228000}, {0x3d22a000}, {0x3d22c000}, {0x3d22e000}, - {0x3d230000}, {0x3d232000}, {0x3d234000}, {0x3d236000}, - {0x3d238000}, {0x3d23a000}, {0x3d23c000}, {0x3d23e000}, - {0x3d240000}, {0x3d242000}, {0x3d244000}, {0x3d246000}, - {0x3d248000}, {0x3d24a000}, {0x3d24c000}, {0x3d24e000}, - {0x3d250000}, {0x3d252000}, {0x3d254000}, {0x3d256000}, - {0x3d258000}, {0x3d25a000}, {0x3d25c000}, {0x3d25e000}, - {0x3d260000}, {0x3d262000}, {0x3d264000}, {0x3d266000}, - {0x3d268000}, {0x3d26a000}, {0x3d26c000}, {0x3d26e000}, - {0x3d270000}, {0x3d272000}, {0x3d274000}, {0x3d276000}, - {0x3d278000}, {0x3d27a000}, {0x3d27c000}, {0x3d27e000}, - {0x3d280000}, {0x3d282000}, {0x3d284000}, {0x3d286000}, - {0x3d288000}, {0x3d28a000}, {0x3d28c000}, {0x3d28e000}, - {0x3d290000}, {0x3d292000}, {0x3d294000}, {0x3d296000}, - {0x3d298000}, {0x3d29a000}, {0x3d29c000}, {0x3d29e000}, - {0x3d2a0000}, {0x3d2a2000}, {0x3d2a4000}, {0x3d2a6000}, - {0x3d2a8000}, {0x3d2aa000}, {0x3d2ac000}, {0x3d2ae000}, - {0x3d2b0000}, {0x3d2b2000}, {0x3d2b4000}, {0x3d2b6000}, - {0x3d2b8000}, {0x3d2ba000}, {0x3d2bc000}, {0x3d2be000}, - {0x3d2c0000}, {0x3d2c2000}, {0x3d2c4000}, {0x3d2c6000}, - {0x3d2c8000}, {0x3d2ca000}, {0x3d2cc000}, {0x3d2ce000}, - {0x3d2d0000}, {0x3d2d2000}, {0x3d2d4000}, {0x3d2d6000}, - {0x3d2d8000}, {0x3d2da000}, {0x3d2dc000}, {0x3d2de000}, - {0x3d2e0000}, {0x3d2e2000}, {0x3d2e4000}, {0x3d2e6000}, - {0x3d2e8000}, {0x3d2ea000}, {0x3d2ec000}, {0x3d2ee000}, - {0x3d2f0000}, {0x3d2f2000}, {0x3d2f4000}, {0x3d2f6000}, - {0x3d2f8000}, {0x3d2fa000}, {0x3d2fc000}, {0x3d2fe000}, - {0x3d300000}, {0x3d302000}, {0x3d304000}, {0x3d306000}, - {0x3d308000}, {0x3d30a000}, {0x3d30c000}, {0x3d30e000}, - {0x3d310000}, {0x3d312000}, {0x3d314000}, {0x3d316000}, - {0x3d318000}, {0x3d31a000}, {0x3d31c000}, {0x3d31e000}, - {0x3d320000}, {0x3d322000}, {0x3d324000}, {0x3d326000}, - {0x3d328000}, {0x3d32a000}, {0x3d32c000}, {0x3d32e000}, - {0x3d330000}, {0x3d332000}, {0x3d334000}, {0x3d336000}, - {0x3d338000}, {0x3d33a000}, {0x3d33c000}, {0x3d33e000}, - {0x3d340000}, {0x3d342000}, {0x3d344000}, {0x3d346000}, - {0x3d348000}, {0x3d34a000}, {0x3d34c000}, {0x3d34e000}, - {0x3d350000}, {0x3d352000}, {0x3d354000}, {0x3d356000}, - {0x3d358000}, {0x3d35a000}, {0x3d35c000}, {0x3d35e000}, - {0x3d360000}, {0x3d362000}, {0x3d364000}, {0x3d366000}, - {0x3d368000}, {0x3d36a000}, {0x3d36c000}, {0x3d36e000}, - {0x3d370000}, {0x3d372000}, {0x3d374000}, {0x3d376000}, - {0x3d378000}, {0x3d37a000}, {0x3d37c000}, {0x3d37e000}, - {0x3d380000}, {0x3d382000}, {0x3d384000}, {0x3d386000}, - {0x3d388000}, {0x3d38a000}, {0x3d38c000}, {0x3d38e000}, - {0x3d390000}, {0x3d392000}, {0x3d394000}, {0x3d396000}, - {0x3d398000}, {0x3d39a000}, {0x3d39c000}, {0x3d39e000}, - {0x3d3a0000}, {0x3d3a2000}, {0x3d3a4000}, {0x3d3a6000}, - {0x3d3a8000}, {0x3d3aa000}, {0x3d3ac000}, {0x3d3ae000}, - {0x3d3b0000}, {0x3d3b2000}, {0x3d3b4000}, {0x3d3b6000}, - {0x3d3b8000}, {0x3d3ba000}, {0x3d3bc000}, {0x3d3be000}, - {0x3d3c0000}, {0x3d3c2000}, {0x3d3c4000}, {0x3d3c6000}, - {0x3d3c8000}, {0x3d3ca000}, {0x3d3cc000}, {0x3d3ce000}, - {0x3d3d0000}, {0x3d3d2000}, {0x3d3d4000}, {0x3d3d6000}, - {0x3d3d8000}, {0x3d3da000}, {0x3d3dc000}, {0x3d3de000}, - {0x3d3e0000}, {0x3d3e2000}, {0x3d3e4000}, {0x3d3e6000}, - {0x3d3e8000}, {0x3d3ea000}, {0x3d3ec000}, {0x3d3ee000}, - {0x3d3f0000}, {0x3d3f2000}, {0x3d3f4000}, {0x3d3f6000}, - {0x3d3f8000}, {0x3d3fa000}, {0x3d3fc000}, {0x3d3fe000}, - {0x3d400000}, {0x3d402000}, {0x3d404000}, {0x3d406000}, - {0x3d408000}, {0x3d40a000}, {0x3d40c000}, {0x3d40e000}, - {0x3d410000}, {0x3d412000}, {0x3d414000}, {0x3d416000}, - {0x3d418000}, {0x3d41a000}, {0x3d41c000}, {0x3d41e000}, - {0x3d420000}, {0x3d422000}, {0x3d424000}, {0x3d426000}, - {0x3d428000}, {0x3d42a000}, {0x3d42c000}, {0x3d42e000}, - {0x3d430000}, {0x3d432000}, {0x3d434000}, {0x3d436000}, - {0x3d438000}, {0x3d43a000}, {0x3d43c000}, {0x3d43e000}, - {0x3d440000}, {0x3d442000}, {0x3d444000}, {0x3d446000}, - {0x3d448000}, {0x3d44a000}, {0x3d44c000}, {0x3d44e000}, - {0x3d450000}, {0x3d452000}, {0x3d454000}, {0x3d456000}, - {0x3d458000}, {0x3d45a000}, {0x3d45c000}, {0x3d45e000}, - {0x3d460000}, {0x3d462000}, {0x3d464000}, {0x3d466000}, - {0x3d468000}, {0x3d46a000}, {0x3d46c000}, {0x3d46e000}, - {0x3d470000}, {0x3d472000}, {0x3d474000}, {0x3d476000}, - {0x3d478000}, {0x3d47a000}, {0x3d47c000}, {0x3d47e000}, - {0x3d480000}, {0x3d482000}, {0x3d484000}, {0x3d486000}, - {0x3d488000}, {0x3d48a000}, {0x3d48c000}, {0x3d48e000}, - {0x3d490000}, {0x3d492000}, {0x3d494000}, {0x3d496000}, - {0x3d498000}, {0x3d49a000}, {0x3d49c000}, {0x3d49e000}, - {0x3d4a0000}, {0x3d4a2000}, {0x3d4a4000}, {0x3d4a6000}, - {0x3d4a8000}, {0x3d4aa000}, {0x3d4ac000}, {0x3d4ae000}, - {0x3d4b0000}, {0x3d4b2000}, {0x3d4b4000}, {0x3d4b6000}, - {0x3d4b8000}, {0x3d4ba000}, {0x3d4bc000}, {0x3d4be000}, - {0x3d4c0000}, {0x3d4c2000}, {0x3d4c4000}, {0x3d4c6000}, - {0x3d4c8000}, {0x3d4ca000}, {0x3d4cc000}, {0x3d4ce000}, - {0x3d4d0000}, {0x3d4d2000}, {0x3d4d4000}, {0x3d4d6000}, - {0x3d4d8000}, {0x3d4da000}, {0x3d4dc000}, {0x3d4de000}, - {0x3d4e0000}, {0x3d4e2000}, {0x3d4e4000}, {0x3d4e6000}, - {0x3d4e8000}, {0x3d4ea000}, {0x3d4ec000}, {0x3d4ee000}, - {0x3d4f0000}, {0x3d4f2000}, {0x3d4f4000}, {0x3d4f6000}, - {0x3d4f8000}, {0x3d4fa000}, {0x3d4fc000}, {0x3d4fe000}, - {0x3d500000}, {0x3d502000}, {0x3d504000}, {0x3d506000}, - {0x3d508000}, {0x3d50a000}, {0x3d50c000}, {0x3d50e000}, - {0x3d510000}, {0x3d512000}, {0x3d514000}, {0x3d516000}, - {0x3d518000}, {0x3d51a000}, {0x3d51c000}, {0x3d51e000}, - {0x3d520000}, {0x3d522000}, {0x3d524000}, {0x3d526000}, - {0x3d528000}, {0x3d52a000}, {0x3d52c000}, {0x3d52e000}, - {0x3d530000}, {0x3d532000}, {0x3d534000}, {0x3d536000}, - {0x3d538000}, {0x3d53a000}, {0x3d53c000}, {0x3d53e000}, - {0x3d540000}, {0x3d542000}, {0x3d544000}, {0x3d546000}, - {0x3d548000}, {0x3d54a000}, {0x3d54c000}, {0x3d54e000}, - {0x3d550000}, {0x3d552000}, {0x3d554000}, {0x3d556000}, - {0x3d558000}, {0x3d55a000}, {0x3d55c000}, {0x3d55e000}, - {0x3d560000}, {0x3d562000}, {0x3d564000}, {0x3d566000}, - {0x3d568000}, {0x3d56a000}, {0x3d56c000}, {0x3d56e000}, - {0x3d570000}, {0x3d572000}, {0x3d574000}, {0x3d576000}, - {0x3d578000}, {0x3d57a000}, {0x3d57c000}, {0x3d57e000}, - {0x3d580000}, {0x3d582000}, {0x3d584000}, {0x3d586000}, - {0x3d588000}, {0x3d58a000}, {0x3d58c000}, {0x3d58e000}, - {0x3d590000}, {0x3d592000}, {0x3d594000}, {0x3d596000}, - {0x3d598000}, {0x3d59a000}, {0x3d59c000}, {0x3d59e000}, - {0x3d5a0000}, {0x3d5a2000}, {0x3d5a4000}, {0x3d5a6000}, - {0x3d5a8000}, {0x3d5aa000}, {0x3d5ac000}, {0x3d5ae000}, - {0x3d5b0000}, {0x3d5b2000}, {0x3d5b4000}, {0x3d5b6000}, - {0x3d5b8000}, {0x3d5ba000}, {0x3d5bc000}, {0x3d5be000}, - {0x3d5c0000}, {0x3d5c2000}, {0x3d5c4000}, {0x3d5c6000}, - {0x3d5c8000}, {0x3d5ca000}, {0x3d5cc000}, {0x3d5ce000}, - {0x3d5d0000}, {0x3d5d2000}, {0x3d5d4000}, {0x3d5d6000}, - {0x3d5d8000}, {0x3d5da000}, {0x3d5dc000}, {0x3d5de000}, - {0x3d5e0000}, {0x3d5e2000}, {0x3d5e4000}, {0x3d5e6000}, - {0x3d5e8000}, {0x3d5ea000}, {0x3d5ec000}, {0x3d5ee000}, - {0x3d5f0000}, {0x3d5f2000}, {0x3d5f4000}, {0x3d5f6000}, - {0x3d5f8000}, {0x3d5fa000}, {0x3d5fc000}, {0x3d5fe000}, - {0x3d600000}, {0x3d602000}, {0x3d604000}, {0x3d606000}, - {0x3d608000}, {0x3d60a000}, {0x3d60c000}, {0x3d60e000}, - {0x3d610000}, {0x3d612000}, {0x3d614000}, {0x3d616000}, - {0x3d618000}, {0x3d61a000}, {0x3d61c000}, {0x3d61e000}, - {0x3d620000}, {0x3d622000}, {0x3d624000}, {0x3d626000}, - {0x3d628000}, {0x3d62a000}, {0x3d62c000}, {0x3d62e000}, - {0x3d630000}, {0x3d632000}, {0x3d634000}, {0x3d636000}, - {0x3d638000}, {0x3d63a000}, {0x3d63c000}, {0x3d63e000}, - {0x3d640000}, {0x3d642000}, {0x3d644000}, {0x3d646000}, - {0x3d648000}, {0x3d64a000}, {0x3d64c000}, {0x3d64e000}, - {0x3d650000}, {0x3d652000}, {0x3d654000}, {0x3d656000}, - {0x3d658000}, {0x3d65a000}, {0x3d65c000}, {0x3d65e000}, - {0x3d660000}, {0x3d662000}, {0x3d664000}, {0x3d666000}, - {0x3d668000}, {0x3d66a000}, {0x3d66c000}, {0x3d66e000}, - {0x3d670000}, {0x3d672000}, {0x3d674000}, {0x3d676000}, - {0x3d678000}, {0x3d67a000}, {0x3d67c000}, {0x3d67e000}, - {0x3d680000}, {0x3d682000}, {0x3d684000}, {0x3d686000}, - {0x3d688000}, {0x3d68a000}, {0x3d68c000}, {0x3d68e000}, - {0x3d690000}, {0x3d692000}, {0x3d694000}, {0x3d696000}, - {0x3d698000}, {0x3d69a000}, {0x3d69c000}, {0x3d69e000}, - {0x3d6a0000}, {0x3d6a2000}, {0x3d6a4000}, {0x3d6a6000}, - {0x3d6a8000}, {0x3d6aa000}, {0x3d6ac000}, {0x3d6ae000}, - {0x3d6b0000}, {0x3d6b2000}, {0x3d6b4000}, {0x3d6b6000}, - {0x3d6b8000}, {0x3d6ba000}, {0x3d6bc000}, {0x3d6be000}, - {0x3d6c0000}, {0x3d6c2000}, {0x3d6c4000}, {0x3d6c6000}, - {0x3d6c8000}, {0x3d6ca000}, {0x3d6cc000}, {0x3d6ce000}, - {0x3d6d0000}, {0x3d6d2000}, {0x3d6d4000}, {0x3d6d6000}, - {0x3d6d8000}, {0x3d6da000}, {0x3d6dc000}, {0x3d6de000}, - {0x3d6e0000}, {0x3d6e2000}, {0x3d6e4000}, {0x3d6e6000}, - {0x3d6e8000}, {0x3d6ea000}, {0x3d6ec000}, {0x3d6ee000}, - {0x3d6f0000}, {0x3d6f2000}, {0x3d6f4000}, {0x3d6f6000}, - {0x3d6f8000}, {0x3d6fa000}, {0x3d6fc000}, {0x3d6fe000}, - {0x3d700000}, {0x3d702000}, {0x3d704000}, {0x3d706000}, - {0x3d708000}, {0x3d70a000}, {0x3d70c000}, {0x3d70e000}, - {0x3d710000}, {0x3d712000}, {0x3d714000}, {0x3d716000}, - {0x3d718000}, {0x3d71a000}, {0x3d71c000}, {0x3d71e000}, - {0x3d720000}, {0x3d722000}, {0x3d724000}, {0x3d726000}, - {0x3d728000}, {0x3d72a000}, {0x3d72c000}, {0x3d72e000}, - {0x3d730000}, {0x3d732000}, {0x3d734000}, {0x3d736000}, - {0x3d738000}, {0x3d73a000}, {0x3d73c000}, {0x3d73e000}, - {0x3d740000}, {0x3d742000}, {0x3d744000}, {0x3d746000}, - {0x3d748000}, {0x3d74a000}, {0x3d74c000}, {0x3d74e000}, - {0x3d750000}, {0x3d752000}, {0x3d754000}, {0x3d756000}, - {0x3d758000}, {0x3d75a000}, {0x3d75c000}, {0x3d75e000}, - {0x3d760000}, {0x3d762000}, {0x3d764000}, {0x3d766000}, - {0x3d768000}, {0x3d76a000}, {0x3d76c000}, {0x3d76e000}, - {0x3d770000}, {0x3d772000}, {0x3d774000}, {0x3d776000}, - {0x3d778000}, {0x3d77a000}, {0x3d77c000}, {0x3d77e000}, - {0x3d780000}, {0x3d782000}, {0x3d784000}, {0x3d786000}, - {0x3d788000}, {0x3d78a000}, {0x3d78c000}, {0x3d78e000}, - {0x3d790000}, {0x3d792000}, {0x3d794000}, {0x3d796000}, - {0x3d798000}, {0x3d79a000}, {0x3d79c000}, {0x3d79e000}, - {0x3d7a0000}, {0x3d7a2000}, {0x3d7a4000}, {0x3d7a6000}, - {0x3d7a8000}, {0x3d7aa000}, {0x3d7ac000}, {0x3d7ae000}, - {0x3d7b0000}, {0x3d7b2000}, {0x3d7b4000}, {0x3d7b6000}, - {0x3d7b8000}, {0x3d7ba000}, {0x3d7bc000}, {0x3d7be000}, - {0x3d7c0000}, {0x3d7c2000}, {0x3d7c4000}, {0x3d7c6000}, - {0x3d7c8000}, {0x3d7ca000}, {0x3d7cc000}, {0x3d7ce000}, - {0x3d7d0000}, {0x3d7d2000}, {0x3d7d4000}, {0x3d7d6000}, - {0x3d7d8000}, {0x3d7da000}, {0x3d7dc000}, {0x3d7de000}, - {0x3d7e0000}, {0x3d7e2000}, {0x3d7e4000}, {0x3d7e6000}, - {0x3d7e8000}, {0x3d7ea000}, {0x3d7ec000}, {0x3d7ee000}, - {0x3d7f0000}, {0x3d7f2000}, {0x3d7f4000}, {0x3d7f6000}, - {0x3d7f8000}, {0x3d7fa000}, {0x3d7fc000}, {0x3d7fe000}, - {0x3d800000}, {0x3d802000}, {0x3d804000}, {0x3d806000}, - {0x3d808000}, {0x3d80a000}, {0x3d80c000}, {0x3d80e000}, - {0x3d810000}, {0x3d812000}, {0x3d814000}, {0x3d816000}, - {0x3d818000}, {0x3d81a000}, {0x3d81c000}, {0x3d81e000}, - {0x3d820000}, {0x3d822000}, {0x3d824000}, {0x3d826000}, - {0x3d828000}, {0x3d82a000}, {0x3d82c000}, {0x3d82e000}, - {0x3d830000}, {0x3d832000}, {0x3d834000}, {0x3d836000}, - {0x3d838000}, {0x3d83a000}, {0x3d83c000}, {0x3d83e000}, - {0x3d840000}, {0x3d842000}, {0x3d844000}, {0x3d846000}, - {0x3d848000}, {0x3d84a000}, {0x3d84c000}, {0x3d84e000}, - {0x3d850000}, {0x3d852000}, {0x3d854000}, {0x3d856000}, - {0x3d858000}, {0x3d85a000}, {0x3d85c000}, {0x3d85e000}, - {0x3d860000}, {0x3d862000}, {0x3d864000}, {0x3d866000}, - {0x3d868000}, {0x3d86a000}, {0x3d86c000}, {0x3d86e000}, - {0x3d870000}, {0x3d872000}, {0x3d874000}, {0x3d876000}, - {0x3d878000}, {0x3d87a000}, {0x3d87c000}, {0x3d87e000}, - {0x3d880000}, {0x3d882000}, {0x3d884000}, {0x3d886000}, - {0x3d888000}, {0x3d88a000}, {0x3d88c000}, {0x3d88e000}, - {0x3d890000}, {0x3d892000}, {0x3d894000}, {0x3d896000}, - {0x3d898000}, {0x3d89a000}, {0x3d89c000}, {0x3d89e000}, - {0x3d8a0000}, {0x3d8a2000}, {0x3d8a4000}, {0x3d8a6000}, - {0x3d8a8000}, {0x3d8aa000}, {0x3d8ac000}, {0x3d8ae000}, - {0x3d8b0000}, {0x3d8b2000}, {0x3d8b4000}, {0x3d8b6000}, - {0x3d8b8000}, {0x3d8ba000}, {0x3d8bc000}, {0x3d8be000}, - {0x3d8c0000}, {0x3d8c2000}, {0x3d8c4000}, {0x3d8c6000}, - {0x3d8c8000}, {0x3d8ca000}, {0x3d8cc000}, {0x3d8ce000}, - {0x3d8d0000}, {0x3d8d2000}, {0x3d8d4000}, {0x3d8d6000}, - {0x3d8d8000}, {0x3d8da000}, {0x3d8dc000}, {0x3d8de000}, - {0x3d8e0000}, {0x3d8e2000}, {0x3d8e4000}, {0x3d8e6000}, - {0x3d8e8000}, {0x3d8ea000}, {0x3d8ec000}, {0x3d8ee000}, - {0x3d8f0000}, {0x3d8f2000}, {0x3d8f4000}, {0x3d8f6000}, - {0x3d8f8000}, {0x3d8fa000}, {0x3d8fc000}, {0x3d8fe000}, - {0x3d900000}, {0x3d902000}, {0x3d904000}, {0x3d906000}, - {0x3d908000}, {0x3d90a000}, {0x3d90c000}, {0x3d90e000}, - {0x3d910000}, {0x3d912000}, {0x3d914000}, {0x3d916000}, - {0x3d918000}, {0x3d91a000}, {0x3d91c000}, {0x3d91e000}, - {0x3d920000}, {0x3d922000}, {0x3d924000}, {0x3d926000}, - {0x3d928000}, {0x3d92a000}, {0x3d92c000}, {0x3d92e000}, - {0x3d930000}, {0x3d932000}, {0x3d934000}, {0x3d936000}, - {0x3d938000}, {0x3d93a000}, {0x3d93c000}, {0x3d93e000}, - {0x3d940000}, {0x3d942000}, {0x3d944000}, {0x3d946000}, - {0x3d948000}, {0x3d94a000}, {0x3d94c000}, {0x3d94e000}, - {0x3d950000}, {0x3d952000}, {0x3d954000}, {0x3d956000}, - {0x3d958000}, {0x3d95a000}, {0x3d95c000}, {0x3d95e000}, - {0x3d960000}, {0x3d962000}, {0x3d964000}, {0x3d966000}, - {0x3d968000}, {0x3d96a000}, {0x3d96c000}, {0x3d96e000}, - {0x3d970000}, {0x3d972000}, {0x3d974000}, {0x3d976000}, - {0x3d978000}, {0x3d97a000}, {0x3d97c000}, {0x3d97e000}, - {0x3d980000}, {0x3d982000}, {0x3d984000}, {0x3d986000}, - {0x3d988000}, {0x3d98a000}, {0x3d98c000}, {0x3d98e000}, - {0x3d990000}, {0x3d992000}, {0x3d994000}, {0x3d996000}, - {0x3d998000}, {0x3d99a000}, {0x3d99c000}, {0x3d99e000}, - {0x3d9a0000}, {0x3d9a2000}, {0x3d9a4000}, {0x3d9a6000}, - {0x3d9a8000}, {0x3d9aa000}, {0x3d9ac000}, {0x3d9ae000}, - {0x3d9b0000}, {0x3d9b2000}, {0x3d9b4000}, {0x3d9b6000}, - {0x3d9b8000}, {0x3d9ba000}, {0x3d9bc000}, {0x3d9be000}, - {0x3d9c0000}, {0x3d9c2000}, {0x3d9c4000}, {0x3d9c6000}, - {0x3d9c8000}, {0x3d9ca000}, {0x3d9cc000}, {0x3d9ce000}, - {0x3d9d0000}, {0x3d9d2000}, {0x3d9d4000}, {0x3d9d6000}, - {0x3d9d8000}, {0x3d9da000}, {0x3d9dc000}, {0x3d9de000}, - {0x3d9e0000}, {0x3d9e2000}, {0x3d9e4000}, {0x3d9e6000}, - {0x3d9e8000}, {0x3d9ea000}, {0x3d9ec000}, {0x3d9ee000}, - {0x3d9f0000}, {0x3d9f2000}, {0x3d9f4000}, {0x3d9f6000}, - {0x3d9f8000}, {0x3d9fa000}, {0x3d9fc000}, {0x3d9fe000}, - {0x3da00000}, {0x3da02000}, {0x3da04000}, {0x3da06000}, - {0x3da08000}, {0x3da0a000}, {0x3da0c000}, {0x3da0e000}, - {0x3da10000}, {0x3da12000}, {0x3da14000}, {0x3da16000}, - {0x3da18000}, {0x3da1a000}, {0x3da1c000}, {0x3da1e000}, - {0x3da20000}, {0x3da22000}, {0x3da24000}, {0x3da26000}, - {0x3da28000}, {0x3da2a000}, {0x3da2c000}, {0x3da2e000}, - {0x3da30000}, {0x3da32000}, {0x3da34000}, {0x3da36000}, - {0x3da38000}, {0x3da3a000}, {0x3da3c000}, {0x3da3e000}, - {0x3da40000}, {0x3da42000}, {0x3da44000}, {0x3da46000}, - {0x3da48000}, {0x3da4a000}, {0x3da4c000}, {0x3da4e000}, - {0x3da50000}, {0x3da52000}, {0x3da54000}, {0x3da56000}, - {0x3da58000}, {0x3da5a000}, {0x3da5c000}, {0x3da5e000}, - {0x3da60000}, {0x3da62000}, {0x3da64000}, {0x3da66000}, - {0x3da68000}, {0x3da6a000}, {0x3da6c000}, {0x3da6e000}, - {0x3da70000}, {0x3da72000}, {0x3da74000}, {0x3da76000}, - {0x3da78000}, {0x3da7a000}, {0x3da7c000}, {0x3da7e000}, - {0x3da80000}, {0x3da82000}, {0x3da84000}, {0x3da86000}, - {0x3da88000}, {0x3da8a000}, {0x3da8c000}, {0x3da8e000}, - {0x3da90000}, {0x3da92000}, {0x3da94000}, {0x3da96000}, - {0x3da98000}, {0x3da9a000}, {0x3da9c000}, {0x3da9e000}, - {0x3daa0000}, {0x3daa2000}, {0x3daa4000}, {0x3daa6000}, - {0x3daa8000}, {0x3daaa000}, {0x3daac000}, {0x3daae000}, - {0x3dab0000}, {0x3dab2000}, {0x3dab4000}, {0x3dab6000}, - {0x3dab8000}, {0x3daba000}, {0x3dabc000}, {0x3dabe000}, - {0x3dac0000}, {0x3dac2000}, {0x3dac4000}, {0x3dac6000}, - {0x3dac8000}, {0x3daca000}, {0x3dacc000}, {0x3dace000}, - {0x3dad0000}, {0x3dad2000}, {0x3dad4000}, {0x3dad6000}, - {0x3dad8000}, {0x3dada000}, {0x3dadc000}, {0x3dade000}, - {0x3dae0000}, {0x3dae2000}, {0x3dae4000}, {0x3dae6000}, - {0x3dae8000}, {0x3daea000}, {0x3daec000}, {0x3daee000}, - {0x3daf0000}, {0x3daf2000}, {0x3daf4000}, {0x3daf6000}, - {0x3daf8000}, {0x3dafa000}, {0x3dafc000}, {0x3dafe000}, - {0x3db00000}, {0x3db02000}, {0x3db04000}, {0x3db06000}, - {0x3db08000}, {0x3db0a000}, {0x3db0c000}, {0x3db0e000}, - {0x3db10000}, {0x3db12000}, {0x3db14000}, {0x3db16000}, - {0x3db18000}, {0x3db1a000}, {0x3db1c000}, {0x3db1e000}, - {0x3db20000}, {0x3db22000}, {0x3db24000}, {0x3db26000}, - {0x3db28000}, {0x3db2a000}, {0x3db2c000}, {0x3db2e000}, - {0x3db30000}, {0x3db32000}, {0x3db34000}, {0x3db36000}, - {0x3db38000}, {0x3db3a000}, {0x3db3c000}, {0x3db3e000}, - {0x3db40000}, {0x3db42000}, {0x3db44000}, {0x3db46000}, - {0x3db48000}, {0x3db4a000}, {0x3db4c000}, {0x3db4e000}, - {0x3db50000}, {0x3db52000}, {0x3db54000}, {0x3db56000}, - {0x3db58000}, {0x3db5a000}, {0x3db5c000}, {0x3db5e000}, - {0x3db60000}, {0x3db62000}, {0x3db64000}, {0x3db66000}, - {0x3db68000}, {0x3db6a000}, {0x3db6c000}, {0x3db6e000}, - {0x3db70000}, {0x3db72000}, {0x3db74000}, {0x3db76000}, - {0x3db78000}, {0x3db7a000}, {0x3db7c000}, {0x3db7e000}, - {0x3db80000}, {0x3db82000}, {0x3db84000}, {0x3db86000}, - {0x3db88000}, {0x3db8a000}, {0x3db8c000}, {0x3db8e000}, - {0x3db90000}, {0x3db92000}, {0x3db94000}, {0x3db96000}, - {0x3db98000}, {0x3db9a000}, {0x3db9c000}, {0x3db9e000}, - {0x3dba0000}, {0x3dba2000}, {0x3dba4000}, {0x3dba6000}, - {0x3dba8000}, {0x3dbaa000}, {0x3dbac000}, {0x3dbae000}, - {0x3dbb0000}, {0x3dbb2000}, {0x3dbb4000}, {0x3dbb6000}, - {0x3dbb8000}, {0x3dbba000}, {0x3dbbc000}, {0x3dbbe000}, - {0x3dbc0000}, {0x3dbc2000}, {0x3dbc4000}, {0x3dbc6000}, - {0x3dbc8000}, {0x3dbca000}, {0x3dbcc000}, {0x3dbce000}, - {0x3dbd0000}, {0x3dbd2000}, {0x3dbd4000}, {0x3dbd6000}, - {0x3dbd8000}, {0x3dbda000}, {0x3dbdc000}, {0x3dbde000}, - {0x3dbe0000}, {0x3dbe2000}, {0x3dbe4000}, {0x3dbe6000}, - {0x3dbe8000}, {0x3dbea000}, {0x3dbec000}, {0x3dbee000}, - {0x3dbf0000}, {0x3dbf2000}, {0x3dbf4000}, {0x3dbf6000}, - {0x3dbf8000}, {0x3dbfa000}, {0x3dbfc000}, {0x3dbfe000}, - {0x3dc00000}, {0x3dc02000}, {0x3dc04000}, {0x3dc06000}, - {0x3dc08000}, {0x3dc0a000}, {0x3dc0c000}, {0x3dc0e000}, - {0x3dc10000}, {0x3dc12000}, {0x3dc14000}, {0x3dc16000}, - {0x3dc18000}, {0x3dc1a000}, {0x3dc1c000}, {0x3dc1e000}, - {0x3dc20000}, {0x3dc22000}, {0x3dc24000}, {0x3dc26000}, - {0x3dc28000}, {0x3dc2a000}, {0x3dc2c000}, {0x3dc2e000}, - {0x3dc30000}, {0x3dc32000}, {0x3dc34000}, {0x3dc36000}, - {0x3dc38000}, {0x3dc3a000}, {0x3dc3c000}, {0x3dc3e000}, - {0x3dc40000}, {0x3dc42000}, {0x3dc44000}, {0x3dc46000}, - {0x3dc48000}, {0x3dc4a000}, {0x3dc4c000}, {0x3dc4e000}, - {0x3dc50000}, {0x3dc52000}, {0x3dc54000}, {0x3dc56000}, - {0x3dc58000}, {0x3dc5a000}, {0x3dc5c000}, {0x3dc5e000}, - {0x3dc60000}, {0x3dc62000}, {0x3dc64000}, {0x3dc66000}, - {0x3dc68000}, {0x3dc6a000}, {0x3dc6c000}, {0x3dc6e000}, - {0x3dc70000}, {0x3dc72000}, {0x3dc74000}, {0x3dc76000}, - {0x3dc78000}, {0x3dc7a000}, {0x3dc7c000}, {0x3dc7e000}, - {0x3dc80000}, {0x3dc82000}, {0x3dc84000}, {0x3dc86000}, - {0x3dc88000}, {0x3dc8a000}, {0x3dc8c000}, {0x3dc8e000}, - {0x3dc90000}, {0x3dc92000}, {0x3dc94000}, {0x3dc96000}, - {0x3dc98000}, {0x3dc9a000}, {0x3dc9c000}, {0x3dc9e000}, - {0x3dca0000}, {0x3dca2000}, {0x3dca4000}, {0x3dca6000}, - {0x3dca8000}, {0x3dcaa000}, {0x3dcac000}, {0x3dcae000}, - {0x3dcb0000}, {0x3dcb2000}, {0x3dcb4000}, {0x3dcb6000}, - {0x3dcb8000}, {0x3dcba000}, {0x3dcbc000}, {0x3dcbe000}, - {0x3dcc0000}, {0x3dcc2000}, {0x3dcc4000}, {0x3dcc6000}, - {0x3dcc8000}, {0x3dcca000}, {0x3dccc000}, {0x3dcce000}, - {0x3dcd0000}, {0x3dcd2000}, {0x3dcd4000}, {0x3dcd6000}, - {0x3dcd8000}, {0x3dcda000}, {0x3dcdc000}, {0x3dcde000}, - {0x3dce0000}, {0x3dce2000}, {0x3dce4000}, {0x3dce6000}, - {0x3dce8000}, {0x3dcea000}, {0x3dcec000}, {0x3dcee000}, - {0x3dcf0000}, {0x3dcf2000}, {0x3dcf4000}, {0x3dcf6000}, - {0x3dcf8000}, {0x3dcfa000}, {0x3dcfc000}, {0x3dcfe000}, - {0x3dd00000}, {0x3dd02000}, {0x3dd04000}, {0x3dd06000}, - {0x3dd08000}, {0x3dd0a000}, {0x3dd0c000}, {0x3dd0e000}, - {0x3dd10000}, {0x3dd12000}, {0x3dd14000}, {0x3dd16000}, - {0x3dd18000}, {0x3dd1a000}, {0x3dd1c000}, {0x3dd1e000}, - {0x3dd20000}, {0x3dd22000}, {0x3dd24000}, {0x3dd26000}, - {0x3dd28000}, {0x3dd2a000}, {0x3dd2c000}, {0x3dd2e000}, - {0x3dd30000}, {0x3dd32000}, {0x3dd34000}, {0x3dd36000}, - {0x3dd38000}, {0x3dd3a000}, {0x3dd3c000}, {0x3dd3e000}, - {0x3dd40000}, {0x3dd42000}, {0x3dd44000}, {0x3dd46000}, - {0x3dd48000}, {0x3dd4a000}, {0x3dd4c000}, {0x3dd4e000}, - {0x3dd50000}, {0x3dd52000}, {0x3dd54000}, {0x3dd56000}, - {0x3dd58000}, {0x3dd5a000}, {0x3dd5c000}, {0x3dd5e000}, - {0x3dd60000}, {0x3dd62000}, {0x3dd64000}, {0x3dd66000}, - {0x3dd68000}, {0x3dd6a000}, {0x3dd6c000}, {0x3dd6e000}, - {0x3dd70000}, {0x3dd72000}, {0x3dd74000}, {0x3dd76000}, - {0x3dd78000}, {0x3dd7a000}, {0x3dd7c000}, {0x3dd7e000}, - {0x3dd80000}, {0x3dd82000}, {0x3dd84000}, {0x3dd86000}, - {0x3dd88000}, {0x3dd8a000}, {0x3dd8c000}, {0x3dd8e000}, - {0x3dd90000}, {0x3dd92000}, {0x3dd94000}, {0x3dd96000}, - {0x3dd98000}, {0x3dd9a000}, {0x3dd9c000}, {0x3dd9e000}, - {0x3dda0000}, {0x3dda2000}, {0x3dda4000}, {0x3dda6000}, - {0x3dda8000}, {0x3ddaa000}, {0x3ddac000}, {0x3ddae000}, - {0x3ddb0000}, {0x3ddb2000}, {0x3ddb4000}, {0x3ddb6000}, - {0x3ddb8000}, {0x3ddba000}, {0x3ddbc000}, {0x3ddbe000}, - {0x3ddc0000}, {0x3ddc2000}, {0x3ddc4000}, {0x3ddc6000}, - {0x3ddc8000}, {0x3ddca000}, {0x3ddcc000}, {0x3ddce000}, - {0x3ddd0000}, {0x3ddd2000}, {0x3ddd4000}, {0x3ddd6000}, - {0x3ddd8000}, {0x3ddda000}, {0x3dddc000}, {0x3ddde000}, - {0x3dde0000}, {0x3dde2000}, {0x3dde4000}, {0x3dde6000}, - {0x3dde8000}, {0x3ddea000}, {0x3ddec000}, {0x3ddee000}, - {0x3ddf0000}, {0x3ddf2000}, {0x3ddf4000}, {0x3ddf6000}, - {0x3ddf8000}, {0x3ddfa000}, {0x3ddfc000}, {0x3ddfe000}, - {0x3de00000}, {0x3de02000}, {0x3de04000}, {0x3de06000}, - {0x3de08000}, {0x3de0a000}, {0x3de0c000}, {0x3de0e000}, - {0x3de10000}, {0x3de12000}, {0x3de14000}, {0x3de16000}, - {0x3de18000}, {0x3de1a000}, {0x3de1c000}, {0x3de1e000}, - {0x3de20000}, {0x3de22000}, {0x3de24000}, {0x3de26000}, - {0x3de28000}, {0x3de2a000}, {0x3de2c000}, {0x3de2e000}, - {0x3de30000}, {0x3de32000}, {0x3de34000}, {0x3de36000}, - {0x3de38000}, {0x3de3a000}, {0x3de3c000}, {0x3de3e000}, - {0x3de40000}, {0x3de42000}, {0x3de44000}, {0x3de46000}, - {0x3de48000}, {0x3de4a000}, {0x3de4c000}, {0x3de4e000}, - {0x3de50000}, {0x3de52000}, {0x3de54000}, {0x3de56000}, - {0x3de58000}, {0x3de5a000}, {0x3de5c000}, {0x3de5e000}, - {0x3de60000}, {0x3de62000}, {0x3de64000}, {0x3de66000}, - {0x3de68000}, {0x3de6a000}, {0x3de6c000}, {0x3de6e000}, - {0x3de70000}, {0x3de72000}, {0x3de74000}, {0x3de76000}, - {0x3de78000}, {0x3de7a000}, {0x3de7c000}, {0x3de7e000}, - {0x3de80000}, {0x3de82000}, {0x3de84000}, {0x3de86000}, - {0x3de88000}, {0x3de8a000}, {0x3de8c000}, {0x3de8e000}, - {0x3de90000}, {0x3de92000}, {0x3de94000}, {0x3de96000}, - {0x3de98000}, {0x3de9a000}, {0x3de9c000}, {0x3de9e000}, - {0x3dea0000}, {0x3dea2000}, {0x3dea4000}, {0x3dea6000}, - {0x3dea8000}, {0x3deaa000}, {0x3deac000}, {0x3deae000}, - {0x3deb0000}, {0x3deb2000}, {0x3deb4000}, {0x3deb6000}, - {0x3deb8000}, {0x3deba000}, {0x3debc000}, {0x3debe000}, - {0x3dec0000}, {0x3dec2000}, {0x3dec4000}, {0x3dec6000}, - {0x3dec8000}, {0x3deca000}, {0x3decc000}, {0x3dece000}, - {0x3ded0000}, {0x3ded2000}, {0x3ded4000}, {0x3ded6000}, - {0x3ded8000}, {0x3deda000}, {0x3dedc000}, {0x3dede000}, - {0x3dee0000}, {0x3dee2000}, {0x3dee4000}, {0x3dee6000}, - {0x3dee8000}, {0x3deea000}, {0x3deec000}, {0x3deee000}, - {0x3def0000}, {0x3def2000}, {0x3def4000}, {0x3def6000}, - {0x3def8000}, {0x3defa000}, {0x3defc000}, {0x3defe000}, - {0x3df00000}, {0x3df02000}, {0x3df04000}, {0x3df06000}, - {0x3df08000}, {0x3df0a000}, {0x3df0c000}, {0x3df0e000}, - {0x3df10000}, {0x3df12000}, {0x3df14000}, {0x3df16000}, - {0x3df18000}, {0x3df1a000}, {0x3df1c000}, {0x3df1e000}, - {0x3df20000}, {0x3df22000}, {0x3df24000}, {0x3df26000}, - {0x3df28000}, {0x3df2a000}, {0x3df2c000}, {0x3df2e000}, - {0x3df30000}, {0x3df32000}, {0x3df34000}, {0x3df36000}, - {0x3df38000}, {0x3df3a000}, {0x3df3c000}, {0x3df3e000}, - {0x3df40000}, {0x3df42000}, {0x3df44000}, {0x3df46000}, - {0x3df48000}, {0x3df4a000}, {0x3df4c000}, {0x3df4e000}, - {0x3df50000}, {0x3df52000}, {0x3df54000}, {0x3df56000}, - {0x3df58000}, {0x3df5a000}, {0x3df5c000}, {0x3df5e000}, - {0x3df60000}, {0x3df62000}, {0x3df64000}, {0x3df66000}, - {0x3df68000}, {0x3df6a000}, {0x3df6c000}, {0x3df6e000}, - {0x3df70000}, {0x3df72000}, {0x3df74000}, {0x3df76000}, - {0x3df78000}, {0x3df7a000}, {0x3df7c000}, {0x3df7e000}, - {0x3df80000}, {0x3df82000}, {0x3df84000}, {0x3df86000}, - {0x3df88000}, {0x3df8a000}, {0x3df8c000}, {0x3df8e000}, - {0x3df90000}, {0x3df92000}, {0x3df94000}, {0x3df96000}, - {0x3df98000}, {0x3df9a000}, {0x3df9c000}, {0x3df9e000}, - {0x3dfa0000}, {0x3dfa2000}, {0x3dfa4000}, {0x3dfa6000}, - {0x3dfa8000}, {0x3dfaa000}, {0x3dfac000}, {0x3dfae000}, - {0x3dfb0000}, {0x3dfb2000}, {0x3dfb4000}, {0x3dfb6000}, - {0x3dfb8000}, {0x3dfba000}, {0x3dfbc000}, {0x3dfbe000}, - {0x3dfc0000}, {0x3dfc2000}, {0x3dfc4000}, {0x3dfc6000}, - {0x3dfc8000}, {0x3dfca000}, {0x3dfcc000}, {0x3dfce000}, - {0x3dfd0000}, {0x3dfd2000}, {0x3dfd4000}, {0x3dfd6000}, - {0x3dfd8000}, {0x3dfda000}, {0x3dfdc000}, {0x3dfde000}, - {0x3dfe0000}, {0x3dfe2000}, {0x3dfe4000}, {0x3dfe6000}, - {0x3dfe8000}, {0x3dfea000}, {0x3dfec000}, {0x3dfee000}, - {0x3dff0000}, {0x3dff2000}, {0x3dff4000}, {0x3dff6000}, - {0x3dff8000}, {0x3dffa000}, {0x3dffc000}, {0x3dffe000}, - {0x3e000000}, {0x3e002000}, {0x3e004000}, {0x3e006000}, - {0x3e008000}, {0x3e00a000}, {0x3e00c000}, {0x3e00e000}, - {0x3e010000}, {0x3e012000}, {0x3e014000}, {0x3e016000}, - {0x3e018000}, {0x3e01a000}, {0x3e01c000}, {0x3e01e000}, - {0x3e020000}, {0x3e022000}, {0x3e024000}, {0x3e026000}, - {0x3e028000}, {0x3e02a000}, {0x3e02c000}, {0x3e02e000}, - {0x3e030000}, {0x3e032000}, {0x3e034000}, {0x3e036000}, - {0x3e038000}, {0x3e03a000}, {0x3e03c000}, {0x3e03e000}, - {0x3e040000}, {0x3e042000}, {0x3e044000}, {0x3e046000}, - {0x3e048000}, {0x3e04a000}, {0x3e04c000}, {0x3e04e000}, - {0x3e050000}, {0x3e052000}, {0x3e054000}, {0x3e056000}, - {0x3e058000}, {0x3e05a000}, {0x3e05c000}, {0x3e05e000}, - {0x3e060000}, {0x3e062000}, {0x3e064000}, {0x3e066000}, - {0x3e068000}, {0x3e06a000}, {0x3e06c000}, {0x3e06e000}, - {0x3e070000}, {0x3e072000}, {0x3e074000}, {0x3e076000}, - {0x3e078000}, {0x3e07a000}, {0x3e07c000}, {0x3e07e000}, - {0x3e080000}, {0x3e082000}, {0x3e084000}, {0x3e086000}, - {0x3e088000}, {0x3e08a000}, {0x3e08c000}, {0x3e08e000}, - {0x3e090000}, {0x3e092000}, {0x3e094000}, {0x3e096000}, - {0x3e098000}, {0x3e09a000}, {0x3e09c000}, {0x3e09e000}, - {0x3e0a0000}, {0x3e0a2000}, {0x3e0a4000}, {0x3e0a6000}, - {0x3e0a8000}, {0x3e0aa000}, {0x3e0ac000}, {0x3e0ae000}, - {0x3e0b0000}, {0x3e0b2000}, {0x3e0b4000}, {0x3e0b6000}, - {0x3e0b8000}, {0x3e0ba000}, {0x3e0bc000}, {0x3e0be000}, - {0x3e0c0000}, {0x3e0c2000}, {0x3e0c4000}, {0x3e0c6000}, - {0x3e0c8000}, {0x3e0ca000}, {0x3e0cc000}, {0x3e0ce000}, - {0x3e0d0000}, {0x3e0d2000}, {0x3e0d4000}, {0x3e0d6000}, - {0x3e0d8000}, {0x3e0da000}, {0x3e0dc000}, {0x3e0de000}, - {0x3e0e0000}, {0x3e0e2000}, {0x3e0e4000}, {0x3e0e6000}, - {0x3e0e8000}, {0x3e0ea000}, {0x3e0ec000}, {0x3e0ee000}, - {0x3e0f0000}, {0x3e0f2000}, {0x3e0f4000}, {0x3e0f6000}, - {0x3e0f8000}, {0x3e0fa000}, {0x3e0fc000}, {0x3e0fe000}, - {0x3e100000}, {0x3e102000}, {0x3e104000}, {0x3e106000}, - {0x3e108000}, {0x3e10a000}, {0x3e10c000}, {0x3e10e000}, - {0x3e110000}, {0x3e112000}, {0x3e114000}, {0x3e116000}, - {0x3e118000}, {0x3e11a000}, {0x3e11c000}, {0x3e11e000}, - {0x3e120000}, {0x3e122000}, {0x3e124000}, {0x3e126000}, - {0x3e128000}, {0x3e12a000}, {0x3e12c000}, {0x3e12e000}, - {0x3e130000}, {0x3e132000}, {0x3e134000}, {0x3e136000}, - {0x3e138000}, {0x3e13a000}, {0x3e13c000}, {0x3e13e000}, - {0x3e140000}, {0x3e142000}, {0x3e144000}, {0x3e146000}, - {0x3e148000}, {0x3e14a000}, {0x3e14c000}, {0x3e14e000}, - {0x3e150000}, {0x3e152000}, {0x3e154000}, {0x3e156000}, - {0x3e158000}, {0x3e15a000}, {0x3e15c000}, {0x3e15e000}, - {0x3e160000}, {0x3e162000}, {0x3e164000}, {0x3e166000}, - {0x3e168000}, {0x3e16a000}, {0x3e16c000}, {0x3e16e000}, - {0x3e170000}, {0x3e172000}, {0x3e174000}, {0x3e176000}, - {0x3e178000}, {0x3e17a000}, {0x3e17c000}, {0x3e17e000}, - {0x3e180000}, {0x3e182000}, {0x3e184000}, {0x3e186000}, - {0x3e188000}, {0x3e18a000}, {0x3e18c000}, {0x3e18e000}, - {0x3e190000}, {0x3e192000}, {0x3e194000}, {0x3e196000}, - {0x3e198000}, {0x3e19a000}, {0x3e19c000}, {0x3e19e000}, - {0x3e1a0000}, {0x3e1a2000}, {0x3e1a4000}, {0x3e1a6000}, - {0x3e1a8000}, {0x3e1aa000}, {0x3e1ac000}, {0x3e1ae000}, - {0x3e1b0000}, {0x3e1b2000}, {0x3e1b4000}, {0x3e1b6000}, - {0x3e1b8000}, {0x3e1ba000}, {0x3e1bc000}, {0x3e1be000}, - {0x3e1c0000}, {0x3e1c2000}, {0x3e1c4000}, {0x3e1c6000}, - {0x3e1c8000}, {0x3e1ca000}, {0x3e1cc000}, {0x3e1ce000}, - {0x3e1d0000}, {0x3e1d2000}, {0x3e1d4000}, {0x3e1d6000}, - {0x3e1d8000}, {0x3e1da000}, {0x3e1dc000}, {0x3e1de000}, - {0x3e1e0000}, {0x3e1e2000}, {0x3e1e4000}, {0x3e1e6000}, - {0x3e1e8000}, {0x3e1ea000}, {0x3e1ec000}, {0x3e1ee000}, - {0x3e1f0000}, {0x3e1f2000}, {0x3e1f4000}, {0x3e1f6000}, - {0x3e1f8000}, {0x3e1fa000}, {0x3e1fc000}, {0x3e1fe000}, - {0x3e200000}, {0x3e202000}, {0x3e204000}, {0x3e206000}, - {0x3e208000}, {0x3e20a000}, {0x3e20c000}, {0x3e20e000}, - {0x3e210000}, {0x3e212000}, {0x3e214000}, {0x3e216000}, - {0x3e218000}, {0x3e21a000}, {0x3e21c000}, {0x3e21e000}, - {0x3e220000}, {0x3e222000}, {0x3e224000}, {0x3e226000}, - {0x3e228000}, {0x3e22a000}, {0x3e22c000}, {0x3e22e000}, - {0x3e230000}, {0x3e232000}, {0x3e234000}, {0x3e236000}, - {0x3e238000}, {0x3e23a000}, {0x3e23c000}, {0x3e23e000}, - {0x3e240000}, {0x3e242000}, {0x3e244000}, {0x3e246000}, - {0x3e248000}, {0x3e24a000}, {0x3e24c000}, {0x3e24e000}, - {0x3e250000}, {0x3e252000}, {0x3e254000}, {0x3e256000}, - {0x3e258000}, {0x3e25a000}, {0x3e25c000}, {0x3e25e000}, - {0x3e260000}, {0x3e262000}, {0x3e264000}, {0x3e266000}, - {0x3e268000}, {0x3e26a000}, {0x3e26c000}, {0x3e26e000}, - {0x3e270000}, {0x3e272000}, {0x3e274000}, {0x3e276000}, - {0x3e278000}, {0x3e27a000}, {0x3e27c000}, {0x3e27e000}, - {0x3e280000}, {0x3e282000}, {0x3e284000}, {0x3e286000}, - {0x3e288000}, {0x3e28a000}, {0x3e28c000}, {0x3e28e000}, - {0x3e290000}, {0x3e292000}, {0x3e294000}, {0x3e296000}, - {0x3e298000}, {0x3e29a000}, {0x3e29c000}, {0x3e29e000}, - {0x3e2a0000}, {0x3e2a2000}, {0x3e2a4000}, {0x3e2a6000}, - {0x3e2a8000}, {0x3e2aa000}, {0x3e2ac000}, {0x3e2ae000}, - {0x3e2b0000}, {0x3e2b2000}, {0x3e2b4000}, {0x3e2b6000}, - {0x3e2b8000}, {0x3e2ba000}, {0x3e2bc000}, {0x3e2be000}, - {0x3e2c0000}, {0x3e2c2000}, {0x3e2c4000}, {0x3e2c6000}, - {0x3e2c8000}, {0x3e2ca000}, {0x3e2cc000}, {0x3e2ce000}, - {0x3e2d0000}, {0x3e2d2000}, {0x3e2d4000}, {0x3e2d6000}, - {0x3e2d8000}, {0x3e2da000}, {0x3e2dc000}, {0x3e2de000}, - {0x3e2e0000}, {0x3e2e2000}, {0x3e2e4000}, {0x3e2e6000}, - {0x3e2e8000}, {0x3e2ea000}, {0x3e2ec000}, {0x3e2ee000}, - {0x3e2f0000}, {0x3e2f2000}, {0x3e2f4000}, {0x3e2f6000}, - {0x3e2f8000}, {0x3e2fa000}, {0x3e2fc000}, {0x3e2fe000}, - {0x3e300000}, {0x3e302000}, {0x3e304000}, {0x3e306000}, - {0x3e308000}, {0x3e30a000}, {0x3e30c000}, {0x3e30e000}, - {0x3e310000}, {0x3e312000}, {0x3e314000}, {0x3e316000}, - {0x3e318000}, {0x3e31a000}, {0x3e31c000}, {0x3e31e000}, - {0x3e320000}, {0x3e322000}, {0x3e324000}, {0x3e326000}, - {0x3e328000}, {0x3e32a000}, {0x3e32c000}, {0x3e32e000}, - {0x3e330000}, {0x3e332000}, {0x3e334000}, {0x3e336000}, - {0x3e338000}, {0x3e33a000}, {0x3e33c000}, {0x3e33e000}, - {0x3e340000}, {0x3e342000}, {0x3e344000}, {0x3e346000}, - {0x3e348000}, {0x3e34a000}, {0x3e34c000}, {0x3e34e000}, - {0x3e350000}, {0x3e352000}, {0x3e354000}, {0x3e356000}, - {0x3e358000}, {0x3e35a000}, {0x3e35c000}, {0x3e35e000}, - {0x3e360000}, {0x3e362000}, {0x3e364000}, {0x3e366000}, - {0x3e368000}, {0x3e36a000}, {0x3e36c000}, {0x3e36e000}, - {0x3e370000}, {0x3e372000}, {0x3e374000}, {0x3e376000}, - {0x3e378000}, {0x3e37a000}, {0x3e37c000}, {0x3e37e000}, - {0x3e380000}, {0x3e382000}, {0x3e384000}, {0x3e386000}, - {0x3e388000}, {0x3e38a000}, {0x3e38c000}, {0x3e38e000}, - {0x3e390000}, {0x3e392000}, {0x3e394000}, {0x3e396000}, - {0x3e398000}, {0x3e39a000}, {0x3e39c000}, {0x3e39e000}, - {0x3e3a0000}, {0x3e3a2000}, {0x3e3a4000}, {0x3e3a6000}, - {0x3e3a8000}, {0x3e3aa000}, {0x3e3ac000}, {0x3e3ae000}, - {0x3e3b0000}, {0x3e3b2000}, {0x3e3b4000}, {0x3e3b6000}, - {0x3e3b8000}, {0x3e3ba000}, {0x3e3bc000}, {0x3e3be000}, - {0x3e3c0000}, {0x3e3c2000}, {0x3e3c4000}, {0x3e3c6000}, - {0x3e3c8000}, {0x3e3ca000}, {0x3e3cc000}, {0x3e3ce000}, - {0x3e3d0000}, {0x3e3d2000}, {0x3e3d4000}, {0x3e3d6000}, - {0x3e3d8000}, {0x3e3da000}, {0x3e3dc000}, {0x3e3de000}, - {0x3e3e0000}, {0x3e3e2000}, {0x3e3e4000}, {0x3e3e6000}, - {0x3e3e8000}, {0x3e3ea000}, {0x3e3ec000}, {0x3e3ee000}, - {0x3e3f0000}, {0x3e3f2000}, {0x3e3f4000}, {0x3e3f6000}, - {0x3e3f8000}, {0x3e3fa000}, {0x3e3fc000}, {0x3e3fe000}, - {0x3e400000}, {0x3e402000}, {0x3e404000}, {0x3e406000}, - {0x3e408000}, {0x3e40a000}, {0x3e40c000}, {0x3e40e000}, - {0x3e410000}, {0x3e412000}, {0x3e414000}, {0x3e416000}, - {0x3e418000}, {0x3e41a000}, {0x3e41c000}, {0x3e41e000}, - {0x3e420000}, {0x3e422000}, {0x3e424000}, {0x3e426000}, - {0x3e428000}, {0x3e42a000}, {0x3e42c000}, {0x3e42e000}, - {0x3e430000}, {0x3e432000}, {0x3e434000}, {0x3e436000}, - {0x3e438000}, {0x3e43a000}, {0x3e43c000}, {0x3e43e000}, - {0x3e440000}, {0x3e442000}, {0x3e444000}, {0x3e446000}, - {0x3e448000}, {0x3e44a000}, {0x3e44c000}, {0x3e44e000}, - {0x3e450000}, {0x3e452000}, {0x3e454000}, {0x3e456000}, - {0x3e458000}, {0x3e45a000}, {0x3e45c000}, {0x3e45e000}, - {0x3e460000}, {0x3e462000}, {0x3e464000}, {0x3e466000}, - {0x3e468000}, {0x3e46a000}, {0x3e46c000}, {0x3e46e000}, - {0x3e470000}, {0x3e472000}, {0x3e474000}, {0x3e476000}, - {0x3e478000}, {0x3e47a000}, {0x3e47c000}, {0x3e47e000}, - {0x3e480000}, {0x3e482000}, {0x3e484000}, {0x3e486000}, - {0x3e488000}, {0x3e48a000}, {0x3e48c000}, {0x3e48e000}, - {0x3e490000}, {0x3e492000}, {0x3e494000}, {0x3e496000}, - {0x3e498000}, {0x3e49a000}, {0x3e49c000}, {0x3e49e000}, - {0x3e4a0000}, {0x3e4a2000}, {0x3e4a4000}, {0x3e4a6000}, - {0x3e4a8000}, {0x3e4aa000}, {0x3e4ac000}, {0x3e4ae000}, - {0x3e4b0000}, {0x3e4b2000}, {0x3e4b4000}, {0x3e4b6000}, - {0x3e4b8000}, {0x3e4ba000}, {0x3e4bc000}, {0x3e4be000}, - {0x3e4c0000}, {0x3e4c2000}, {0x3e4c4000}, {0x3e4c6000}, - {0x3e4c8000}, {0x3e4ca000}, {0x3e4cc000}, {0x3e4ce000}, - {0x3e4d0000}, {0x3e4d2000}, {0x3e4d4000}, {0x3e4d6000}, - {0x3e4d8000}, {0x3e4da000}, {0x3e4dc000}, {0x3e4de000}, - {0x3e4e0000}, {0x3e4e2000}, {0x3e4e4000}, {0x3e4e6000}, - {0x3e4e8000}, {0x3e4ea000}, {0x3e4ec000}, {0x3e4ee000}, - {0x3e4f0000}, {0x3e4f2000}, {0x3e4f4000}, {0x3e4f6000}, - {0x3e4f8000}, {0x3e4fa000}, {0x3e4fc000}, {0x3e4fe000}, - {0x3e500000}, {0x3e502000}, {0x3e504000}, {0x3e506000}, - {0x3e508000}, {0x3e50a000}, {0x3e50c000}, {0x3e50e000}, - {0x3e510000}, {0x3e512000}, {0x3e514000}, {0x3e516000}, - {0x3e518000}, {0x3e51a000}, {0x3e51c000}, {0x3e51e000}, - {0x3e520000}, {0x3e522000}, {0x3e524000}, {0x3e526000}, - {0x3e528000}, {0x3e52a000}, {0x3e52c000}, {0x3e52e000}, - {0x3e530000}, {0x3e532000}, {0x3e534000}, {0x3e536000}, - {0x3e538000}, {0x3e53a000}, {0x3e53c000}, {0x3e53e000}, - {0x3e540000}, {0x3e542000}, {0x3e544000}, {0x3e546000}, - {0x3e548000}, {0x3e54a000}, {0x3e54c000}, {0x3e54e000}, - {0x3e550000}, {0x3e552000}, {0x3e554000}, {0x3e556000}, - {0x3e558000}, {0x3e55a000}, {0x3e55c000}, {0x3e55e000}, - {0x3e560000}, {0x3e562000}, {0x3e564000}, {0x3e566000}, - {0x3e568000}, {0x3e56a000}, {0x3e56c000}, {0x3e56e000}, - {0x3e570000}, {0x3e572000}, {0x3e574000}, {0x3e576000}, - {0x3e578000}, {0x3e57a000}, {0x3e57c000}, {0x3e57e000}, - {0x3e580000}, {0x3e582000}, {0x3e584000}, {0x3e586000}, - {0x3e588000}, {0x3e58a000}, {0x3e58c000}, {0x3e58e000}, - {0x3e590000}, {0x3e592000}, {0x3e594000}, {0x3e596000}, - {0x3e598000}, {0x3e59a000}, {0x3e59c000}, {0x3e59e000}, - {0x3e5a0000}, {0x3e5a2000}, {0x3e5a4000}, {0x3e5a6000}, - {0x3e5a8000}, {0x3e5aa000}, {0x3e5ac000}, {0x3e5ae000}, - {0x3e5b0000}, {0x3e5b2000}, {0x3e5b4000}, {0x3e5b6000}, - {0x3e5b8000}, {0x3e5ba000}, {0x3e5bc000}, {0x3e5be000}, - {0x3e5c0000}, {0x3e5c2000}, {0x3e5c4000}, {0x3e5c6000}, - {0x3e5c8000}, {0x3e5ca000}, {0x3e5cc000}, {0x3e5ce000}, - {0x3e5d0000}, {0x3e5d2000}, {0x3e5d4000}, {0x3e5d6000}, - {0x3e5d8000}, {0x3e5da000}, {0x3e5dc000}, {0x3e5de000}, - {0x3e5e0000}, {0x3e5e2000}, {0x3e5e4000}, {0x3e5e6000}, - {0x3e5e8000}, {0x3e5ea000}, {0x3e5ec000}, {0x3e5ee000}, - {0x3e5f0000}, {0x3e5f2000}, {0x3e5f4000}, {0x3e5f6000}, - {0x3e5f8000}, {0x3e5fa000}, {0x3e5fc000}, {0x3e5fe000}, - {0x3e600000}, {0x3e602000}, {0x3e604000}, {0x3e606000}, - {0x3e608000}, {0x3e60a000}, {0x3e60c000}, {0x3e60e000}, - {0x3e610000}, {0x3e612000}, {0x3e614000}, {0x3e616000}, - {0x3e618000}, {0x3e61a000}, {0x3e61c000}, {0x3e61e000}, - {0x3e620000}, {0x3e622000}, {0x3e624000}, {0x3e626000}, - {0x3e628000}, {0x3e62a000}, {0x3e62c000}, {0x3e62e000}, - {0x3e630000}, {0x3e632000}, {0x3e634000}, {0x3e636000}, - {0x3e638000}, {0x3e63a000}, {0x3e63c000}, {0x3e63e000}, - {0x3e640000}, {0x3e642000}, {0x3e644000}, {0x3e646000}, - {0x3e648000}, {0x3e64a000}, {0x3e64c000}, {0x3e64e000}, - {0x3e650000}, {0x3e652000}, {0x3e654000}, {0x3e656000}, - {0x3e658000}, {0x3e65a000}, {0x3e65c000}, {0x3e65e000}, - {0x3e660000}, {0x3e662000}, {0x3e664000}, {0x3e666000}, - {0x3e668000}, {0x3e66a000}, {0x3e66c000}, {0x3e66e000}, - {0x3e670000}, {0x3e672000}, {0x3e674000}, {0x3e676000}, - {0x3e678000}, {0x3e67a000}, {0x3e67c000}, {0x3e67e000}, - {0x3e680000}, {0x3e682000}, {0x3e684000}, {0x3e686000}, - {0x3e688000}, {0x3e68a000}, {0x3e68c000}, {0x3e68e000}, - {0x3e690000}, {0x3e692000}, {0x3e694000}, {0x3e696000}, - {0x3e698000}, {0x3e69a000}, {0x3e69c000}, {0x3e69e000}, - {0x3e6a0000}, {0x3e6a2000}, {0x3e6a4000}, {0x3e6a6000}, - {0x3e6a8000}, {0x3e6aa000}, {0x3e6ac000}, {0x3e6ae000}, - {0x3e6b0000}, {0x3e6b2000}, {0x3e6b4000}, {0x3e6b6000}, - {0x3e6b8000}, {0x3e6ba000}, {0x3e6bc000}, {0x3e6be000}, - {0x3e6c0000}, {0x3e6c2000}, {0x3e6c4000}, {0x3e6c6000}, - {0x3e6c8000}, {0x3e6ca000}, {0x3e6cc000}, {0x3e6ce000}, - {0x3e6d0000}, {0x3e6d2000}, {0x3e6d4000}, {0x3e6d6000}, - {0x3e6d8000}, {0x3e6da000}, {0x3e6dc000}, {0x3e6de000}, - {0x3e6e0000}, {0x3e6e2000}, {0x3e6e4000}, {0x3e6e6000}, - {0x3e6e8000}, {0x3e6ea000}, {0x3e6ec000}, {0x3e6ee000}, - {0x3e6f0000}, {0x3e6f2000}, {0x3e6f4000}, {0x3e6f6000}, - {0x3e6f8000}, {0x3e6fa000}, {0x3e6fc000}, {0x3e6fe000}, - {0x3e700000}, {0x3e702000}, {0x3e704000}, {0x3e706000}, - {0x3e708000}, {0x3e70a000}, {0x3e70c000}, {0x3e70e000}, - {0x3e710000}, {0x3e712000}, {0x3e714000}, {0x3e716000}, - {0x3e718000}, {0x3e71a000}, {0x3e71c000}, {0x3e71e000}, - {0x3e720000}, {0x3e722000}, {0x3e724000}, {0x3e726000}, - {0x3e728000}, {0x3e72a000}, {0x3e72c000}, {0x3e72e000}, - {0x3e730000}, {0x3e732000}, {0x3e734000}, {0x3e736000}, - {0x3e738000}, {0x3e73a000}, {0x3e73c000}, {0x3e73e000}, - {0x3e740000}, {0x3e742000}, {0x3e744000}, {0x3e746000}, - {0x3e748000}, {0x3e74a000}, {0x3e74c000}, {0x3e74e000}, - {0x3e750000}, {0x3e752000}, {0x3e754000}, {0x3e756000}, - {0x3e758000}, {0x3e75a000}, {0x3e75c000}, {0x3e75e000}, - {0x3e760000}, {0x3e762000}, {0x3e764000}, {0x3e766000}, - {0x3e768000}, {0x3e76a000}, {0x3e76c000}, {0x3e76e000}, - {0x3e770000}, {0x3e772000}, {0x3e774000}, {0x3e776000}, - {0x3e778000}, {0x3e77a000}, {0x3e77c000}, {0x3e77e000}, - {0x3e780000}, {0x3e782000}, {0x3e784000}, {0x3e786000}, - {0x3e788000}, {0x3e78a000}, {0x3e78c000}, {0x3e78e000}, - {0x3e790000}, {0x3e792000}, {0x3e794000}, {0x3e796000}, - {0x3e798000}, {0x3e79a000}, {0x3e79c000}, {0x3e79e000}, - {0x3e7a0000}, {0x3e7a2000}, {0x3e7a4000}, {0x3e7a6000}, - {0x3e7a8000}, {0x3e7aa000}, {0x3e7ac000}, {0x3e7ae000}, - {0x3e7b0000}, {0x3e7b2000}, {0x3e7b4000}, {0x3e7b6000}, - {0x3e7b8000}, {0x3e7ba000}, {0x3e7bc000}, {0x3e7be000}, - {0x3e7c0000}, {0x3e7c2000}, {0x3e7c4000}, {0x3e7c6000}, - {0x3e7c8000}, {0x3e7ca000}, {0x3e7cc000}, {0x3e7ce000}, - {0x3e7d0000}, {0x3e7d2000}, {0x3e7d4000}, {0x3e7d6000}, - {0x3e7d8000}, {0x3e7da000}, {0x3e7dc000}, {0x3e7de000}, - {0x3e7e0000}, {0x3e7e2000}, {0x3e7e4000}, {0x3e7e6000}, - {0x3e7e8000}, {0x3e7ea000}, {0x3e7ec000}, {0x3e7ee000}, - {0x3e7f0000}, {0x3e7f2000}, {0x3e7f4000}, {0x3e7f6000}, - {0x3e7f8000}, {0x3e7fa000}, {0x3e7fc000}, {0x3e7fe000}, - {0x3e800000}, {0x3e802000}, {0x3e804000}, {0x3e806000}, - {0x3e808000}, {0x3e80a000}, {0x3e80c000}, {0x3e80e000}, - {0x3e810000}, {0x3e812000}, {0x3e814000}, {0x3e816000}, - {0x3e818000}, {0x3e81a000}, {0x3e81c000}, {0x3e81e000}, - {0x3e820000}, {0x3e822000}, {0x3e824000}, {0x3e826000}, - {0x3e828000}, {0x3e82a000}, {0x3e82c000}, {0x3e82e000}, - {0x3e830000}, {0x3e832000}, {0x3e834000}, {0x3e836000}, - {0x3e838000}, {0x3e83a000}, {0x3e83c000}, {0x3e83e000}, - {0x3e840000}, {0x3e842000}, {0x3e844000}, {0x3e846000}, - {0x3e848000}, {0x3e84a000}, {0x3e84c000}, {0x3e84e000}, - {0x3e850000}, {0x3e852000}, {0x3e854000}, {0x3e856000}, - {0x3e858000}, {0x3e85a000}, {0x3e85c000}, {0x3e85e000}, - {0x3e860000}, {0x3e862000}, {0x3e864000}, {0x3e866000}, - {0x3e868000}, {0x3e86a000}, {0x3e86c000}, {0x3e86e000}, - {0x3e870000}, {0x3e872000}, {0x3e874000}, {0x3e876000}, - {0x3e878000}, {0x3e87a000}, {0x3e87c000}, {0x3e87e000}, - {0x3e880000}, {0x3e882000}, {0x3e884000}, {0x3e886000}, - {0x3e888000}, {0x3e88a000}, {0x3e88c000}, {0x3e88e000}, - {0x3e890000}, {0x3e892000}, {0x3e894000}, {0x3e896000}, - {0x3e898000}, {0x3e89a000}, {0x3e89c000}, {0x3e89e000}, - {0x3e8a0000}, {0x3e8a2000}, {0x3e8a4000}, {0x3e8a6000}, - {0x3e8a8000}, {0x3e8aa000}, {0x3e8ac000}, {0x3e8ae000}, - {0x3e8b0000}, {0x3e8b2000}, {0x3e8b4000}, {0x3e8b6000}, - {0x3e8b8000}, {0x3e8ba000}, {0x3e8bc000}, {0x3e8be000}, - {0x3e8c0000}, {0x3e8c2000}, {0x3e8c4000}, {0x3e8c6000}, - {0x3e8c8000}, {0x3e8ca000}, {0x3e8cc000}, {0x3e8ce000}, - {0x3e8d0000}, {0x3e8d2000}, {0x3e8d4000}, {0x3e8d6000}, - {0x3e8d8000}, {0x3e8da000}, {0x3e8dc000}, {0x3e8de000}, - {0x3e8e0000}, {0x3e8e2000}, {0x3e8e4000}, {0x3e8e6000}, - {0x3e8e8000}, {0x3e8ea000}, {0x3e8ec000}, {0x3e8ee000}, - {0x3e8f0000}, {0x3e8f2000}, {0x3e8f4000}, {0x3e8f6000}, - {0x3e8f8000}, {0x3e8fa000}, {0x3e8fc000}, {0x3e8fe000}, - {0x3e900000}, {0x3e902000}, {0x3e904000}, {0x3e906000}, - {0x3e908000}, {0x3e90a000}, {0x3e90c000}, {0x3e90e000}, - {0x3e910000}, {0x3e912000}, {0x3e914000}, {0x3e916000}, - {0x3e918000}, {0x3e91a000}, {0x3e91c000}, {0x3e91e000}, - {0x3e920000}, {0x3e922000}, {0x3e924000}, {0x3e926000}, - {0x3e928000}, {0x3e92a000}, {0x3e92c000}, {0x3e92e000}, - {0x3e930000}, {0x3e932000}, {0x3e934000}, {0x3e936000}, - {0x3e938000}, {0x3e93a000}, {0x3e93c000}, {0x3e93e000}, - {0x3e940000}, {0x3e942000}, {0x3e944000}, {0x3e946000}, - {0x3e948000}, {0x3e94a000}, {0x3e94c000}, {0x3e94e000}, - {0x3e950000}, {0x3e952000}, {0x3e954000}, {0x3e956000}, - {0x3e958000}, {0x3e95a000}, {0x3e95c000}, {0x3e95e000}, - {0x3e960000}, {0x3e962000}, {0x3e964000}, {0x3e966000}, - {0x3e968000}, {0x3e96a000}, {0x3e96c000}, {0x3e96e000}, - {0x3e970000}, {0x3e972000}, {0x3e974000}, {0x3e976000}, - {0x3e978000}, {0x3e97a000}, {0x3e97c000}, {0x3e97e000}, - {0x3e980000}, {0x3e982000}, {0x3e984000}, {0x3e986000}, - {0x3e988000}, {0x3e98a000}, {0x3e98c000}, {0x3e98e000}, - {0x3e990000}, {0x3e992000}, {0x3e994000}, {0x3e996000}, - {0x3e998000}, {0x3e99a000}, {0x3e99c000}, {0x3e99e000}, - {0x3e9a0000}, {0x3e9a2000}, {0x3e9a4000}, {0x3e9a6000}, - {0x3e9a8000}, {0x3e9aa000}, {0x3e9ac000}, {0x3e9ae000}, - {0x3e9b0000}, {0x3e9b2000}, {0x3e9b4000}, {0x3e9b6000}, - {0x3e9b8000}, {0x3e9ba000}, {0x3e9bc000}, {0x3e9be000}, - {0x3e9c0000}, {0x3e9c2000}, {0x3e9c4000}, {0x3e9c6000}, - {0x3e9c8000}, {0x3e9ca000}, {0x3e9cc000}, {0x3e9ce000}, - {0x3e9d0000}, {0x3e9d2000}, {0x3e9d4000}, {0x3e9d6000}, - {0x3e9d8000}, {0x3e9da000}, {0x3e9dc000}, {0x3e9de000}, - {0x3e9e0000}, {0x3e9e2000}, {0x3e9e4000}, {0x3e9e6000}, - {0x3e9e8000}, {0x3e9ea000}, {0x3e9ec000}, {0x3e9ee000}, - {0x3e9f0000}, {0x3e9f2000}, {0x3e9f4000}, {0x3e9f6000}, - {0x3e9f8000}, {0x3e9fa000}, {0x3e9fc000}, {0x3e9fe000}, - {0x3ea00000}, {0x3ea02000}, {0x3ea04000}, {0x3ea06000}, - {0x3ea08000}, {0x3ea0a000}, {0x3ea0c000}, {0x3ea0e000}, - {0x3ea10000}, {0x3ea12000}, {0x3ea14000}, {0x3ea16000}, - {0x3ea18000}, {0x3ea1a000}, {0x3ea1c000}, {0x3ea1e000}, - {0x3ea20000}, {0x3ea22000}, {0x3ea24000}, {0x3ea26000}, - {0x3ea28000}, {0x3ea2a000}, {0x3ea2c000}, {0x3ea2e000}, - {0x3ea30000}, {0x3ea32000}, {0x3ea34000}, {0x3ea36000}, - {0x3ea38000}, {0x3ea3a000}, {0x3ea3c000}, {0x3ea3e000}, - {0x3ea40000}, {0x3ea42000}, {0x3ea44000}, {0x3ea46000}, - {0x3ea48000}, {0x3ea4a000}, {0x3ea4c000}, {0x3ea4e000}, - {0x3ea50000}, {0x3ea52000}, {0x3ea54000}, {0x3ea56000}, - {0x3ea58000}, {0x3ea5a000}, {0x3ea5c000}, {0x3ea5e000}, - {0x3ea60000}, {0x3ea62000}, {0x3ea64000}, {0x3ea66000}, - {0x3ea68000}, {0x3ea6a000}, {0x3ea6c000}, {0x3ea6e000}, - {0x3ea70000}, {0x3ea72000}, {0x3ea74000}, {0x3ea76000}, - {0x3ea78000}, {0x3ea7a000}, {0x3ea7c000}, {0x3ea7e000}, - {0x3ea80000}, {0x3ea82000}, {0x3ea84000}, {0x3ea86000}, - {0x3ea88000}, {0x3ea8a000}, {0x3ea8c000}, {0x3ea8e000}, - {0x3ea90000}, {0x3ea92000}, {0x3ea94000}, {0x3ea96000}, - {0x3ea98000}, {0x3ea9a000}, {0x3ea9c000}, {0x3ea9e000}, - {0x3eaa0000}, {0x3eaa2000}, {0x3eaa4000}, {0x3eaa6000}, - {0x3eaa8000}, {0x3eaaa000}, {0x3eaac000}, {0x3eaae000}, - {0x3eab0000}, {0x3eab2000}, {0x3eab4000}, {0x3eab6000}, - {0x3eab8000}, {0x3eaba000}, {0x3eabc000}, {0x3eabe000}, - {0x3eac0000}, {0x3eac2000}, {0x3eac4000}, {0x3eac6000}, - {0x3eac8000}, {0x3eaca000}, {0x3eacc000}, {0x3eace000}, - {0x3ead0000}, {0x3ead2000}, {0x3ead4000}, {0x3ead6000}, - {0x3ead8000}, {0x3eada000}, {0x3eadc000}, {0x3eade000}, - {0x3eae0000}, {0x3eae2000}, {0x3eae4000}, {0x3eae6000}, - {0x3eae8000}, {0x3eaea000}, {0x3eaec000}, {0x3eaee000}, - {0x3eaf0000}, {0x3eaf2000}, {0x3eaf4000}, {0x3eaf6000}, - {0x3eaf8000}, {0x3eafa000}, {0x3eafc000}, {0x3eafe000}, - {0x3eb00000}, {0x3eb02000}, {0x3eb04000}, {0x3eb06000}, - {0x3eb08000}, {0x3eb0a000}, {0x3eb0c000}, {0x3eb0e000}, - {0x3eb10000}, {0x3eb12000}, {0x3eb14000}, {0x3eb16000}, - {0x3eb18000}, {0x3eb1a000}, {0x3eb1c000}, {0x3eb1e000}, - {0x3eb20000}, {0x3eb22000}, {0x3eb24000}, {0x3eb26000}, - {0x3eb28000}, {0x3eb2a000}, {0x3eb2c000}, {0x3eb2e000}, - {0x3eb30000}, {0x3eb32000}, {0x3eb34000}, {0x3eb36000}, - {0x3eb38000}, {0x3eb3a000}, {0x3eb3c000}, {0x3eb3e000}, - {0x3eb40000}, {0x3eb42000}, {0x3eb44000}, {0x3eb46000}, - {0x3eb48000}, {0x3eb4a000}, {0x3eb4c000}, {0x3eb4e000}, - {0x3eb50000}, {0x3eb52000}, {0x3eb54000}, {0x3eb56000}, - {0x3eb58000}, {0x3eb5a000}, {0x3eb5c000}, {0x3eb5e000}, - {0x3eb60000}, {0x3eb62000}, {0x3eb64000}, {0x3eb66000}, - {0x3eb68000}, {0x3eb6a000}, {0x3eb6c000}, {0x3eb6e000}, - {0x3eb70000}, {0x3eb72000}, {0x3eb74000}, {0x3eb76000}, - {0x3eb78000}, {0x3eb7a000}, {0x3eb7c000}, {0x3eb7e000}, - {0x3eb80000}, {0x3eb82000}, {0x3eb84000}, {0x3eb86000}, - {0x3eb88000}, {0x3eb8a000}, {0x3eb8c000}, {0x3eb8e000}, - {0x3eb90000}, {0x3eb92000}, {0x3eb94000}, {0x3eb96000}, - {0x3eb98000}, {0x3eb9a000}, {0x3eb9c000}, {0x3eb9e000}, - {0x3eba0000}, {0x3eba2000}, {0x3eba4000}, {0x3eba6000}, - {0x3eba8000}, {0x3ebaa000}, {0x3ebac000}, {0x3ebae000}, - {0x3ebb0000}, {0x3ebb2000}, {0x3ebb4000}, {0x3ebb6000}, - {0x3ebb8000}, {0x3ebba000}, {0x3ebbc000}, {0x3ebbe000}, - {0x3ebc0000}, {0x3ebc2000}, {0x3ebc4000}, {0x3ebc6000}, - {0x3ebc8000}, {0x3ebca000}, {0x3ebcc000}, {0x3ebce000}, - {0x3ebd0000}, {0x3ebd2000}, {0x3ebd4000}, {0x3ebd6000}, - {0x3ebd8000}, {0x3ebda000}, {0x3ebdc000}, {0x3ebde000}, - {0x3ebe0000}, {0x3ebe2000}, {0x3ebe4000}, {0x3ebe6000}, - {0x3ebe8000}, {0x3ebea000}, {0x3ebec000}, {0x3ebee000}, - {0x3ebf0000}, {0x3ebf2000}, {0x3ebf4000}, {0x3ebf6000}, - {0x3ebf8000}, {0x3ebfa000}, {0x3ebfc000}, {0x3ebfe000}, - {0x3ec00000}, {0x3ec02000}, {0x3ec04000}, {0x3ec06000}, - {0x3ec08000}, {0x3ec0a000}, {0x3ec0c000}, {0x3ec0e000}, - {0x3ec10000}, {0x3ec12000}, {0x3ec14000}, {0x3ec16000}, - {0x3ec18000}, {0x3ec1a000}, {0x3ec1c000}, {0x3ec1e000}, - {0x3ec20000}, {0x3ec22000}, {0x3ec24000}, {0x3ec26000}, - {0x3ec28000}, {0x3ec2a000}, {0x3ec2c000}, {0x3ec2e000}, - {0x3ec30000}, {0x3ec32000}, {0x3ec34000}, {0x3ec36000}, - {0x3ec38000}, {0x3ec3a000}, {0x3ec3c000}, {0x3ec3e000}, - {0x3ec40000}, {0x3ec42000}, {0x3ec44000}, {0x3ec46000}, - {0x3ec48000}, {0x3ec4a000}, {0x3ec4c000}, {0x3ec4e000}, - {0x3ec50000}, {0x3ec52000}, {0x3ec54000}, {0x3ec56000}, - {0x3ec58000}, {0x3ec5a000}, {0x3ec5c000}, {0x3ec5e000}, - {0x3ec60000}, {0x3ec62000}, {0x3ec64000}, {0x3ec66000}, - {0x3ec68000}, {0x3ec6a000}, {0x3ec6c000}, {0x3ec6e000}, - {0x3ec70000}, {0x3ec72000}, {0x3ec74000}, {0x3ec76000}, - {0x3ec78000}, {0x3ec7a000}, {0x3ec7c000}, {0x3ec7e000}, - {0x3ec80000}, {0x3ec82000}, {0x3ec84000}, {0x3ec86000}, - {0x3ec88000}, {0x3ec8a000}, {0x3ec8c000}, {0x3ec8e000}, - {0x3ec90000}, {0x3ec92000}, {0x3ec94000}, {0x3ec96000}, - {0x3ec98000}, {0x3ec9a000}, {0x3ec9c000}, {0x3ec9e000}, - {0x3eca0000}, {0x3eca2000}, {0x3eca4000}, {0x3eca6000}, - {0x3eca8000}, {0x3ecaa000}, {0x3ecac000}, {0x3ecae000}, - {0x3ecb0000}, {0x3ecb2000}, {0x3ecb4000}, {0x3ecb6000}, - {0x3ecb8000}, {0x3ecba000}, {0x3ecbc000}, {0x3ecbe000}, - {0x3ecc0000}, {0x3ecc2000}, {0x3ecc4000}, {0x3ecc6000}, - {0x3ecc8000}, {0x3ecca000}, {0x3eccc000}, {0x3ecce000}, - {0x3ecd0000}, {0x3ecd2000}, {0x3ecd4000}, {0x3ecd6000}, - {0x3ecd8000}, {0x3ecda000}, {0x3ecdc000}, {0x3ecde000}, - {0x3ece0000}, {0x3ece2000}, {0x3ece4000}, {0x3ece6000}, - {0x3ece8000}, {0x3ecea000}, {0x3ecec000}, {0x3ecee000}, - {0x3ecf0000}, {0x3ecf2000}, {0x3ecf4000}, {0x3ecf6000}, - {0x3ecf8000}, {0x3ecfa000}, {0x3ecfc000}, {0x3ecfe000}, - {0x3ed00000}, {0x3ed02000}, {0x3ed04000}, {0x3ed06000}, - {0x3ed08000}, {0x3ed0a000}, {0x3ed0c000}, {0x3ed0e000}, - {0x3ed10000}, {0x3ed12000}, {0x3ed14000}, {0x3ed16000}, - {0x3ed18000}, {0x3ed1a000}, {0x3ed1c000}, {0x3ed1e000}, - {0x3ed20000}, {0x3ed22000}, {0x3ed24000}, {0x3ed26000}, - {0x3ed28000}, {0x3ed2a000}, {0x3ed2c000}, {0x3ed2e000}, - {0x3ed30000}, {0x3ed32000}, {0x3ed34000}, {0x3ed36000}, - {0x3ed38000}, {0x3ed3a000}, {0x3ed3c000}, {0x3ed3e000}, - {0x3ed40000}, {0x3ed42000}, {0x3ed44000}, {0x3ed46000}, - {0x3ed48000}, {0x3ed4a000}, {0x3ed4c000}, {0x3ed4e000}, - {0x3ed50000}, {0x3ed52000}, {0x3ed54000}, {0x3ed56000}, - {0x3ed58000}, {0x3ed5a000}, {0x3ed5c000}, {0x3ed5e000}, - {0x3ed60000}, {0x3ed62000}, {0x3ed64000}, {0x3ed66000}, - {0x3ed68000}, {0x3ed6a000}, {0x3ed6c000}, {0x3ed6e000}, - {0x3ed70000}, {0x3ed72000}, {0x3ed74000}, {0x3ed76000}, - {0x3ed78000}, {0x3ed7a000}, {0x3ed7c000}, {0x3ed7e000}, - {0x3ed80000}, {0x3ed82000}, {0x3ed84000}, {0x3ed86000}, - {0x3ed88000}, {0x3ed8a000}, {0x3ed8c000}, {0x3ed8e000}, - {0x3ed90000}, {0x3ed92000}, {0x3ed94000}, {0x3ed96000}, - {0x3ed98000}, {0x3ed9a000}, {0x3ed9c000}, {0x3ed9e000}, - {0x3eda0000}, {0x3eda2000}, {0x3eda4000}, {0x3eda6000}, - {0x3eda8000}, {0x3edaa000}, {0x3edac000}, {0x3edae000}, - {0x3edb0000}, {0x3edb2000}, {0x3edb4000}, {0x3edb6000}, - {0x3edb8000}, {0x3edba000}, {0x3edbc000}, {0x3edbe000}, - {0x3edc0000}, {0x3edc2000}, {0x3edc4000}, {0x3edc6000}, - {0x3edc8000}, {0x3edca000}, {0x3edcc000}, {0x3edce000}, - {0x3edd0000}, {0x3edd2000}, {0x3edd4000}, {0x3edd6000}, - {0x3edd8000}, {0x3edda000}, {0x3eddc000}, {0x3edde000}, - {0x3ede0000}, {0x3ede2000}, {0x3ede4000}, {0x3ede6000}, - {0x3ede8000}, {0x3edea000}, {0x3edec000}, {0x3edee000}, - {0x3edf0000}, {0x3edf2000}, {0x3edf4000}, {0x3edf6000}, - {0x3edf8000}, {0x3edfa000}, {0x3edfc000}, {0x3edfe000}, - {0x3ee00000}, {0x3ee02000}, {0x3ee04000}, {0x3ee06000}, - {0x3ee08000}, {0x3ee0a000}, {0x3ee0c000}, {0x3ee0e000}, - {0x3ee10000}, {0x3ee12000}, {0x3ee14000}, {0x3ee16000}, - {0x3ee18000}, {0x3ee1a000}, {0x3ee1c000}, {0x3ee1e000}, - {0x3ee20000}, {0x3ee22000}, {0x3ee24000}, {0x3ee26000}, - {0x3ee28000}, {0x3ee2a000}, {0x3ee2c000}, {0x3ee2e000}, - {0x3ee30000}, {0x3ee32000}, {0x3ee34000}, {0x3ee36000}, - {0x3ee38000}, {0x3ee3a000}, {0x3ee3c000}, {0x3ee3e000}, - {0x3ee40000}, {0x3ee42000}, {0x3ee44000}, {0x3ee46000}, - {0x3ee48000}, {0x3ee4a000}, {0x3ee4c000}, {0x3ee4e000}, - {0x3ee50000}, {0x3ee52000}, {0x3ee54000}, {0x3ee56000}, - {0x3ee58000}, {0x3ee5a000}, {0x3ee5c000}, {0x3ee5e000}, - {0x3ee60000}, {0x3ee62000}, {0x3ee64000}, {0x3ee66000}, - {0x3ee68000}, {0x3ee6a000}, {0x3ee6c000}, {0x3ee6e000}, - {0x3ee70000}, {0x3ee72000}, {0x3ee74000}, {0x3ee76000}, - {0x3ee78000}, {0x3ee7a000}, {0x3ee7c000}, {0x3ee7e000}, - {0x3ee80000}, {0x3ee82000}, {0x3ee84000}, {0x3ee86000}, - {0x3ee88000}, {0x3ee8a000}, {0x3ee8c000}, {0x3ee8e000}, - {0x3ee90000}, {0x3ee92000}, {0x3ee94000}, {0x3ee96000}, - {0x3ee98000}, {0x3ee9a000}, {0x3ee9c000}, {0x3ee9e000}, - {0x3eea0000}, {0x3eea2000}, {0x3eea4000}, {0x3eea6000}, - {0x3eea8000}, {0x3eeaa000}, {0x3eeac000}, {0x3eeae000}, - {0x3eeb0000}, {0x3eeb2000}, {0x3eeb4000}, {0x3eeb6000}, - {0x3eeb8000}, {0x3eeba000}, {0x3eebc000}, {0x3eebe000}, - {0x3eec0000}, {0x3eec2000}, {0x3eec4000}, {0x3eec6000}, - {0x3eec8000}, {0x3eeca000}, {0x3eecc000}, {0x3eece000}, - {0x3eed0000}, {0x3eed2000}, {0x3eed4000}, {0x3eed6000}, - {0x3eed8000}, {0x3eeda000}, {0x3eedc000}, {0x3eede000}, - {0x3eee0000}, {0x3eee2000}, {0x3eee4000}, {0x3eee6000}, - {0x3eee8000}, {0x3eeea000}, {0x3eeec000}, {0x3eeee000}, - {0x3eef0000}, {0x3eef2000}, {0x3eef4000}, {0x3eef6000}, - {0x3eef8000}, {0x3eefa000}, {0x3eefc000}, {0x3eefe000}, - {0x3ef00000}, {0x3ef02000}, {0x3ef04000}, {0x3ef06000}, - {0x3ef08000}, {0x3ef0a000}, {0x3ef0c000}, {0x3ef0e000}, - {0x3ef10000}, {0x3ef12000}, {0x3ef14000}, {0x3ef16000}, - {0x3ef18000}, {0x3ef1a000}, {0x3ef1c000}, {0x3ef1e000}, - {0x3ef20000}, {0x3ef22000}, {0x3ef24000}, {0x3ef26000}, - {0x3ef28000}, {0x3ef2a000}, {0x3ef2c000}, {0x3ef2e000}, - {0x3ef30000}, {0x3ef32000}, {0x3ef34000}, {0x3ef36000}, - {0x3ef38000}, {0x3ef3a000}, {0x3ef3c000}, {0x3ef3e000}, - {0x3ef40000}, {0x3ef42000}, {0x3ef44000}, {0x3ef46000}, - {0x3ef48000}, {0x3ef4a000}, {0x3ef4c000}, {0x3ef4e000}, - {0x3ef50000}, {0x3ef52000}, {0x3ef54000}, {0x3ef56000}, - {0x3ef58000}, {0x3ef5a000}, {0x3ef5c000}, {0x3ef5e000}, - {0x3ef60000}, {0x3ef62000}, {0x3ef64000}, {0x3ef66000}, - {0x3ef68000}, {0x3ef6a000}, {0x3ef6c000}, {0x3ef6e000}, - {0x3ef70000}, {0x3ef72000}, {0x3ef74000}, {0x3ef76000}, - {0x3ef78000}, {0x3ef7a000}, {0x3ef7c000}, {0x3ef7e000}, - {0x3ef80000}, {0x3ef82000}, {0x3ef84000}, {0x3ef86000}, - {0x3ef88000}, {0x3ef8a000}, {0x3ef8c000}, {0x3ef8e000}, - {0x3ef90000}, {0x3ef92000}, {0x3ef94000}, {0x3ef96000}, - {0x3ef98000}, {0x3ef9a000}, {0x3ef9c000}, {0x3ef9e000}, - {0x3efa0000}, {0x3efa2000}, {0x3efa4000}, {0x3efa6000}, - {0x3efa8000}, {0x3efaa000}, {0x3efac000}, {0x3efae000}, - {0x3efb0000}, {0x3efb2000}, {0x3efb4000}, {0x3efb6000}, - {0x3efb8000}, {0x3efba000}, {0x3efbc000}, {0x3efbe000}, - {0x3efc0000}, {0x3efc2000}, {0x3efc4000}, {0x3efc6000}, - {0x3efc8000}, {0x3efca000}, {0x3efcc000}, {0x3efce000}, - {0x3efd0000}, {0x3efd2000}, {0x3efd4000}, {0x3efd6000}, - {0x3efd8000}, {0x3efda000}, {0x3efdc000}, {0x3efde000}, - {0x3efe0000}, {0x3efe2000}, {0x3efe4000}, {0x3efe6000}, - {0x3efe8000}, {0x3efea000}, {0x3efec000}, {0x3efee000}, - {0x3eff0000}, {0x3eff2000}, {0x3eff4000}, {0x3eff6000}, - {0x3eff8000}, {0x3effa000}, {0x3effc000}, {0x3effe000}, - {0x3f000000}, {0x3f002000}, {0x3f004000}, {0x3f006000}, - {0x3f008000}, {0x3f00a000}, {0x3f00c000}, {0x3f00e000}, - {0x3f010000}, {0x3f012000}, {0x3f014000}, {0x3f016000}, - {0x3f018000}, {0x3f01a000}, {0x3f01c000}, {0x3f01e000}, - {0x3f020000}, {0x3f022000}, {0x3f024000}, {0x3f026000}, - {0x3f028000}, {0x3f02a000}, {0x3f02c000}, {0x3f02e000}, - {0x3f030000}, {0x3f032000}, {0x3f034000}, {0x3f036000}, - {0x3f038000}, {0x3f03a000}, {0x3f03c000}, {0x3f03e000}, - {0x3f040000}, {0x3f042000}, {0x3f044000}, {0x3f046000}, - {0x3f048000}, {0x3f04a000}, {0x3f04c000}, {0x3f04e000}, - {0x3f050000}, {0x3f052000}, {0x3f054000}, {0x3f056000}, - {0x3f058000}, {0x3f05a000}, {0x3f05c000}, {0x3f05e000}, - {0x3f060000}, {0x3f062000}, {0x3f064000}, {0x3f066000}, - {0x3f068000}, {0x3f06a000}, {0x3f06c000}, {0x3f06e000}, - {0x3f070000}, {0x3f072000}, {0x3f074000}, {0x3f076000}, - {0x3f078000}, {0x3f07a000}, {0x3f07c000}, {0x3f07e000}, - {0x3f080000}, {0x3f082000}, {0x3f084000}, {0x3f086000}, - {0x3f088000}, {0x3f08a000}, {0x3f08c000}, {0x3f08e000}, - {0x3f090000}, {0x3f092000}, {0x3f094000}, {0x3f096000}, - {0x3f098000}, {0x3f09a000}, {0x3f09c000}, {0x3f09e000}, - {0x3f0a0000}, {0x3f0a2000}, {0x3f0a4000}, {0x3f0a6000}, - {0x3f0a8000}, {0x3f0aa000}, {0x3f0ac000}, {0x3f0ae000}, - {0x3f0b0000}, {0x3f0b2000}, {0x3f0b4000}, {0x3f0b6000}, - {0x3f0b8000}, {0x3f0ba000}, {0x3f0bc000}, {0x3f0be000}, - {0x3f0c0000}, {0x3f0c2000}, {0x3f0c4000}, {0x3f0c6000}, - {0x3f0c8000}, {0x3f0ca000}, {0x3f0cc000}, {0x3f0ce000}, - {0x3f0d0000}, {0x3f0d2000}, {0x3f0d4000}, {0x3f0d6000}, - {0x3f0d8000}, {0x3f0da000}, {0x3f0dc000}, {0x3f0de000}, - {0x3f0e0000}, {0x3f0e2000}, {0x3f0e4000}, {0x3f0e6000}, - {0x3f0e8000}, {0x3f0ea000}, {0x3f0ec000}, {0x3f0ee000}, - {0x3f0f0000}, {0x3f0f2000}, {0x3f0f4000}, {0x3f0f6000}, - {0x3f0f8000}, {0x3f0fa000}, {0x3f0fc000}, {0x3f0fe000}, - {0x3f100000}, {0x3f102000}, {0x3f104000}, {0x3f106000}, - {0x3f108000}, {0x3f10a000}, {0x3f10c000}, {0x3f10e000}, - {0x3f110000}, {0x3f112000}, {0x3f114000}, {0x3f116000}, - {0x3f118000}, {0x3f11a000}, {0x3f11c000}, {0x3f11e000}, - {0x3f120000}, {0x3f122000}, {0x3f124000}, {0x3f126000}, - {0x3f128000}, {0x3f12a000}, {0x3f12c000}, {0x3f12e000}, - {0x3f130000}, {0x3f132000}, {0x3f134000}, {0x3f136000}, - {0x3f138000}, {0x3f13a000}, {0x3f13c000}, {0x3f13e000}, - {0x3f140000}, {0x3f142000}, {0x3f144000}, {0x3f146000}, - {0x3f148000}, {0x3f14a000}, {0x3f14c000}, {0x3f14e000}, - {0x3f150000}, {0x3f152000}, {0x3f154000}, {0x3f156000}, - {0x3f158000}, {0x3f15a000}, {0x3f15c000}, {0x3f15e000}, - {0x3f160000}, {0x3f162000}, {0x3f164000}, {0x3f166000}, - {0x3f168000}, {0x3f16a000}, {0x3f16c000}, {0x3f16e000}, - {0x3f170000}, {0x3f172000}, {0x3f174000}, {0x3f176000}, - {0x3f178000}, {0x3f17a000}, {0x3f17c000}, {0x3f17e000}, - {0x3f180000}, {0x3f182000}, {0x3f184000}, {0x3f186000}, - {0x3f188000}, {0x3f18a000}, {0x3f18c000}, {0x3f18e000}, - {0x3f190000}, {0x3f192000}, {0x3f194000}, {0x3f196000}, - {0x3f198000}, {0x3f19a000}, {0x3f19c000}, {0x3f19e000}, - {0x3f1a0000}, {0x3f1a2000}, {0x3f1a4000}, {0x3f1a6000}, - {0x3f1a8000}, {0x3f1aa000}, {0x3f1ac000}, {0x3f1ae000}, - {0x3f1b0000}, {0x3f1b2000}, {0x3f1b4000}, {0x3f1b6000}, - {0x3f1b8000}, {0x3f1ba000}, {0x3f1bc000}, {0x3f1be000}, - {0x3f1c0000}, {0x3f1c2000}, {0x3f1c4000}, {0x3f1c6000}, - {0x3f1c8000}, {0x3f1ca000}, {0x3f1cc000}, {0x3f1ce000}, - {0x3f1d0000}, {0x3f1d2000}, {0x3f1d4000}, {0x3f1d6000}, - {0x3f1d8000}, {0x3f1da000}, {0x3f1dc000}, {0x3f1de000}, - {0x3f1e0000}, {0x3f1e2000}, {0x3f1e4000}, {0x3f1e6000}, - {0x3f1e8000}, {0x3f1ea000}, {0x3f1ec000}, {0x3f1ee000}, - {0x3f1f0000}, {0x3f1f2000}, {0x3f1f4000}, {0x3f1f6000}, - {0x3f1f8000}, {0x3f1fa000}, {0x3f1fc000}, {0x3f1fe000}, - {0x3f200000}, {0x3f202000}, {0x3f204000}, {0x3f206000}, - {0x3f208000}, {0x3f20a000}, {0x3f20c000}, {0x3f20e000}, - {0x3f210000}, {0x3f212000}, {0x3f214000}, {0x3f216000}, - {0x3f218000}, {0x3f21a000}, {0x3f21c000}, {0x3f21e000}, - {0x3f220000}, {0x3f222000}, {0x3f224000}, {0x3f226000}, - {0x3f228000}, {0x3f22a000}, {0x3f22c000}, {0x3f22e000}, - {0x3f230000}, {0x3f232000}, {0x3f234000}, {0x3f236000}, - {0x3f238000}, {0x3f23a000}, {0x3f23c000}, {0x3f23e000}, - {0x3f240000}, {0x3f242000}, {0x3f244000}, {0x3f246000}, - {0x3f248000}, {0x3f24a000}, {0x3f24c000}, {0x3f24e000}, - {0x3f250000}, {0x3f252000}, {0x3f254000}, {0x3f256000}, - {0x3f258000}, {0x3f25a000}, {0x3f25c000}, {0x3f25e000}, - {0x3f260000}, {0x3f262000}, {0x3f264000}, {0x3f266000}, - {0x3f268000}, {0x3f26a000}, {0x3f26c000}, {0x3f26e000}, - {0x3f270000}, {0x3f272000}, {0x3f274000}, {0x3f276000}, - {0x3f278000}, {0x3f27a000}, {0x3f27c000}, {0x3f27e000}, - {0x3f280000}, {0x3f282000}, {0x3f284000}, {0x3f286000}, - {0x3f288000}, {0x3f28a000}, {0x3f28c000}, {0x3f28e000}, - {0x3f290000}, {0x3f292000}, {0x3f294000}, {0x3f296000}, - {0x3f298000}, {0x3f29a000}, {0x3f29c000}, {0x3f29e000}, - {0x3f2a0000}, {0x3f2a2000}, {0x3f2a4000}, {0x3f2a6000}, - {0x3f2a8000}, {0x3f2aa000}, {0x3f2ac000}, {0x3f2ae000}, - {0x3f2b0000}, {0x3f2b2000}, {0x3f2b4000}, {0x3f2b6000}, - {0x3f2b8000}, {0x3f2ba000}, {0x3f2bc000}, {0x3f2be000}, - {0x3f2c0000}, {0x3f2c2000}, {0x3f2c4000}, {0x3f2c6000}, - {0x3f2c8000}, {0x3f2ca000}, {0x3f2cc000}, {0x3f2ce000}, - {0x3f2d0000}, {0x3f2d2000}, {0x3f2d4000}, {0x3f2d6000}, - {0x3f2d8000}, {0x3f2da000}, {0x3f2dc000}, {0x3f2de000}, - {0x3f2e0000}, {0x3f2e2000}, {0x3f2e4000}, {0x3f2e6000}, - {0x3f2e8000}, {0x3f2ea000}, {0x3f2ec000}, {0x3f2ee000}, - {0x3f2f0000}, {0x3f2f2000}, {0x3f2f4000}, {0x3f2f6000}, - {0x3f2f8000}, {0x3f2fa000}, {0x3f2fc000}, {0x3f2fe000}, - {0x3f300000}, {0x3f302000}, {0x3f304000}, {0x3f306000}, - {0x3f308000}, {0x3f30a000}, {0x3f30c000}, {0x3f30e000}, - {0x3f310000}, {0x3f312000}, {0x3f314000}, {0x3f316000}, - {0x3f318000}, {0x3f31a000}, {0x3f31c000}, {0x3f31e000}, - {0x3f320000}, {0x3f322000}, {0x3f324000}, {0x3f326000}, - {0x3f328000}, {0x3f32a000}, {0x3f32c000}, {0x3f32e000}, - {0x3f330000}, {0x3f332000}, {0x3f334000}, {0x3f336000}, - {0x3f338000}, {0x3f33a000}, {0x3f33c000}, {0x3f33e000}, - {0x3f340000}, {0x3f342000}, {0x3f344000}, {0x3f346000}, - {0x3f348000}, {0x3f34a000}, {0x3f34c000}, {0x3f34e000}, - {0x3f350000}, {0x3f352000}, {0x3f354000}, {0x3f356000}, - {0x3f358000}, {0x3f35a000}, {0x3f35c000}, {0x3f35e000}, - {0x3f360000}, {0x3f362000}, {0x3f364000}, {0x3f366000}, - {0x3f368000}, {0x3f36a000}, {0x3f36c000}, {0x3f36e000}, - {0x3f370000}, {0x3f372000}, {0x3f374000}, {0x3f376000}, - {0x3f378000}, {0x3f37a000}, {0x3f37c000}, {0x3f37e000}, - {0x3f380000}, {0x3f382000}, {0x3f384000}, {0x3f386000}, - {0x3f388000}, {0x3f38a000}, {0x3f38c000}, {0x3f38e000}, - {0x3f390000}, {0x3f392000}, {0x3f394000}, {0x3f396000}, - {0x3f398000}, {0x3f39a000}, {0x3f39c000}, {0x3f39e000}, - {0x3f3a0000}, {0x3f3a2000}, {0x3f3a4000}, {0x3f3a6000}, - {0x3f3a8000}, {0x3f3aa000}, {0x3f3ac000}, {0x3f3ae000}, - {0x3f3b0000}, {0x3f3b2000}, {0x3f3b4000}, {0x3f3b6000}, - {0x3f3b8000}, {0x3f3ba000}, {0x3f3bc000}, {0x3f3be000}, - {0x3f3c0000}, {0x3f3c2000}, {0x3f3c4000}, {0x3f3c6000}, - {0x3f3c8000}, {0x3f3ca000}, {0x3f3cc000}, {0x3f3ce000}, - {0x3f3d0000}, {0x3f3d2000}, {0x3f3d4000}, {0x3f3d6000}, - {0x3f3d8000}, {0x3f3da000}, {0x3f3dc000}, {0x3f3de000}, - {0x3f3e0000}, {0x3f3e2000}, {0x3f3e4000}, {0x3f3e6000}, - {0x3f3e8000}, {0x3f3ea000}, {0x3f3ec000}, {0x3f3ee000}, - {0x3f3f0000}, {0x3f3f2000}, {0x3f3f4000}, {0x3f3f6000}, - {0x3f3f8000}, {0x3f3fa000}, {0x3f3fc000}, {0x3f3fe000}, - {0x3f400000}, {0x3f402000}, {0x3f404000}, {0x3f406000}, - {0x3f408000}, {0x3f40a000}, {0x3f40c000}, {0x3f40e000}, - {0x3f410000}, {0x3f412000}, {0x3f414000}, {0x3f416000}, - {0x3f418000}, {0x3f41a000}, {0x3f41c000}, {0x3f41e000}, - {0x3f420000}, {0x3f422000}, {0x3f424000}, {0x3f426000}, - {0x3f428000}, {0x3f42a000}, {0x3f42c000}, {0x3f42e000}, - {0x3f430000}, {0x3f432000}, {0x3f434000}, {0x3f436000}, - {0x3f438000}, {0x3f43a000}, {0x3f43c000}, {0x3f43e000}, - {0x3f440000}, {0x3f442000}, {0x3f444000}, {0x3f446000}, - {0x3f448000}, {0x3f44a000}, {0x3f44c000}, {0x3f44e000}, - {0x3f450000}, {0x3f452000}, {0x3f454000}, {0x3f456000}, - {0x3f458000}, {0x3f45a000}, {0x3f45c000}, {0x3f45e000}, - {0x3f460000}, {0x3f462000}, {0x3f464000}, {0x3f466000}, - {0x3f468000}, {0x3f46a000}, {0x3f46c000}, {0x3f46e000}, - {0x3f470000}, {0x3f472000}, {0x3f474000}, {0x3f476000}, - {0x3f478000}, {0x3f47a000}, {0x3f47c000}, {0x3f47e000}, - {0x3f480000}, {0x3f482000}, {0x3f484000}, {0x3f486000}, - {0x3f488000}, {0x3f48a000}, {0x3f48c000}, {0x3f48e000}, - {0x3f490000}, {0x3f492000}, {0x3f494000}, {0x3f496000}, - {0x3f498000}, {0x3f49a000}, {0x3f49c000}, {0x3f49e000}, - {0x3f4a0000}, {0x3f4a2000}, {0x3f4a4000}, {0x3f4a6000}, - {0x3f4a8000}, {0x3f4aa000}, {0x3f4ac000}, {0x3f4ae000}, - {0x3f4b0000}, {0x3f4b2000}, {0x3f4b4000}, {0x3f4b6000}, - {0x3f4b8000}, {0x3f4ba000}, {0x3f4bc000}, {0x3f4be000}, - {0x3f4c0000}, {0x3f4c2000}, {0x3f4c4000}, {0x3f4c6000}, - {0x3f4c8000}, {0x3f4ca000}, {0x3f4cc000}, {0x3f4ce000}, - {0x3f4d0000}, {0x3f4d2000}, {0x3f4d4000}, {0x3f4d6000}, - {0x3f4d8000}, {0x3f4da000}, {0x3f4dc000}, {0x3f4de000}, - {0x3f4e0000}, {0x3f4e2000}, {0x3f4e4000}, {0x3f4e6000}, - {0x3f4e8000}, {0x3f4ea000}, {0x3f4ec000}, {0x3f4ee000}, - {0x3f4f0000}, {0x3f4f2000}, {0x3f4f4000}, {0x3f4f6000}, - {0x3f4f8000}, {0x3f4fa000}, {0x3f4fc000}, {0x3f4fe000}, - {0x3f500000}, {0x3f502000}, {0x3f504000}, {0x3f506000}, - {0x3f508000}, {0x3f50a000}, {0x3f50c000}, {0x3f50e000}, - {0x3f510000}, {0x3f512000}, {0x3f514000}, {0x3f516000}, - {0x3f518000}, {0x3f51a000}, {0x3f51c000}, {0x3f51e000}, - {0x3f520000}, {0x3f522000}, {0x3f524000}, {0x3f526000}, - {0x3f528000}, {0x3f52a000}, {0x3f52c000}, {0x3f52e000}, - {0x3f530000}, {0x3f532000}, {0x3f534000}, {0x3f536000}, - {0x3f538000}, {0x3f53a000}, {0x3f53c000}, {0x3f53e000}, - {0x3f540000}, {0x3f542000}, {0x3f544000}, {0x3f546000}, - {0x3f548000}, {0x3f54a000}, {0x3f54c000}, {0x3f54e000}, - {0x3f550000}, {0x3f552000}, {0x3f554000}, {0x3f556000}, - {0x3f558000}, {0x3f55a000}, {0x3f55c000}, {0x3f55e000}, - {0x3f560000}, {0x3f562000}, {0x3f564000}, {0x3f566000}, - {0x3f568000}, {0x3f56a000}, {0x3f56c000}, {0x3f56e000}, - {0x3f570000}, {0x3f572000}, {0x3f574000}, {0x3f576000}, - {0x3f578000}, {0x3f57a000}, {0x3f57c000}, {0x3f57e000}, - {0x3f580000}, {0x3f582000}, {0x3f584000}, {0x3f586000}, - {0x3f588000}, {0x3f58a000}, {0x3f58c000}, {0x3f58e000}, - {0x3f590000}, {0x3f592000}, {0x3f594000}, {0x3f596000}, - {0x3f598000}, {0x3f59a000}, {0x3f59c000}, {0x3f59e000}, - {0x3f5a0000}, {0x3f5a2000}, {0x3f5a4000}, {0x3f5a6000}, - {0x3f5a8000}, {0x3f5aa000}, {0x3f5ac000}, {0x3f5ae000}, - {0x3f5b0000}, {0x3f5b2000}, {0x3f5b4000}, {0x3f5b6000}, - {0x3f5b8000}, {0x3f5ba000}, {0x3f5bc000}, {0x3f5be000}, - {0x3f5c0000}, {0x3f5c2000}, {0x3f5c4000}, {0x3f5c6000}, - {0x3f5c8000}, {0x3f5ca000}, {0x3f5cc000}, {0x3f5ce000}, - {0x3f5d0000}, {0x3f5d2000}, {0x3f5d4000}, {0x3f5d6000}, - {0x3f5d8000}, {0x3f5da000}, {0x3f5dc000}, {0x3f5de000}, - {0x3f5e0000}, {0x3f5e2000}, {0x3f5e4000}, {0x3f5e6000}, - {0x3f5e8000}, {0x3f5ea000}, {0x3f5ec000}, {0x3f5ee000}, - {0x3f5f0000}, {0x3f5f2000}, {0x3f5f4000}, {0x3f5f6000}, - {0x3f5f8000}, {0x3f5fa000}, {0x3f5fc000}, {0x3f5fe000}, - {0x3f600000}, {0x3f602000}, {0x3f604000}, {0x3f606000}, - {0x3f608000}, {0x3f60a000}, {0x3f60c000}, {0x3f60e000}, - {0x3f610000}, {0x3f612000}, {0x3f614000}, {0x3f616000}, - {0x3f618000}, {0x3f61a000}, {0x3f61c000}, {0x3f61e000}, - {0x3f620000}, {0x3f622000}, {0x3f624000}, {0x3f626000}, - {0x3f628000}, {0x3f62a000}, {0x3f62c000}, {0x3f62e000}, - {0x3f630000}, {0x3f632000}, {0x3f634000}, {0x3f636000}, - {0x3f638000}, {0x3f63a000}, {0x3f63c000}, {0x3f63e000}, - {0x3f640000}, {0x3f642000}, {0x3f644000}, {0x3f646000}, - {0x3f648000}, {0x3f64a000}, {0x3f64c000}, {0x3f64e000}, - {0x3f650000}, {0x3f652000}, {0x3f654000}, {0x3f656000}, - {0x3f658000}, {0x3f65a000}, {0x3f65c000}, {0x3f65e000}, - {0x3f660000}, {0x3f662000}, {0x3f664000}, {0x3f666000}, - {0x3f668000}, {0x3f66a000}, {0x3f66c000}, {0x3f66e000}, - {0x3f670000}, {0x3f672000}, {0x3f674000}, {0x3f676000}, - {0x3f678000}, {0x3f67a000}, {0x3f67c000}, {0x3f67e000}, - {0x3f680000}, {0x3f682000}, {0x3f684000}, {0x3f686000}, - {0x3f688000}, {0x3f68a000}, {0x3f68c000}, {0x3f68e000}, - {0x3f690000}, {0x3f692000}, {0x3f694000}, {0x3f696000}, - {0x3f698000}, {0x3f69a000}, {0x3f69c000}, {0x3f69e000}, - {0x3f6a0000}, {0x3f6a2000}, {0x3f6a4000}, {0x3f6a6000}, - {0x3f6a8000}, {0x3f6aa000}, {0x3f6ac000}, {0x3f6ae000}, - {0x3f6b0000}, {0x3f6b2000}, {0x3f6b4000}, {0x3f6b6000}, - {0x3f6b8000}, {0x3f6ba000}, {0x3f6bc000}, {0x3f6be000}, - {0x3f6c0000}, {0x3f6c2000}, {0x3f6c4000}, {0x3f6c6000}, - {0x3f6c8000}, {0x3f6ca000}, {0x3f6cc000}, {0x3f6ce000}, - {0x3f6d0000}, {0x3f6d2000}, {0x3f6d4000}, {0x3f6d6000}, - {0x3f6d8000}, {0x3f6da000}, {0x3f6dc000}, {0x3f6de000}, - {0x3f6e0000}, {0x3f6e2000}, {0x3f6e4000}, {0x3f6e6000}, - {0x3f6e8000}, {0x3f6ea000}, {0x3f6ec000}, {0x3f6ee000}, - {0x3f6f0000}, {0x3f6f2000}, {0x3f6f4000}, {0x3f6f6000}, - {0x3f6f8000}, {0x3f6fa000}, {0x3f6fc000}, {0x3f6fe000}, - {0x3f700000}, {0x3f702000}, {0x3f704000}, {0x3f706000}, - {0x3f708000}, {0x3f70a000}, {0x3f70c000}, {0x3f70e000}, - {0x3f710000}, {0x3f712000}, {0x3f714000}, {0x3f716000}, - {0x3f718000}, {0x3f71a000}, {0x3f71c000}, {0x3f71e000}, - {0x3f720000}, {0x3f722000}, {0x3f724000}, {0x3f726000}, - {0x3f728000}, {0x3f72a000}, {0x3f72c000}, {0x3f72e000}, - {0x3f730000}, {0x3f732000}, {0x3f734000}, {0x3f736000}, - {0x3f738000}, {0x3f73a000}, {0x3f73c000}, {0x3f73e000}, - {0x3f740000}, {0x3f742000}, {0x3f744000}, {0x3f746000}, - {0x3f748000}, {0x3f74a000}, {0x3f74c000}, {0x3f74e000}, - {0x3f750000}, {0x3f752000}, {0x3f754000}, {0x3f756000}, - {0x3f758000}, {0x3f75a000}, {0x3f75c000}, {0x3f75e000}, - {0x3f760000}, {0x3f762000}, {0x3f764000}, {0x3f766000}, - {0x3f768000}, {0x3f76a000}, {0x3f76c000}, {0x3f76e000}, - {0x3f770000}, {0x3f772000}, {0x3f774000}, {0x3f776000}, - {0x3f778000}, {0x3f77a000}, {0x3f77c000}, {0x3f77e000}, - {0x3f780000}, {0x3f782000}, {0x3f784000}, {0x3f786000}, - {0x3f788000}, {0x3f78a000}, {0x3f78c000}, {0x3f78e000}, - {0x3f790000}, {0x3f792000}, {0x3f794000}, {0x3f796000}, - {0x3f798000}, {0x3f79a000}, {0x3f79c000}, {0x3f79e000}, - {0x3f7a0000}, {0x3f7a2000}, {0x3f7a4000}, {0x3f7a6000}, - {0x3f7a8000}, {0x3f7aa000}, {0x3f7ac000}, {0x3f7ae000}, - {0x3f7b0000}, {0x3f7b2000}, {0x3f7b4000}, {0x3f7b6000}, - {0x3f7b8000}, {0x3f7ba000}, {0x3f7bc000}, {0x3f7be000}, - {0x3f7c0000}, {0x3f7c2000}, {0x3f7c4000}, {0x3f7c6000}, - {0x3f7c8000}, {0x3f7ca000}, {0x3f7cc000}, {0x3f7ce000}, - {0x3f7d0000}, {0x3f7d2000}, {0x3f7d4000}, {0x3f7d6000}, - {0x3f7d8000}, {0x3f7da000}, {0x3f7dc000}, {0x3f7de000}, - {0x3f7e0000}, {0x3f7e2000}, {0x3f7e4000}, {0x3f7e6000}, - {0x3f7e8000}, {0x3f7ea000}, {0x3f7ec000}, {0x3f7ee000}, - {0x3f7f0000}, {0x3f7f2000}, {0x3f7f4000}, {0x3f7f6000}, - {0x3f7f8000}, {0x3f7fa000}, {0x3f7fc000}, {0x3f7fe000}, - {0x3f800000}, {0x3f802000}, {0x3f804000}, {0x3f806000}, - {0x3f808000}, {0x3f80a000}, {0x3f80c000}, {0x3f80e000}, - {0x3f810000}, {0x3f812000}, {0x3f814000}, {0x3f816000}, - {0x3f818000}, {0x3f81a000}, {0x3f81c000}, {0x3f81e000}, - {0x3f820000}, {0x3f822000}, {0x3f824000}, {0x3f826000}, - {0x3f828000}, {0x3f82a000}, {0x3f82c000}, {0x3f82e000}, - {0x3f830000}, {0x3f832000}, {0x3f834000}, {0x3f836000}, - {0x3f838000}, {0x3f83a000}, {0x3f83c000}, {0x3f83e000}, - {0x3f840000}, {0x3f842000}, {0x3f844000}, {0x3f846000}, - {0x3f848000}, {0x3f84a000}, {0x3f84c000}, {0x3f84e000}, - {0x3f850000}, {0x3f852000}, {0x3f854000}, {0x3f856000}, - {0x3f858000}, {0x3f85a000}, {0x3f85c000}, {0x3f85e000}, - {0x3f860000}, {0x3f862000}, {0x3f864000}, {0x3f866000}, - {0x3f868000}, {0x3f86a000}, {0x3f86c000}, {0x3f86e000}, - {0x3f870000}, {0x3f872000}, {0x3f874000}, {0x3f876000}, - {0x3f878000}, {0x3f87a000}, {0x3f87c000}, {0x3f87e000}, - {0x3f880000}, {0x3f882000}, {0x3f884000}, {0x3f886000}, - {0x3f888000}, {0x3f88a000}, {0x3f88c000}, {0x3f88e000}, - {0x3f890000}, {0x3f892000}, {0x3f894000}, {0x3f896000}, - {0x3f898000}, {0x3f89a000}, {0x3f89c000}, {0x3f89e000}, - {0x3f8a0000}, {0x3f8a2000}, {0x3f8a4000}, {0x3f8a6000}, - {0x3f8a8000}, {0x3f8aa000}, {0x3f8ac000}, {0x3f8ae000}, - {0x3f8b0000}, {0x3f8b2000}, {0x3f8b4000}, {0x3f8b6000}, - {0x3f8b8000}, {0x3f8ba000}, {0x3f8bc000}, {0x3f8be000}, - {0x3f8c0000}, {0x3f8c2000}, {0x3f8c4000}, {0x3f8c6000}, - {0x3f8c8000}, {0x3f8ca000}, {0x3f8cc000}, {0x3f8ce000}, - {0x3f8d0000}, {0x3f8d2000}, {0x3f8d4000}, {0x3f8d6000}, - {0x3f8d8000}, {0x3f8da000}, {0x3f8dc000}, {0x3f8de000}, - {0x3f8e0000}, {0x3f8e2000}, {0x3f8e4000}, {0x3f8e6000}, - {0x3f8e8000}, {0x3f8ea000}, {0x3f8ec000}, {0x3f8ee000}, - {0x3f8f0000}, {0x3f8f2000}, {0x3f8f4000}, {0x3f8f6000}, - {0x3f8f8000}, {0x3f8fa000}, {0x3f8fc000}, {0x3f8fe000}, - {0x3f900000}, {0x3f902000}, {0x3f904000}, {0x3f906000}, - {0x3f908000}, {0x3f90a000}, {0x3f90c000}, {0x3f90e000}, - {0x3f910000}, {0x3f912000}, {0x3f914000}, {0x3f916000}, - {0x3f918000}, {0x3f91a000}, {0x3f91c000}, {0x3f91e000}, - {0x3f920000}, {0x3f922000}, {0x3f924000}, {0x3f926000}, - {0x3f928000}, {0x3f92a000}, {0x3f92c000}, {0x3f92e000}, - {0x3f930000}, {0x3f932000}, {0x3f934000}, {0x3f936000}, - {0x3f938000}, {0x3f93a000}, {0x3f93c000}, {0x3f93e000}, - {0x3f940000}, {0x3f942000}, {0x3f944000}, {0x3f946000}, - {0x3f948000}, {0x3f94a000}, {0x3f94c000}, {0x3f94e000}, - {0x3f950000}, {0x3f952000}, {0x3f954000}, {0x3f956000}, - {0x3f958000}, {0x3f95a000}, {0x3f95c000}, {0x3f95e000}, - {0x3f960000}, {0x3f962000}, {0x3f964000}, {0x3f966000}, - {0x3f968000}, {0x3f96a000}, {0x3f96c000}, {0x3f96e000}, - {0x3f970000}, {0x3f972000}, {0x3f974000}, {0x3f976000}, - {0x3f978000}, {0x3f97a000}, {0x3f97c000}, {0x3f97e000}, - {0x3f980000}, {0x3f982000}, {0x3f984000}, {0x3f986000}, - {0x3f988000}, {0x3f98a000}, {0x3f98c000}, {0x3f98e000}, - {0x3f990000}, {0x3f992000}, {0x3f994000}, {0x3f996000}, - {0x3f998000}, {0x3f99a000}, {0x3f99c000}, {0x3f99e000}, - {0x3f9a0000}, {0x3f9a2000}, {0x3f9a4000}, {0x3f9a6000}, - {0x3f9a8000}, {0x3f9aa000}, {0x3f9ac000}, {0x3f9ae000}, - {0x3f9b0000}, {0x3f9b2000}, {0x3f9b4000}, {0x3f9b6000}, - {0x3f9b8000}, {0x3f9ba000}, {0x3f9bc000}, {0x3f9be000}, - {0x3f9c0000}, {0x3f9c2000}, {0x3f9c4000}, {0x3f9c6000}, - {0x3f9c8000}, {0x3f9ca000}, {0x3f9cc000}, {0x3f9ce000}, - {0x3f9d0000}, {0x3f9d2000}, {0x3f9d4000}, {0x3f9d6000}, - {0x3f9d8000}, {0x3f9da000}, {0x3f9dc000}, {0x3f9de000}, - {0x3f9e0000}, {0x3f9e2000}, {0x3f9e4000}, {0x3f9e6000}, - {0x3f9e8000}, {0x3f9ea000}, {0x3f9ec000}, {0x3f9ee000}, - {0x3f9f0000}, {0x3f9f2000}, {0x3f9f4000}, {0x3f9f6000}, - {0x3f9f8000}, {0x3f9fa000}, {0x3f9fc000}, {0x3f9fe000}, - {0x3fa00000}, {0x3fa02000}, {0x3fa04000}, {0x3fa06000}, - {0x3fa08000}, {0x3fa0a000}, {0x3fa0c000}, {0x3fa0e000}, - {0x3fa10000}, {0x3fa12000}, {0x3fa14000}, {0x3fa16000}, - {0x3fa18000}, {0x3fa1a000}, {0x3fa1c000}, {0x3fa1e000}, - {0x3fa20000}, {0x3fa22000}, {0x3fa24000}, {0x3fa26000}, - {0x3fa28000}, {0x3fa2a000}, {0x3fa2c000}, {0x3fa2e000}, - {0x3fa30000}, {0x3fa32000}, {0x3fa34000}, {0x3fa36000}, - {0x3fa38000}, {0x3fa3a000}, {0x3fa3c000}, {0x3fa3e000}, - {0x3fa40000}, {0x3fa42000}, {0x3fa44000}, {0x3fa46000}, - {0x3fa48000}, {0x3fa4a000}, {0x3fa4c000}, {0x3fa4e000}, - {0x3fa50000}, {0x3fa52000}, {0x3fa54000}, {0x3fa56000}, - {0x3fa58000}, {0x3fa5a000}, {0x3fa5c000}, {0x3fa5e000}, - {0x3fa60000}, {0x3fa62000}, {0x3fa64000}, {0x3fa66000}, - {0x3fa68000}, {0x3fa6a000}, {0x3fa6c000}, {0x3fa6e000}, - {0x3fa70000}, {0x3fa72000}, {0x3fa74000}, {0x3fa76000}, - {0x3fa78000}, {0x3fa7a000}, {0x3fa7c000}, {0x3fa7e000}, - {0x3fa80000}, {0x3fa82000}, {0x3fa84000}, {0x3fa86000}, - {0x3fa88000}, {0x3fa8a000}, {0x3fa8c000}, {0x3fa8e000}, - {0x3fa90000}, {0x3fa92000}, {0x3fa94000}, {0x3fa96000}, - {0x3fa98000}, {0x3fa9a000}, {0x3fa9c000}, {0x3fa9e000}, - {0x3faa0000}, {0x3faa2000}, {0x3faa4000}, {0x3faa6000}, - {0x3faa8000}, {0x3faaa000}, {0x3faac000}, {0x3faae000}, - {0x3fab0000}, {0x3fab2000}, {0x3fab4000}, {0x3fab6000}, - {0x3fab8000}, {0x3faba000}, {0x3fabc000}, {0x3fabe000}, - {0x3fac0000}, {0x3fac2000}, {0x3fac4000}, {0x3fac6000}, - {0x3fac8000}, {0x3faca000}, {0x3facc000}, {0x3face000}, - {0x3fad0000}, {0x3fad2000}, {0x3fad4000}, {0x3fad6000}, - {0x3fad8000}, {0x3fada000}, {0x3fadc000}, {0x3fade000}, - {0x3fae0000}, {0x3fae2000}, {0x3fae4000}, {0x3fae6000}, - {0x3fae8000}, {0x3faea000}, {0x3faec000}, {0x3faee000}, - {0x3faf0000}, {0x3faf2000}, {0x3faf4000}, {0x3faf6000}, - {0x3faf8000}, {0x3fafa000}, {0x3fafc000}, {0x3fafe000}, - {0x3fb00000}, {0x3fb02000}, {0x3fb04000}, {0x3fb06000}, - {0x3fb08000}, {0x3fb0a000}, {0x3fb0c000}, {0x3fb0e000}, - {0x3fb10000}, {0x3fb12000}, {0x3fb14000}, {0x3fb16000}, - {0x3fb18000}, {0x3fb1a000}, {0x3fb1c000}, {0x3fb1e000}, - {0x3fb20000}, {0x3fb22000}, {0x3fb24000}, {0x3fb26000}, - {0x3fb28000}, {0x3fb2a000}, {0x3fb2c000}, {0x3fb2e000}, - {0x3fb30000}, {0x3fb32000}, {0x3fb34000}, {0x3fb36000}, - {0x3fb38000}, {0x3fb3a000}, {0x3fb3c000}, {0x3fb3e000}, - {0x3fb40000}, {0x3fb42000}, {0x3fb44000}, {0x3fb46000}, - {0x3fb48000}, {0x3fb4a000}, {0x3fb4c000}, {0x3fb4e000}, - {0x3fb50000}, {0x3fb52000}, {0x3fb54000}, {0x3fb56000}, - {0x3fb58000}, {0x3fb5a000}, {0x3fb5c000}, {0x3fb5e000}, - {0x3fb60000}, {0x3fb62000}, {0x3fb64000}, {0x3fb66000}, - {0x3fb68000}, {0x3fb6a000}, {0x3fb6c000}, {0x3fb6e000}, - {0x3fb70000}, {0x3fb72000}, {0x3fb74000}, {0x3fb76000}, - {0x3fb78000}, {0x3fb7a000}, {0x3fb7c000}, {0x3fb7e000}, - {0x3fb80000}, {0x3fb82000}, {0x3fb84000}, {0x3fb86000}, - {0x3fb88000}, {0x3fb8a000}, {0x3fb8c000}, {0x3fb8e000}, - {0x3fb90000}, {0x3fb92000}, {0x3fb94000}, {0x3fb96000}, - {0x3fb98000}, {0x3fb9a000}, {0x3fb9c000}, {0x3fb9e000}, - {0x3fba0000}, {0x3fba2000}, {0x3fba4000}, {0x3fba6000}, - {0x3fba8000}, {0x3fbaa000}, {0x3fbac000}, {0x3fbae000}, - {0x3fbb0000}, {0x3fbb2000}, {0x3fbb4000}, {0x3fbb6000}, - {0x3fbb8000}, {0x3fbba000}, {0x3fbbc000}, {0x3fbbe000}, - {0x3fbc0000}, {0x3fbc2000}, {0x3fbc4000}, {0x3fbc6000}, - {0x3fbc8000}, {0x3fbca000}, {0x3fbcc000}, {0x3fbce000}, - {0x3fbd0000}, {0x3fbd2000}, {0x3fbd4000}, {0x3fbd6000}, - {0x3fbd8000}, {0x3fbda000}, {0x3fbdc000}, {0x3fbde000}, - {0x3fbe0000}, {0x3fbe2000}, {0x3fbe4000}, {0x3fbe6000}, - {0x3fbe8000}, {0x3fbea000}, {0x3fbec000}, {0x3fbee000}, - {0x3fbf0000}, {0x3fbf2000}, {0x3fbf4000}, {0x3fbf6000}, - {0x3fbf8000}, {0x3fbfa000}, {0x3fbfc000}, {0x3fbfe000}, - {0x3fc00000}, {0x3fc02000}, {0x3fc04000}, {0x3fc06000}, - {0x3fc08000}, {0x3fc0a000}, {0x3fc0c000}, {0x3fc0e000}, - {0x3fc10000}, {0x3fc12000}, {0x3fc14000}, {0x3fc16000}, - {0x3fc18000}, {0x3fc1a000}, {0x3fc1c000}, {0x3fc1e000}, - {0x3fc20000}, {0x3fc22000}, {0x3fc24000}, {0x3fc26000}, - {0x3fc28000}, {0x3fc2a000}, {0x3fc2c000}, {0x3fc2e000}, - {0x3fc30000}, {0x3fc32000}, {0x3fc34000}, {0x3fc36000}, - {0x3fc38000}, {0x3fc3a000}, {0x3fc3c000}, {0x3fc3e000}, - {0x3fc40000}, {0x3fc42000}, {0x3fc44000}, {0x3fc46000}, - {0x3fc48000}, {0x3fc4a000}, {0x3fc4c000}, {0x3fc4e000}, - {0x3fc50000}, {0x3fc52000}, {0x3fc54000}, {0x3fc56000}, - {0x3fc58000}, {0x3fc5a000}, {0x3fc5c000}, {0x3fc5e000}, - {0x3fc60000}, {0x3fc62000}, {0x3fc64000}, {0x3fc66000}, - {0x3fc68000}, {0x3fc6a000}, {0x3fc6c000}, {0x3fc6e000}, - {0x3fc70000}, {0x3fc72000}, {0x3fc74000}, {0x3fc76000}, - {0x3fc78000}, {0x3fc7a000}, {0x3fc7c000}, {0x3fc7e000}, - {0x3fc80000}, {0x3fc82000}, {0x3fc84000}, {0x3fc86000}, - {0x3fc88000}, {0x3fc8a000}, {0x3fc8c000}, {0x3fc8e000}, - {0x3fc90000}, {0x3fc92000}, {0x3fc94000}, {0x3fc96000}, - {0x3fc98000}, {0x3fc9a000}, {0x3fc9c000}, {0x3fc9e000}, - {0x3fca0000}, {0x3fca2000}, {0x3fca4000}, {0x3fca6000}, - {0x3fca8000}, {0x3fcaa000}, {0x3fcac000}, {0x3fcae000}, - {0x3fcb0000}, {0x3fcb2000}, {0x3fcb4000}, {0x3fcb6000}, - {0x3fcb8000}, {0x3fcba000}, {0x3fcbc000}, {0x3fcbe000}, - {0x3fcc0000}, {0x3fcc2000}, {0x3fcc4000}, {0x3fcc6000}, - {0x3fcc8000}, {0x3fcca000}, {0x3fccc000}, {0x3fcce000}, - {0x3fcd0000}, {0x3fcd2000}, {0x3fcd4000}, {0x3fcd6000}, - {0x3fcd8000}, {0x3fcda000}, {0x3fcdc000}, {0x3fcde000}, - {0x3fce0000}, {0x3fce2000}, {0x3fce4000}, {0x3fce6000}, - {0x3fce8000}, {0x3fcea000}, {0x3fcec000}, {0x3fcee000}, - {0x3fcf0000}, {0x3fcf2000}, {0x3fcf4000}, {0x3fcf6000}, - {0x3fcf8000}, {0x3fcfa000}, {0x3fcfc000}, {0x3fcfe000}, - {0x3fd00000}, {0x3fd02000}, {0x3fd04000}, {0x3fd06000}, - {0x3fd08000}, {0x3fd0a000}, {0x3fd0c000}, {0x3fd0e000}, - {0x3fd10000}, {0x3fd12000}, {0x3fd14000}, {0x3fd16000}, - {0x3fd18000}, {0x3fd1a000}, {0x3fd1c000}, {0x3fd1e000}, - {0x3fd20000}, {0x3fd22000}, {0x3fd24000}, {0x3fd26000}, - {0x3fd28000}, {0x3fd2a000}, {0x3fd2c000}, {0x3fd2e000}, - {0x3fd30000}, {0x3fd32000}, {0x3fd34000}, {0x3fd36000}, - {0x3fd38000}, {0x3fd3a000}, {0x3fd3c000}, {0x3fd3e000}, - {0x3fd40000}, {0x3fd42000}, {0x3fd44000}, {0x3fd46000}, - {0x3fd48000}, {0x3fd4a000}, {0x3fd4c000}, {0x3fd4e000}, - {0x3fd50000}, {0x3fd52000}, {0x3fd54000}, {0x3fd56000}, - {0x3fd58000}, {0x3fd5a000}, {0x3fd5c000}, {0x3fd5e000}, - {0x3fd60000}, {0x3fd62000}, {0x3fd64000}, {0x3fd66000}, - {0x3fd68000}, {0x3fd6a000}, {0x3fd6c000}, {0x3fd6e000}, - {0x3fd70000}, {0x3fd72000}, {0x3fd74000}, {0x3fd76000}, - {0x3fd78000}, {0x3fd7a000}, {0x3fd7c000}, {0x3fd7e000}, - {0x3fd80000}, {0x3fd82000}, {0x3fd84000}, {0x3fd86000}, - {0x3fd88000}, {0x3fd8a000}, {0x3fd8c000}, {0x3fd8e000}, - {0x3fd90000}, {0x3fd92000}, {0x3fd94000}, {0x3fd96000}, - {0x3fd98000}, {0x3fd9a000}, {0x3fd9c000}, {0x3fd9e000}, - {0x3fda0000}, {0x3fda2000}, {0x3fda4000}, {0x3fda6000}, - {0x3fda8000}, {0x3fdaa000}, {0x3fdac000}, {0x3fdae000}, - {0x3fdb0000}, {0x3fdb2000}, {0x3fdb4000}, {0x3fdb6000}, - {0x3fdb8000}, {0x3fdba000}, {0x3fdbc000}, {0x3fdbe000}, - {0x3fdc0000}, {0x3fdc2000}, {0x3fdc4000}, {0x3fdc6000}, - {0x3fdc8000}, {0x3fdca000}, {0x3fdcc000}, {0x3fdce000}, - {0x3fdd0000}, {0x3fdd2000}, {0x3fdd4000}, {0x3fdd6000}, - {0x3fdd8000}, {0x3fdda000}, {0x3fddc000}, {0x3fdde000}, - {0x3fde0000}, {0x3fde2000}, {0x3fde4000}, {0x3fde6000}, - {0x3fde8000}, {0x3fdea000}, {0x3fdec000}, {0x3fdee000}, - {0x3fdf0000}, {0x3fdf2000}, {0x3fdf4000}, {0x3fdf6000}, - {0x3fdf8000}, {0x3fdfa000}, {0x3fdfc000}, {0x3fdfe000}, - {0x3fe00000}, {0x3fe02000}, {0x3fe04000}, {0x3fe06000}, - {0x3fe08000}, {0x3fe0a000}, {0x3fe0c000}, {0x3fe0e000}, - {0x3fe10000}, {0x3fe12000}, {0x3fe14000}, {0x3fe16000}, - {0x3fe18000}, {0x3fe1a000}, {0x3fe1c000}, {0x3fe1e000}, - {0x3fe20000}, {0x3fe22000}, {0x3fe24000}, {0x3fe26000}, - {0x3fe28000}, {0x3fe2a000}, {0x3fe2c000}, {0x3fe2e000}, - {0x3fe30000}, {0x3fe32000}, {0x3fe34000}, {0x3fe36000}, - {0x3fe38000}, {0x3fe3a000}, {0x3fe3c000}, {0x3fe3e000}, - {0x3fe40000}, {0x3fe42000}, {0x3fe44000}, {0x3fe46000}, - {0x3fe48000}, {0x3fe4a000}, {0x3fe4c000}, {0x3fe4e000}, - {0x3fe50000}, {0x3fe52000}, {0x3fe54000}, {0x3fe56000}, - {0x3fe58000}, {0x3fe5a000}, {0x3fe5c000}, {0x3fe5e000}, - {0x3fe60000}, {0x3fe62000}, {0x3fe64000}, {0x3fe66000}, - {0x3fe68000}, {0x3fe6a000}, {0x3fe6c000}, {0x3fe6e000}, - {0x3fe70000}, {0x3fe72000}, {0x3fe74000}, {0x3fe76000}, - {0x3fe78000}, {0x3fe7a000}, {0x3fe7c000}, {0x3fe7e000}, - {0x3fe80000}, {0x3fe82000}, {0x3fe84000}, {0x3fe86000}, - {0x3fe88000}, {0x3fe8a000}, {0x3fe8c000}, {0x3fe8e000}, - {0x3fe90000}, {0x3fe92000}, {0x3fe94000}, {0x3fe96000}, - {0x3fe98000}, {0x3fe9a000}, {0x3fe9c000}, {0x3fe9e000}, - {0x3fea0000}, {0x3fea2000}, {0x3fea4000}, {0x3fea6000}, - {0x3fea8000}, {0x3feaa000}, {0x3feac000}, {0x3feae000}, - {0x3feb0000}, {0x3feb2000}, {0x3feb4000}, {0x3feb6000}, - {0x3feb8000}, {0x3feba000}, {0x3febc000}, {0x3febe000}, - {0x3fec0000}, {0x3fec2000}, {0x3fec4000}, {0x3fec6000}, - {0x3fec8000}, {0x3feca000}, {0x3fecc000}, {0x3fece000}, - {0x3fed0000}, {0x3fed2000}, {0x3fed4000}, {0x3fed6000}, - {0x3fed8000}, {0x3feda000}, {0x3fedc000}, {0x3fede000}, - {0x3fee0000}, {0x3fee2000}, {0x3fee4000}, {0x3fee6000}, - {0x3fee8000}, {0x3feea000}, {0x3feec000}, {0x3feee000}, - {0x3fef0000}, {0x3fef2000}, {0x3fef4000}, {0x3fef6000}, - {0x3fef8000}, {0x3fefa000}, {0x3fefc000}, {0x3fefe000}, - {0x3ff00000}, {0x3ff02000}, {0x3ff04000}, {0x3ff06000}, - {0x3ff08000}, {0x3ff0a000}, {0x3ff0c000}, {0x3ff0e000}, - {0x3ff10000}, {0x3ff12000}, {0x3ff14000}, {0x3ff16000}, - {0x3ff18000}, {0x3ff1a000}, {0x3ff1c000}, {0x3ff1e000}, - {0x3ff20000}, {0x3ff22000}, {0x3ff24000}, {0x3ff26000}, - {0x3ff28000}, {0x3ff2a000}, {0x3ff2c000}, {0x3ff2e000}, - {0x3ff30000}, {0x3ff32000}, {0x3ff34000}, {0x3ff36000}, - {0x3ff38000}, {0x3ff3a000}, {0x3ff3c000}, {0x3ff3e000}, - {0x3ff40000}, {0x3ff42000}, {0x3ff44000}, {0x3ff46000}, - {0x3ff48000}, {0x3ff4a000}, {0x3ff4c000}, {0x3ff4e000}, - {0x3ff50000}, {0x3ff52000}, {0x3ff54000}, {0x3ff56000}, - {0x3ff58000}, {0x3ff5a000}, {0x3ff5c000}, {0x3ff5e000}, - {0x3ff60000}, {0x3ff62000}, {0x3ff64000}, {0x3ff66000}, - {0x3ff68000}, {0x3ff6a000}, {0x3ff6c000}, {0x3ff6e000}, - {0x3ff70000}, {0x3ff72000}, {0x3ff74000}, {0x3ff76000}, - {0x3ff78000}, {0x3ff7a000}, {0x3ff7c000}, {0x3ff7e000}, - {0x3ff80000}, {0x3ff82000}, {0x3ff84000}, {0x3ff86000}, - {0x3ff88000}, {0x3ff8a000}, {0x3ff8c000}, {0x3ff8e000}, - {0x3ff90000}, {0x3ff92000}, {0x3ff94000}, {0x3ff96000}, - {0x3ff98000}, {0x3ff9a000}, {0x3ff9c000}, {0x3ff9e000}, - {0x3ffa0000}, {0x3ffa2000}, {0x3ffa4000}, {0x3ffa6000}, - {0x3ffa8000}, {0x3ffaa000}, {0x3ffac000}, {0x3ffae000}, - {0x3ffb0000}, {0x3ffb2000}, {0x3ffb4000}, {0x3ffb6000}, - {0x3ffb8000}, {0x3ffba000}, {0x3ffbc000}, {0x3ffbe000}, - {0x3ffc0000}, {0x3ffc2000}, {0x3ffc4000}, {0x3ffc6000}, - {0x3ffc8000}, {0x3ffca000}, {0x3ffcc000}, {0x3ffce000}, - {0x3ffd0000}, {0x3ffd2000}, {0x3ffd4000}, {0x3ffd6000}, - {0x3ffd8000}, {0x3ffda000}, {0x3ffdc000}, {0x3ffde000}, - {0x3ffe0000}, {0x3ffe2000}, {0x3ffe4000}, {0x3ffe6000}, - {0x3ffe8000}, {0x3ffea000}, {0x3ffec000}, {0x3ffee000}, - {0x3fff0000}, {0x3fff2000}, {0x3fff4000}, {0x3fff6000}, - {0x3fff8000}, {0x3fffa000}, {0x3fffc000}, {0x3fffe000}, - {0x40000000}, {0x40002000}, {0x40004000}, {0x40006000}, - {0x40008000}, {0x4000a000}, {0x4000c000}, {0x4000e000}, - {0x40010000}, {0x40012000}, {0x40014000}, {0x40016000}, - {0x40018000}, {0x4001a000}, {0x4001c000}, {0x4001e000}, - {0x40020000}, {0x40022000}, {0x40024000}, {0x40026000}, - {0x40028000}, {0x4002a000}, {0x4002c000}, {0x4002e000}, - {0x40030000}, {0x40032000}, {0x40034000}, {0x40036000}, - {0x40038000}, {0x4003a000}, {0x4003c000}, {0x4003e000}, - {0x40040000}, {0x40042000}, {0x40044000}, {0x40046000}, - {0x40048000}, {0x4004a000}, {0x4004c000}, {0x4004e000}, - {0x40050000}, {0x40052000}, {0x40054000}, {0x40056000}, - {0x40058000}, {0x4005a000}, {0x4005c000}, {0x4005e000}, - {0x40060000}, {0x40062000}, {0x40064000}, {0x40066000}, - {0x40068000}, {0x4006a000}, {0x4006c000}, {0x4006e000}, - {0x40070000}, {0x40072000}, {0x40074000}, {0x40076000}, - {0x40078000}, {0x4007a000}, {0x4007c000}, {0x4007e000}, - {0x40080000}, {0x40082000}, {0x40084000}, {0x40086000}, - {0x40088000}, {0x4008a000}, {0x4008c000}, {0x4008e000}, - {0x40090000}, {0x40092000}, {0x40094000}, {0x40096000}, - {0x40098000}, {0x4009a000}, {0x4009c000}, {0x4009e000}, - {0x400a0000}, {0x400a2000}, {0x400a4000}, {0x400a6000}, - {0x400a8000}, {0x400aa000}, {0x400ac000}, {0x400ae000}, - {0x400b0000}, {0x400b2000}, {0x400b4000}, {0x400b6000}, - {0x400b8000}, {0x400ba000}, {0x400bc000}, {0x400be000}, - {0x400c0000}, {0x400c2000}, {0x400c4000}, {0x400c6000}, - {0x400c8000}, {0x400ca000}, {0x400cc000}, {0x400ce000}, - {0x400d0000}, {0x400d2000}, {0x400d4000}, {0x400d6000}, - {0x400d8000}, {0x400da000}, {0x400dc000}, {0x400de000}, - {0x400e0000}, {0x400e2000}, {0x400e4000}, {0x400e6000}, - {0x400e8000}, {0x400ea000}, {0x400ec000}, {0x400ee000}, - {0x400f0000}, {0x400f2000}, {0x400f4000}, {0x400f6000}, - {0x400f8000}, {0x400fa000}, {0x400fc000}, {0x400fe000}, - {0x40100000}, {0x40102000}, {0x40104000}, {0x40106000}, - {0x40108000}, {0x4010a000}, {0x4010c000}, {0x4010e000}, - {0x40110000}, {0x40112000}, {0x40114000}, {0x40116000}, - {0x40118000}, {0x4011a000}, {0x4011c000}, {0x4011e000}, - {0x40120000}, {0x40122000}, {0x40124000}, {0x40126000}, - {0x40128000}, {0x4012a000}, {0x4012c000}, {0x4012e000}, - {0x40130000}, {0x40132000}, {0x40134000}, {0x40136000}, - {0x40138000}, {0x4013a000}, {0x4013c000}, {0x4013e000}, - {0x40140000}, {0x40142000}, {0x40144000}, {0x40146000}, - {0x40148000}, {0x4014a000}, {0x4014c000}, {0x4014e000}, - {0x40150000}, {0x40152000}, {0x40154000}, {0x40156000}, - {0x40158000}, {0x4015a000}, {0x4015c000}, {0x4015e000}, - {0x40160000}, {0x40162000}, {0x40164000}, {0x40166000}, - {0x40168000}, {0x4016a000}, {0x4016c000}, {0x4016e000}, - {0x40170000}, {0x40172000}, {0x40174000}, {0x40176000}, - {0x40178000}, {0x4017a000}, {0x4017c000}, {0x4017e000}, - {0x40180000}, {0x40182000}, {0x40184000}, {0x40186000}, - {0x40188000}, {0x4018a000}, {0x4018c000}, {0x4018e000}, - {0x40190000}, {0x40192000}, {0x40194000}, {0x40196000}, - {0x40198000}, {0x4019a000}, {0x4019c000}, {0x4019e000}, - {0x401a0000}, {0x401a2000}, {0x401a4000}, {0x401a6000}, - {0x401a8000}, {0x401aa000}, {0x401ac000}, {0x401ae000}, - {0x401b0000}, {0x401b2000}, {0x401b4000}, {0x401b6000}, - {0x401b8000}, {0x401ba000}, {0x401bc000}, {0x401be000}, - {0x401c0000}, {0x401c2000}, {0x401c4000}, {0x401c6000}, - {0x401c8000}, {0x401ca000}, {0x401cc000}, {0x401ce000}, - {0x401d0000}, {0x401d2000}, {0x401d4000}, {0x401d6000}, - {0x401d8000}, {0x401da000}, {0x401dc000}, {0x401de000}, - {0x401e0000}, {0x401e2000}, {0x401e4000}, {0x401e6000}, - {0x401e8000}, {0x401ea000}, {0x401ec000}, {0x401ee000}, - {0x401f0000}, {0x401f2000}, {0x401f4000}, {0x401f6000}, - {0x401f8000}, {0x401fa000}, {0x401fc000}, {0x401fe000}, - {0x40200000}, {0x40202000}, {0x40204000}, {0x40206000}, - {0x40208000}, {0x4020a000}, {0x4020c000}, {0x4020e000}, - {0x40210000}, {0x40212000}, {0x40214000}, {0x40216000}, - {0x40218000}, {0x4021a000}, {0x4021c000}, {0x4021e000}, - {0x40220000}, {0x40222000}, {0x40224000}, {0x40226000}, - {0x40228000}, {0x4022a000}, {0x4022c000}, {0x4022e000}, - {0x40230000}, {0x40232000}, {0x40234000}, {0x40236000}, - {0x40238000}, {0x4023a000}, {0x4023c000}, {0x4023e000}, - {0x40240000}, {0x40242000}, {0x40244000}, {0x40246000}, - {0x40248000}, {0x4024a000}, {0x4024c000}, {0x4024e000}, - {0x40250000}, {0x40252000}, {0x40254000}, {0x40256000}, - {0x40258000}, {0x4025a000}, {0x4025c000}, {0x4025e000}, - {0x40260000}, {0x40262000}, {0x40264000}, {0x40266000}, - {0x40268000}, {0x4026a000}, {0x4026c000}, {0x4026e000}, - {0x40270000}, {0x40272000}, {0x40274000}, {0x40276000}, - {0x40278000}, {0x4027a000}, {0x4027c000}, {0x4027e000}, - {0x40280000}, {0x40282000}, {0x40284000}, {0x40286000}, - {0x40288000}, {0x4028a000}, {0x4028c000}, {0x4028e000}, - {0x40290000}, {0x40292000}, {0x40294000}, {0x40296000}, - {0x40298000}, {0x4029a000}, {0x4029c000}, {0x4029e000}, - {0x402a0000}, {0x402a2000}, {0x402a4000}, {0x402a6000}, - {0x402a8000}, {0x402aa000}, {0x402ac000}, {0x402ae000}, - {0x402b0000}, {0x402b2000}, {0x402b4000}, {0x402b6000}, - {0x402b8000}, {0x402ba000}, {0x402bc000}, {0x402be000}, - {0x402c0000}, {0x402c2000}, {0x402c4000}, {0x402c6000}, - {0x402c8000}, {0x402ca000}, {0x402cc000}, {0x402ce000}, - {0x402d0000}, {0x402d2000}, {0x402d4000}, {0x402d6000}, - {0x402d8000}, {0x402da000}, {0x402dc000}, {0x402de000}, - {0x402e0000}, {0x402e2000}, {0x402e4000}, {0x402e6000}, - {0x402e8000}, {0x402ea000}, {0x402ec000}, {0x402ee000}, - {0x402f0000}, {0x402f2000}, {0x402f4000}, {0x402f6000}, - {0x402f8000}, {0x402fa000}, {0x402fc000}, {0x402fe000}, - {0x40300000}, {0x40302000}, {0x40304000}, {0x40306000}, - {0x40308000}, {0x4030a000}, {0x4030c000}, {0x4030e000}, - {0x40310000}, {0x40312000}, {0x40314000}, {0x40316000}, - {0x40318000}, {0x4031a000}, {0x4031c000}, {0x4031e000}, - {0x40320000}, {0x40322000}, {0x40324000}, {0x40326000}, - {0x40328000}, {0x4032a000}, {0x4032c000}, {0x4032e000}, - {0x40330000}, {0x40332000}, {0x40334000}, {0x40336000}, - {0x40338000}, {0x4033a000}, {0x4033c000}, {0x4033e000}, - {0x40340000}, {0x40342000}, {0x40344000}, {0x40346000}, - {0x40348000}, {0x4034a000}, {0x4034c000}, {0x4034e000}, - {0x40350000}, {0x40352000}, {0x40354000}, {0x40356000}, - {0x40358000}, {0x4035a000}, {0x4035c000}, {0x4035e000}, - {0x40360000}, {0x40362000}, {0x40364000}, {0x40366000}, - {0x40368000}, {0x4036a000}, {0x4036c000}, {0x4036e000}, - {0x40370000}, {0x40372000}, {0x40374000}, {0x40376000}, - {0x40378000}, {0x4037a000}, {0x4037c000}, {0x4037e000}, - {0x40380000}, {0x40382000}, {0x40384000}, {0x40386000}, - {0x40388000}, {0x4038a000}, {0x4038c000}, {0x4038e000}, - {0x40390000}, {0x40392000}, {0x40394000}, {0x40396000}, - {0x40398000}, {0x4039a000}, {0x4039c000}, {0x4039e000}, - {0x403a0000}, {0x403a2000}, {0x403a4000}, {0x403a6000}, - {0x403a8000}, {0x403aa000}, {0x403ac000}, {0x403ae000}, - {0x403b0000}, {0x403b2000}, {0x403b4000}, {0x403b6000}, - {0x403b8000}, {0x403ba000}, {0x403bc000}, {0x403be000}, - {0x403c0000}, {0x403c2000}, {0x403c4000}, {0x403c6000}, - {0x403c8000}, {0x403ca000}, {0x403cc000}, {0x403ce000}, - {0x403d0000}, {0x403d2000}, {0x403d4000}, {0x403d6000}, - {0x403d8000}, {0x403da000}, {0x403dc000}, {0x403de000}, - {0x403e0000}, {0x403e2000}, {0x403e4000}, {0x403e6000}, - {0x403e8000}, {0x403ea000}, {0x403ec000}, {0x403ee000}, - {0x403f0000}, {0x403f2000}, {0x403f4000}, {0x403f6000}, - {0x403f8000}, {0x403fa000}, {0x403fc000}, {0x403fe000}, - {0x40400000}, {0x40402000}, {0x40404000}, {0x40406000}, - {0x40408000}, {0x4040a000}, {0x4040c000}, {0x4040e000}, - {0x40410000}, {0x40412000}, {0x40414000}, {0x40416000}, - {0x40418000}, {0x4041a000}, {0x4041c000}, {0x4041e000}, - {0x40420000}, {0x40422000}, {0x40424000}, {0x40426000}, - {0x40428000}, {0x4042a000}, {0x4042c000}, {0x4042e000}, - {0x40430000}, {0x40432000}, {0x40434000}, {0x40436000}, - {0x40438000}, {0x4043a000}, {0x4043c000}, {0x4043e000}, - {0x40440000}, {0x40442000}, {0x40444000}, {0x40446000}, - {0x40448000}, {0x4044a000}, {0x4044c000}, {0x4044e000}, - {0x40450000}, {0x40452000}, {0x40454000}, {0x40456000}, - {0x40458000}, {0x4045a000}, {0x4045c000}, {0x4045e000}, - {0x40460000}, {0x40462000}, {0x40464000}, {0x40466000}, - {0x40468000}, {0x4046a000}, {0x4046c000}, {0x4046e000}, - {0x40470000}, {0x40472000}, {0x40474000}, {0x40476000}, - {0x40478000}, {0x4047a000}, {0x4047c000}, {0x4047e000}, - {0x40480000}, {0x40482000}, {0x40484000}, {0x40486000}, - {0x40488000}, {0x4048a000}, {0x4048c000}, {0x4048e000}, - {0x40490000}, {0x40492000}, {0x40494000}, {0x40496000}, - {0x40498000}, {0x4049a000}, {0x4049c000}, {0x4049e000}, - {0x404a0000}, {0x404a2000}, {0x404a4000}, {0x404a6000}, - {0x404a8000}, {0x404aa000}, {0x404ac000}, {0x404ae000}, - {0x404b0000}, {0x404b2000}, {0x404b4000}, {0x404b6000}, - {0x404b8000}, {0x404ba000}, {0x404bc000}, {0x404be000}, - {0x404c0000}, {0x404c2000}, {0x404c4000}, {0x404c6000}, - {0x404c8000}, {0x404ca000}, {0x404cc000}, {0x404ce000}, - {0x404d0000}, {0x404d2000}, {0x404d4000}, {0x404d6000}, - {0x404d8000}, {0x404da000}, {0x404dc000}, {0x404de000}, - {0x404e0000}, {0x404e2000}, {0x404e4000}, {0x404e6000}, - {0x404e8000}, {0x404ea000}, {0x404ec000}, {0x404ee000}, - {0x404f0000}, {0x404f2000}, {0x404f4000}, {0x404f6000}, - {0x404f8000}, {0x404fa000}, {0x404fc000}, {0x404fe000}, - {0x40500000}, {0x40502000}, {0x40504000}, {0x40506000}, - {0x40508000}, {0x4050a000}, {0x4050c000}, {0x4050e000}, - {0x40510000}, {0x40512000}, {0x40514000}, {0x40516000}, - {0x40518000}, {0x4051a000}, {0x4051c000}, {0x4051e000}, - {0x40520000}, {0x40522000}, {0x40524000}, {0x40526000}, - {0x40528000}, {0x4052a000}, {0x4052c000}, {0x4052e000}, - {0x40530000}, {0x40532000}, {0x40534000}, {0x40536000}, - {0x40538000}, {0x4053a000}, {0x4053c000}, {0x4053e000}, - {0x40540000}, {0x40542000}, {0x40544000}, {0x40546000}, - {0x40548000}, {0x4054a000}, {0x4054c000}, {0x4054e000}, - {0x40550000}, {0x40552000}, {0x40554000}, {0x40556000}, - {0x40558000}, {0x4055a000}, {0x4055c000}, {0x4055e000}, - {0x40560000}, {0x40562000}, {0x40564000}, {0x40566000}, - {0x40568000}, {0x4056a000}, {0x4056c000}, {0x4056e000}, - {0x40570000}, {0x40572000}, {0x40574000}, {0x40576000}, - {0x40578000}, {0x4057a000}, {0x4057c000}, {0x4057e000}, - {0x40580000}, {0x40582000}, {0x40584000}, {0x40586000}, - {0x40588000}, {0x4058a000}, {0x4058c000}, {0x4058e000}, - {0x40590000}, {0x40592000}, {0x40594000}, {0x40596000}, - {0x40598000}, {0x4059a000}, {0x4059c000}, {0x4059e000}, - {0x405a0000}, {0x405a2000}, {0x405a4000}, {0x405a6000}, - {0x405a8000}, {0x405aa000}, {0x405ac000}, {0x405ae000}, - {0x405b0000}, {0x405b2000}, {0x405b4000}, {0x405b6000}, - {0x405b8000}, {0x405ba000}, {0x405bc000}, {0x405be000}, - {0x405c0000}, {0x405c2000}, {0x405c4000}, {0x405c6000}, - {0x405c8000}, {0x405ca000}, {0x405cc000}, {0x405ce000}, - {0x405d0000}, {0x405d2000}, {0x405d4000}, {0x405d6000}, - {0x405d8000}, {0x405da000}, {0x405dc000}, {0x405de000}, - {0x405e0000}, {0x405e2000}, {0x405e4000}, {0x405e6000}, - {0x405e8000}, {0x405ea000}, {0x405ec000}, {0x405ee000}, - {0x405f0000}, {0x405f2000}, {0x405f4000}, {0x405f6000}, - {0x405f8000}, {0x405fa000}, {0x405fc000}, {0x405fe000}, - {0x40600000}, {0x40602000}, {0x40604000}, {0x40606000}, - {0x40608000}, {0x4060a000}, {0x4060c000}, {0x4060e000}, - {0x40610000}, {0x40612000}, {0x40614000}, {0x40616000}, - {0x40618000}, {0x4061a000}, {0x4061c000}, {0x4061e000}, - {0x40620000}, {0x40622000}, {0x40624000}, {0x40626000}, - {0x40628000}, {0x4062a000}, {0x4062c000}, {0x4062e000}, - {0x40630000}, {0x40632000}, {0x40634000}, {0x40636000}, - {0x40638000}, {0x4063a000}, {0x4063c000}, {0x4063e000}, - {0x40640000}, {0x40642000}, {0x40644000}, {0x40646000}, - {0x40648000}, {0x4064a000}, {0x4064c000}, {0x4064e000}, - {0x40650000}, {0x40652000}, {0x40654000}, {0x40656000}, - {0x40658000}, {0x4065a000}, {0x4065c000}, {0x4065e000}, - {0x40660000}, {0x40662000}, {0x40664000}, {0x40666000}, - {0x40668000}, {0x4066a000}, {0x4066c000}, {0x4066e000}, - {0x40670000}, {0x40672000}, {0x40674000}, {0x40676000}, - {0x40678000}, {0x4067a000}, {0x4067c000}, {0x4067e000}, - {0x40680000}, {0x40682000}, {0x40684000}, {0x40686000}, - {0x40688000}, {0x4068a000}, {0x4068c000}, {0x4068e000}, - {0x40690000}, {0x40692000}, {0x40694000}, {0x40696000}, - {0x40698000}, {0x4069a000}, {0x4069c000}, {0x4069e000}, - {0x406a0000}, {0x406a2000}, {0x406a4000}, {0x406a6000}, - {0x406a8000}, {0x406aa000}, {0x406ac000}, {0x406ae000}, - {0x406b0000}, {0x406b2000}, {0x406b4000}, {0x406b6000}, - {0x406b8000}, {0x406ba000}, {0x406bc000}, {0x406be000}, - {0x406c0000}, {0x406c2000}, {0x406c4000}, {0x406c6000}, - {0x406c8000}, {0x406ca000}, {0x406cc000}, {0x406ce000}, - {0x406d0000}, {0x406d2000}, {0x406d4000}, {0x406d6000}, - {0x406d8000}, {0x406da000}, {0x406dc000}, {0x406de000}, - {0x406e0000}, {0x406e2000}, {0x406e4000}, {0x406e6000}, - {0x406e8000}, {0x406ea000}, {0x406ec000}, {0x406ee000}, - {0x406f0000}, {0x406f2000}, {0x406f4000}, {0x406f6000}, - {0x406f8000}, {0x406fa000}, {0x406fc000}, {0x406fe000}, - {0x40700000}, {0x40702000}, {0x40704000}, {0x40706000}, - {0x40708000}, {0x4070a000}, {0x4070c000}, {0x4070e000}, - {0x40710000}, {0x40712000}, {0x40714000}, {0x40716000}, - {0x40718000}, {0x4071a000}, {0x4071c000}, {0x4071e000}, - {0x40720000}, {0x40722000}, {0x40724000}, {0x40726000}, - {0x40728000}, {0x4072a000}, {0x4072c000}, {0x4072e000}, - {0x40730000}, {0x40732000}, {0x40734000}, {0x40736000}, - {0x40738000}, {0x4073a000}, {0x4073c000}, {0x4073e000}, - {0x40740000}, {0x40742000}, {0x40744000}, {0x40746000}, - {0x40748000}, {0x4074a000}, {0x4074c000}, {0x4074e000}, - {0x40750000}, {0x40752000}, {0x40754000}, {0x40756000}, - {0x40758000}, {0x4075a000}, {0x4075c000}, {0x4075e000}, - {0x40760000}, {0x40762000}, {0x40764000}, {0x40766000}, - {0x40768000}, {0x4076a000}, {0x4076c000}, {0x4076e000}, - {0x40770000}, {0x40772000}, {0x40774000}, {0x40776000}, - {0x40778000}, {0x4077a000}, {0x4077c000}, {0x4077e000}, - {0x40780000}, {0x40782000}, {0x40784000}, {0x40786000}, - {0x40788000}, {0x4078a000}, {0x4078c000}, {0x4078e000}, - {0x40790000}, {0x40792000}, {0x40794000}, {0x40796000}, - {0x40798000}, {0x4079a000}, {0x4079c000}, {0x4079e000}, - {0x407a0000}, {0x407a2000}, {0x407a4000}, {0x407a6000}, - {0x407a8000}, {0x407aa000}, {0x407ac000}, {0x407ae000}, - {0x407b0000}, {0x407b2000}, {0x407b4000}, {0x407b6000}, - {0x407b8000}, {0x407ba000}, {0x407bc000}, {0x407be000}, - {0x407c0000}, {0x407c2000}, {0x407c4000}, {0x407c6000}, - {0x407c8000}, {0x407ca000}, {0x407cc000}, {0x407ce000}, - {0x407d0000}, {0x407d2000}, {0x407d4000}, {0x407d6000}, - {0x407d8000}, {0x407da000}, {0x407dc000}, {0x407de000}, - {0x407e0000}, {0x407e2000}, {0x407e4000}, {0x407e6000}, - {0x407e8000}, {0x407ea000}, {0x407ec000}, {0x407ee000}, - {0x407f0000}, {0x407f2000}, {0x407f4000}, {0x407f6000}, - {0x407f8000}, {0x407fa000}, {0x407fc000}, {0x407fe000}, - {0x40800000}, {0x40802000}, {0x40804000}, {0x40806000}, - {0x40808000}, {0x4080a000}, {0x4080c000}, {0x4080e000}, - {0x40810000}, {0x40812000}, {0x40814000}, {0x40816000}, - {0x40818000}, {0x4081a000}, {0x4081c000}, {0x4081e000}, - {0x40820000}, {0x40822000}, {0x40824000}, {0x40826000}, - {0x40828000}, {0x4082a000}, {0x4082c000}, {0x4082e000}, - {0x40830000}, {0x40832000}, {0x40834000}, {0x40836000}, - {0x40838000}, {0x4083a000}, {0x4083c000}, {0x4083e000}, - {0x40840000}, {0x40842000}, {0x40844000}, {0x40846000}, - {0x40848000}, {0x4084a000}, {0x4084c000}, {0x4084e000}, - {0x40850000}, {0x40852000}, {0x40854000}, {0x40856000}, - {0x40858000}, {0x4085a000}, {0x4085c000}, {0x4085e000}, - {0x40860000}, {0x40862000}, {0x40864000}, {0x40866000}, - {0x40868000}, {0x4086a000}, {0x4086c000}, {0x4086e000}, - {0x40870000}, {0x40872000}, {0x40874000}, {0x40876000}, - {0x40878000}, {0x4087a000}, {0x4087c000}, {0x4087e000}, - {0x40880000}, {0x40882000}, {0x40884000}, {0x40886000}, - {0x40888000}, {0x4088a000}, {0x4088c000}, {0x4088e000}, - {0x40890000}, {0x40892000}, {0x40894000}, {0x40896000}, - {0x40898000}, {0x4089a000}, {0x4089c000}, {0x4089e000}, - {0x408a0000}, {0x408a2000}, {0x408a4000}, {0x408a6000}, - {0x408a8000}, {0x408aa000}, {0x408ac000}, {0x408ae000}, - {0x408b0000}, {0x408b2000}, {0x408b4000}, {0x408b6000}, - {0x408b8000}, {0x408ba000}, {0x408bc000}, {0x408be000}, - {0x408c0000}, {0x408c2000}, {0x408c4000}, {0x408c6000}, - {0x408c8000}, {0x408ca000}, {0x408cc000}, {0x408ce000}, - {0x408d0000}, {0x408d2000}, {0x408d4000}, {0x408d6000}, - {0x408d8000}, {0x408da000}, {0x408dc000}, {0x408de000}, - {0x408e0000}, {0x408e2000}, {0x408e4000}, {0x408e6000}, - {0x408e8000}, {0x408ea000}, {0x408ec000}, {0x408ee000}, - {0x408f0000}, {0x408f2000}, {0x408f4000}, {0x408f6000}, - {0x408f8000}, {0x408fa000}, {0x408fc000}, {0x408fe000}, - {0x40900000}, {0x40902000}, {0x40904000}, {0x40906000}, - {0x40908000}, {0x4090a000}, {0x4090c000}, {0x4090e000}, - {0x40910000}, {0x40912000}, {0x40914000}, {0x40916000}, - {0x40918000}, {0x4091a000}, {0x4091c000}, {0x4091e000}, - {0x40920000}, {0x40922000}, {0x40924000}, {0x40926000}, - {0x40928000}, {0x4092a000}, {0x4092c000}, {0x4092e000}, - {0x40930000}, {0x40932000}, {0x40934000}, {0x40936000}, - {0x40938000}, {0x4093a000}, {0x4093c000}, {0x4093e000}, - {0x40940000}, {0x40942000}, {0x40944000}, {0x40946000}, - {0x40948000}, {0x4094a000}, {0x4094c000}, {0x4094e000}, - {0x40950000}, {0x40952000}, {0x40954000}, {0x40956000}, - {0x40958000}, {0x4095a000}, {0x4095c000}, {0x4095e000}, - {0x40960000}, {0x40962000}, {0x40964000}, {0x40966000}, - {0x40968000}, {0x4096a000}, {0x4096c000}, {0x4096e000}, - {0x40970000}, {0x40972000}, {0x40974000}, {0x40976000}, - {0x40978000}, {0x4097a000}, {0x4097c000}, {0x4097e000}, - {0x40980000}, {0x40982000}, {0x40984000}, {0x40986000}, - {0x40988000}, {0x4098a000}, {0x4098c000}, {0x4098e000}, - {0x40990000}, {0x40992000}, {0x40994000}, {0x40996000}, - {0x40998000}, {0x4099a000}, {0x4099c000}, {0x4099e000}, - {0x409a0000}, {0x409a2000}, {0x409a4000}, {0x409a6000}, - {0x409a8000}, {0x409aa000}, {0x409ac000}, {0x409ae000}, - {0x409b0000}, {0x409b2000}, {0x409b4000}, {0x409b6000}, - {0x409b8000}, {0x409ba000}, {0x409bc000}, {0x409be000}, - {0x409c0000}, {0x409c2000}, {0x409c4000}, {0x409c6000}, - {0x409c8000}, {0x409ca000}, {0x409cc000}, {0x409ce000}, - {0x409d0000}, {0x409d2000}, {0x409d4000}, {0x409d6000}, - {0x409d8000}, {0x409da000}, {0x409dc000}, {0x409de000}, - {0x409e0000}, {0x409e2000}, {0x409e4000}, {0x409e6000}, - {0x409e8000}, {0x409ea000}, {0x409ec000}, {0x409ee000}, - {0x409f0000}, {0x409f2000}, {0x409f4000}, {0x409f6000}, - {0x409f8000}, {0x409fa000}, {0x409fc000}, {0x409fe000}, - {0x40a00000}, {0x40a02000}, {0x40a04000}, {0x40a06000}, - {0x40a08000}, {0x40a0a000}, {0x40a0c000}, {0x40a0e000}, - {0x40a10000}, {0x40a12000}, {0x40a14000}, {0x40a16000}, - {0x40a18000}, {0x40a1a000}, {0x40a1c000}, {0x40a1e000}, - {0x40a20000}, {0x40a22000}, {0x40a24000}, {0x40a26000}, - {0x40a28000}, {0x40a2a000}, {0x40a2c000}, {0x40a2e000}, - {0x40a30000}, {0x40a32000}, {0x40a34000}, {0x40a36000}, - {0x40a38000}, {0x40a3a000}, {0x40a3c000}, {0x40a3e000}, - {0x40a40000}, {0x40a42000}, {0x40a44000}, {0x40a46000}, - {0x40a48000}, {0x40a4a000}, {0x40a4c000}, {0x40a4e000}, - {0x40a50000}, {0x40a52000}, {0x40a54000}, {0x40a56000}, - {0x40a58000}, {0x40a5a000}, {0x40a5c000}, {0x40a5e000}, - {0x40a60000}, {0x40a62000}, {0x40a64000}, {0x40a66000}, - {0x40a68000}, {0x40a6a000}, {0x40a6c000}, {0x40a6e000}, - {0x40a70000}, {0x40a72000}, {0x40a74000}, {0x40a76000}, - {0x40a78000}, {0x40a7a000}, {0x40a7c000}, {0x40a7e000}, - {0x40a80000}, {0x40a82000}, {0x40a84000}, {0x40a86000}, - {0x40a88000}, {0x40a8a000}, {0x40a8c000}, {0x40a8e000}, - {0x40a90000}, {0x40a92000}, {0x40a94000}, {0x40a96000}, - {0x40a98000}, {0x40a9a000}, {0x40a9c000}, {0x40a9e000}, - {0x40aa0000}, {0x40aa2000}, {0x40aa4000}, {0x40aa6000}, - {0x40aa8000}, {0x40aaa000}, {0x40aac000}, {0x40aae000}, - {0x40ab0000}, {0x40ab2000}, {0x40ab4000}, {0x40ab6000}, - {0x40ab8000}, {0x40aba000}, {0x40abc000}, {0x40abe000}, - {0x40ac0000}, {0x40ac2000}, {0x40ac4000}, {0x40ac6000}, - {0x40ac8000}, {0x40aca000}, {0x40acc000}, {0x40ace000}, - {0x40ad0000}, {0x40ad2000}, {0x40ad4000}, {0x40ad6000}, - {0x40ad8000}, {0x40ada000}, {0x40adc000}, {0x40ade000}, - {0x40ae0000}, {0x40ae2000}, {0x40ae4000}, {0x40ae6000}, - {0x40ae8000}, {0x40aea000}, {0x40aec000}, {0x40aee000}, - {0x40af0000}, {0x40af2000}, {0x40af4000}, {0x40af6000}, - {0x40af8000}, {0x40afa000}, {0x40afc000}, {0x40afe000}, - {0x40b00000}, {0x40b02000}, {0x40b04000}, {0x40b06000}, - {0x40b08000}, {0x40b0a000}, {0x40b0c000}, {0x40b0e000}, - {0x40b10000}, {0x40b12000}, {0x40b14000}, {0x40b16000}, - {0x40b18000}, {0x40b1a000}, {0x40b1c000}, {0x40b1e000}, - {0x40b20000}, {0x40b22000}, {0x40b24000}, {0x40b26000}, - {0x40b28000}, {0x40b2a000}, {0x40b2c000}, {0x40b2e000}, - {0x40b30000}, {0x40b32000}, {0x40b34000}, {0x40b36000}, - {0x40b38000}, {0x40b3a000}, {0x40b3c000}, {0x40b3e000}, - {0x40b40000}, {0x40b42000}, {0x40b44000}, {0x40b46000}, - {0x40b48000}, {0x40b4a000}, {0x40b4c000}, {0x40b4e000}, - {0x40b50000}, {0x40b52000}, {0x40b54000}, {0x40b56000}, - {0x40b58000}, {0x40b5a000}, {0x40b5c000}, {0x40b5e000}, - {0x40b60000}, {0x40b62000}, {0x40b64000}, {0x40b66000}, - {0x40b68000}, {0x40b6a000}, {0x40b6c000}, {0x40b6e000}, - {0x40b70000}, {0x40b72000}, {0x40b74000}, {0x40b76000}, - {0x40b78000}, {0x40b7a000}, {0x40b7c000}, {0x40b7e000}, - {0x40b80000}, {0x40b82000}, {0x40b84000}, {0x40b86000}, - {0x40b88000}, {0x40b8a000}, {0x40b8c000}, {0x40b8e000}, - {0x40b90000}, {0x40b92000}, {0x40b94000}, {0x40b96000}, - {0x40b98000}, {0x40b9a000}, {0x40b9c000}, {0x40b9e000}, - {0x40ba0000}, {0x40ba2000}, {0x40ba4000}, {0x40ba6000}, - {0x40ba8000}, {0x40baa000}, {0x40bac000}, {0x40bae000}, - {0x40bb0000}, {0x40bb2000}, {0x40bb4000}, {0x40bb6000}, - {0x40bb8000}, {0x40bba000}, {0x40bbc000}, {0x40bbe000}, - {0x40bc0000}, {0x40bc2000}, {0x40bc4000}, {0x40bc6000}, - {0x40bc8000}, {0x40bca000}, {0x40bcc000}, {0x40bce000}, - {0x40bd0000}, {0x40bd2000}, {0x40bd4000}, {0x40bd6000}, - {0x40bd8000}, {0x40bda000}, {0x40bdc000}, {0x40bde000}, - {0x40be0000}, {0x40be2000}, {0x40be4000}, {0x40be6000}, - {0x40be8000}, {0x40bea000}, {0x40bec000}, {0x40bee000}, - {0x40bf0000}, {0x40bf2000}, {0x40bf4000}, {0x40bf6000}, - {0x40bf8000}, {0x40bfa000}, {0x40bfc000}, {0x40bfe000}, - {0x40c00000}, {0x40c02000}, {0x40c04000}, {0x40c06000}, - {0x40c08000}, {0x40c0a000}, {0x40c0c000}, {0x40c0e000}, - {0x40c10000}, {0x40c12000}, {0x40c14000}, {0x40c16000}, - {0x40c18000}, {0x40c1a000}, {0x40c1c000}, {0x40c1e000}, - {0x40c20000}, {0x40c22000}, {0x40c24000}, {0x40c26000}, - {0x40c28000}, {0x40c2a000}, {0x40c2c000}, {0x40c2e000}, - {0x40c30000}, {0x40c32000}, {0x40c34000}, {0x40c36000}, - {0x40c38000}, {0x40c3a000}, {0x40c3c000}, {0x40c3e000}, - {0x40c40000}, {0x40c42000}, {0x40c44000}, {0x40c46000}, - {0x40c48000}, {0x40c4a000}, {0x40c4c000}, {0x40c4e000}, - {0x40c50000}, {0x40c52000}, {0x40c54000}, {0x40c56000}, - {0x40c58000}, {0x40c5a000}, {0x40c5c000}, {0x40c5e000}, - {0x40c60000}, {0x40c62000}, {0x40c64000}, {0x40c66000}, - {0x40c68000}, {0x40c6a000}, {0x40c6c000}, {0x40c6e000}, - {0x40c70000}, {0x40c72000}, {0x40c74000}, {0x40c76000}, - {0x40c78000}, {0x40c7a000}, {0x40c7c000}, {0x40c7e000}, - {0x40c80000}, {0x40c82000}, {0x40c84000}, {0x40c86000}, - {0x40c88000}, {0x40c8a000}, {0x40c8c000}, {0x40c8e000}, - {0x40c90000}, {0x40c92000}, {0x40c94000}, {0x40c96000}, - {0x40c98000}, {0x40c9a000}, {0x40c9c000}, {0x40c9e000}, - {0x40ca0000}, {0x40ca2000}, {0x40ca4000}, {0x40ca6000}, - {0x40ca8000}, {0x40caa000}, {0x40cac000}, {0x40cae000}, - {0x40cb0000}, {0x40cb2000}, {0x40cb4000}, {0x40cb6000}, - {0x40cb8000}, {0x40cba000}, {0x40cbc000}, {0x40cbe000}, - {0x40cc0000}, {0x40cc2000}, {0x40cc4000}, {0x40cc6000}, - {0x40cc8000}, {0x40cca000}, {0x40ccc000}, {0x40cce000}, - {0x40cd0000}, {0x40cd2000}, {0x40cd4000}, {0x40cd6000}, - {0x40cd8000}, {0x40cda000}, {0x40cdc000}, {0x40cde000}, - {0x40ce0000}, {0x40ce2000}, {0x40ce4000}, {0x40ce6000}, - {0x40ce8000}, {0x40cea000}, {0x40cec000}, {0x40cee000}, - {0x40cf0000}, {0x40cf2000}, {0x40cf4000}, {0x40cf6000}, - {0x40cf8000}, {0x40cfa000}, {0x40cfc000}, {0x40cfe000}, - {0x40d00000}, {0x40d02000}, {0x40d04000}, {0x40d06000}, - {0x40d08000}, {0x40d0a000}, {0x40d0c000}, {0x40d0e000}, - {0x40d10000}, {0x40d12000}, {0x40d14000}, {0x40d16000}, - {0x40d18000}, {0x40d1a000}, {0x40d1c000}, {0x40d1e000}, - {0x40d20000}, {0x40d22000}, {0x40d24000}, {0x40d26000}, - {0x40d28000}, {0x40d2a000}, {0x40d2c000}, {0x40d2e000}, - {0x40d30000}, {0x40d32000}, {0x40d34000}, {0x40d36000}, - {0x40d38000}, {0x40d3a000}, {0x40d3c000}, {0x40d3e000}, - {0x40d40000}, {0x40d42000}, {0x40d44000}, {0x40d46000}, - {0x40d48000}, {0x40d4a000}, {0x40d4c000}, {0x40d4e000}, - {0x40d50000}, {0x40d52000}, {0x40d54000}, {0x40d56000}, - {0x40d58000}, {0x40d5a000}, {0x40d5c000}, {0x40d5e000}, - {0x40d60000}, {0x40d62000}, {0x40d64000}, {0x40d66000}, - {0x40d68000}, {0x40d6a000}, {0x40d6c000}, {0x40d6e000}, - {0x40d70000}, {0x40d72000}, {0x40d74000}, {0x40d76000}, - {0x40d78000}, {0x40d7a000}, {0x40d7c000}, {0x40d7e000}, - {0x40d80000}, {0x40d82000}, {0x40d84000}, {0x40d86000}, - {0x40d88000}, {0x40d8a000}, {0x40d8c000}, {0x40d8e000}, - {0x40d90000}, {0x40d92000}, {0x40d94000}, {0x40d96000}, - {0x40d98000}, {0x40d9a000}, {0x40d9c000}, {0x40d9e000}, - {0x40da0000}, {0x40da2000}, {0x40da4000}, {0x40da6000}, - {0x40da8000}, {0x40daa000}, {0x40dac000}, {0x40dae000}, - {0x40db0000}, {0x40db2000}, {0x40db4000}, {0x40db6000}, - {0x40db8000}, {0x40dba000}, {0x40dbc000}, {0x40dbe000}, - {0x40dc0000}, {0x40dc2000}, {0x40dc4000}, {0x40dc6000}, - {0x40dc8000}, {0x40dca000}, {0x40dcc000}, {0x40dce000}, - {0x40dd0000}, {0x40dd2000}, {0x40dd4000}, {0x40dd6000}, - {0x40dd8000}, {0x40dda000}, {0x40ddc000}, {0x40dde000}, - {0x40de0000}, {0x40de2000}, {0x40de4000}, {0x40de6000}, - {0x40de8000}, {0x40dea000}, {0x40dec000}, {0x40dee000}, - {0x40df0000}, {0x40df2000}, {0x40df4000}, {0x40df6000}, - {0x40df8000}, {0x40dfa000}, {0x40dfc000}, {0x40dfe000}, - {0x40e00000}, {0x40e02000}, {0x40e04000}, {0x40e06000}, - {0x40e08000}, {0x40e0a000}, {0x40e0c000}, {0x40e0e000}, - {0x40e10000}, {0x40e12000}, {0x40e14000}, {0x40e16000}, - {0x40e18000}, {0x40e1a000}, {0x40e1c000}, {0x40e1e000}, - {0x40e20000}, {0x40e22000}, {0x40e24000}, {0x40e26000}, - {0x40e28000}, {0x40e2a000}, {0x40e2c000}, {0x40e2e000}, - {0x40e30000}, {0x40e32000}, {0x40e34000}, {0x40e36000}, - {0x40e38000}, {0x40e3a000}, {0x40e3c000}, {0x40e3e000}, - {0x40e40000}, {0x40e42000}, {0x40e44000}, {0x40e46000}, - {0x40e48000}, {0x40e4a000}, {0x40e4c000}, {0x40e4e000}, - {0x40e50000}, {0x40e52000}, {0x40e54000}, {0x40e56000}, - {0x40e58000}, {0x40e5a000}, {0x40e5c000}, {0x40e5e000}, - {0x40e60000}, {0x40e62000}, {0x40e64000}, {0x40e66000}, - {0x40e68000}, {0x40e6a000}, {0x40e6c000}, {0x40e6e000}, - {0x40e70000}, {0x40e72000}, {0x40e74000}, {0x40e76000}, - {0x40e78000}, {0x40e7a000}, {0x40e7c000}, {0x40e7e000}, - {0x40e80000}, {0x40e82000}, {0x40e84000}, {0x40e86000}, - {0x40e88000}, {0x40e8a000}, {0x40e8c000}, {0x40e8e000}, - {0x40e90000}, {0x40e92000}, {0x40e94000}, {0x40e96000}, - {0x40e98000}, {0x40e9a000}, {0x40e9c000}, {0x40e9e000}, - {0x40ea0000}, {0x40ea2000}, {0x40ea4000}, {0x40ea6000}, - {0x40ea8000}, {0x40eaa000}, {0x40eac000}, {0x40eae000}, - {0x40eb0000}, {0x40eb2000}, {0x40eb4000}, {0x40eb6000}, - {0x40eb8000}, {0x40eba000}, {0x40ebc000}, {0x40ebe000}, - {0x40ec0000}, {0x40ec2000}, {0x40ec4000}, {0x40ec6000}, - {0x40ec8000}, {0x40eca000}, {0x40ecc000}, {0x40ece000}, - {0x40ed0000}, {0x40ed2000}, {0x40ed4000}, {0x40ed6000}, - {0x40ed8000}, {0x40eda000}, {0x40edc000}, {0x40ede000}, - {0x40ee0000}, {0x40ee2000}, {0x40ee4000}, {0x40ee6000}, - {0x40ee8000}, {0x40eea000}, {0x40eec000}, {0x40eee000}, - {0x40ef0000}, {0x40ef2000}, {0x40ef4000}, {0x40ef6000}, - {0x40ef8000}, {0x40efa000}, {0x40efc000}, {0x40efe000}, - {0x40f00000}, {0x40f02000}, {0x40f04000}, {0x40f06000}, - {0x40f08000}, {0x40f0a000}, {0x40f0c000}, {0x40f0e000}, - {0x40f10000}, {0x40f12000}, {0x40f14000}, {0x40f16000}, - {0x40f18000}, {0x40f1a000}, {0x40f1c000}, {0x40f1e000}, - {0x40f20000}, {0x40f22000}, {0x40f24000}, {0x40f26000}, - {0x40f28000}, {0x40f2a000}, {0x40f2c000}, {0x40f2e000}, - {0x40f30000}, {0x40f32000}, {0x40f34000}, {0x40f36000}, - {0x40f38000}, {0x40f3a000}, {0x40f3c000}, {0x40f3e000}, - {0x40f40000}, {0x40f42000}, {0x40f44000}, {0x40f46000}, - {0x40f48000}, {0x40f4a000}, {0x40f4c000}, {0x40f4e000}, - {0x40f50000}, {0x40f52000}, {0x40f54000}, {0x40f56000}, - {0x40f58000}, {0x40f5a000}, {0x40f5c000}, {0x40f5e000}, - {0x40f60000}, {0x40f62000}, {0x40f64000}, {0x40f66000}, - {0x40f68000}, {0x40f6a000}, {0x40f6c000}, {0x40f6e000}, - {0x40f70000}, {0x40f72000}, {0x40f74000}, {0x40f76000}, - {0x40f78000}, {0x40f7a000}, {0x40f7c000}, {0x40f7e000}, - {0x40f80000}, {0x40f82000}, {0x40f84000}, {0x40f86000}, - {0x40f88000}, {0x40f8a000}, {0x40f8c000}, {0x40f8e000}, - {0x40f90000}, {0x40f92000}, {0x40f94000}, {0x40f96000}, - {0x40f98000}, {0x40f9a000}, {0x40f9c000}, {0x40f9e000}, - {0x40fa0000}, {0x40fa2000}, {0x40fa4000}, {0x40fa6000}, - {0x40fa8000}, {0x40faa000}, {0x40fac000}, {0x40fae000}, - {0x40fb0000}, {0x40fb2000}, {0x40fb4000}, {0x40fb6000}, - {0x40fb8000}, {0x40fba000}, {0x40fbc000}, {0x40fbe000}, - {0x40fc0000}, {0x40fc2000}, {0x40fc4000}, {0x40fc6000}, - {0x40fc8000}, {0x40fca000}, {0x40fcc000}, {0x40fce000}, - {0x40fd0000}, {0x40fd2000}, {0x40fd4000}, {0x40fd6000}, - {0x40fd8000}, {0x40fda000}, {0x40fdc000}, {0x40fde000}, - {0x40fe0000}, {0x40fe2000}, {0x40fe4000}, {0x40fe6000}, - {0x40fe8000}, {0x40fea000}, {0x40fec000}, {0x40fee000}, - {0x40ff0000}, {0x40ff2000}, {0x40ff4000}, {0x40ff6000}, - {0x40ff8000}, {0x40ffa000}, {0x40ffc000}, {0x40ffe000}, - {0x41000000}, {0x41002000}, {0x41004000}, {0x41006000}, - {0x41008000}, {0x4100a000}, {0x4100c000}, {0x4100e000}, - {0x41010000}, {0x41012000}, {0x41014000}, {0x41016000}, - {0x41018000}, {0x4101a000}, {0x4101c000}, {0x4101e000}, - {0x41020000}, {0x41022000}, {0x41024000}, {0x41026000}, - {0x41028000}, {0x4102a000}, {0x4102c000}, {0x4102e000}, - {0x41030000}, {0x41032000}, {0x41034000}, {0x41036000}, - {0x41038000}, {0x4103a000}, {0x4103c000}, {0x4103e000}, - {0x41040000}, {0x41042000}, {0x41044000}, {0x41046000}, - {0x41048000}, {0x4104a000}, {0x4104c000}, {0x4104e000}, - {0x41050000}, {0x41052000}, {0x41054000}, {0x41056000}, - {0x41058000}, {0x4105a000}, {0x4105c000}, {0x4105e000}, - {0x41060000}, {0x41062000}, {0x41064000}, {0x41066000}, - {0x41068000}, {0x4106a000}, {0x4106c000}, {0x4106e000}, - {0x41070000}, {0x41072000}, {0x41074000}, {0x41076000}, - {0x41078000}, {0x4107a000}, {0x4107c000}, {0x4107e000}, - {0x41080000}, {0x41082000}, {0x41084000}, {0x41086000}, - {0x41088000}, {0x4108a000}, {0x4108c000}, {0x4108e000}, - {0x41090000}, {0x41092000}, {0x41094000}, {0x41096000}, - {0x41098000}, {0x4109a000}, {0x4109c000}, {0x4109e000}, - {0x410a0000}, {0x410a2000}, {0x410a4000}, {0x410a6000}, - {0x410a8000}, {0x410aa000}, {0x410ac000}, {0x410ae000}, - {0x410b0000}, {0x410b2000}, {0x410b4000}, {0x410b6000}, - {0x410b8000}, {0x410ba000}, {0x410bc000}, {0x410be000}, - {0x410c0000}, {0x410c2000}, {0x410c4000}, {0x410c6000}, - {0x410c8000}, {0x410ca000}, {0x410cc000}, {0x410ce000}, - {0x410d0000}, {0x410d2000}, {0x410d4000}, {0x410d6000}, - {0x410d8000}, {0x410da000}, {0x410dc000}, {0x410de000}, - {0x410e0000}, {0x410e2000}, {0x410e4000}, {0x410e6000}, - {0x410e8000}, {0x410ea000}, {0x410ec000}, {0x410ee000}, - {0x410f0000}, {0x410f2000}, {0x410f4000}, {0x410f6000}, - {0x410f8000}, {0x410fa000}, {0x410fc000}, {0x410fe000}, - {0x41100000}, {0x41102000}, {0x41104000}, {0x41106000}, - {0x41108000}, {0x4110a000}, {0x4110c000}, {0x4110e000}, - {0x41110000}, {0x41112000}, {0x41114000}, {0x41116000}, - {0x41118000}, {0x4111a000}, {0x4111c000}, {0x4111e000}, - {0x41120000}, {0x41122000}, {0x41124000}, {0x41126000}, - {0x41128000}, {0x4112a000}, {0x4112c000}, {0x4112e000}, - {0x41130000}, {0x41132000}, {0x41134000}, {0x41136000}, - {0x41138000}, {0x4113a000}, {0x4113c000}, {0x4113e000}, - {0x41140000}, {0x41142000}, {0x41144000}, {0x41146000}, - {0x41148000}, {0x4114a000}, {0x4114c000}, {0x4114e000}, - {0x41150000}, {0x41152000}, {0x41154000}, {0x41156000}, - {0x41158000}, {0x4115a000}, {0x4115c000}, {0x4115e000}, - {0x41160000}, {0x41162000}, {0x41164000}, {0x41166000}, - {0x41168000}, {0x4116a000}, {0x4116c000}, {0x4116e000}, - {0x41170000}, {0x41172000}, {0x41174000}, {0x41176000}, - {0x41178000}, {0x4117a000}, {0x4117c000}, {0x4117e000}, - {0x41180000}, {0x41182000}, {0x41184000}, {0x41186000}, - {0x41188000}, {0x4118a000}, {0x4118c000}, {0x4118e000}, - {0x41190000}, {0x41192000}, {0x41194000}, {0x41196000}, - {0x41198000}, {0x4119a000}, {0x4119c000}, {0x4119e000}, - {0x411a0000}, {0x411a2000}, {0x411a4000}, {0x411a6000}, - {0x411a8000}, {0x411aa000}, {0x411ac000}, {0x411ae000}, - {0x411b0000}, {0x411b2000}, {0x411b4000}, {0x411b6000}, - {0x411b8000}, {0x411ba000}, {0x411bc000}, {0x411be000}, - {0x411c0000}, {0x411c2000}, {0x411c4000}, {0x411c6000}, - {0x411c8000}, {0x411ca000}, {0x411cc000}, {0x411ce000}, - {0x411d0000}, {0x411d2000}, {0x411d4000}, {0x411d6000}, - {0x411d8000}, {0x411da000}, {0x411dc000}, {0x411de000}, - {0x411e0000}, {0x411e2000}, {0x411e4000}, {0x411e6000}, - {0x411e8000}, {0x411ea000}, {0x411ec000}, {0x411ee000}, - {0x411f0000}, {0x411f2000}, {0x411f4000}, {0x411f6000}, - {0x411f8000}, {0x411fa000}, {0x411fc000}, {0x411fe000}, - {0x41200000}, {0x41202000}, {0x41204000}, {0x41206000}, - {0x41208000}, {0x4120a000}, {0x4120c000}, {0x4120e000}, - {0x41210000}, {0x41212000}, {0x41214000}, {0x41216000}, - {0x41218000}, {0x4121a000}, {0x4121c000}, {0x4121e000}, - {0x41220000}, {0x41222000}, {0x41224000}, {0x41226000}, - {0x41228000}, {0x4122a000}, {0x4122c000}, {0x4122e000}, - {0x41230000}, {0x41232000}, {0x41234000}, {0x41236000}, - {0x41238000}, {0x4123a000}, {0x4123c000}, {0x4123e000}, - {0x41240000}, {0x41242000}, {0x41244000}, {0x41246000}, - {0x41248000}, {0x4124a000}, {0x4124c000}, {0x4124e000}, - {0x41250000}, {0x41252000}, {0x41254000}, {0x41256000}, - {0x41258000}, {0x4125a000}, {0x4125c000}, {0x4125e000}, - {0x41260000}, {0x41262000}, {0x41264000}, {0x41266000}, - {0x41268000}, {0x4126a000}, {0x4126c000}, {0x4126e000}, - {0x41270000}, {0x41272000}, {0x41274000}, {0x41276000}, - {0x41278000}, {0x4127a000}, {0x4127c000}, {0x4127e000}, - {0x41280000}, {0x41282000}, {0x41284000}, {0x41286000}, - {0x41288000}, {0x4128a000}, {0x4128c000}, {0x4128e000}, - {0x41290000}, {0x41292000}, {0x41294000}, {0x41296000}, - {0x41298000}, {0x4129a000}, {0x4129c000}, {0x4129e000}, - {0x412a0000}, {0x412a2000}, {0x412a4000}, {0x412a6000}, - {0x412a8000}, {0x412aa000}, {0x412ac000}, {0x412ae000}, - {0x412b0000}, {0x412b2000}, {0x412b4000}, {0x412b6000}, - {0x412b8000}, {0x412ba000}, {0x412bc000}, {0x412be000}, - {0x412c0000}, {0x412c2000}, {0x412c4000}, {0x412c6000}, - {0x412c8000}, {0x412ca000}, {0x412cc000}, {0x412ce000}, - {0x412d0000}, {0x412d2000}, {0x412d4000}, {0x412d6000}, - {0x412d8000}, {0x412da000}, {0x412dc000}, {0x412de000}, - {0x412e0000}, {0x412e2000}, {0x412e4000}, {0x412e6000}, - {0x412e8000}, {0x412ea000}, {0x412ec000}, {0x412ee000}, - {0x412f0000}, {0x412f2000}, {0x412f4000}, {0x412f6000}, - {0x412f8000}, {0x412fa000}, {0x412fc000}, {0x412fe000}, - {0x41300000}, {0x41302000}, {0x41304000}, {0x41306000}, - {0x41308000}, {0x4130a000}, {0x4130c000}, {0x4130e000}, - {0x41310000}, {0x41312000}, {0x41314000}, {0x41316000}, - {0x41318000}, {0x4131a000}, {0x4131c000}, {0x4131e000}, - {0x41320000}, {0x41322000}, {0x41324000}, {0x41326000}, - {0x41328000}, {0x4132a000}, {0x4132c000}, {0x4132e000}, - {0x41330000}, {0x41332000}, {0x41334000}, {0x41336000}, - {0x41338000}, {0x4133a000}, {0x4133c000}, {0x4133e000}, - {0x41340000}, {0x41342000}, {0x41344000}, {0x41346000}, - {0x41348000}, {0x4134a000}, {0x4134c000}, {0x4134e000}, - {0x41350000}, {0x41352000}, {0x41354000}, {0x41356000}, - {0x41358000}, {0x4135a000}, {0x4135c000}, {0x4135e000}, - {0x41360000}, {0x41362000}, {0x41364000}, {0x41366000}, - {0x41368000}, {0x4136a000}, {0x4136c000}, {0x4136e000}, - {0x41370000}, {0x41372000}, {0x41374000}, {0x41376000}, - {0x41378000}, {0x4137a000}, {0x4137c000}, {0x4137e000}, - {0x41380000}, {0x41382000}, {0x41384000}, {0x41386000}, - {0x41388000}, {0x4138a000}, {0x4138c000}, {0x4138e000}, - {0x41390000}, {0x41392000}, {0x41394000}, {0x41396000}, - {0x41398000}, {0x4139a000}, {0x4139c000}, {0x4139e000}, - {0x413a0000}, {0x413a2000}, {0x413a4000}, {0x413a6000}, - {0x413a8000}, {0x413aa000}, {0x413ac000}, {0x413ae000}, - {0x413b0000}, {0x413b2000}, {0x413b4000}, {0x413b6000}, - {0x413b8000}, {0x413ba000}, {0x413bc000}, {0x413be000}, - {0x413c0000}, {0x413c2000}, {0x413c4000}, {0x413c6000}, - {0x413c8000}, {0x413ca000}, {0x413cc000}, {0x413ce000}, - {0x413d0000}, {0x413d2000}, {0x413d4000}, {0x413d6000}, - {0x413d8000}, {0x413da000}, {0x413dc000}, {0x413de000}, - {0x413e0000}, {0x413e2000}, {0x413e4000}, {0x413e6000}, - {0x413e8000}, {0x413ea000}, {0x413ec000}, {0x413ee000}, - {0x413f0000}, {0x413f2000}, {0x413f4000}, {0x413f6000}, - {0x413f8000}, {0x413fa000}, {0x413fc000}, {0x413fe000}, - {0x41400000}, {0x41402000}, {0x41404000}, {0x41406000}, - {0x41408000}, {0x4140a000}, {0x4140c000}, {0x4140e000}, - {0x41410000}, {0x41412000}, {0x41414000}, {0x41416000}, - {0x41418000}, {0x4141a000}, {0x4141c000}, {0x4141e000}, - {0x41420000}, {0x41422000}, {0x41424000}, {0x41426000}, - {0x41428000}, {0x4142a000}, {0x4142c000}, {0x4142e000}, - {0x41430000}, {0x41432000}, {0x41434000}, {0x41436000}, - {0x41438000}, {0x4143a000}, {0x4143c000}, {0x4143e000}, - {0x41440000}, {0x41442000}, {0x41444000}, {0x41446000}, - {0x41448000}, {0x4144a000}, {0x4144c000}, {0x4144e000}, - {0x41450000}, {0x41452000}, {0x41454000}, {0x41456000}, - {0x41458000}, {0x4145a000}, {0x4145c000}, {0x4145e000}, - {0x41460000}, {0x41462000}, {0x41464000}, {0x41466000}, - {0x41468000}, {0x4146a000}, {0x4146c000}, {0x4146e000}, - {0x41470000}, {0x41472000}, {0x41474000}, {0x41476000}, - {0x41478000}, {0x4147a000}, {0x4147c000}, {0x4147e000}, - {0x41480000}, {0x41482000}, {0x41484000}, {0x41486000}, - {0x41488000}, {0x4148a000}, {0x4148c000}, {0x4148e000}, - {0x41490000}, {0x41492000}, {0x41494000}, {0x41496000}, - {0x41498000}, {0x4149a000}, {0x4149c000}, {0x4149e000}, - {0x414a0000}, {0x414a2000}, {0x414a4000}, {0x414a6000}, - {0x414a8000}, {0x414aa000}, {0x414ac000}, {0x414ae000}, - {0x414b0000}, {0x414b2000}, {0x414b4000}, {0x414b6000}, - {0x414b8000}, {0x414ba000}, {0x414bc000}, {0x414be000}, - {0x414c0000}, {0x414c2000}, {0x414c4000}, {0x414c6000}, - {0x414c8000}, {0x414ca000}, {0x414cc000}, {0x414ce000}, - {0x414d0000}, {0x414d2000}, {0x414d4000}, {0x414d6000}, - {0x414d8000}, {0x414da000}, {0x414dc000}, {0x414de000}, - {0x414e0000}, {0x414e2000}, {0x414e4000}, {0x414e6000}, - {0x414e8000}, {0x414ea000}, {0x414ec000}, {0x414ee000}, - {0x414f0000}, {0x414f2000}, {0x414f4000}, {0x414f6000}, - {0x414f8000}, {0x414fa000}, {0x414fc000}, {0x414fe000}, - {0x41500000}, {0x41502000}, {0x41504000}, {0x41506000}, - {0x41508000}, {0x4150a000}, {0x4150c000}, {0x4150e000}, - {0x41510000}, {0x41512000}, {0x41514000}, {0x41516000}, - {0x41518000}, {0x4151a000}, {0x4151c000}, {0x4151e000}, - {0x41520000}, {0x41522000}, {0x41524000}, {0x41526000}, - {0x41528000}, {0x4152a000}, {0x4152c000}, {0x4152e000}, - {0x41530000}, {0x41532000}, {0x41534000}, {0x41536000}, - {0x41538000}, {0x4153a000}, {0x4153c000}, {0x4153e000}, - {0x41540000}, {0x41542000}, {0x41544000}, {0x41546000}, - {0x41548000}, {0x4154a000}, {0x4154c000}, {0x4154e000}, - {0x41550000}, {0x41552000}, {0x41554000}, {0x41556000}, - {0x41558000}, {0x4155a000}, {0x4155c000}, {0x4155e000}, - {0x41560000}, {0x41562000}, {0x41564000}, {0x41566000}, - {0x41568000}, {0x4156a000}, {0x4156c000}, {0x4156e000}, - {0x41570000}, {0x41572000}, {0x41574000}, {0x41576000}, - {0x41578000}, {0x4157a000}, {0x4157c000}, {0x4157e000}, - {0x41580000}, {0x41582000}, {0x41584000}, {0x41586000}, - {0x41588000}, {0x4158a000}, {0x4158c000}, {0x4158e000}, - {0x41590000}, {0x41592000}, {0x41594000}, {0x41596000}, - {0x41598000}, {0x4159a000}, {0x4159c000}, {0x4159e000}, - {0x415a0000}, {0x415a2000}, {0x415a4000}, {0x415a6000}, - {0x415a8000}, {0x415aa000}, {0x415ac000}, {0x415ae000}, - {0x415b0000}, {0x415b2000}, {0x415b4000}, {0x415b6000}, - {0x415b8000}, {0x415ba000}, {0x415bc000}, {0x415be000}, - {0x415c0000}, {0x415c2000}, {0x415c4000}, {0x415c6000}, - {0x415c8000}, {0x415ca000}, {0x415cc000}, {0x415ce000}, - {0x415d0000}, {0x415d2000}, {0x415d4000}, {0x415d6000}, - {0x415d8000}, {0x415da000}, {0x415dc000}, {0x415de000}, - {0x415e0000}, {0x415e2000}, {0x415e4000}, {0x415e6000}, - {0x415e8000}, {0x415ea000}, {0x415ec000}, {0x415ee000}, - {0x415f0000}, {0x415f2000}, {0x415f4000}, {0x415f6000}, - {0x415f8000}, {0x415fa000}, {0x415fc000}, {0x415fe000}, - {0x41600000}, {0x41602000}, {0x41604000}, {0x41606000}, - {0x41608000}, {0x4160a000}, {0x4160c000}, {0x4160e000}, - {0x41610000}, {0x41612000}, {0x41614000}, {0x41616000}, - {0x41618000}, {0x4161a000}, {0x4161c000}, {0x4161e000}, - {0x41620000}, {0x41622000}, {0x41624000}, {0x41626000}, - {0x41628000}, {0x4162a000}, {0x4162c000}, {0x4162e000}, - {0x41630000}, {0x41632000}, {0x41634000}, {0x41636000}, - {0x41638000}, {0x4163a000}, {0x4163c000}, {0x4163e000}, - {0x41640000}, {0x41642000}, {0x41644000}, {0x41646000}, - {0x41648000}, {0x4164a000}, {0x4164c000}, {0x4164e000}, - {0x41650000}, {0x41652000}, {0x41654000}, {0x41656000}, - {0x41658000}, {0x4165a000}, {0x4165c000}, {0x4165e000}, - {0x41660000}, {0x41662000}, {0x41664000}, {0x41666000}, - {0x41668000}, {0x4166a000}, {0x4166c000}, {0x4166e000}, - {0x41670000}, {0x41672000}, {0x41674000}, {0x41676000}, - {0x41678000}, {0x4167a000}, {0x4167c000}, {0x4167e000}, - {0x41680000}, {0x41682000}, {0x41684000}, {0x41686000}, - {0x41688000}, {0x4168a000}, {0x4168c000}, {0x4168e000}, - {0x41690000}, {0x41692000}, {0x41694000}, {0x41696000}, - {0x41698000}, {0x4169a000}, {0x4169c000}, {0x4169e000}, - {0x416a0000}, {0x416a2000}, {0x416a4000}, {0x416a6000}, - {0x416a8000}, {0x416aa000}, {0x416ac000}, {0x416ae000}, - {0x416b0000}, {0x416b2000}, {0x416b4000}, {0x416b6000}, - {0x416b8000}, {0x416ba000}, {0x416bc000}, {0x416be000}, - {0x416c0000}, {0x416c2000}, {0x416c4000}, {0x416c6000}, - {0x416c8000}, {0x416ca000}, {0x416cc000}, {0x416ce000}, - {0x416d0000}, {0x416d2000}, {0x416d4000}, {0x416d6000}, - {0x416d8000}, {0x416da000}, {0x416dc000}, {0x416de000}, - {0x416e0000}, {0x416e2000}, {0x416e4000}, {0x416e6000}, - {0x416e8000}, {0x416ea000}, {0x416ec000}, {0x416ee000}, - {0x416f0000}, {0x416f2000}, {0x416f4000}, {0x416f6000}, - {0x416f8000}, {0x416fa000}, {0x416fc000}, {0x416fe000}, - {0x41700000}, {0x41702000}, {0x41704000}, {0x41706000}, - {0x41708000}, {0x4170a000}, {0x4170c000}, {0x4170e000}, - {0x41710000}, {0x41712000}, {0x41714000}, {0x41716000}, - {0x41718000}, {0x4171a000}, {0x4171c000}, {0x4171e000}, - {0x41720000}, {0x41722000}, {0x41724000}, {0x41726000}, - {0x41728000}, {0x4172a000}, {0x4172c000}, {0x4172e000}, - {0x41730000}, {0x41732000}, {0x41734000}, {0x41736000}, - {0x41738000}, {0x4173a000}, {0x4173c000}, {0x4173e000}, - {0x41740000}, {0x41742000}, {0x41744000}, {0x41746000}, - {0x41748000}, {0x4174a000}, {0x4174c000}, {0x4174e000}, - {0x41750000}, {0x41752000}, {0x41754000}, {0x41756000}, - {0x41758000}, {0x4175a000}, {0x4175c000}, {0x4175e000}, - {0x41760000}, {0x41762000}, {0x41764000}, {0x41766000}, - {0x41768000}, {0x4176a000}, {0x4176c000}, {0x4176e000}, - {0x41770000}, {0x41772000}, {0x41774000}, {0x41776000}, - {0x41778000}, {0x4177a000}, {0x4177c000}, {0x4177e000}, - {0x41780000}, {0x41782000}, {0x41784000}, {0x41786000}, - {0x41788000}, {0x4178a000}, {0x4178c000}, {0x4178e000}, - {0x41790000}, {0x41792000}, {0x41794000}, {0x41796000}, - {0x41798000}, {0x4179a000}, {0x4179c000}, {0x4179e000}, - {0x417a0000}, {0x417a2000}, {0x417a4000}, {0x417a6000}, - {0x417a8000}, {0x417aa000}, {0x417ac000}, {0x417ae000}, - {0x417b0000}, {0x417b2000}, {0x417b4000}, {0x417b6000}, - {0x417b8000}, {0x417ba000}, {0x417bc000}, {0x417be000}, - {0x417c0000}, {0x417c2000}, {0x417c4000}, {0x417c6000}, - {0x417c8000}, {0x417ca000}, {0x417cc000}, {0x417ce000}, - {0x417d0000}, {0x417d2000}, {0x417d4000}, {0x417d6000}, - {0x417d8000}, {0x417da000}, {0x417dc000}, {0x417de000}, - {0x417e0000}, {0x417e2000}, {0x417e4000}, {0x417e6000}, - {0x417e8000}, {0x417ea000}, {0x417ec000}, {0x417ee000}, - {0x417f0000}, {0x417f2000}, {0x417f4000}, {0x417f6000}, - {0x417f8000}, {0x417fa000}, {0x417fc000}, {0x417fe000}, - {0x41800000}, {0x41802000}, {0x41804000}, {0x41806000}, - {0x41808000}, {0x4180a000}, {0x4180c000}, {0x4180e000}, - {0x41810000}, {0x41812000}, {0x41814000}, {0x41816000}, - {0x41818000}, {0x4181a000}, {0x4181c000}, {0x4181e000}, - {0x41820000}, {0x41822000}, {0x41824000}, {0x41826000}, - {0x41828000}, {0x4182a000}, {0x4182c000}, {0x4182e000}, - {0x41830000}, {0x41832000}, {0x41834000}, {0x41836000}, - {0x41838000}, {0x4183a000}, {0x4183c000}, {0x4183e000}, - {0x41840000}, {0x41842000}, {0x41844000}, {0x41846000}, - {0x41848000}, {0x4184a000}, {0x4184c000}, {0x4184e000}, - {0x41850000}, {0x41852000}, {0x41854000}, {0x41856000}, - {0x41858000}, {0x4185a000}, {0x4185c000}, {0x4185e000}, - {0x41860000}, {0x41862000}, {0x41864000}, {0x41866000}, - {0x41868000}, {0x4186a000}, {0x4186c000}, {0x4186e000}, - {0x41870000}, {0x41872000}, {0x41874000}, {0x41876000}, - {0x41878000}, {0x4187a000}, {0x4187c000}, {0x4187e000}, - {0x41880000}, {0x41882000}, {0x41884000}, {0x41886000}, - {0x41888000}, {0x4188a000}, {0x4188c000}, {0x4188e000}, - {0x41890000}, {0x41892000}, {0x41894000}, {0x41896000}, - {0x41898000}, {0x4189a000}, {0x4189c000}, {0x4189e000}, - {0x418a0000}, {0x418a2000}, {0x418a4000}, {0x418a6000}, - {0x418a8000}, {0x418aa000}, {0x418ac000}, {0x418ae000}, - {0x418b0000}, {0x418b2000}, {0x418b4000}, {0x418b6000}, - {0x418b8000}, {0x418ba000}, {0x418bc000}, {0x418be000}, - {0x418c0000}, {0x418c2000}, {0x418c4000}, {0x418c6000}, - {0x418c8000}, {0x418ca000}, {0x418cc000}, {0x418ce000}, - {0x418d0000}, {0x418d2000}, {0x418d4000}, {0x418d6000}, - {0x418d8000}, {0x418da000}, {0x418dc000}, {0x418de000}, - {0x418e0000}, {0x418e2000}, {0x418e4000}, {0x418e6000}, - {0x418e8000}, {0x418ea000}, {0x418ec000}, {0x418ee000}, - {0x418f0000}, {0x418f2000}, {0x418f4000}, {0x418f6000}, - {0x418f8000}, {0x418fa000}, {0x418fc000}, {0x418fe000}, - {0x41900000}, {0x41902000}, {0x41904000}, {0x41906000}, - {0x41908000}, {0x4190a000}, {0x4190c000}, {0x4190e000}, - {0x41910000}, {0x41912000}, {0x41914000}, {0x41916000}, - {0x41918000}, {0x4191a000}, {0x4191c000}, {0x4191e000}, - {0x41920000}, {0x41922000}, {0x41924000}, {0x41926000}, - {0x41928000}, {0x4192a000}, {0x4192c000}, {0x4192e000}, - {0x41930000}, {0x41932000}, {0x41934000}, {0x41936000}, - {0x41938000}, {0x4193a000}, {0x4193c000}, {0x4193e000}, - {0x41940000}, {0x41942000}, {0x41944000}, {0x41946000}, - {0x41948000}, {0x4194a000}, {0x4194c000}, {0x4194e000}, - {0x41950000}, {0x41952000}, {0x41954000}, {0x41956000}, - {0x41958000}, {0x4195a000}, {0x4195c000}, {0x4195e000}, - {0x41960000}, {0x41962000}, {0x41964000}, {0x41966000}, - {0x41968000}, {0x4196a000}, {0x4196c000}, {0x4196e000}, - {0x41970000}, {0x41972000}, {0x41974000}, {0x41976000}, - {0x41978000}, {0x4197a000}, {0x4197c000}, {0x4197e000}, - {0x41980000}, {0x41982000}, {0x41984000}, {0x41986000}, - {0x41988000}, {0x4198a000}, {0x4198c000}, {0x4198e000}, - {0x41990000}, {0x41992000}, {0x41994000}, {0x41996000}, - {0x41998000}, {0x4199a000}, {0x4199c000}, {0x4199e000}, - {0x419a0000}, {0x419a2000}, {0x419a4000}, {0x419a6000}, - {0x419a8000}, {0x419aa000}, {0x419ac000}, {0x419ae000}, - {0x419b0000}, {0x419b2000}, {0x419b4000}, {0x419b6000}, - {0x419b8000}, {0x419ba000}, {0x419bc000}, {0x419be000}, - {0x419c0000}, {0x419c2000}, {0x419c4000}, {0x419c6000}, - {0x419c8000}, {0x419ca000}, {0x419cc000}, {0x419ce000}, - {0x419d0000}, {0x419d2000}, {0x419d4000}, {0x419d6000}, - {0x419d8000}, {0x419da000}, {0x419dc000}, {0x419de000}, - {0x419e0000}, {0x419e2000}, {0x419e4000}, {0x419e6000}, - {0x419e8000}, {0x419ea000}, {0x419ec000}, {0x419ee000}, - {0x419f0000}, {0x419f2000}, {0x419f4000}, {0x419f6000}, - {0x419f8000}, {0x419fa000}, {0x419fc000}, {0x419fe000}, - {0x41a00000}, {0x41a02000}, {0x41a04000}, {0x41a06000}, - {0x41a08000}, {0x41a0a000}, {0x41a0c000}, {0x41a0e000}, - {0x41a10000}, {0x41a12000}, {0x41a14000}, {0x41a16000}, - {0x41a18000}, {0x41a1a000}, {0x41a1c000}, {0x41a1e000}, - {0x41a20000}, {0x41a22000}, {0x41a24000}, {0x41a26000}, - {0x41a28000}, {0x41a2a000}, {0x41a2c000}, {0x41a2e000}, - {0x41a30000}, {0x41a32000}, {0x41a34000}, {0x41a36000}, - {0x41a38000}, {0x41a3a000}, {0x41a3c000}, {0x41a3e000}, - {0x41a40000}, {0x41a42000}, {0x41a44000}, {0x41a46000}, - {0x41a48000}, {0x41a4a000}, {0x41a4c000}, {0x41a4e000}, - {0x41a50000}, {0x41a52000}, {0x41a54000}, {0x41a56000}, - {0x41a58000}, {0x41a5a000}, {0x41a5c000}, {0x41a5e000}, - {0x41a60000}, {0x41a62000}, {0x41a64000}, {0x41a66000}, - {0x41a68000}, {0x41a6a000}, {0x41a6c000}, {0x41a6e000}, - {0x41a70000}, {0x41a72000}, {0x41a74000}, {0x41a76000}, - {0x41a78000}, {0x41a7a000}, {0x41a7c000}, {0x41a7e000}, - {0x41a80000}, {0x41a82000}, {0x41a84000}, {0x41a86000}, - {0x41a88000}, {0x41a8a000}, {0x41a8c000}, {0x41a8e000}, - {0x41a90000}, {0x41a92000}, {0x41a94000}, {0x41a96000}, - {0x41a98000}, {0x41a9a000}, {0x41a9c000}, {0x41a9e000}, - {0x41aa0000}, {0x41aa2000}, {0x41aa4000}, {0x41aa6000}, - {0x41aa8000}, {0x41aaa000}, {0x41aac000}, {0x41aae000}, - {0x41ab0000}, {0x41ab2000}, {0x41ab4000}, {0x41ab6000}, - {0x41ab8000}, {0x41aba000}, {0x41abc000}, {0x41abe000}, - {0x41ac0000}, {0x41ac2000}, {0x41ac4000}, {0x41ac6000}, - {0x41ac8000}, {0x41aca000}, {0x41acc000}, {0x41ace000}, - {0x41ad0000}, {0x41ad2000}, {0x41ad4000}, {0x41ad6000}, - {0x41ad8000}, {0x41ada000}, {0x41adc000}, {0x41ade000}, - {0x41ae0000}, {0x41ae2000}, {0x41ae4000}, {0x41ae6000}, - {0x41ae8000}, {0x41aea000}, {0x41aec000}, {0x41aee000}, - {0x41af0000}, {0x41af2000}, {0x41af4000}, {0x41af6000}, - {0x41af8000}, {0x41afa000}, {0x41afc000}, {0x41afe000}, - {0x41b00000}, {0x41b02000}, {0x41b04000}, {0x41b06000}, - {0x41b08000}, {0x41b0a000}, {0x41b0c000}, {0x41b0e000}, - {0x41b10000}, {0x41b12000}, {0x41b14000}, {0x41b16000}, - {0x41b18000}, {0x41b1a000}, {0x41b1c000}, {0x41b1e000}, - {0x41b20000}, {0x41b22000}, {0x41b24000}, {0x41b26000}, - {0x41b28000}, {0x41b2a000}, {0x41b2c000}, {0x41b2e000}, - {0x41b30000}, {0x41b32000}, {0x41b34000}, {0x41b36000}, - {0x41b38000}, {0x41b3a000}, {0x41b3c000}, {0x41b3e000}, - {0x41b40000}, {0x41b42000}, {0x41b44000}, {0x41b46000}, - {0x41b48000}, {0x41b4a000}, {0x41b4c000}, {0x41b4e000}, - {0x41b50000}, {0x41b52000}, {0x41b54000}, {0x41b56000}, - {0x41b58000}, {0x41b5a000}, {0x41b5c000}, {0x41b5e000}, - {0x41b60000}, {0x41b62000}, {0x41b64000}, {0x41b66000}, - {0x41b68000}, {0x41b6a000}, {0x41b6c000}, {0x41b6e000}, - {0x41b70000}, {0x41b72000}, {0x41b74000}, {0x41b76000}, - {0x41b78000}, {0x41b7a000}, {0x41b7c000}, {0x41b7e000}, - {0x41b80000}, {0x41b82000}, {0x41b84000}, {0x41b86000}, - {0x41b88000}, {0x41b8a000}, {0x41b8c000}, {0x41b8e000}, - {0x41b90000}, {0x41b92000}, {0x41b94000}, {0x41b96000}, - {0x41b98000}, {0x41b9a000}, {0x41b9c000}, {0x41b9e000}, - {0x41ba0000}, {0x41ba2000}, {0x41ba4000}, {0x41ba6000}, - {0x41ba8000}, {0x41baa000}, {0x41bac000}, {0x41bae000}, - {0x41bb0000}, {0x41bb2000}, {0x41bb4000}, {0x41bb6000}, - {0x41bb8000}, {0x41bba000}, {0x41bbc000}, {0x41bbe000}, - {0x41bc0000}, {0x41bc2000}, {0x41bc4000}, {0x41bc6000}, - {0x41bc8000}, {0x41bca000}, {0x41bcc000}, {0x41bce000}, - {0x41bd0000}, {0x41bd2000}, {0x41bd4000}, {0x41bd6000}, - {0x41bd8000}, {0x41bda000}, {0x41bdc000}, {0x41bde000}, - {0x41be0000}, {0x41be2000}, {0x41be4000}, {0x41be6000}, - {0x41be8000}, {0x41bea000}, {0x41bec000}, {0x41bee000}, - {0x41bf0000}, {0x41bf2000}, {0x41bf4000}, {0x41bf6000}, - {0x41bf8000}, {0x41bfa000}, {0x41bfc000}, {0x41bfe000}, - {0x41c00000}, {0x41c02000}, {0x41c04000}, {0x41c06000}, - {0x41c08000}, {0x41c0a000}, {0x41c0c000}, {0x41c0e000}, - {0x41c10000}, {0x41c12000}, {0x41c14000}, {0x41c16000}, - {0x41c18000}, {0x41c1a000}, {0x41c1c000}, {0x41c1e000}, - {0x41c20000}, {0x41c22000}, {0x41c24000}, {0x41c26000}, - {0x41c28000}, {0x41c2a000}, {0x41c2c000}, {0x41c2e000}, - {0x41c30000}, {0x41c32000}, {0x41c34000}, {0x41c36000}, - {0x41c38000}, {0x41c3a000}, {0x41c3c000}, {0x41c3e000}, - {0x41c40000}, {0x41c42000}, {0x41c44000}, {0x41c46000}, - {0x41c48000}, {0x41c4a000}, {0x41c4c000}, {0x41c4e000}, - {0x41c50000}, {0x41c52000}, {0x41c54000}, {0x41c56000}, - {0x41c58000}, {0x41c5a000}, {0x41c5c000}, {0x41c5e000}, - {0x41c60000}, {0x41c62000}, {0x41c64000}, {0x41c66000}, - {0x41c68000}, {0x41c6a000}, {0x41c6c000}, {0x41c6e000}, - {0x41c70000}, {0x41c72000}, {0x41c74000}, {0x41c76000}, - {0x41c78000}, {0x41c7a000}, {0x41c7c000}, {0x41c7e000}, - {0x41c80000}, {0x41c82000}, {0x41c84000}, {0x41c86000}, - {0x41c88000}, {0x41c8a000}, {0x41c8c000}, {0x41c8e000}, - {0x41c90000}, {0x41c92000}, {0x41c94000}, {0x41c96000}, - {0x41c98000}, {0x41c9a000}, {0x41c9c000}, {0x41c9e000}, - {0x41ca0000}, {0x41ca2000}, {0x41ca4000}, {0x41ca6000}, - {0x41ca8000}, {0x41caa000}, {0x41cac000}, {0x41cae000}, - {0x41cb0000}, {0x41cb2000}, {0x41cb4000}, {0x41cb6000}, - {0x41cb8000}, {0x41cba000}, {0x41cbc000}, {0x41cbe000}, - {0x41cc0000}, {0x41cc2000}, {0x41cc4000}, {0x41cc6000}, - {0x41cc8000}, {0x41cca000}, {0x41ccc000}, {0x41cce000}, - {0x41cd0000}, {0x41cd2000}, {0x41cd4000}, {0x41cd6000}, - {0x41cd8000}, {0x41cda000}, {0x41cdc000}, {0x41cde000}, - {0x41ce0000}, {0x41ce2000}, {0x41ce4000}, {0x41ce6000}, - {0x41ce8000}, {0x41cea000}, {0x41cec000}, {0x41cee000}, - {0x41cf0000}, {0x41cf2000}, {0x41cf4000}, {0x41cf6000}, - {0x41cf8000}, {0x41cfa000}, {0x41cfc000}, {0x41cfe000}, - {0x41d00000}, {0x41d02000}, {0x41d04000}, {0x41d06000}, - {0x41d08000}, {0x41d0a000}, {0x41d0c000}, {0x41d0e000}, - {0x41d10000}, {0x41d12000}, {0x41d14000}, {0x41d16000}, - {0x41d18000}, {0x41d1a000}, {0x41d1c000}, {0x41d1e000}, - {0x41d20000}, {0x41d22000}, {0x41d24000}, {0x41d26000}, - {0x41d28000}, {0x41d2a000}, {0x41d2c000}, {0x41d2e000}, - {0x41d30000}, {0x41d32000}, {0x41d34000}, {0x41d36000}, - {0x41d38000}, {0x41d3a000}, {0x41d3c000}, {0x41d3e000}, - {0x41d40000}, {0x41d42000}, {0x41d44000}, {0x41d46000}, - {0x41d48000}, {0x41d4a000}, {0x41d4c000}, {0x41d4e000}, - {0x41d50000}, {0x41d52000}, {0x41d54000}, {0x41d56000}, - {0x41d58000}, {0x41d5a000}, {0x41d5c000}, {0x41d5e000}, - {0x41d60000}, {0x41d62000}, {0x41d64000}, {0x41d66000}, - {0x41d68000}, {0x41d6a000}, {0x41d6c000}, {0x41d6e000}, - {0x41d70000}, {0x41d72000}, {0x41d74000}, {0x41d76000}, - {0x41d78000}, {0x41d7a000}, {0x41d7c000}, {0x41d7e000}, - {0x41d80000}, {0x41d82000}, {0x41d84000}, {0x41d86000}, - {0x41d88000}, {0x41d8a000}, {0x41d8c000}, {0x41d8e000}, - {0x41d90000}, {0x41d92000}, {0x41d94000}, {0x41d96000}, - {0x41d98000}, {0x41d9a000}, {0x41d9c000}, {0x41d9e000}, - {0x41da0000}, {0x41da2000}, {0x41da4000}, {0x41da6000}, - {0x41da8000}, {0x41daa000}, {0x41dac000}, {0x41dae000}, - {0x41db0000}, {0x41db2000}, {0x41db4000}, {0x41db6000}, - {0x41db8000}, {0x41dba000}, {0x41dbc000}, {0x41dbe000}, - {0x41dc0000}, {0x41dc2000}, {0x41dc4000}, {0x41dc6000}, - {0x41dc8000}, {0x41dca000}, {0x41dcc000}, {0x41dce000}, - {0x41dd0000}, {0x41dd2000}, {0x41dd4000}, {0x41dd6000}, - {0x41dd8000}, {0x41dda000}, {0x41ddc000}, {0x41dde000}, - {0x41de0000}, {0x41de2000}, {0x41de4000}, {0x41de6000}, - {0x41de8000}, {0x41dea000}, {0x41dec000}, {0x41dee000}, - {0x41df0000}, {0x41df2000}, {0x41df4000}, {0x41df6000}, - {0x41df8000}, {0x41dfa000}, {0x41dfc000}, {0x41dfe000}, - {0x41e00000}, {0x41e02000}, {0x41e04000}, {0x41e06000}, - {0x41e08000}, {0x41e0a000}, {0x41e0c000}, {0x41e0e000}, - {0x41e10000}, {0x41e12000}, {0x41e14000}, {0x41e16000}, - {0x41e18000}, {0x41e1a000}, {0x41e1c000}, {0x41e1e000}, - {0x41e20000}, {0x41e22000}, {0x41e24000}, {0x41e26000}, - {0x41e28000}, {0x41e2a000}, {0x41e2c000}, {0x41e2e000}, - {0x41e30000}, {0x41e32000}, {0x41e34000}, {0x41e36000}, - {0x41e38000}, {0x41e3a000}, {0x41e3c000}, {0x41e3e000}, - {0x41e40000}, {0x41e42000}, {0x41e44000}, {0x41e46000}, - {0x41e48000}, {0x41e4a000}, {0x41e4c000}, {0x41e4e000}, - {0x41e50000}, {0x41e52000}, {0x41e54000}, {0x41e56000}, - {0x41e58000}, {0x41e5a000}, {0x41e5c000}, {0x41e5e000}, - {0x41e60000}, {0x41e62000}, {0x41e64000}, {0x41e66000}, - {0x41e68000}, {0x41e6a000}, {0x41e6c000}, {0x41e6e000}, - {0x41e70000}, {0x41e72000}, {0x41e74000}, {0x41e76000}, - {0x41e78000}, {0x41e7a000}, {0x41e7c000}, {0x41e7e000}, - {0x41e80000}, {0x41e82000}, {0x41e84000}, {0x41e86000}, - {0x41e88000}, {0x41e8a000}, {0x41e8c000}, {0x41e8e000}, - {0x41e90000}, {0x41e92000}, {0x41e94000}, {0x41e96000}, - {0x41e98000}, {0x41e9a000}, {0x41e9c000}, {0x41e9e000}, - {0x41ea0000}, {0x41ea2000}, {0x41ea4000}, {0x41ea6000}, - {0x41ea8000}, {0x41eaa000}, {0x41eac000}, {0x41eae000}, - {0x41eb0000}, {0x41eb2000}, {0x41eb4000}, {0x41eb6000}, - {0x41eb8000}, {0x41eba000}, {0x41ebc000}, {0x41ebe000}, - {0x41ec0000}, {0x41ec2000}, {0x41ec4000}, {0x41ec6000}, - {0x41ec8000}, {0x41eca000}, {0x41ecc000}, {0x41ece000}, - {0x41ed0000}, {0x41ed2000}, {0x41ed4000}, {0x41ed6000}, - {0x41ed8000}, {0x41eda000}, {0x41edc000}, {0x41ede000}, - {0x41ee0000}, {0x41ee2000}, {0x41ee4000}, {0x41ee6000}, - {0x41ee8000}, {0x41eea000}, {0x41eec000}, {0x41eee000}, - {0x41ef0000}, {0x41ef2000}, {0x41ef4000}, {0x41ef6000}, - {0x41ef8000}, {0x41efa000}, {0x41efc000}, {0x41efe000}, - {0x41f00000}, {0x41f02000}, {0x41f04000}, {0x41f06000}, - {0x41f08000}, {0x41f0a000}, {0x41f0c000}, {0x41f0e000}, - {0x41f10000}, {0x41f12000}, {0x41f14000}, {0x41f16000}, - {0x41f18000}, {0x41f1a000}, {0x41f1c000}, {0x41f1e000}, - {0x41f20000}, {0x41f22000}, {0x41f24000}, {0x41f26000}, - {0x41f28000}, {0x41f2a000}, {0x41f2c000}, {0x41f2e000}, - {0x41f30000}, {0x41f32000}, {0x41f34000}, {0x41f36000}, - {0x41f38000}, {0x41f3a000}, {0x41f3c000}, {0x41f3e000}, - {0x41f40000}, {0x41f42000}, {0x41f44000}, {0x41f46000}, - {0x41f48000}, {0x41f4a000}, {0x41f4c000}, {0x41f4e000}, - {0x41f50000}, {0x41f52000}, {0x41f54000}, {0x41f56000}, - {0x41f58000}, {0x41f5a000}, {0x41f5c000}, {0x41f5e000}, - {0x41f60000}, {0x41f62000}, {0x41f64000}, {0x41f66000}, - {0x41f68000}, {0x41f6a000}, {0x41f6c000}, {0x41f6e000}, - {0x41f70000}, {0x41f72000}, {0x41f74000}, {0x41f76000}, - {0x41f78000}, {0x41f7a000}, {0x41f7c000}, {0x41f7e000}, - {0x41f80000}, {0x41f82000}, {0x41f84000}, {0x41f86000}, - {0x41f88000}, {0x41f8a000}, {0x41f8c000}, {0x41f8e000}, - {0x41f90000}, {0x41f92000}, {0x41f94000}, {0x41f96000}, - {0x41f98000}, {0x41f9a000}, {0x41f9c000}, {0x41f9e000}, - {0x41fa0000}, {0x41fa2000}, {0x41fa4000}, {0x41fa6000}, - {0x41fa8000}, {0x41faa000}, {0x41fac000}, {0x41fae000}, - {0x41fb0000}, {0x41fb2000}, {0x41fb4000}, {0x41fb6000}, - {0x41fb8000}, {0x41fba000}, {0x41fbc000}, {0x41fbe000}, - {0x41fc0000}, {0x41fc2000}, {0x41fc4000}, {0x41fc6000}, - {0x41fc8000}, {0x41fca000}, {0x41fcc000}, {0x41fce000}, - {0x41fd0000}, {0x41fd2000}, {0x41fd4000}, {0x41fd6000}, - {0x41fd8000}, {0x41fda000}, {0x41fdc000}, {0x41fde000}, - {0x41fe0000}, {0x41fe2000}, {0x41fe4000}, {0x41fe6000}, - {0x41fe8000}, {0x41fea000}, {0x41fec000}, {0x41fee000}, - {0x41ff0000}, {0x41ff2000}, {0x41ff4000}, {0x41ff6000}, - {0x41ff8000}, {0x41ffa000}, {0x41ffc000}, {0x41ffe000}, - {0x42000000}, {0x42002000}, {0x42004000}, {0x42006000}, - {0x42008000}, {0x4200a000}, {0x4200c000}, {0x4200e000}, - {0x42010000}, {0x42012000}, {0x42014000}, {0x42016000}, - {0x42018000}, {0x4201a000}, {0x4201c000}, {0x4201e000}, - {0x42020000}, {0x42022000}, {0x42024000}, {0x42026000}, - {0x42028000}, {0x4202a000}, {0x4202c000}, {0x4202e000}, - {0x42030000}, {0x42032000}, {0x42034000}, {0x42036000}, - {0x42038000}, {0x4203a000}, {0x4203c000}, {0x4203e000}, - {0x42040000}, {0x42042000}, {0x42044000}, {0x42046000}, - {0x42048000}, {0x4204a000}, {0x4204c000}, {0x4204e000}, - {0x42050000}, {0x42052000}, {0x42054000}, {0x42056000}, - {0x42058000}, {0x4205a000}, {0x4205c000}, {0x4205e000}, - {0x42060000}, {0x42062000}, {0x42064000}, {0x42066000}, - {0x42068000}, {0x4206a000}, {0x4206c000}, {0x4206e000}, - {0x42070000}, {0x42072000}, {0x42074000}, {0x42076000}, - {0x42078000}, {0x4207a000}, {0x4207c000}, {0x4207e000}, - {0x42080000}, {0x42082000}, {0x42084000}, {0x42086000}, - {0x42088000}, {0x4208a000}, {0x4208c000}, {0x4208e000}, - {0x42090000}, {0x42092000}, {0x42094000}, {0x42096000}, - {0x42098000}, {0x4209a000}, {0x4209c000}, {0x4209e000}, - {0x420a0000}, {0x420a2000}, {0x420a4000}, {0x420a6000}, - {0x420a8000}, {0x420aa000}, {0x420ac000}, {0x420ae000}, - {0x420b0000}, {0x420b2000}, {0x420b4000}, {0x420b6000}, - {0x420b8000}, {0x420ba000}, {0x420bc000}, {0x420be000}, - {0x420c0000}, {0x420c2000}, {0x420c4000}, {0x420c6000}, - {0x420c8000}, {0x420ca000}, {0x420cc000}, {0x420ce000}, - {0x420d0000}, {0x420d2000}, {0x420d4000}, {0x420d6000}, - {0x420d8000}, {0x420da000}, {0x420dc000}, {0x420de000}, - {0x420e0000}, {0x420e2000}, {0x420e4000}, {0x420e6000}, - {0x420e8000}, {0x420ea000}, {0x420ec000}, {0x420ee000}, - {0x420f0000}, {0x420f2000}, {0x420f4000}, {0x420f6000}, - {0x420f8000}, {0x420fa000}, {0x420fc000}, {0x420fe000}, - {0x42100000}, {0x42102000}, {0x42104000}, {0x42106000}, - {0x42108000}, {0x4210a000}, {0x4210c000}, {0x4210e000}, - {0x42110000}, {0x42112000}, {0x42114000}, {0x42116000}, - {0x42118000}, {0x4211a000}, {0x4211c000}, {0x4211e000}, - {0x42120000}, {0x42122000}, {0x42124000}, {0x42126000}, - {0x42128000}, {0x4212a000}, {0x4212c000}, {0x4212e000}, - {0x42130000}, {0x42132000}, {0x42134000}, {0x42136000}, - {0x42138000}, {0x4213a000}, {0x4213c000}, {0x4213e000}, - {0x42140000}, {0x42142000}, {0x42144000}, {0x42146000}, - {0x42148000}, {0x4214a000}, {0x4214c000}, {0x4214e000}, - {0x42150000}, {0x42152000}, {0x42154000}, {0x42156000}, - {0x42158000}, {0x4215a000}, {0x4215c000}, {0x4215e000}, - {0x42160000}, {0x42162000}, {0x42164000}, {0x42166000}, - {0x42168000}, {0x4216a000}, {0x4216c000}, {0x4216e000}, - {0x42170000}, {0x42172000}, {0x42174000}, {0x42176000}, - {0x42178000}, {0x4217a000}, {0x4217c000}, {0x4217e000}, - {0x42180000}, {0x42182000}, {0x42184000}, {0x42186000}, - {0x42188000}, {0x4218a000}, {0x4218c000}, {0x4218e000}, - {0x42190000}, {0x42192000}, {0x42194000}, {0x42196000}, - {0x42198000}, {0x4219a000}, {0x4219c000}, {0x4219e000}, - {0x421a0000}, {0x421a2000}, {0x421a4000}, {0x421a6000}, - {0x421a8000}, {0x421aa000}, {0x421ac000}, {0x421ae000}, - {0x421b0000}, {0x421b2000}, {0x421b4000}, {0x421b6000}, - {0x421b8000}, {0x421ba000}, {0x421bc000}, {0x421be000}, - {0x421c0000}, {0x421c2000}, {0x421c4000}, {0x421c6000}, - {0x421c8000}, {0x421ca000}, {0x421cc000}, {0x421ce000}, - {0x421d0000}, {0x421d2000}, {0x421d4000}, {0x421d6000}, - {0x421d8000}, {0x421da000}, {0x421dc000}, {0x421de000}, - {0x421e0000}, {0x421e2000}, {0x421e4000}, {0x421e6000}, - {0x421e8000}, {0x421ea000}, {0x421ec000}, {0x421ee000}, - {0x421f0000}, {0x421f2000}, {0x421f4000}, {0x421f6000}, - {0x421f8000}, {0x421fa000}, {0x421fc000}, {0x421fe000}, - {0x42200000}, {0x42202000}, {0x42204000}, {0x42206000}, - {0x42208000}, {0x4220a000}, {0x4220c000}, {0x4220e000}, - {0x42210000}, {0x42212000}, {0x42214000}, {0x42216000}, - {0x42218000}, {0x4221a000}, {0x4221c000}, {0x4221e000}, - {0x42220000}, {0x42222000}, {0x42224000}, {0x42226000}, - {0x42228000}, {0x4222a000}, {0x4222c000}, {0x4222e000}, - {0x42230000}, {0x42232000}, {0x42234000}, {0x42236000}, - {0x42238000}, {0x4223a000}, {0x4223c000}, {0x4223e000}, - {0x42240000}, {0x42242000}, {0x42244000}, {0x42246000}, - {0x42248000}, {0x4224a000}, {0x4224c000}, {0x4224e000}, - {0x42250000}, {0x42252000}, {0x42254000}, {0x42256000}, - {0x42258000}, {0x4225a000}, {0x4225c000}, {0x4225e000}, - {0x42260000}, {0x42262000}, {0x42264000}, {0x42266000}, - {0x42268000}, {0x4226a000}, {0x4226c000}, {0x4226e000}, - {0x42270000}, {0x42272000}, {0x42274000}, {0x42276000}, - {0x42278000}, {0x4227a000}, {0x4227c000}, {0x4227e000}, - {0x42280000}, {0x42282000}, {0x42284000}, {0x42286000}, - {0x42288000}, {0x4228a000}, {0x4228c000}, {0x4228e000}, - {0x42290000}, {0x42292000}, {0x42294000}, {0x42296000}, - {0x42298000}, {0x4229a000}, {0x4229c000}, {0x4229e000}, - {0x422a0000}, {0x422a2000}, {0x422a4000}, {0x422a6000}, - {0x422a8000}, {0x422aa000}, {0x422ac000}, {0x422ae000}, - {0x422b0000}, {0x422b2000}, {0x422b4000}, {0x422b6000}, - {0x422b8000}, {0x422ba000}, {0x422bc000}, {0x422be000}, - {0x422c0000}, {0x422c2000}, {0x422c4000}, {0x422c6000}, - {0x422c8000}, {0x422ca000}, {0x422cc000}, {0x422ce000}, - {0x422d0000}, {0x422d2000}, {0x422d4000}, {0x422d6000}, - {0x422d8000}, {0x422da000}, {0x422dc000}, {0x422de000}, - {0x422e0000}, {0x422e2000}, {0x422e4000}, {0x422e6000}, - {0x422e8000}, {0x422ea000}, {0x422ec000}, {0x422ee000}, - {0x422f0000}, {0x422f2000}, {0x422f4000}, {0x422f6000}, - {0x422f8000}, {0x422fa000}, {0x422fc000}, {0x422fe000}, - {0x42300000}, {0x42302000}, {0x42304000}, {0x42306000}, - {0x42308000}, {0x4230a000}, {0x4230c000}, {0x4230e000}, - {0x42310000}, {0x42312000}, {0x42314000}, {0x42316000}, - {0x42318000}, {0x4231a000}, {0x4231c000}, {0x4231e000}, - {0x42320000}, {0x42322000}, {0x42324000}, {0x42326000}, - {0x42328000}, {0x4232a000}, {0x4232c000}, {0x4232e000}, - {0x42330000}, {0x42332000}, {0x42334000}, {0x42336000}, - {0x42338000}, {0x4233a000}, {0x4233c000}, {0x4233e000}, - {0x42340000}, {0x42342000}, {0x42344000}, {0x42346000}, - {0x42348000}, {0x4234a000}, {0x4234c000}, {0x4234e000}, - {0x42350000}, {0x42352000}, {0x42354000}, {0x42356000}, - {0x42358000}, {0x4235a000}, {0x4235c000}, {0x4235e000}, - {0x42360000}, {0x42362000}, {0x42364000}, {0x42366000}, - {0x42368000}, {0x4236a000}, {0x4236c000}, {0x4236e000}, - {0x42370000}, {0x42372000}, {0x42374000}, {0x42376000}, - {0x42378000}, {0x4237a000}, {0x4237c000}, {0x4237e000}, - {0x42380000}, {0x42382000}, {0x42384000}, {0x42386000}, - {0x42388000}, {0x4238a000}, {0x4238c000}, {0x4238e000}, - {0x42390000}, {0x42392000}, {0x42394000}, {0x42396000}, - {0x42398000}, {0x4239a000}, {0x4239c000}, {0x4239e000}, - {0x423a0000}, {0x423a2000}, {0x423a4000}, {0x423a6000}, - {0x423a8000}, {0x423aa000}, {0x423ac000}, {0x423ae000}, - {0x423b0000}, {0x423b2000}, {0x423b4000}, {0x423b6000}, - {0x423b8000}, {0x423ba000}, {0x423bc000}, {0x423be000}, - {0x423c0000}, {0x423c2000}, {0x423c4000}, {0x423c6000}, - {0x423c8000}, {0x423ca000}, {0x423cc000}, {0x423ce000}, - {0x423d0000}, {0x423d2000}, {0x423d4000}, {0x423d6000}, - {0x423d8000}, {0x423da000}, {0x423dc000}, {0x423de000}, - {0x423e0000}, {0x423e2000}, {0x423e4000}, {0x423e6000}, - {0x423e8000}, {0x423ea000}, {0x423ec000}, {0x423ee000}, - {0x423f0000}, {0x423f2000}, {0x423f4000}, {0x423f6000}, - {0x423f8000}, {0x423fa000}, {0x423fc000}, {0x423fe000}, - {0x42400000}, {0x42402000}, {0x42404000}, {0x42406000}, - {0x42408000}, {0x4240a000}, {0x4240c000}, {0x4240e000}, - {0x42410000}, {0x42412000}, {0x42414000}, {0x42416000}, - {0x42418000}, {0x4241a000}, {0x4241c000}, {0x4241e000}, - {0x42420000}, {0x42422000}, {0x42424000}, {0x42426000}, - {0x42428000}, {0x4242a000}, {0x4242c000}, {0x4242e000}, - {0x42430000}, {0x42432000}, {0x42434000}, {0x42436000}, - {0x42438000}, {0x4243a000}, {0x4243c000}, {0x4243e000}, - {0x42440000}, {0x42442000}, {0x42444000}, {0x42446000}, - {0x42448000}, {0x4244a000}, {0x4244c000}, {0x4244e000}, - {0x42450000}, {0x42452000}, {0x42454000}, {0x42456000}, - {0x42458000}, {0x4245a000}, {0x4245c000}, {0x4245e000}, - {0x42460000}, {0x42462000}, {0x42464000}, {0x42466000}, - {0x42468000}, {0x4246a000}, {0x4246c000}, {0x4246e000}, - {0x42470000}, {0x42472000}, {0x42474000}, {0x42476000}, - {0x42478000}, {0x4247a000}, {0x4247c000}, {0x4247e000}, - {0x42480000}, {0x42482000}, {0x42484000}, {0x42486000}, - {0x42488000}, {0x4248a000}, {0x4248c000}, {0x4248e000}, - {0x42490000}, {0x42492000}, {0x42494000}, {0x42496000}, - {0x42498000}, {0x4249a000}, {0x4249c000}, {0x4249e000}, - {0x424a0000}, {0x424a2000}, {0x424a4000}, {0x424a6000}, - {0x424a8000}, {0x424aa000}, {0x424ac000}, {0x424ae000}, - {0x424b0000}, {0x424b2000}, {0x424b4000}, {0x424b6000}, - {0x424b8000}, {0x424ba000}, {0x424bc000}, {0x424be000}, - {0x424c0000}, {0x424c2000}, {0x424c4000}, {0x424c6000}, - {0x424c8000}, {0x424ca000}, {0x424cc000}, {0x424ce000}, - {0x424d0000}, {0x424d2000}, {0x424d4000}, {0x424d6000}, - {0x424d8000}, {0x424da000}, {0x424dc000}, {0x424de000}, - {0x424e0000}, {0x424e2000}, {0x424e4000}, {0x424e6000}, - {0x424e8000}, {0x424ea000}, {0x424ec000}, {0x424ee000}, - {0x424f0000}, {0x424f2000}, {0x424f4000}, {0x424f6000}, - {0x424f8000}, {0x424fa000}, {0x424fc000}, {0x424fe000}, - {0x42500000}, {0x42502000}, {0x42504000}, {0x42506000}, - {0x42508000}, {0x4250a000}, {0x4250c000}, {0x4250e000}, - {0x42510000}, {0x42512000}, {0x42514000}, {0x42516000}, - {0x42518000}, {0x4251a000}, {0x4251c000}, {0x4251e000}, - {0x42520000}, {0x42522000}, {0x42524000}, {0x42526000}, - {0x42528000}, {0x4252a000}, {0x4252c000}, {0x4252e000}, - {0x42530000}, {0x42532000}, {0x42534000}, {0x42536000}, - {0x42538000}, {0x4253a000}, {0x4253c000}, {0x4253e000}, - {0x42540000}, {0x42542000}, {0x42544000}, {0x42546000}, - {0x42548000}, {0x4254a000}, {0x4254c000}, {0x4254e000}, - {0x42550000}, {0x42552000}, {0x42554000}, {0x42556000}, - {0x42558000}, {0x4255a000}, {0x4255c000}, {0x4255e000}, - {0x42560000}, {0x42562000}, {0x42564000}, {0x42566000}, - {0x42568000}, {0x4256a000}, {0x4256c000}, {0x4256e000}, - {0x42570000}, {0x42572000}, {0x42574000}, {0x42576000}, - {0x42578000}, {0x4257a000}, {0x4257c000}, {0x4257e000}, - {0x42580000}, {0x42582000}, {0x42584000}, {0x42586000}, - {0x42588000}, {0x4258a000}, {0x4258c000}, {0x4258e000}, - {0x42590000}, {0x42592000}, {0x42594000}, {0x42596000}, - {0x42598000}, {0x4259a000}, {0x4259c000}, {0x4259e000}, - {0x425a0000}, {0x425a2000}, {0x425a4000}, {0x425a6000}, - {0x425a8000}, {0x425aa000}, {0x425ac000}, {0x425ae000}, - {0x425b0000}, {0x425b2000}, {0x425b4000}, {0x425b6000}, - {0x425b8000}, {0x425ba000}, {0x425bc000}, {0x425be000}, - {0x425c0000}, {0x425c2000}, {0x425c4000}, {0x425c6000}, - {0x425c8000}, {0x425ca000}, {0x425cc000}, {0x425ce000}, - {0x425d0000}, {0x425d2000}, {0x425d4000}, {0x425d6000}, - {0x425d8000}, {0x425da000}, {0x425dc000}, {0x425de000}, - {0x425e0000}, {0x425e2000}, {0x425e4000}, {0x425e6000}, - {0x425e8000}, {0x425ea000}, {0x425ec000}, {0x425ee000}, - {0x425f0000}, {0x425f2000}, {0x425f4000}, {0x425f6000}, - {0x425f8000}, {0x425fa000}, {0x425fc000}, {0x425fe000}, - {0x42600000}, {0x42602000}, {0x42604000}, {0x42606000}, - {0x42608000}, {0x4260a000}, {0x4260c000}, {0x4260e000}, - {0x42610000}, {0x42612000}, {0x42614000}, {0x42616000}, - {0x42618000}, {0x4261a000}, {0x4261c000}, {0x4261e000}, - {0x42620000}, {0x42622000}, {0x42624000}, {0x42626000}, - {0x42628000}, {0x4262a000}, {0x4262c000}, {0x4262e000}, - {0x42630000}, {0x42632000}, {0x42634000}, {0x42636000}, - {0x42638000}, {0x4263a000}, {0x4263c000}, {0x4263e000}, - {0x42640000}, {0x42642000}, {0x42644000}, {0x42646000}, - {0x42648000}, {0x4264a000}, {0x4264c000}, {0x4264e000}, - {0x42650000}, {0x42652000}, {0x42654000}, {0x42656000}, - {0x42658000}, {0x4265a000}, {0x4265c000}, {0x4265e000}, - {0x42660000}, {0x42662000}, {0x42664000}, {0x42666000}, - {0x42668000}, {0x4266a000}, {0x4266c000}, {0x4266e000}, - {0x42670000}, {0x42672000}, {0x42674000}, {0x42676000}, - {0x42678000}, {0x4267a000}, {0x4267c000}, {0x4267e000}, - {0x42680000}, {0x42682000}, {0x42684000}, {0x42686000}, - {0x42688000}, {0x4268a000}, {0x4268c000}, {0x4268e000}, - {0x42690000}, {0x42692000}, {0x42694000}, {0x42696000}, - {0x42698000}, {0x4269a000}, {0x4269c000}, {0x4269e000}, - {0x426a0000}, {0x426a2000}, {0x426a4000}, {0x426a6000}, - {0x426a8000}, {0x426aa000}, {0x426ac000}, {0x426ae000}, - {0x426b0000}, {0x426b2000}, {0x426b4000}, {0x426b6000}, - {0x426b8000}, {0x426ba000}, {0x426bc000}, {0x426be000}, - {0x426c0000}, {0x426c2000}, {0x426c4000}, {0x426c6000}, - {0x426c8000}, {0x426ca000}, {0x426cc000}, {0x426ce000}, - {0x426d0000}, {0x426d2000}, {0x426d4000}, {0x426d6000}, - {0x426d8000}, {0x426da000}, {0x426dc000}, {0x426de000}, - {0x426e0000}, {0x426e2000}, {0x426e4000}, {0x426e6000}, - {0x426e8000}, {0x426ea000}, {0x426ec000}, {0x426ee000}, - {0x426f0000}, {0x426f2000}, {0x426f4000}, {0x426f6000}, - {0x426f8000}, {0x426fa000}, {0x426fc000}, {0x426fe000}, - {0x42700000}, {0x42702000}, {0x42704000}, {0x42706000}, - {0x42708000}, {0x4270a000}, {0x4270c000}, {0x4270e000}, - {0x42710000}, {0x42712000}, {0x42714000}, {0x42716000}, - {0x42718000}, {0x4271a000}, {0x4271c000}, {0x4271e000}, - {0x42720000}, {0x42722000}, {0x42724000}, {0x42726000}, - {0x42728000}, {0x4272a000}, {0x4272c000}, {0x4272e000}, - {0x42730000}, {0x42732000}, {0x42734000}, {0x42736000}, - {0x42738000}, {0x4273a000}, {0x4273c000}, {0x4273e000}, - {0x42740000}, {0x42742000}, {0x42744000}, {0x42746000}, - {0x42748000}, {0x4274a000}, {0x4274c000}, {0x4274e000}, - {0x42750000}, {0x42752000}, {0x42754000}, {0x42756000}, - {0x42758000}, {0x4275a000}, {0x4275c000}, {0x4275e000}, - {0x42760000}, {0x42762000}, {0x42764000}, {0x42766000}, - {0x42768000}, {0x4276a000}, {0x4276c000}, {0x4276e000}, - {0x42770000}, {0x42772000}, {0x42774000}, {0x42776000}, - {0x42778000}, {0x4277a000}, {0x4277c000}, {0x4277e000}, - {0x42780000}, {0x42782000}, {0x42784000}, {0x42786000}, - {0x42788000}, {0x4278a000}, {0x4278c000}, {0x4278e000}, - {0x42790000}, {0x42792000}, {0x42794000}, {0x42796000}, - {0x42798000}, {0x4279a000}, {0x4279c000}, {0x4279e000}, - {0x427a0000}, {0x427a2000}, {0x427a4000}, {0x427a6000}, - {0x427a8000}, {0x427aa000}, {0x427ac000}, {0x427ae000}, - {0x427b0000}, {0x427b2000}, {0x427b4000}, {0x427b6000}, - {0x427b8000}, {0x427ba000}, {0x427bc000}, {0x427be000}, - {0x427c0000}, {0x427c2000}, {0x427c4000}, {0x427c6000}, - {0x427c8000}, {0x427ca000}, {0x427cc000}, {0x427ce000}, - {0x427d0000}, {0x427d2000}, {0x427d4000}, {0x427d6000}, - {0x427d8000}, {0x427da000}, {0x427dc000}, {0x427de000}, - {0x427e0000}, {0x427e2000}, {0x427e4000}, {0x427e6000}, - {0x427e8000}, {0x427ea000}, {0x427ec000}, {0x427ee000}, - {0x427f0000}, {0x427f2000}, {0x427f4000}, {0x427f6000}, - {0x427f8000}, {0x427fa000}, {0x427fc000}, {0x427fe000}, - {0x42800000}, {0x42802000}, {0x42804000}, {0x42806000}, - {0x42808000}, {0x4280a000}, {0x4280c000}, {0x4280e000}, - {0x42810000}, {0x42812000}, {0x42814000}, {0x42816000}, - {0x42818000}, {0x4281a000}, {0x4281c000}, {0x4281e000}, - {0x42820000}, {0x42822000}, {0x42824000}, {0x42826000}, - {0x42828000}, {0x4282a000}, {0x4282c000}, {0x4282e000}, - {0x42830000}, {0x42832000}, {0x42834000}, {0x42836000}, - {0x42838000}, {0x4283a000}, {0x4283c000}, {0x4283e000}, - {0x42840000}, {0x42842000}, {0x42844000}, {0x42846000}, - {0x42848000}, {0x4284a000}, {0x4284c000}, {0x4284e000}, - {0x42850000}, {0x42852000}, {0x42854000}, {0x42856000}, - {0x42858000}, {0x4285a000}, {0x4285c000}, {0x4285e000}, - {0x42860000}, {0x42862000}, {0x42864000}, {0x42866000}, - {0x42868000}, {0x4286a000}, {0x4286c000}, {0x4286e000}, - {0x42870000}, {0x42872000}, {0x42874000}, {0x42876000}, - {0x42878000}, {0x4287a000}, {0x4287c000}, {0x4287e000}, - {0x42880000}, {0x42882000}, {0x42884000}, {0x42886000}, - {0x42888000}, {0x4288a000}, {0x4288c000}, {0x4288e000}, - {0x42890000}, {0x42892000}, {0x42894000}, {0x42896000}, - {0x42898000}, {0x4289a000}, {0x4289c000}, {0x4289e000}, - {0x428a0000}, {0x428a2000}, {0x428a4000}, {0x428a6000}, - {0x428a8000}, {0x428aa000}, {0x428ac000}, {0x428ae000}, - {0x428b0000}, {0x428b2000}, {0x428b4000}, {0x428b6000}, - {0x428b8000}, {0x428ba000}, {0x428bc000}, {0x428be000}, - {0x428c0000}, {0x428c2000}, {0x428c4000}, {0x428c6000}, - {0x428c8000}, {0x428ca000}, {0x428cc000}, {0x428ce000}, - {0x428d0000}, {0x428d2000}, {0x428d4000}, {0x428d6000}, - {0x428d8000}, {0x428da000}, {0x428dc000}, {0x428de000}, - {0x428e0000}, {0x428e2000}, {0x428e4000}, {0x428e6000}, - {0x428e8000}, {0x428ea000}, {0x428ec000}, {0x428ee000}, - {0x428f0000}, {0x428f2000}, {0x428f4000}, {0x428f6000}, - {0x428f8000}, {0x428fa000}, {0x428fc000}, {0x428fe000}, - {0x42900000}, {0x42902000}, {0x42904000}, {0x42906000}, - {0x42908000}, {0x4290a000}, {0x4290c000}, {0x4290e000}, - {0x42910000}, {0x42912000}, {0x42914000}, {0x42916000}, - {0x42918000}, {0x4291a000}, {0x4291c000}, {0x4291e000}, - {0x42920000}, {0x42922000}, {0x42924000}, {0x42926000}, - {0x42928000}, {0x4292a000}, {0x4292c000}, {0x4292e000}, - {0x42930000}, {0x42932000}, {0x42934000}, {0x42936000}, - {0x42938000}, {0x4293a000}, {0x4293c000}, {0x4293e000}, - {0x42940000}, {0x42942000}, {0x42944000}, {0x42946000}, - {0x42948000}, {0x4294a000}, {0x4294c000}, {0x4294e000}, - {0x42950000}, {0x42952000}, {0x42954000}, {0x42956000}, - {0x42958000}, {0x4295a000}, {0x4295c000}, {0x4295e000}, - {0x42960000}, {0x42962000}, {0x42964000}, {0x42966000}, - {0x42968000}, {0x4296a000}, {0x4296c000}, {0x4296e000}, - {0x42970000}, {0x42972000}, {0x42974000}, {0x42976000}, - {0x42978000}, {0x4297a000}, {0x4297c000}, {0x4297e000}, - {0x42980000}, {0x42982000}, {0x42984000}, {0x42986000}, - {0x42988000}, {0x4298a000}, {0x4298c000}, {0x4298e000}, - {0x42990000}, {0x42992000}, {0x42994000}, {0x42996000}, - {0x42998000}, {0x4299a000}, {0x4299c000}, {0x4299e000}, - {0x429a0000}, {0x429a2000}, {0x429a4000}, {0x429a6000}, - {0x429a8000}, {0x429aa000}, {0x429ac000}, {0x429ae000}, - {0x429b0000}, {0x429b2000}, {0x429b4000}, {0x429b6000}, - {0x429b8000}, {0x429ba000}, {0x429bc000}, {0x429be000}, - {0x429c0000}, {0x429c2000}, {0x429c4000}, {0x429c6000}, - {0x429c8000}, {0x429ca000}, {0x429cc000}, {0x429ce000}, - {0x429d0000}, {0x429d2000}, {0x429d4000}, {0x429d6000}, - {0x429d8000}, {0x429da000}, {0x429dc000}, {0x429de000}, - {0x429e0000}, {0x429e2000}, {0x429e4000}, {0x429e6000}, - {0x429e8000}, {0x429ea000}, {0x429ec000}, {0x429ee000}, - {0x429f0000}, {0x429f2000}, {0x429f4000}, {0x429f6000}, - {0x429f8000}, {0x429fa000}, {0x429fc000}, {0x429fe000}, - {0x42a00000}, {0x42a02000}, {0x42a04000}, {0x42a06000}, - {0x42a08000}, {0x42a0a000}, {0x42a0c000}, {0x42a0e000}, - {0x42a10000}, {0x42a12000}, {0x42a14000}, {0x42a16000}, - {0x42a18000}, {0x42a1a000}, {0x42a1c000}, {0x42a1e000}, - {0x42a20000}, {0x42a22000}, {0x42a24000}, {0x42a26000}, - {0x42a28000}, {0x42a2a000}, {0x42a2c000}, {0x42a2e000}, - {0x42a30000}, {0x42a32000}, {0x42a34000}, {0x42a36000}, - {0x42a38000}, {0x42a3a000}, {0x42a3c000}, {0x42a3e000}, - {0x42a40000}, {0x42a42000}, {0x42a44000}, {0x42a46000}, - {0x42a48000}, {0x42a4a000}, {0x42a4c000}, {0x42a4e000}, - {0x42a50000}, {0x42a52000}, {0x42a54000}, {0x42a56000}, - {0x42a58000}, {0x42a5a000}, {0x42a5c000}, {0x42a5e000}, - {0x42a60000}, {0x42a62000}, {0x42a64000}, {0x42a66000}, - {0x42a68000}, {0x42a6a000}, {0x42a6c000}, {0x42a6e000}, - {0x42a70000}, {0x42a72000}, {0x42a74000}, {0x42a76000}, - {0x42a78000}, {0x42a7a000}, {0x42a7c000}, {0x42a7e000}, - {0x42a80000}, {0x42a82000}, {0x42a84000}, {0x42a86000}, - {0x42a88000}, {0x42a8a000}, {0x42a8c000}, {0x42a8e000}, - {0x42a90000}, {0x42a92000}, {0x42a94000}, {0x42a96000}, - {0x42a98000}, {0x42a9a000}, {0x42a9c000}, {0x42a9e000}, - {0x42aa0000}, {0x42aa2000}, {0x42aa4000}, {0x42aa6000}, - {0x42aa8000}, {0x42aaa000}, {0x42aac000}, {0x42aae000}, - {0x42ab0000}, {0x42ab2000}, {0x42ab4000}, {0x42ab6000}, - {0x42ab8000}, {0x42aba000}, {0x42abc000}, {0x42abe000}, - {0x42ac0000}, {0x42ac2000}, {0x42ac4000}, {0x42ac6000}, - {0x42ac8000}, {0x42aca000}, {0x42acc000}, {0x42ace000}, - {0x42ad0000}, {0x42ad2000}, {0x42ad4000}, {0x42ad6000}, - {0x42ad8000}, {0x42ada000}, {0x42adc000}, {0x42ade000}, - {0x42ae0000}, {0x42ae2000}, {0x42ae4000}, {0x42ae6000}, - {0x42ae8000}, {0x42aea000}, {0x42aec000}, {0x42aee000}, - {0x42af0000}, {0x42af2000}, {0x42af4000}, {0x42af6000}, - {0x42af8000}, {0x42afa000}, {0x42afc000}, {0x42afe000}, - {0x42b00000}, {0x42b02000}, {0x42b04000}, {0x42b06000}, - {0x42b08000}, {0x42b0a000}, {0x42b0c000}, {0x42b0e000}, - {0x42b10000}, {0x42b12000}, {0x42b14000}, {0x42b16000}, - {0x42b18000}, {0x42b1a000}, {0x42b1c000}, {0x42b1e000}, - {0x42b20000}, {0x42b22000}, {0x42b24000}, {0x42b26000}, - {0x42b28000}, {0x42b2a000}, {0x42b2c000}, {0x42b2e000}, - {0x42b30000}, {0x42b32000}, {0x42b34000}, {0x42b36000}, - {0x42b38000}, {0x42b3a000}, {0x42b3c000}, {0x42b3e000}, - {0x42b40000}, {0x42b42000}, {0x42b44000}, {0x42b46000}, - {0x42b48000}, {0x42b4a000}, {0x42b4c000}, {0x42b4e000}, - {0x42b50000}, {0x42b52000}, {0x42b54000}, {0x42b56000}, - {0x42b58000}, {0x42b5a000}, {0x42b5c000}, {0x42b5e000}, - {0x42b60000}, {0x42b62000}, {0x42b64000}, {0x42b66000}, - {0x42b68000}, {0x42b6a000}, {0x42b6c000}, {0x42b6e000}, - {0x42b70000}, {0x42b72000}, {0x42b74000}, {0x42b76000}, - {0x42b78000}, {0x42b7a000}, {0x42b7c000}, {0x42b7e000}, - {0x42b80000}, {0x42b82000}, {0x42b84000}, {0x42b86000}, - {0x42b88000}, {0x42b8a000}, {0x42b8c000}, {0x42b8e000}, - {0x42b90000}, {0x42b92000}, {0x42b94000}, {0x42b96000}, - {0x42b98000}, {0x42b9a000}, {0x42b9c000}, {0x42b9e000}, - {0x42ba0000}, {0x42ba2000}, {0x42ba4000}, {0x42ba6000}, - {0x42ba8000}, {0x42baa000}, {0x42bac000}, {0x42bae000}, - {0x42bb0000}, {0x42bb2000}, {0x42bb4000}, {0x42bb6000}, - {0x42bb8000}, {0x42bba000}, {0x42bbc000}, {0x42bbe000}, - {0x42bc0000}, {0x42bc2000}, {0x42bc4000}, {0x42bc6000}, - {0x42bc8000}, {0x42bca000}, {0x42bcc000}, {0x42bce000}, - {0x42bd0000}, {0x42bd2000}, {0x42bd4000}, {0x42bd6000}, - {0x42bd8000}, {0x42bda000}, {0x42bdc000}, {0x42bde000}, - {0x42be0000}, {0x42be2000}, {0x42be4000}, {0x42be6000}, - {0x42be8000}, {0x42bea000}, {0x42bec000}, {0x42bee000}, - {0x42bf0000}, {0x42bf2000}, {0x42bf4000}, {0x42bf6000}, - {0x42bf8000}, {0x42bfa000}, {0x42bfc000}, {0x42bfe000}, - {0x42c00000}, {0x42c02000}, {0x42c04000}, {0x42c06000}, - {0x42c08000}, {0x42c0a000}, {0x42c0c000}, {0x42c0e000}, - {0x42c10000}, {0x42c12000}, {0x42c14000}, {0x42c16000}, - {0x42c18000}, {0x42c1a000}, {0x42c1c000}, {0x42c1e000}, - {0x42c20000}, {0x42c22000}, {0x42c24000}, {0x42c26000}, - {0x42c28000}, {0x42c2a000}, {0x42c2c000}, {0x42c2e000}, - {0x42c30000}, {0x42c32000}, {0x42c34000}, {0x42c36000}, - {0x42c38000}, {0x42c3a000}, {0x42c3c000}, {0x42c3e000}, - {0x42c40000}, {0x42c42000}, {0x42c44000}, {0x42c46000}, - {0x42c48000}, {0x42c4a000}, {0x42c4c000}, {0x42c4e000}, - {0x42c50000}, {0x42c52000}, {0x42c54000}, {0x42c56000}, - {0x42c58000}, {0x42c5a000}, {0x42c5c000}, {0x42c5e000}, - {0x42c60000}, {0x42c62000}, {0x42c64000}, {0x42c66000}, - {0x42c68000}, {0x42c6a000}, {0x42c6c000}, {0x42c6e000}, - {0x42c70000}, {0x42c72000}, {0x42c74000}, {0x42c76000}, - {0x42c78000}, {0x42c7a000}, {0x42c7c000}, {0x42c7e000}, - {0x42c80000}, {0x42c82000}, {0x42c84000}, {0x42c86000}, - {0x42c88000}, {0x42c8a000}, {0x42c8c000}, {0x42c8e000}, - {0x42c90000}, {0x42c92000}, {0x42c94000}, {0x42c96000}, - {0x42c98000}, {0x42c9a000}, {0x42c9c000}, {0x42c9e000}, - {0x42ca0000}, {0x42ca2000}, {0x42ca4000}, {0x42ca6000}, - {0x42ca8000}, {0x42caa000}, {0x42cac000}, {0x42cae000}, - {0x42cb0000}, {0x42cb2000}, {0x42cb4000}, {0x42cb6000}, - {0x42cb8000}, {0x42cba000}, {0x42cbc000}, {0x42cbe000}, - {0x42cc0000}, {0x42cc2000}, {0x42cc4000}, {0x42cc6000}, - {0x42cc8000}, {0x42cca000}, {0x42ccc000}, {0x42cce000}, - {0x42cd0000}, {0x42cd2000}, {0x42cd4000}, {0x42cd6000}, - {0x42cd8000}, {0x42cda000}, {0x42cdc000}, {0x42cde000}, - {0x42ce0000}, {0x42ce2000}, {0x42ce4000}, {0x42ce6000}, - {0x42ce8000}, {0x42cea000}, {0x42cec000}, {0x42cee000}, - {0x42cf0000}, {0x42cf2000}, {0x42cf4000}, {0x42cf6000}, - {0x42cf8000}, {0x42cfa000}, {0x42cfc000}, {0x42cfe000}, - {0x42d00000}, {0x42d02000}, {0x42d04000}, {0x42d06000}, - {0x42d08000}, {0x42d0a000}, {0x42d0c000}, {0x42d0e000}, - {0x42d10000}, {0x42d12000}, {0x42d14000}, {0x42d16000}, - {0x42d18000}, {0x42d1a000}, {0x42d1c000}, {0x42d1e000}, - {0x42d20000}, {0x42d22000}, {0x42d24000}, {0x42d26000}, - {0x42d28000}, {0x42d2a000}, {0x42d2c000}, {0x42d2e000}, - {0x42d30000}, {0x42d32000}, {0x42d34000}, {0x42d36000}, - {0x42d38000}, {0x42d3a000}, {0x42d3c000}, {0x42d3e000}, - {0x42d40000}, {0x42d42000}, {0x42d44000}, {0x42d46000}, - {0x42d48000}, {0x42d4a000}, {0x42d4c000}, {0x42d4e000}, - {0x42d50000}, {0x42d52000}, {0x42d54000}, {0x42d56000}, - {0x42d58000}, {0x42d5a000}, {0x42d5c000}, {0x42d5e000}, - {0x42d60000}, {0x42d62000}, {0x42d64000}, {0x42d66000}, - {0x42d68000}, {0x42d6a000}, {0x42d6c000}, {0x42d6e000}, - {0x42d70000}, {0x42d72000}, {0x42d74000}, {0x42d76000}, - {0x42d78000}, {0x42d7a000}, {0x42d7c000}, {0x42d7e000}, - {0x42d80000}, {0x42d82000}, {0x42d84000}, {0x42d86000}, - {0x42d88000}, {0x42d8a000}, {0x42d8c000}, {0x42d8e000}, - {0x42d90000}, {0x42d92000}, {0x42d94000}, {0x42d96000}, - {0x42d98000}, {0x42d9a000}, {0x42d9c000}, {0x42d9e000}, - {0x42da0000}, {0x42da2000}, {0x42da4000}, {0x42da6000}, - {0x42da8000}, {0x42daa000}, {0x42dac000}, {0x42dae000}, - {0x42db0000}, {0x42db2000}, {0x42db4000}, {0x42db6000}, - {0x42db8000}, {0x42dba000}, {0x42dbc000}, {0x42dbe000}, - {0x42dc0000}, {0x42dc2000}, {0x42dc4000}, {0x42dc6000}, - {0x42dc8000}, {0x42dca000}, {0x42dcc000}, {0x42dce000}, - {0x42dd0000}, {0x42dd2000}, {0x42dd4000}, {0x42dd6000}, - {0x42dd8000}, {0x42dda000}, {0x42ddc000}, {0x42dde000}, - {0x42de0000}, {0x42de2000}, {0x42de4000}, {0x42de6000}, - {0x42de8000}, {0x42dea000}, {0x42dec000}, {0x42dee000}, - {0x42df0000}, {0x42df2000}, {0x42df4000}, {0x42df6000}, - {0x42df8000}, {0x42dfa000}, {0x42dfc000}, {0x42dfe000}, - {0x42e00000}, {0x42e02000}, {0x42e04000}, {0x42e06000}, - {0x42e08000}, {0x42e0a000}, {0x42e0c000}, {0x42e0e000}, - {0x42e10000}, {0x42e12000}, {0x42e14000}, {0x42e16000}, - {0x42e18000}, {0x42e1a000}, {0x42e1c000}, {0x42e1e000}, - {0x42e20000}, {0x42e22000}, {0x42e24000}, {0x42e26000}, - {0x42e28000}, {0x42e2a000}, {0x42e2c000}, {0x42e2e000}, - {0x42e30000}, {0x42e32000}, {0x42e34000}, {0x42e36000}, - {0x42e38000}, {0x42e3a000}, {0x42e3c000}, {0x42e3e000}, - {0x42e40000}, {0x42e42000}, {0x42e44000}, {0x42e46000}, - {0x42e48000}, {0x42e4a000}, {0x42e4c000}, {0x42e4e000}, - {0x42e50000}, {0x42e52000}, {0x42e54000}, {0x42e56000}, - {0x42e58000}, {0x42e5a000}, {0x42e5c000}, {0x42e5e000}, - {0x42e60000}, {0x42e62000}, {0x42e64000}, {0x42e66000}, - {0x42e68000}, {0x42e6a000}, {0x42e6c000}, {0x42e6e000}, - {0x42e70000}, {0x42e72000}, {0x42e74000}, {0x42e76000}, - {0x42e78000}, {0x42e7a000}, {0x42e7c000}, {0x42e7e000}, - {0x42e80000}, {0x42e82000}, {0x42e84000}, {0x42e86000}, - {0x42e88000}, {0x42e8a000}, {0x42e8c000}, {0x42e8e000}, - {0x42e90000}, {0x42e92000}, {0x42e94000}, {0x42e96000}, - {0x42e98000}, {0x42e9a000}, {0x42e9c000}, {0x42e9e000}, - {0x42ea0000}, {0x42ea2000}, {0x42ea4000}, {0x42ea6000}, - {0x42ea8000}, {0x42eaa000}, {0x42eac000}, {0x42eae000}, - {0x42eb0000}, {0x42eb2000}, {0x42eb4000}, {0x42eb6000}, - {0x42eb8000}, {0x42eba000}, {0x42ebc000}, {0x42ebe000}, - {0x42ec0000}, {0x42ec2000}, {0x42ec4000}, {0x42ec6000}, - {0x42ec8000}, {0x42eca000}, {0x42ecc000}, {0x42ece000}, - {0x42ed0000}, {0x42ed2000}, {0x42ed4000}, {0x42ed6000}, - {0x42ed8000}, {0x42eda000}, {0x42edc000}, {0x42ede000}, - {0x42ee0000}, {0x42ee2000}, {0x42ee4000}, {0x42ee6000}, - {0x42ee8000}, {0x42eea000}, {0x42eec000}, {0x42eee000}, - {0x42ef0000}, {0x42ef2000}, {0x42ef4000}, {0x42ef6000}, - {0x42ef8000}, {0x42efa000}, {0x42efc000}, {0x42efe000}, - {0x42f00000}, {0x42f02000}, {0x42f04000}, {0x42f06000}, - {0x42f08000}, {0x42f0a000}, {0x42f0c000}, {0x42f0e000}, - {0x42f10000}, {0x42f12000}, {0x42f14000}, {0x42f16000}, - {0x42f18000}, {0x42f1a000}, {0x42f1c000}, {0x42f1e000}, - {0x42f20000}, {0x42f22000}, {0x42f24000}, {0x42f26000}, - {0x42f28000}, {0x42f2a000}, {0x42f2c000}, {0x42f2e000}, - {0x42f30000}, {0x42f32000}, {0x42f34000}, {0x42f36000}, - {0x42f38000}, {0x42f3a000}, {0x42f3c000}, {0x42f3e000}, - {0x42f40000}, {0x42f42000}, {0x42f44000}, {0x42f46000}, - {0x42f48000}, {0x42f4a000}, {0x42f4c000}, {0x42f4e000}, - {0x42f50000}, {0x42f52000}, {0x42f54000}, {0x42f56000}, - {0x42f58000}, {0x42f5a000}, {0x42f5c000}, {0x42f5e000}, - {0x42f60000}, {0x42f62000}, {0x42f64000}, {0x42f66000}, - {0x42f68000}, {0x42f6a000}, {0x42f6c000}, {0x42f6e000}, - {0x42f70000}, {0x42f72000}, {0x42f74000}, {0x42f76000}, - {0x42f78000}, {0x42f7a000}, {0x42f7c000}, {0x42f7e000}, - {0x42f80000}, {0x42f82000}, {0x42f84000}, {0x42f86000}, - {0x42f88000}, {0x42f8a000}, {0x42f8c000}, {0x42f8e000}, - {0x42f90000}, {0x42f92000}, {0x42f94000}, {0x42f96000}, - {0x42f98000}, {0x42f9a000}, {0x42f9c000}, {0x42f9e000}, - {0x42fa0000}, {0x42fa2000}, {0x42fa4000}, {0x42fa6000}, - {0x42fa8000}, {0x42faa000}, {0x42fac000}, {0x42fae000}, - {0x42fb0000}, {0x42fb2000}, {0x42fb4000}, {0x42fb6000}, - {0x42fb8000}, {0x42fba000}, {0x42fbc000}, {0x42fbe000}, - {0x42fc0000}, {0x42fc2000}, {0x42fc4000}, {0x42fc6000}, - {0x42fc8000}, {0x42fca000}, {0x42fcc000}, {0x42fce000}, - {0x42fd0000}, {0x42fd2000}, {0x42fd4000}, {0x42fd6000}, - {0x42fd8000}, {0x42fda000}, {0x42fdc000}, {0x42fde000}, - {0x42fe0000}, {0x42fe2000}, {0x42fe4000}, {0x42fe6000}, - {0x42fe8000}, {0x42fea000}, {0x42fec000}, {0x42fee000}, - {0x42ff0000}, {0x42ff2000}, {0x42ff4000}, {0x42ff6000}, - {0x42ff8000}, {0x42ffa000}, {0x42ffc000}, {0x42ffe000}, - {0x43000000}, {0x43002000}, {0x43004000}, {0x43006000}, - {0x43008000}, {0x4300a000}, {0x4300c000}, {0x4300e000}, - {0x43010000}, {0x43012000}, {0x43014000}, {0x43016000}, - {0x43018000}, {0x4301a000}, {0x4301c000}, {0x4301e000}, - {0x43020000}, {0x43022000}, {0x43024000}, {0x43026000}, - {0x43028000}, {0x4302a000}, {0x4302c000}, {0x4302e000}, - {0x43030000}, {0x43032000}, {0x43034000}, {0x43036000}, - {0x43038000}, {0x4303a000}, {0x4303c000}, {0x4303e000}, - {0x43040000}, {0x43042000}, {0x43044000}, {0x43046000}, - {0x43048000}, {0x4304a000}, {0x4304c000}, {0x4304e000}, - {0x43050000}, {0x43052000}, {0x43054000}, {0x43056000}, - {0x43058000}, {0x4305a000}, {0x4305c000}, {0x4305e000}, - {0x43060000}, {0x43062000}, {0x43064000}, {0x43066000}, - {0x43068000}, {0x4306a000}, {0x4306c000}, {0x4306e000}, - {0x43070000}, {0x43072000}, {0x43074000}, {0x43076000}, - {0x43078000}, {0x4307a000}, {0x4307c000}, {0x4307e000}, - {0x43080000}, {0x43082000}, {0x43084000}, {0x43086000}, - {0x43088000}, {0x4308a000}, {0x4308c000}, {0x4308e000}, - {0x43090000}, {0x43092000}, {0x43094000}, {0x43096000}, - {0x43098000}, {0x4309a000}, {0x4309c000}, {0x4309e000}, - {0x430a0000}, {0x430a2000}, {0x430a4000}, {0x430a6000}, - {0x430a8000}, {0x430aa000}, {0x430ac000}, {0x430ae000}, - {0x430b0000}, {0x430b2000}, {0x430b4000}, {0x430b6000}, - {0x430b8000}, {0x430ba000}, {0x430bc000}, {0x430be000}, - {0x430c0000}, {0x430c2000}, {0x430c4000}, {0x430c6000}, - {0x430c8000}, {0x430ca000}, {0x430cc000}, {0x430ce000}, - {0x430d0000}, {0x430d2000}, {0x430d4000}, {0x430d6000}, - {0x430d8000}, {0x430da000}, {0x430dc000}, {0x430de000}, - {0x430e0000}, {0x430e2000}, {0x430e4000}, {0x430e6000}, - {0x430e8000}, {0x430ea000}, {0x430ec000}, {0x430ee000}, - {0x430f0000}, {0x430f2000}, {0x430f4000}, {0x430f6000}, - {0x430f8000}, {0x430fa000}, {0x430fc000}, {0x430fe000}, - {0x43100000}, {0x43102000}, {0x43104000}, {0x43106000}, - {0x43108000}, {0x4310a000}, {0x4310c000}, {0x4310e000}, - {0x43110000}, {0x43112000}, {0x43114000}, {0x43116000}, - {0x43118000}, {0x4311a000}, {0x4311c000}, {0x4311e000}, - {0x43120000}, {0x43122000}, {0x43124000}, {0x43126000}, - {0x43128000}, {0x4312a000}, {0x4312c000}, {0x4312e000}, - {0x43130000}, {0x43132000}, {0x43134000}, {0x43136000}, - {0x43138000}, {0x4313a000}, {0x4313c000}, {0x4313e000}, - {0x43140000}, {0x43142000}, {0x43144000}, {0x43146000}, - {0x43148000}, {0x4314a000}, {0x4314c000}, {0x4314e000}, - {0x43150000}, {0x43152000}, {0x43154000}, {0x43156000}, - {0x43158000}, {0x4315a000}, {0x4315c000}, {0x4315e000}, - {0x43160000}, {0x43162000}, {0x43164000}, {0x43166000}, - {0x43168000}, {0x4316a000}, {0x4316c000}, {0x4316e000}, - {0x43170000}, {0x43172000}, {0x43174000}, {0x43176000}, - {0x43178000}, {0x4317a000}, {0x4317c000}, {0x4317e000}, - {0x43180000}, {0x43182000}, {0x43184000}, {0x43186000}, - {0x43188000}, {0x4318a000}, {0x4318c000}, {0x4318e000}, - {0x43190000}, {0x43192000}, {0x43194000}, {0x43196000}, - {0x43198000}, {0x4319a000}, {0x4319c000}, {0x4319e000}, - {0x431a0000}, {0x431a2000}, {0x431a4000}, {0x431a6000}, - {0x431a8000}, {0x431aa000}, {0x431ac000}, {0x431ae000}, - {0x431b0000}, {0x431b2000}, {0x431b4000}, {0x431b6000}, - {0x431b8000}, {0x431ba000}, {0x431bc000}, {0x431be000}, - {0x431c0000}, {0x431c2000}, {0x431c4000}, {0x431c6000}, - {0x431c8000}, {0x431ca000}, {0x431cc000}, {0x431ce000}, - {0x431d0000}, {0x431d2000}, {0x431d4000}, {0x431d6000}, - {0x431d8000}, {0x431da000}, {0x431dc000}, {0x431de000}, - {0x431e0000}, {0x431e2000}, {0x431e4000}, {0x431e6000}, - {0x431e8000}, {0x431ea000}, {0x431ec000}, {0x431ee000}, - {0x431f0000}, {0x431f2000}, {0x431f4000}, {0x431f6000}, - {0x431f8000}, {0x431fa000}, {0x431fc000}, {0x431fe000}, - {0x43200000}, {0x43202000}, {0x43204000}, {0x43206000}, - {0x43208000}, {0x4320a000}, {0x4320c000}, {0x4320e000}, - {0x43210000}, {0x43212000}, {0x43214000}, {0x43216000}, - {0x43218000}, {0x4321a000}, {0x4321c000}, {0x4321e000}, - {0x43220000}, {0x43222000}, {0x43224000}, {0x43226000}, - {0x43228000}, {0x4322a000}, {0x4322c000}, {0x4322e000}, - {0x43230000}, {0x43232000}, {0x43234000}, {0x43236000}, - {0x43238000}, {0x4323a000}, {0x4323c000}, {0x4323e000}, - {0x43240000}, {0x43242000}, {0x43244000}, {0x43246000}, - {0x43248000}, {0x4324a000}, {0x4324c000}, {0x4324e000}, - {0x43250000}, {0x43252000}, {0x43254000}, {0x43256000}, - {0x43258000}, {0x4325a000}, {0x4325c000}, {0x4325e000}, - {0x43260000}, {0x43262000}, {0x43264000}, {0x43266000}, - {0x43268000}, {0x4326a000}, {0x4326c000}, {0x4326e000}, - {0x43270000}, {0x43272000}, {0x43274000}, {0x43276000}, - {0x43278000}, {0x4327a000}, {0x4327c000}, {0x4327e000}, - {0x43280000}, {0x43282000}, {0x43284000}, {0x43286000}, - {0x43288000}, {0x4328a000}, {0x4328c000}, {0x4328e000}, - {0x43290000}, {0x43292000}, {0x43294000}, {0x43296000}, - {0x43298000}, {0x4329a000}, {0x4329c000}, {0x4329e000}, - {0x432a0000}, {0x432a2000}, {0x432a4000}, {0x432a6000}, - {0x432a8000}, {0x432aa000}, {0x432ac000}, {0x432ae000}, - {0x432b0000}, {0x432b2000}, {0x432b4000}, {0x432b6000}, - {0x432b8000}, {0x432ba000}, {0x432bc000}, {0x432be000}, - {0x432c0000}, {0x432c2000}, {0x432c4000}, {0x432c6000}, - {0x432c8000}, {0x432ca000}, {0x432cc000}, {0x432ce000}, - {0x432d0000}, {0x432d2000}, {0x432d4000}, {0x432d6000}, - {0x432d8000}, {0x432da000}, {0x432dc000}, {0x432de000}, - {0x432e0000}, {0x432e2000}, {0x432e4000}, {0x432e6000}, - {0x432e8000}, {0x432ea000}, {0x432ec000}, {0x432ee000}, - {0x432f0000}, {0x432f2000}, {0x432f4000}, {0x432f6000}, - {0x432f8000}, {0x432fa000}, {0x432fc000}, {0x432fe000}, - {0x43300000}, {0x43302000}, {0x43304000}, {0x43306000}, - {0x43308000}, {0x4330a000}, {0x4330c000}, {0x4330e000}, - {0x43310000}, {0x43312000}, {0x43314000}, {0x43316000}, - {0x43318000}, {0x4331a000}, {0x4331c000}, {0x4331e000}, - {0x43320000}, {0x43322000}, {0x43324000}, {0x43326000}, - {0x43328000}, {0x4332a000}, {0x4332c000}, {0x4332e000}, - {0x43330000}, {0x43332000}, {0x43334000}, {0x43336000}, - {0x43338000}, {0x4333a000}, {0x4333c000}, {0x4333e000}, - {0x43340000}, {0x43342000}, {0x43344000}, {0x43346000}, - {0x43348000}, {0x4334a000}, {0x4334c000}, {0x4334e000}, - {0x43350000}, {0x43352000}, {0x43354000}, {0x43356000}, - {0x43358000}, {0x4335a000}, {0x4335c000}, {0x4335e000}, - {0x43360000}, {0x43362000}, {0x43364000}, {0x43366000}, - {0x43368000}, {0x4336a000}, {0x4336c000}, {0x4336e000}, - {0x43370000}, {0x43372000}, {0x43374000}, {0x43376000}, - {0x43378000}, {0x4337a000}, {0x4337c000}, {0x4337e000}, - {0x43380000}, {0x43382000}, {0x43384000}, {0x43386000}, - {0x43388000}, {0x4338a000}, {0x4338c000}, {0x4338e000}, - {0x43390000}, {0x43392000}, {0x43394000}, {0x43396000}, - {0x43398000}, {0x4339a000}, {0x4339c000}, {0x4339e000}, - {0x433a0000}, {0x433a2000}, {0x433a4000}, {0x433a6000}, - {0x433a8000}, {0x433aa000}, {0x433ac000}, {0x433ae000}, - {0x433b0000}, {0x433b2000}, {0x433b4000}, {0x433b6000}, - {0x433b8000}, {0x433ba000}, {0x433bc000}, {0x433be000}, - {0x433c0000}, {0x433c2000}, {0x433c4000}, {0x433c6000}, - {0x433c8000}, {0x433ca000}, {0x433cc000}, {0x433ce000}, - {0x433d0000}, {0x433d2000}, {0x433d4000}, {0x433d6000}, - {0x433d8000}, {0x433da000}, {0x433dc000}, {0x433de000}, - {0x433e0000}, {0x433e2000}, {0x433e4000}, {0x433e6000}, - {0x433e8000}, {0x433ea000}, {0x433ec000}, {0x433ee000}, - {0x433f0000}, {0x433f2000}, {0x433f4000}, {0x433f6000}, - {0x433f8000}, {0x433fa000}, {0x433fc000}, {0x433fe000}, - {0x43400000}, {0x43402000}, {0x43404000}, {0x43406000}, - {0x43408000}, {0x4340a000}, {0x4340c000}, {0x4340e000}, - {0x43410000}, {0x43412000}, {0x43414000}, {0x43416000}, - {0x43418000}, {0x4341a000}, {0x4341c000}, {0x4341e000}, - {0x43420000}, {0x43422000}, {0x43424000}, {0x43426000}, - {0x43428000}, {0x4342a000}, {0x4342c000}, {0x4342e000}, - {0x43430000}, {0x43432000}, {0x43434000}, {0x43436000}, - {0x43438000}, {0x4343a000}, {0x4343c000}, {0x4343e000}, - {0x43440000}, {0x43442000}, {0x43444000}, {0x43446000}, - {0x43448000}, {0x4344a000}, {0x4344c000}, {0x4344e000}, - {0x43450000}, {0x43452000}, {0x43454000}, {0x43456000}, - {0x43458000}, {0x4345a000}, {0x4345c000}, {0x4345e000}, - {0x43460000}, {0x43462000}, {0x43464000}, {0x43466000}, - {0x43468000}, {0x4346a000}, {0x4346c000}, {0x4346e000}, - {0x43470000}, {0x43472000}, {0x43474000}, {0x43476000}, - {0x43478000}, {0x4347a000}, {0x4347c000}, {0x4347e000}, - {0x43480000}, {0x43482000}, {0x43484000}, {0x43486000}, - {0x43488000}, {0x4348a000}, {0x4348c000}, {0x4348e000}, - {0x43490000}, {0x43492000}, {0x43494000}, {0x43496000}, - {0x43498000}, {0x4349a000}, {0x4349c000}, {0x4349e000}, - {0x434a0000}, {0x434a2000}, {0x434a4000}, {0x434a6000}, - {0x434a8000}, {0x434aa000}, {0x434ac000}, {0x434ae000}, - {0x434b0000}, {0x434b2000}, {0x434b4000}, {0x434b6000}, - {0x434b8000}, {0x434ba000}, {0x434bc000}, {0x434be000}, - {0x434c0000}, {0x434c2000}, {0x434c4000}, {0x434c6000}, - {0x434c8000}, {0x434ca000}, {0x434cc000}, {0x434ce000}, - {0x434d0000}, {0x434d2000}, {0x434d4000}, {0x434d6000}, - {0x434d8000}, {0x434da000}, {0x434dc000}, {0x434de000}, - {0x434e0000}, {0x434e2000}, {0x434e4000}, {0x434e6000}, - {0x434e8000}, {0x434ea000}, {0x434ec000}, {0x434ee000}, - {0x434f0000}, {0x434f2000}, {0x434f4000}, {0x434f6000}, - {0x434f8000}, {0x434fa000}, {0x434fc000}, {0x434fe000}, - {0x43500000}, {0x43502000}, {0x43504000}, {0x43506000}, - {0x43508000}, {0x4350a000}, {0x4350c000}, {0x4350e000}, - {0x43510000}, {0x43512000}, {0x43514000}, {0x43516000}, - {0x43518000}, {0x4351a000}, {0x4351c000}, {0x4351e000}, - {0x43520000}, {0x43522000}, {0x43524000}, {0x43526000}, - {0x43528000}, {0x4352a000}, {0x4352c000}, {0x4352e000}, - {0x43530000}, {0x43532000}, {0x43534000}, {0x43536000}, - {0x43538000}, {0x4353a000}, {0x4353c000}, {0x4353e000}, - {0x43540000}, {0x43542000}, {0x43544000}, {0x43546000}, - {0x43548000}, {0x4354a000}, {0x4354c000}, {0x4354e000}, - {0x43550000}, {0x43552000}, {0x43554000}, {0x43556000}, - {0x43558000}, {0x4355a000}, {0x4355c000}, {0x4355e000}, - {0x43560000}, {0x43562000}, {0x43564000}, {0x43566000}, - {0x43568000}, {0x4356a000}, {0x4356c000}, {0x4356e000}, - {0x43570000}, {0x43572000}, {0x43574000}, {0x43576000}, - {0x43578000}, {0x4357a000}, {0x4357c000}, {0x4357e000}, - {0x43580000}, {0x43582000}, {0x43584000}, {0x43586000}, - {0x43588000}, {0x4358a000}, {0x4358c000}, {0x4358e000}, - {0x43590000}, {0x43592000}, {0x43594000}, {0x43596000}, - {0x43598000}, {0x4359a000}, {0x4359c000}, {0x4359e000}, - {0x435a0000}, {0x435a2000}, {0x435a4000}, {0x435a6000}, - {0x435a8000}, {0x435aa000}, {0x435ac000}, {0x435ae000}, - {0x435b0000}, {0x435b2000}, {0x435b4000}, {0x435b6000}, - {0x435b8000}, {0x435ba000}, {0x435bc000}, {0x435be000}, - {0x435c0000}, {0x435c2000}, {0x435c4000}, {0x435c6000}, - {0x435c8000}, {0x435ca000}, {0x435cc000}, {0x435ce000}, - {0x435d0000}, {0x435d2000}, {0x435d4000}, {0x435d6000}, - {0x435d8000}, {0x435da000}, {0x435dc000}, {0x435de000}, - {0x435e0000}, {0x435e2000}, {0x435e4000}, {0x435e6000}, - {0x435e8000}, {0x435ea000}, {0x435ec000}, {0x435ee000}, - {0x435f0000}, {0x435f2000}, {0x435f4000}, {0x435f6000}, - {0x435f8000}, {0x435fa000}, {0x435fc000}, {0x435fe000}, - {0x43600000}, {0x43602000}, {0x43604000}, {0x43606000}, - {0x43608000}, {0x4360a000}, {0x4360c000}, {0x4360e000}, - {0x43610000}, {0x43612000}, {0x43614000}, {0x43616000}, - {0x43618000}, {0x4361a000}, {0x4361c000}, {0x4361e000}, - {0x43620000}, {0x43622000}, {0x43624000}, {0x43626000}, - {0x43628000}, {0x4362a000}, {0x4362c000}, {0x4362e000}, - {0x43630000}, {0x43632000}, {0x43634000}, {0x43636000}, - {0x43638000}, {0x4363a000}, {0x4363c000}, {0x4363e000}, - {0x43640000}, {0x43642000}, {0x43644000}, {0x43646000}, - {0x43648000}, {0x4364a000}, {0x4364c000}, {0x4364e000}, - {0x43650000}, {0x43652000}, {0x43654000}, {0x43656000}, - {0x43658000}, {0x4365a000}, {0x4365c000}, {0x4365e000}, - {0x43660000}, {0x43662000}, {0x43664000}, {0x43666000}, - {0x43668000}, {0x4366a000}, {0x4366c000}, {0x4366e000}, - {0x43670000}, {0x43672000}, {0x43674000}, {0x43676000}, - {0x43678000}, {0x4367a000}, {0x4367c000}, {0x4367e000}, - {0x43680000}, {0x43682000}, {0x43684000}, {0x43686000}, - {0x43688000}, {0x4368a000}, {0x4368c000}, {0x4368e000}, - {0x43690000}, {0x43692000}, {0x43694000}, {0x43696000}, - {0x43698000}, {0x4369a000}, {0x4369c000}, {0x4369e000}, - {0x436a0000}, {0x436a2000}, {0x436a4000}, {0x436a6000}, - {0x436a8000}, {0x436aa000}, {0x436ac000}, {0x436ae000}, - {0x436b0000}, {0x436b2000}, {0x436b4000}, {0x436b6000}, - {0x436b8000}, {0x436ba000}, {0x436bc000}, {0x436be000}, - {0x436c0000}, {0x436c2000}, {0x436c4000}, {0x436c6000}, - {0x436c8000}, {0x436ca000}, {0x436cc000}, {0x436ce000}, - {0x436d0000}, {0x436d2000}, {0x436d4000}, {0x436d6000}, - {0x436d8000}, {0x436da000}, {0x436dc000}, {0x436de000}, - {0x436e0000}, {0x436e2000}, {0x436e4000}, {0x436e6000}, - {0x436e8000}, {0x436ea000}, {0x436ec000}, {0x436ee000}, - {0x436f0000}, {0x436f2000}, {0x436f4000}, {0x436f6000}, - {0x436f8000}, {0x436fa000}, {0x436fc000}, {0x436fe000}, - {0x43700000}, {0x43702000}, {0x43704000}, {0x43706000}, - {0x43708000}, {0x4370a000}, {0x4370c000}, {0x4370e000}, - {0x43710000}, {0x43712000}, {0x43714000}, {0x43716000}, - {0x43718000}, {0x4371a000}, {0x4371c000}, {0x4371e000}, - {0x43720000}, {0x43722000}, {0x43724000}, {0x43726000}, - {0x43728000}, {0x4372a000}, {0x4372c000}, {0x4372e000}, - {0x43730000}, {0x43732000}, {0x43734000}, {0x43736000}, - {0x43738000}, {0x4373a000}, {0x4373c000}, {0x4373e000}, - {0x43740000}, {0x43742000}, {0x43744000}, {0x43746000}, - {0x43748000}, {0x4374a000}, {0x4374c000}, {0x4374e000}, - {0x43750000}, {0x43752000}, {0x43754000}, {0x43756000}, - {0x43758000}, {0x4375a000}, {0x4375c000}, {0x4375e000}, - {0x43760000}, {0x43762000}, {0x43764000}, {0x43766000}, - {0x43768000}, {0x4376a000}, {0x4376c000}, {0x4376e000}, - {0x43770000}, {0x43772000}, {0x43774000}, {0x43776000}, - {0x43778000}, {0x4377a000}, {0x4377c000}, {0x4377e000}, - {0x43780000}, {0x43782000}, {0x43784000}, {0x43786000}, - {0x43788000}, {0x4378a000}, {0x4378c000}, {0x4378e000}, - {0x43790000}, {0x43792000}, {0x43794000}, {0x43796000}, - {0x43798000}, {0x4379a000}, {0x4379c000}, {0x4379e000}, - {0x437a0000}, {0x437a2000}, {0x437a4000}, {0x437a6000}, - {0x437a8000}, {0x437aa000}, {0x437ac000}, {0x437ae000}, - {0x437b0000}, {0x437b2000}, {0x437b4000}, {0x437b6000}, - {0x437b8000}, {0x437ba000}, {0x437bc000}, {0x437be000}, - {0x437c0000}, {0x437c2000}, {0x437c4000}, {0x437c6000}, - {0x437c8000}, {0x437ca000}, {0x437cc000}, {0x437ce000}, - {0x437d0000}, {0x437d2000}, {0x437d4000}, {0x437d6000}, - {0x437d8000}, {0x437da000}, {0x437dc000}, {0x437de000}, - {0x437e0000}, {0x437e2000}, {0x437e4000}, {0x437e6000}, - {0x437e8000}, {0x437ea000}, {0x437ec000}, {0x437ee000}, - {0x437f0000}, {0x437f2000}, {0x437f4000}, {0x437f6000}, - {0x437f8000}, {0x437fa000}, {0x437fc000}, {0x437fe000}, - {0x43800000}, {0x43802000}, {0x43804000}, {0x43806000}, - {0x43808000}, {0x4380a000}, {0x4380c000}, {0x4380e000}, - {0x43810000}, {0x43812000}, {0x43814000}, {0x43816000}, - {0x43818000}, {0x4381a000}, {0x4381c000}, {0x4381e000}, - {0x43820000}, {0x43822000}, {0x43824000}, {0x43826000}, - {0x43828000}, {0x4382a000}, {0x4382c000}, {0x4382e000}, - {0x43830000}, {0x43832000}, {0x43834000}, {0x43836000}, - {0x43838000}, {0x4383a000}, {0x4383c000}, {0x4383e000}, - {0x43840000}, {0x43842000}, {0x43844000}, {0x43846000}, - {0x43848000}, {0x4384a000}, {0x4384c000}, {0x4384e000}, - {0x43850000}, {0x43852000}, {0x43854000}, {0x43856000}, - {0x43858000}, {0x4385a000}, {0x4385c000}, {0x4385e000}, - {0x43860000}, {0x43862000}, {0x43864000}, {0x43866000}, - {0x43868000}, {0x4386a000}, {0x4386c000}, {0x4386e000}, - {0x43870000}, {0x43872000}, {0x43874000}, {0x43876000}, - {0x43878000}, {0x4387a000}, {0x4387c000}, {0x4387e000}, - {0x43880000}, {0x43882000}, {0x43884000}, {0x43886000}, - {0x43888000}, {0x4388a000}, {0x4388c000}, {0x4388e000}, - {0x43890000}, {0x43892000}, {0x43894000}, {0x43896000}, - {0x43898000}, {0x4389a000}, {0x4389c000}, {0x4389e000}, - {0x438a0000}, {0x438a2000}, {0x438a4000}, {0x438a6000}, - {0x438a8000}, {0x438aa000}, {0x438ac000}, {0x438ae000}, - {0x438b0000}, {0x438b2000}, {0x438b4000}, {0x438b6000}, - {0x438b8000}, {0x438ba000}, {0x438bc000}, {0x438be000}, - {0x438c0000}, {0x438c2000}, {0x438c4000}, {0x438c6000}, - {0x438c8000}, {0x438ca000}, {0x438cc000}, {0x438ce000}, - {0x438d0000}, {0x438d2000}, {0x438d4000}, {0x438d6000}, - {0x438d8000}, {0x438da000}, {0x438dc000}, {0x438de000}, - {0x438e0000}, {0x438e2000}, {0x438e4000}, {0x438e6000}, - {0x438e8000}, {0x438ea000}, {0x438ec000}, {0x438ee000}, - {0x438f0000}, {0x438f2000}, {0x438f4000}, {0x438f6000}, - {0x438f8000}, {0x438fa000}, {0x438fc000}, {0x438fe000}, - {0x43900000}, {0x43902000}, {0x43904000}, {0x43906000}, - {0x43908000}, {0x4390a000}, {0x4390c000}, {0x4390e000}, - {0x43910000}, {0x43912000}, {0x43914000}, {0x43916000}, - {0x43918000}, {0x4391a000}, {0x4391c000}, {0x4391e000}, - {0x43920000}, {0x43922000}, {0x43924000}, {0x43926000}, - {0x43928000}, {0x4392a000}, {0x4392c000}, {0x4392e000}, - {0x43930000}, {0x43932000}, {0x43934000}, {0x43936000}, - {0x43938000}, {0x4393a000}, {0x4393c000}, {0x4393e000}, - {0x43940000}, {0x43942000}, {0x43944000}, {0x43946000}, - {0x43948000}, {0x4394a000}, {0x4394c000}, {0x4394e000}, - {0x43950000}, {0x43952000}, {0x43954000}, {0x43956000}, - {0x43958000}, {0x4395a000}, {0x4395c000}, {0x4395e000}, - {0x43960000}, {0x43962000}, {0x43964000}, {0x43966000}, - {0x43968000}, {0x4396a000}, {0x4396c000}, {0x4396e000}, - {0x43970000}, {0x43972000}, {0x43974000}, {0x43976000}, - {0x43978000}, {0x4397a000}, {0x4397c000}, {0x4397e000}, - {0x43980000}, {0x43982000}, {0x43984000}, {0x43986000}, - {0x43988000}, {0x4398a000}, {0x4398c000}, {0x4398e000}, - {0x43990000}, {0x43992000}, {0x43994000}, {0x43996000}, - {0x43998000}, {0x4399a000}, {0x4399c000}, {0x4399e000}, - {0x439a0000}, {0x439a2000}, {0x439a4000}, {0x439a6000}, - {0x439a8000}, {0x439aa000}, {0x439ac000}, {0x439ae000}, - {0x439b0000}, {0x439b2000}, {0x439b4000}, {0x439b6000}, - {0x439b8000}, {0x439ba000}, {0x439bc000}, {0x439be000}, - {0x439c0000}, {0x439c2000}, {0x439c4000}, {0x439c6000}, - {0x439c8000}, {0x439ca000}, {0x439cc000}, {0x439ce000}, - {0x439d0000}, {0x439d2000}, {0x439d4000}, {0x439d6000}, - {0x439d8000}, {0x439da000}, {0x439dc000}, {0x439de000}, - {0x439e0000}, {0x439e2000}, {0x439e4000}, {0x439e6000}, - {0x439e8000}, {0x439ea000}, {0x439ec000}, {0x439ee000}, - {0x439f0000}, {0x439f2000}, {0x439f4000}, {0x439f6000}, - {0x439f8000}, {0x439fa000}, {0x439fc000}, {0x439fe000}, - {0x43a00000}, {0x43a02000}, {0x43a04000}, {0x43a06000}, - {0x43a08000}, {0x43a0a000}, {0x43a0c000}, {0x43a0e000}, - {0x43a10000}, {0x43a12000}, {0x43a14000}, {0x43a16000}, - {0x43a18000}, {0x43a1a000}, {0x43a1c000}, {0x43a1e000}, - {0x43a20000}, {0x43a22000}, {0x43a24000}, {0x43a26000}, - {0x43a28000}, {0x43a2a000}, {0x43a2c000}, {0x43a2e000}, - {0x43a30000}, {0x43a32000}, {0x43a34000}, {0x43a36000}, - {0x43a38000}, {0x43a3a000}, {0x43a3c000}, {0x43a3e000}, - {0x43a40000}, {0x43a42000}, {0x43a44000}, {0x43a46000}, - {0x43a48000}, {0x43a4a000}, {0x43a4c000}, {0x43a4e000}, - {0x43a50000}, {0x43a52000}, {0x43a54000}, {0x43a56000}, - {0x43a58000}, {0x43a5a000}, {0x43a5c000}, {0x43a5e000}, - {0x43a60000}, {0x43a62000}, {0x43a64000}, {0x43a66000}, - {0x43a68000}, {0x43a6a000}, {0x43a6c000}, {0x43a6e000}, - {0x43a70000}, {0x43a72000}, {0x43a74000}, {0x43a76000}, - {0x43a78000}, {0x43a7a000}, {0x43a7c000}, {0x43a7e000}, - {0x43a80000}, {0x43a82000}, {0x43a84000}, {0x43a86000}, - {0x43a88000}, {0x43a8a000}, {0x43a8c000}, {0x43a8e000}, - {0x43a90000}, {0x43a92000}, {0x43a94000}, {0x43a96000}, - {0x43a98000}, {0x43a9a000}, {0x43a9c000}, {0x43a9e000}, - {0x43aa0000}, {0x43aa2000}, {0x43aa4000}, {0x43aa6000}, - {0x43aa8000}, {0x43aaa000}, {0x43aac000}, {0x43aae000}, - {0x43ab0000}, {0x43ab2000}, {0x43ab4000}, {0x43ab6000}, - {0x43ab8000}, {0x43aba000}, {0x43abc000}, {0x43abe000}, - {0x43ac0000}, {0x43ac2000}, {0x43ac4000}, {0x43ac6000}, - {0x43ac8000}, {0x43aca000}, {0x43acc000}, {0x43ace000}, - {0x43ad0000}, {0x43ad2000}, {0x43ad4000}, {0x43ad6000}, - {0x43ad8000}, {0x43ada000}, {0x43adc000}, {0x43ade000}, - {0x43ae0000}, {0x43ae2000}, {0x43ae4000}, {0x43ae6000}, - {0x43ae8000}, {0x43aea000}, {0x43aec000}, {0x43aee000}, - {0x43af0000}, {0x43af2000}, {0x43af4000}, {0x43af6000}, - {0x43af8000}, {0x43afa000}, {0x43afc000}, {0x43afe000}, - {0x43b00000}, {0x43b02000}, {0x43b04000}, {0x43b06000}, - {0x43b08000}, {0x43b0a000}, {0x43b0c000}, {0x43b0e000}, - {0x43b10000}, {0x43b12000}, {0x43b14000}, {0x43b16000}, - {0x43b18000}, {0x43b1a000}, {0x43b1c000}, {0x43b1e000}, - {0x43b20000}, {0x43b22000}, {0x43b24000}, {0x43b26000}, - {0x43b28000}, {0x43b2a000}, {0x43b2c000}, {0x43b2e000}, - {0x43b30000}, {0x43b32000}, {0x43b34000}, {0x43b36000}, - {0x43b38000}, {0x43b3a000}, {0x43b3c000}, {0x43b3e000}, - {0x43b40000}, {0x43b42000}, {0x43b44000}, {0x43b46000}, - {0x43b48000}, {0x43b4a000}, {0x43b4c000}, {0x43b4e000}, - {0x43b50000}, {0x43b52000}, {0x43b54000}, {0x43b56000}, - {0x43b58000}, {0x43b5a000}, {0x43b5c000}, {0x43b5e000}, - {0x43b60000}, {0x43b62000}, {0x43b64000}, {0x43b66000}, - {0x43b68000}, {0x43b6a000}, {0x43b6c000}, {0x43b6e000}, - {0x43b70000}, {0x43b72000}, {0x43b74000}, {0x43b76000}, - {0x43b78000}, {0x43b7a000}, {0x43b7c000}, {0x43b7e000}, - {0x43b80000}, {0x43b82000}, {0x43b84000}, {0x43b86000}, - {0x43b88000}, {0x43b8a000}, {0x43b8c000}, {0x43b8e000}, - {0x43b90000}, {0x43b92000}, {0x43b94000}, {0x43b96000}, - {0x43b98000}, {0x43b9a000}, {0x43b9c000}, {0x43b9e000}, - {0x43ba0000}, {0x43ba2000}, {0x43ba4000}, {0x43ba6000}, - {0x43ba8000}, {0x43baa000}, {0x43bac000}, {0x43bae000}, - {0x43bb0000}, {0x43bb2000}, {0x43bb4000}, {0x43bb6000}, - {0x43bb8000}, {0x43bba000}, {0x43bbc000}, {0x43bbe000}, - {0x43bc0000}, {0x43bc2000}, {0x43bc4000}, {0x43bc6000}, - {0x43bc8000}, {0x43bca000}, {0x43bcc000}, {0x43bce000}, - {0x43bd0000}, {0x43bd2000}, {0x43bd4000}, {0x43bd6000}, - {0x43bd8000}, {0x43bda000}, {0x43bdc000}, {0x43bde000}, - {0x43be0000}, {0x43be2000}, {0x43be4000}, {0x43be6000}, - {0x43be8000}, {0x43bea000}, {0x43bec000}, {0x43bee000}, - {0x43bf0000}, {0x43bf2000}, {0x43bf4000}, {0x43bf6000}, - {0x43bf8000}, {0x43bfa000}, {0x43bfc000}, {0x43bfe000}, - {0x43c00000}, {0x43c02000}, {0x43c04000}, {0x43c06000}, - {0x43c08000}, {0x43c0a000}, {0x43c0c000}, {0x43c0e000}, - {0x43c10000}, {0x43c12000}, {0x43c14000}, {0x43c16000}, - {0x43c18000}, {0x43c1a000}, {0x43c1c000}, {0x43c1e000}, - {0x43c20000}, {0x43c22000}, {0x43c24000}, {0x43c26000}, - {0x43c28000}, {0x43c2a000}, {0x43c2c000}, {0x43c2e000}, - {0x43c30000}, {0x43c32000}, {0x43c34000}, {0x43c36000}, - {0x43c38000}, {0x43c3a000}, {0x43c3c000}, {0x43c3e000}, - {0x43c40000}, {0x43c42000}, {0x43c44000}, {0x43c46000}, - {0x43c48000}, {0x43c4a000}, {0x43c4c000}, {0x43c4e000}, - {0x43c50000}, {0x43c52000}, {0x43c54000}, {0x43c56000}, - {0x43c58000}, {0x43c5a000}, {0x43c5c000}, {0x43c5e000}, - {0x43c60000}, {0x43c62000}, {0x43c64000}, {0x43c66000}, - {0x43c68000}, {0x43c6a000}, {0x43c6c000}, {0x43c6e000}, - {0x43c70000}, {0x43c72000}, {0x43c74000}, {0x43c76000}, - {0x43c78000}, {0x43c7a000}, {0x43c7c000}, {0x43c7e000}, - {0x43c80000}, {0x43c82000}, {0x43c84000}, {0x43c86000}, - {0x43c88000}, {0x43c8a000}, {0x43c8c000}, {0x43c8e000}, - {0x43c90000}, {0x43c92000}, {0x43c94000}, {0x43c96000}, - {0x43c98000}, {0x43c9a000}, {0x43c9c000}, {0x43c9e000}, - {0x43ca0000}, {0x43ca2000}, {0x43ca4000}, {0x43ca6000}, - {0x43ca8000}, {0x43caa000}, {0x43cac000}, {0x43cae000}, - {0x43cb0000}, {0x43cb2000}, {0x43cb4000}, {0x43cb6000}, - {0x43cb8000}, {0x43cba000}, {0x43cbc000}, {0x43cbe000}, - {0x43cc0000}, {0x43cc2000}, {0x43cc4000}, {0x43cc6000}, - {0x43cc8000}, {0x43cca000}, {0x43ccc000}, {0x43cce000}, - {0x43cd0000}, {0x43cd2000}, {0x43cd4000}, {0x43cd6000}, - {0x43cd8000}, {0x43cda000}, {0x43cdc000}, {0x43cde000}, - {0x43ce0000}, {0x43ce2000}, {0x43ce4000}, {0x43ce6000}, - {0x43ce8000}, {0x43cea000}, {0x43cec000}, {0x43cee000}, - {0x43cf0000}, {0x43cf2000}, {0x43cf4000}, {0x43cf6000}, - {0x43cf8000}, {0x43cfa000}, {0x43cfc000}, {0x43cfe000}, - {0x43d00000}, {0x43d02000}, {0x43d04000}, {0x43d06000}, - {0x43d08000}, {0x43d0a000}, {0x43d0c000}, {0x43d0e000}, - {0x43d10000}, {0x43d12000}, {0x43d14000}, {0x43d16000}, - {0x43d18000}, {0x43d1a000}, {0x43d1c000}, {0x43d1e000}, - {0x43d20000}, {0x43d22000}, {0x43d24000}, {0x43d26000}, - {0x43d28000}, {0x43d2a000}, {0x43d2c000}, {0x43d2e000}, - {0x43d30000}, {0x43d32000}, {0x43d34000}, {0x43d36000}, - {0x43d38000}, {0x43d3a000}, {0x43d3c000}, {0x43d3e000}, - {0x43d40000}, {0x43d42000}, {0x43d44000}, {0x43d46000}, - {0x43d48000}, {0x43d4a000}, {0x43d4c000}, {0x43d4e000}, - {0x43d50000}, {0x43d52000}, {0x43d54000}, {0x43d56000}, - {0x43d58000}, {0x43d5a000}, {0x43d5c000}, {0x43d5e000}, - {0x43d60000}, {0x43d62000}, {0x43d64000}, {0x43d66000}, - {0x43d68000}, {0x43d6a000}, {0x43d6c000}, {0x43d6e000}, - {0x43d70000}, {0x43d72000}, {0x43d74000}, {0x43d76000}, - {0x43d78000}, {0x43d7a000}, {0x43d7c000}, {0x43d7e000}, - {0x43d80000}, {0x43d82000}, {0x43d84000}, {0x43d86000}, - {0x43d88000}, {0x43d8a000}, {0x43d8c000}, {0x43d8e000}, - {0x43d90000}, {0x43d92000}, {0x43d94000}, {0x43d96000}, - {0x43d98000}, {0x43d9a000}, {0x43d9c000}, {0x43d9e000}, - {0x43da0000}, {0x43da2000}, {0x43da4000}, {0x43da6000}, - {0x43da8000}, {0x43daa000}, {0x43dac000}, {0x43dae000}, - {0x43db0000}, {0x43db2000}, {0x43db4000}, {0x43db6000}, - {0x43db8000}, {0x43dba000}, {0x43dbc000}, {0x43dbe000}, - {0x43dc0000}, {0x43dc2000}, {0x43dc4000}, {0x43dc6000}, - {0x43dc8000}, {0x43dca000}, {0x43dcc000}, {0x43dce000}, - {0x43dd0000}, {0x43dd2000}, {0x43dd4000}, {0x43dd6000}, - {0x43dd8000}, {0x43dda000}, {0x43ddc000}, {0x43dde000}, - {0x43de0000}, {0x43de2000}, {0x43de4000}, {0x43de6000}, - {0x43de8000}, {0x43dea000}, {0x43dec000}, {0x43dee000}, - {0x43df0000}, {0x43df2000}, {0x43df4000}, {0x43df6000}, - {0x43df8000}, {0x43dfa000}, {0x43dfc000}, {0x43dfe000}, - {0x43e00000}, {0x43e02000}, {0x43e04000}, {0x43e06000}, - {0x43e08000}, {0x43e0a000}, {0x43e0c000}, {0x43e0e000}, - {0x43e10000}, {0x43e12000}, {0x43e14000}, {0x43e16000}, - {0x43e18000}, {0x43e1a000}, {0x43e1c000}, {0x43e1e000}, - {0x43e20000}, {0x43e22000}, {0x43e24000}, {0x43e26000}, - {0x43e28000}, {0x43e2a000}, {0x43e2c000}, {0x43e2e000}, - {0x43e30000}, {0x43e32000}, {0x43e34000}, {0x43e36000}, - {0x43e38000}, {0x43e3a000}, {0x43e3c000}, {0x43e3e000}, - {0x43e40000}, {0x43e42000}, {0x43e44000}, {0x43e46000}, - {0x43e48000}, {0x43e4a000}, {0x43e4c000}, {0x43e4e000}, - {0x43e50000}, {0x43e52000}, {0x43e54000}, {0x43e56000}, - {0x43e58000}, {0x43e5a000}, {0x43e5c000}, {0x43e5e000}, - {0x43e60000}, {0x43e62000}, {0x43e64000}, {0x43e66000}, - {0x43e68000}, {0x43e6a000}, {0x43e6c000}, {0x43e6e000}, - {0x43e70000}, {0x43e72000}, {0x43e74000}, {0x43e76000}, - {0x43e78000}, {0x43e7a000}, {0x43e7c000}, {0x43e7e000}, - {0x43e80000}, {0x43e82000}, {0x43e84000}, {0x43e86000}, - {0x43e88000}, {0x43e8a000}, {0x43e8c000}, {0x43e8e000}, - {0x43e90000}, {0x43e92000}, {0x43e94000}, {0x43e96000}, - {0x43e98000}, {0x43e9a000}, {0x43e9c000}, {0x43e9e000}, - {0x43ea0000}, {0x43ea2000}, {0x43ea4000}, {0x43ea6000}, - {0x43ea8000}, {0x43eaa000}, {0x43eac000}, {0x43eae000}, - {0x43eb0000}, {0x43eb2000}, {0x43eb4000}, {0x43eb6000}, - {0x43eb8000}, {0x43eba000}, {0x43ebc000}, {0x43ebe000}, - {0x43ec0000}, {0x43ec2000}, {0x43ec4000}, {0x43ec6000}, - {0x43ec8000}, {0x43eca000}, {0x43ecc000}, {0x43ece000}, - {0x43ed0000}, {0x43ed2000}, {0x43ed4000}, {0x43ed6000}, - {0x43ed8000}, {0x43eda000}, {0x43edc000}, {0x43ede000}, - {0x43ee0000}, {0x43ee2000}, {0x43ee4000}, {0x43ee6000}, - {0x43ee8000}, {0x43eea000}, {0x43eec000}, {0x43eee000}, - {0x43ef0000}, {0x43ef2000}, {0x43ef4000}, {0x43ef6000}, - {0x43ef8000}, {0x43efa000}, {0x43efc000}, {0x43efe000}, - {0x43f00000}, {0x43f02000}, {0x43f04000}, {0x43f06000}, - {0x43f08000}, {0x43f0a000}, {0x43f0c000}, {0x43f0e000}, - {0x43f10000}, {0x43f12000}, {0x43f14000}, {0x43f16000}, - {0x43f18000}, {0x43f1a000}, {0x43f1c000}, {0x43f1e000}, - {0x43f20000}, {0x43f22000}, {0x43f24000}, {0x43f26000}, - {0x43f28000}, {0x43f2a000}, {0x43f2c000}, {0x43f2e000}, - {0x43f30000}, {0x43f32000}, {0x43f34000}, {0x43f36000}, - {0x43f38000}, {0x43f3a000}, {0x43f3c000}, {0x43f3e000}, - {0x43f40000}, {0x43f42000}, {0x43f44000}, {0x43f46000}, - {0x43f48000}, {0x43f4a000}, {0x43f4c000}, {0x43f4e000}, - {0x43f50000}, {0x43f52000}, {0x43f54000}, {0x43f56000}, - {0x43f58000}, {0x43f5a000}, {0x43f5c000}, {0x43f5e000}, - {0x43f60000}, {0x43f62000}, {0x43f64000}, {0x43f66000}, - {0x43f68000}, {0x43f6a000}, {0x43f6c000}, {0x43f6e000}, - {0x43f70000}, {0x43f72000}, {0x43f74000}, {0x43f76000}, - {0x43f78000}, {0x43f7a000}, {0x43f7c000}, {0x43f7e000}, - {0x43f80000}, {0x43f82000}, {0x43f84000}, {0x43f86000}, - {0x43f88000}, {0x43f8a000}, {0x43f8c000}, {0x43f8e000}, - {0x43f90000}, {0x43f92000}, {0x43f94000}, {0x43f96000}, - {0x43f98000}, {0x43f9a000}, {0x43f9c000}, {0x43f9e000}, - {0x43fa0000}, {0x43fa2000}, {0x43fa4000}, {0x43fa6000}, - {0x43fa8000}, {0x43faa000}, {0x43fac000}, {0x43fae000}, - {0x43fb0000}, {0x43fb2000}, {0x43fb4000}, {0x43fb6000}, - {0x43fb8000}, {0x43fba000}, {0x43fbc000}, {0x43fbe000}, - {0x43fc0000}, {0x43fc2000}, {0x43fc4000}, {0x43fc6000}, - {0x43fc8000}, {0x43fca000}, {0x43fcc000}, {0x43fce000}, - {0x43fd0000}, {0x43fd2000}, {0x43fd4000}, {0x43fd6000}, - {0x43fd8000}, {0x43fda000}, {0x43fdc000}, {0x43fde000}, - {0x43fe0000}, {0x43fe2000}, {0x43fe4000}, {0x43fe6000}, - {0x43fe8000}, {0x43fea000}, {0x43fec000}, {0x43fee000}, - {0x43ff0000}, {0x43ff2000}, {0x43ff4000}, {0x43ff6000}, - {0x43ff8000}, {0x43ffa000}, {0x43ffc000}, {0x43ffe000}, - {0x44000000}, {0x44002000}, {0x44004000}, {0x44006000}, - {0x44008000}, {0x4400a000}, {0x4400c000}, {0x4400e000}, - {0x44010000}, {0x44012000}, {0x44014000}, {0x44016000}, - {0x44018000}, {0x4401a000}, {0x4401c000}, {0x4401e000}, - {0x44020000}, {0x44022000}, {0x44024000}, {0x44026000}, - {0x44028000}, {0x4402a000}, {0x4402c000}, {0x4402e000}, - {0x44030000}, {0x44032000}, {0x44034000}, {0x44036000}, - {0x44038000}, {0x4403a000}, {0x4403c000}, {0x4403e000}, - {0x44040000}, {0x44042000}, {0x44044000}, {0x44046000}, - {0x44048000}, {0x4404a000}, {0x4404c000}, {0x4404e000}, - {0x44050000}, {0x44052000}, {0x44054000}, {0x44056000}, - {0x44058000}, {0x4405a000}, {0x4405c000}, {0x4405e000}, - {0x44060000}, {0x44062000}, {0x44064000}, {0x44066000}, - {0x44068000}, {0x4406a000}, {0x4406c000}, {0x4406e000}, - {0x44070000}, {0x44072000}, {0x44074000}, {0x44076000}, - {0x44078000}, {0x4407a000}, {0x4407c000}, {0x4407e000}, - {0x44080000}, {0x44082000}, {0x44084000}, {0x44086000}, - {0x44088000}, {0x4408a000}, {0x4408c000}, {0x4408e000}, - {0x44090000}, {0x44092000}, {0x44094000}, {0x44096000}, - {0x44098000}, {0x4409a000}, {0x4409c000}, {0x4409e000}, - {0x440a0000}, {0x440a2000}, {0x440a4000}, {0x440a6000}, - {0x440a8000}, {0x440aa000}, {0x440ac000}, {0x440ae000}, - {0x440b0000}, {0x440b2000}, {0x440b4000}, {0x440b6000}, - {0x440b8000}, {0x440ba000}, {0x440bc000}, {0x440be000}, - {0x440c0000}, {0x440c2000}, {0x440c4000}, {0x440c6000}, - {0x440c8000}, {0x440ca000}, {0x440cc000}, {0x440ce000}, - {0x440d0000}, {0x440d2000}, {0x440d4000}, {0x440d6000}, - {0x440d8000}, {0x440da000}, {0x440dc000}, {0x440de000}, - {0x440e0000}, {0x440e2000}, {0x440e4000}, {0x440e6000}, - {0x440e8000}, {0x440ea000}, {0x440ec000}, {0x440ee000}, - {0x440f0000}, {0x440f2000}, {0x440f4000}, {0x440f6000}, - {0x440f8000}, {0x440fa000}, {0x440fc000}, {0x440fe000}, - {0x44100000}, {0x44102000}, {0x44104000}, {0x44106000}, - {0x44108000}, {0x4410a000}, {0x4410c000}, {0x4410e000}, - {0x44110000}, {0x44112000}, {0x44114000}, {0x44116000}, - {0x44118000}, {0x4411a000}, {0x4411c000}, {0x4411e000}, - {0x44120000}, {0x44122000}, {0x44124000}, {0x44126000}, - {0x44128000}, {0x4412a000}, {0x4412c000}, {0x4412e000}, - {0x44130000}, {0x44132000}, {0x44134000}, {0x44136000}, - {0x44138000}, {0x4413a000}, {0x4413c000}, {0x4413e000}, - {0x44140000}, {0x44142000}, {0x44144000}, {0x44146000}, - {0x44148000}, {0x4414a000}, {0x4414c000}, {0x4414e000}, - {0x44150000}, {0x44152000}, {0x44154000}, {0x44156000}, - {0x44158000}, {0x4415a000}, {0x4415c000}, {0x4415e000}, - {0x44160000}, {0x44162000}, {0x44164000}, {0x44166000}, - {0x44168000}, {0x4416a000}, {0x4416c000}, {0x4416e000}, - {0x44170000}, {0x44172000}, {0x44174000}, {0x44176000}, - {0x44178000}, {0x4417a000}, {0x4417c000}, {0x4417e000}, - {0x44180000}, {0x44182000}, {0x44184000}, {0x44186000}, - {0x44188000}, {0x4418a000}, {0x4418c000}, {0x4418e000}, - {0x44190000}, {0x44192000}, {0x44194000}, {0x44196000}, - {0x44198000}, {0x4419a000}, {0x4419c000}, {0x4419e000}, - {0x441a0000}, {0x441a2000}, {0x441a4000}, {0x441a6000}, - {0x441a8000}, {0x441aa000}, {0x441ac000}, {0x441ae000}, - {0x441b0000}, {0x441b2000}, {0x441b4000}, {0x441b6000}, - {0x441b8000}, {0x441ba000}, {0x441bc000}, {0x441be000}, - {0x441c0000}, {0x441c2000}, {0x441c4000}, {0x441c6000}, - {0x441c8000}, {0x441ca000}, {0x441cc000}, {0x441ce000}, - {0x441d0000}, {0x441d2000}, {0x441d4000}, {0x441d6000}, - {0x441d8000}, {0x441da000}, {0x441dc000}, {0x441de000}, - {0x441e0000}, {0x441e2000}, {0x441e4000}, {0x441e6000}, - {0x441e8000}, {0x441ea000}, {0x441ec000}, {0x441ee000}, - {0x441f0000}, {0x441f2000}, {0x441f4000}, {0x441f6000}, - {0x441f8000}, {0x441fa000}, {0x441fc000}, {0x441fe000}, - {0x44200000}, {0x44202000}, {0x44204000}, {0x44206000}, - {0x44208000}, {0x4420a000}, {0x4420c000}, {0x4420e000}, - {0x44210000}, {0x44212000}, {0x44214000}, {0x44216000}, - {0x44218000}, {0x4421a000}, {0x4421c000}, {0x4421e000}, - {0x44220000}, {0x44222000}, {0x44224000}, {0x44226000}, - {0x44228000}, {0x4422a000}, {0x4422c000}, {0x4422e000}, - {0x44230000}, {0x44232000}, {0x44234000}, {0x44236000}, - {0x44238000}, {0x4423a000}, {0x4423c000}, {0x4423e000}, - {0x44240000}, {0x44242000}, {0x44244000}, {0x44246000}, - {0x44248000}, {0x4424a000}, {0x4424c000}, {0x4424e000}, - {0x44250000}, {0x44252000}, {0x44254000}, {0x44256000}, - {0x44258000}, {0x4425a000}, {0x4425c000}, {0x4425e000}, - {0x44260000}, {0x44262000}, {0x44264000}, {0x44266000}, - {0x44268000}, {0x4426a000}, {0x4426c000}, {0x4426e000}, - {0x44270000}, {0x44272000}, {0x44274000}, {0x44276000}, - {0x44278000}, {0x4427a000}, {0x4427c000}, {0x4427e000}, - {0x44280000}, {0x44282000}, {0x44284000}, {0x44286000}, - {0x44288000}, {0x4428a000}, {0x4428c000}, {0x4428e000}, - {0x44290000}, {0x44292000}, {0x44294000}, {0x44296000}, - {0x44298000}, {0x4429a000}, {0x4429c000}, {0x4429e000}, - {0x442a0000}, {0x442a2000}, {0x442a4000}, {0x442a6000}, - {0x442a8000}, {0x442aa000}, {0x442ac000}, {0x442ae000}, - {0x442b0000}, {0x442b2000}, {0x442b4000}, {0x442b6000}, - {0x442b8000}, {0x442ba000}, {0x442bc000}, {0x442be000}, - {0x442c0000}, {0x442c2000}, {0x442c4000}, {0x442c6000}, - {0x442c8000}, {0x442ca000}, {0x442cc000}, {0x442ce000}, - {0x442d0000}, {0x442d2000}, {0x442d4000}, {0x442d6000}, - {0x442d8000}, {0x442da000}, {0x442dc000}, {0x442de000}, - {0x442e0000}, {0x442e2000}, {0x442e4000}, {0x442e6000}, - {0x442e8000}, {0x442ea000}, {0x442ec000}, {0x442ee000}, - {0x442f0000}, {0x442f2000}, {0x442f4000}, {0x442f6000}, - {0x442f8000}, {0x442fa000}, {0x442fc000}, {0x442fe000}, - {0x44300000}, {0x44302000}, {0x44304000}, {0x44306000}, - {0x44308000}, {0x4430a000}, {0x4430c000}, {0x4430e000}, - {0x44310000}, {0x44312000}, {0x44314000}, {0x44316000}, - {0x44318000}, {0x4431a000}, {0x4431c000}, {0x4431e000}, - {0x44320000}, {0x44322000}, {0x44324000}, {0x44326000}, - {0x44328000}, {0x4432a000}, {0x4432c000}, {0x4432e000}, - {0x44330000}, {0x44332000}, {0x44334000}, {0x44336000}, - {0x44338000}, {0x4433a000}, {0x4433c000}, {0x4433e000}, - {0x44340000}, {0x44342000}, {0x44344000}, {0x44346000}, - {0x44348000}, {0x4434a000}, {0x4434c000}, {0x4434e000}, - {0x44350000}, {0x44352000}, {0x44354000}, {0x44356000}, - {0x44358000}, {0x4435a000}, {0x4435c000}, {0x4435e000}, - {0x44360000}, {0x44362000}, {0x44364000}, {0x44366000}, - {0x44368000}, {0x4436a000}, {0x4436c000}, {0x4436e000}, - {0x44370000}, {0x44372000}, {0x44374000}, {0x44376000}, - {0x44378000}, {0x4437a000}, {0x4437c000}, {0x4437e000}, - {0x44380000}, {0x44382000}, {0x44384000}, {0x44386000}, - {0x44388000}, {0x4438a000}, {0x4438c000}, {0x4438e000}, - {0x44390000}, {0x44392000}, {0x44394000}, {0x44396000}, - {0x44398000}, {0x4439a000}, {0x4439c000}, {0x4439e000}, - {0x443a0000}, {0x443a2000}, {0x443a4000}, {0x443a6000}, - {0x443a8000}, {0x443aa000}, {0x443ac000}, {0x443ae000}, - {0x443b0000}, {0x443b2000}, {0x443b4000}, {0x443b6000}, - {0x443b8000}, {0x443ba000}, {0x443bc000}, {0x443be000}, - {0x443c0000}, {0x443c2000}, {0x443c4000}, {0x443c6000}, - {0x443c8000}, {0x443ca000}, {0x443cc000}, {0x443ce000}, - {0x443d0000}, {0x443d2000}, {0x443d4000}, {0x443d6000}, - {0x443d8000}, {0x443da000}, {0x443dc000}, {0x443de000}, - {0x443e0000}, {0x443e2000}, {0x443e4000}, {0x443e6000}, - {0x443e8000}, {0x443ea000}, {0x443ec000}, {0x443ee000}, - {0x443f0000}, {0x443f2000}, {0x443f4000}, {0x443f6000}, - {0x443f8000}, {0x443fa000}, {0x443fc000}, {0x443fe000}, - {0x44400000}, {0x44402000}, {0x44404000}, {0x44406000}, - {0x44408000}, {0x4440a000}, {0x4440c000}, {0x4440e000}, - {0x44410000}, {0x44412000}, {0x44414000}, {0x44416000}, - {0x44418000}, {0x4441a000}, {0x4441c000}, {0x4441e000}, - {0x44420000}, {0x44422000}, {0x44424000}, {0x44426000}, - {0x44428000}, {0x4442a000}, {0x4442c000}, {0x4442e000}, - {0x44430000}, {0x44432000}, {0x44434000}, {0x44436000}, - {0x44438000}, {0x4443a000}, {0x4443c000}, {0x4443e000}, - {0x44440000}, {0x44442000}, {0x44444000}, {0x44446000}, - {0x44448000}, {0x4444a000}, {0x4444c000}, {0x4444e000}, - {0x44450000}, {0x44452000}, {0x44454000}, {0x44456000}, - {0x44458000}, {0x4445a000}, {0x4445c000}, {0x4445e000}, - {0x44460000}, {0x44462000}, {0x44464000}, {0x44466000}, - {0x44468000}, {0x4446a000}, {0x4446c000}, {0x4446e000}, - {0x44470000}, {0x44472000}, {0x44474000}, {0x44476000}, - {0x44478000}, {0x4447a000}, {0x4447c000}, {0x4447e000}, - {0x44480000}, {0x44482000}, {0x44484000}, {0x44486000}, - {0x44488000}, {0x4448a000}, {0x4448c000}, {0x4448e000}, - {0x44490000}, {0x44492000}, {0x44494000}, {0x44496000}, - {0x44498000}, {0x4449a000}, {0x4449c000}, {0x4449e000}, - {0x444a0000}, {0x444a2000}, {0x444a4000}, {0x444a6000}, - {0x444a8000}, {0x444aa000}, {0x444ac000}, {0x444ae000}, - {0x444b0000}, {0x444b2000}, {0x444b4000}, {0x444b6000}, - {0x444b8000}, {0x444ba000}, {0x444bc000}, {0x444be000}, - {0x444c0000}, {0x444c2000}, {0x444c4000}, {0x444c6000}, - {0x444c8000}, {0x444ca000}, {0x444cc000}, {0x444ce000}, - {0x444d0000}, {0x444d2000}, {0x444d4000}, {0x444d6000}, - {0x444d8000}, {0x444da000}, {0x444dc000}, {0x444de000}, - {0x444e0000}, {0x444e2000}, {0x444e4000}, {0x444e6000}, - {0x444e8000}, {0x444ea000}, {0x444ec000}, {0x444ee000}, - {0x444f0000}, {0x444f2000}, {0x444f4000}, {0x444f6000}, - {0x444f8000}, {0x444fa000}, {0x444fc000}, {0x444fe000}, - {0x44500000}, {0x44502000}, {0x44504000}, {0x44506000}, - {0x44508000}, {0x4450a000}, {0x4450c000}, {0x4450e000}, - {0x44510000}, {0x44512000}, {0x44514000}, {0x44516000}, - {0x44518000}, {0x4451a000}, {0x4451c000}, {0x4451e000}, - {0x44520000}, {0x44522000}, {0x44524000}, {0x44526000}, - {0x44528000}, {0x4452a000}, {0x4452c000}, {0x4452e000}, - {0x44530000}, {0x44532000}, {0x44534000}, {0x44536000}, - {0x44538000}, {0x4453a000}, {0x4453c000}, {0x4453e000}, - {0x44540000}, {0x44542000}, {0x44544000}, {0x44546000}, - {0x44548000}, {0x4454a000}, {0x4454c000}, {0x4454e000}, - {0x44550000}, {0x44552000}, {0x44554000}, {0x44556000}, - {0x44558000}, {0x4455a000}, {0x4455c000}, {0x4455e000}, - {0x44560000}, {0x44562000}, {0x44564000}, {0x44566000}, - {0x44568000}, {0x4456a000}, {0x4456c000}, {0x4456e000}, - {0x44570000}, {0x44572000}, {0x44574000}, {0x44576000}, - {0x44578000}, {0x4457a000}, {0x4457c000}, {0x4457e000}, - {0x44580000}, {0x44582000}, {0x44584000}, {0x44586000}, - {0x44588000}, {0x4458a000}, {0x4458c000}, {0x4458e000}, - {0x44590000}, {0x44592000}, {0x44594000}, {0x44596000}, - {0x44598000}, {0x4459a000}, {0x4459c000}, {0x4459e000}, - {0x445a0000}, {0x445a2000}, {0x445a4000}, {0x445a6000}, - {0x445a8000}, {0x445aa000}, {0x445ac000}, {0x445ae000}, - {0x445b0000}, {0x445b2000}, {0x445b4000}, {0x445b6000}, - {0x445b8000}, {0x445ba000}, {0x445bc000}, {0x445be000}, - {0x445c0000}, {0x445c2000}, {0x445c4000}, {0x445c6000}, - {0x445c8000}, {0x445ca000}, {0x445cc000}, {0x445ce000}, - {0x445d0000}, {0x445d2000}, {0x445d4000}, {0x445d6000}, - {0x445d8000}, {0x445da000}, {0x445dc000}, {0x445de000}, - {0x445e0000}, {0x445e2000}, {0x445e4000}, {0x445e6000}, - {0x445e8000}, {0x445ea000}, {0x445ec000}, {0x445ee000}, - {0x445f0000}, {0x445f2000}, {0x445f4000}, {0x445f6000}, - {0x445f8000}, {0x445fa000}, {0x445fc000}, {0x445fe000}, - {0x44600000}, {0x44602000}, {0x44604000}, {0x44606000}, - {0x44608000}, {0x4460a000}, {0x4460c000}, {0x4460e000}, - {0x44610000}, {0x44612000}, {0x44614000}, {0x44616000}, - {0x44618000}, {0x4461a000}, {0x4461c000}, {0x4461e000}, - {0x44620000}, {0x44622000}, {0x44624000}, {0x44626000}, - {0x44628000}, {0x4462a000}, {0x4462c000}, {0x4462e000}, - {0x44630000}, {0x44632000}, {0x44634000}, {0x44636000}, - {0x44638000}, {0x4463a000}, {0x4463c000}, {0x4463e000}, - {0x44640000}, {0x44642000}, {0x44644000}, {0x44646000}, - {0x44648000}, {0x4464a000}, {0x4464c000}, {0x4464e000}, - {0x44650000}, {0x44652000}, {0x44654000}, {0x44656000}, - {0x44658000}, {0x4465a000}, {0x4465c000}, {0x4465e000}, - {0x44660000}, {0x44662000}, {0x44664000}, {0x44666000}, - {0x44668000}, {0x4466a000}, {0x4466c000}, {0x4466e000}, - {0x44670000}, {0x44672000}, {0x44674000}, {0x44676000}, - {0x44678000}, {0x4467a000}, {0x4467c000}, {0x4467e000}, - {0x44680000}, {0x44682000}, {0x44684000}, {0x44686000}, - {0x44688000}, {0x4468a000}, {0x4468c000}, {0x4468e000}, - {0x44690000}, {0x44692000}, {0x44694000}, {0x44696000}, - {0x44698000}, {0x4469a000}, {0x4469c000}, {0x4469e000}, - {0x446a0000}, {0x446a2000}, {0x446a4000}, {0x446a6000}, - {0x446a8000}, {0x446aa000}, {0x446ac000}, {0x446ae000}, - {0x446b0000}, {0x446b2000}, {0x446b4000}, {0x446b6000}, - {0x446b8000}, {0x446ba000}, {0x446bc000}, {0x446be000}, - {0x446c0000}, {0x446c2000}, {0x446c4000}, {0x446c6000}, - {0x446c8000}, {0x446ca000}, {0x446cc000}, {0x446ce000}, - {0x446d0000}, {0x446d2000}, {0x446d4000}, {0x446d6000}, - {0x446d8000}, {0x446da000}, {0x446dc000}, {0x446de000}, - {0x446e0000}, {0x446e2000}, {0x446e4000}, {0x446e6000}, - {0x446e8000}, {0x446ea000}, {0x446ec000}, {0x446ee000}, - {0x446f0000}, {0x446f2000}, {0x446f4000}, {0x446f6000}, - {0x446f8000}, {0x446fa000}, {0x446fc000}, {0x446fe000}, - {0x44700000}, {0x44702000}, {0x44704000}, {0x44706000}, - {0x44708000}, {0x4470a000}, {0x4470c000}, {0x4470e000}, - {0x44710000}, {0x44712000}, {0x44714000}, {0x44716000}, - {0x44718000}, {0x4471a000}, {0x4471c000}, {0x4471e000}, - {0x44720000}, {0x44722000}, {0x44724000}, {0x44726000}, - {0x44728000}, {0x4472a000}, {0x4472c000}, {0x4472e000}, - {0x44730000}, {0x44732000}, {0x44734000}, {0x44736000}, - {0x44738000}, {0x4473a000}, {0x4473c000}, {0x4473e000}, - {0x44740000}, {0x44742000}, {0x44744000}, {0x44746000}, - {0x44748000}, {0x4474a000}, {0x4474c000}, {0x4474e000}, - {0x44750000}, {0x44752000}, {0x44754000}, {0x44756000}, - {0x44758000}, {0x4475a000}, {0x4475c000}, {0x4475e000}, - {0x44760000}, {0x44762000}, {0x44764000}, {0x44766000}, - {0x44768000}, {0x4476a000}, {0x4476c000}, {0x4476e000}, - {0x44770000}, {0x44772000}, {0x44774000}, {0x44776000}, - {0x44778000}, {0x4477a000}, {0x4477c000}, {0x4477e000}, - {0x44780000}, {0x44782000}, {0x44784000}, {0x44786000}, - {0x44788000}, {0x4478a000}, {0x4478c000}, {0x4478e000}, - {0x44790000}, {0x44792000}, {0x44794000}, {0x44796000}, - {0x44798000}, {0x4479a000}, {0x4479c000}, {0x4479e000}, - {0x447a0000}, {0x447a2000}, {0x447a4000}, {0x447a6000}, - {0x447a8000}, {0x447aa000}, {0x447ac000}, {0x447ae000}, - {0x447b0000}, {0x447b2000}, {0x447b4000}, {0x447b6000}, - {0x447b8000}, {0x447ba000}, {0x447bc000}, {0x447be000}, - {0x447c0000}, {0x447c2000}, {0x447c4000}, {0x447c6000}, - {0x447c8000}, {0x447ca000}, {0x447cc000}, {0x447ce000}, - {0x447d0000}, {0x447d2000}, {0x447d4000}, {0x447d6000}, - {0x447d8000}, {0x447da000}, {0x447dc000}, {0x447de000}, - {0x447e0000}, {0x447e2000}, {0x447e4000}, {0x447e6000}, - {0x447e8000}, {0x447ea000}, {0x447ec000}, {0x447ee000}, - {0x447f0000}, {0x447f2000}, {0x447f4000}, {0x447f6000}, - {0x447f8000}, {0x447fa000}, {0x447fc000}, {0x447fe000}, - {0x44800000}, {0x44802000}, {0x44804000}, {0x44806000}, - {0x44808000}, {0x4480a000}, {0x4480c000}, {0x4480e000}, - {0x44810000}, {0x44812000}, {0x44814000}, {0x44816000}, - {0x44818000}, {0x4481a000}, {0x4481c000}, {0x4481e000}, - {0x44820000}, {0x44822000}, {0x44824000}, {0x44826000}, - {0x44828000}, {0x4482a000}, {0x4482c000}, {0x4482e000}, - {0x44830000}, {0x44832000}, {0x44834000}, {0x44836000}, - {0x44838000}, {0x4483a000}, {0x4483c000}, {0x4483e000}, - {0x44840000}, {0x44842000}, {0x44844000}, {0x44846000}, - {0x44848000}, {0x4484a000}, {0x4484c000}, {0x4484e000}, - {0x44850000}, {0x44852000}, {0x44854000}, {0x44856000}, - {0x44858000}, {0x4485a000}, {0x4485c000}, {0x4485e000}, - {0x44860000}, {0x44862000}, {0x44864000}, {0x44866000}, - {0x44868000}, {0x4486a000}, {0x4486c000}, {0x4486e000}, - {0x44870000}, {0x44872000}, {0x44874000}, {0x44876000}, - {0x44878000}, {0x4487a000}, {0x4487c000}, {0x4487e000}, - {0x44880000}, {0x44882000}, {0x44884000}, {0x44886000}, - {0x44888000}, {0x4488a000}, {0x4488c000}, {0x4488e000}, - {0x44890000}, {0x44892000}, {0x44894000}, {0x44896000}, - {0x44898000}, {0x4489a000}, {0x4489c000}, {0x4489e000}, - {0x448a0000}, {0x448a2000}, {0x448a4000}, {0x448a6000}, - {0x448a8000}, {0x448aa000}, {0x448ac000}, {0x448ae000}, - {0x448b0000}, {0x448b2000}, {0x448b4000}, {0x448b6000}, - {0x448b8000}, {0x448ba000}, {0x448bc000}, {0x448be000}, - {0x448c0000}, {0x448c2000}, {0x448c4000}, {0x448c6000}, - {0x448c8000}, {0x448ca000}, {0x448cc000}, {0x448ce000}, - {0x448d0000}, {0x448d2000}, {0x448d4000}, {0x448d6000}, - {0x448d8000}, {0x448da000}, {0x448dc000}, {0x448de000}, - {0x448e0000}, {0x448e2000}, {0x448e4000}, {0x448e6000}, - {0x448e8000}, {0x448ea000}, {0x448ec000}, {0x448ee000}, - {0x448f0000}, {0x448f2000}, {0x448f4000}, {0x448f6000}, - {0x448f8000}, {0x448fa000}, {0x448fc000}, {0x448fe000}, - {0x44900000}, {0x44902000}, {0x44904000}, {0x44906000}, - {0x44908000}, {0x4490a000}, {0x4490c000}, {0x4490e000}, - {0x44910000}, {0x44912000}, {0x44914000}, {0x44916000}, - {0x44918000}, {0x4491a000}, {0x4491c000}, {0x4491e000}, - {0x44920000}, {0x44922000}, {0x44924000}, {0x44926000}, - {0x44928000}, {0x4492a000}, {0x4492c000}, {0x4492e000}, - {0x44930000}, {0x44932000}, {0x44934000}, {0x44936000}, - {0x44938000}, {0x4493a000}, {0x4493c000}, {0x4493e000}, - {0x44940000}, {0x44942000}, {0x44944000}, {0x44946000}, - {0x44948000}, {0x4494a000}, {0x4494c000}, {0x4494e000}, - {0x44950000}, {0x44952000}, {0x44954000}, {0x44956000}, - {0x44958000}, {0x4495a000}, {0x4495c000}, {0x4495e000}, - {0x44960000}, {0x44962000}, {0x44964000}, {0x44966000}, - {0x44968000}, {0x4496a000}, {0x4496c000}, {0x4496e000}, - {0x44970000}, {0x44972000}, {0x44974000}, {0x44976000}, - {0x44978000}, {0x4497a000}, {0x4497c000}, {0x4497e000}, - {0x44980000}, {0x44982000}, {0x44984000}, {0x44986000}, - {0x44988000}, {0x4498a000}, {0x4498c000}, {0x4498e000}, - {0x44990000}, {0x44992000}, {0x44994000}, {0x44996000}, - {0x44998000}, {0x4499a000}, {0x4499c000}, {0x4499e000}, - {0x449a0000}, {0x449a2000}, {0x449a4000}, {0x449a6000}, - {0x449a8000}, {0x449aa000}, {0x449ac000}, {0x449ae000}, - {0x449b0000}, {0x449b2000}, {0x449b4000}, {0x449b6000}, - {0x449b8000}, {0x449ba000}, {0x449bc000}, {0x449be000}, - {0x449c0000}, {0x449c2000}, {0x449c4000}, {0x449c6000}, - {0x449c8000}, {0x449ca000}, {0x449cc000}, {0x449ce000}, - {0x449d0000}, {0x449d2000}, {0x449d4000}, {0x449d6000}, - {0x449d8000}, {0x449da000}, {0x449dc000}, {0x449de000}, - {0x449e0000}, {0x449e2000}, {0x449e4000}, {0x449e6000}, - {0x449e8000}, {0x449ea000}, {0x449ec000}, {0x449ee000}, - {0x449f0000}, {0x449f2000}, {0x449f4000}, {0x449f6000}, - {0x449f8000}, {0x449fa000}, {0x449fc000}, {0x449fe000}, - {0x44a00000}, {0x44a02000}, {0x44a04000}, {0x44a06000}, - {0x44a08000}, {0x44a0a000}, {0x44a0c000}, {0x44a0e000}, - {0x44a10000}, {0x44a12000}, {0x44a14000}, {0x44a16000}, - {0x44a18000}, {0x44a1a000}, {0x44a1c000}, {0x44a1e000}, - {0x44a20000}, {0x44a22000}, {0x44a24000}, {0x44a26000}, - {0x44a28000}, {0x44a2a000}, {0x44a2c000}, {0x44a2e000}, - {0x44a30000}, {0x44a32000}, {0x44a34000}, {0x44a36000}, - {0x44a38000}, {0x44a3a000}, {0x44a3c000}, {0x44a3e000}, - {0x44a40000}, {0x44a42000}, {0x44a44000}, {0x44a46000}, - {0x44a48000}, {0x44a4a000}, {0x44a4c000}, {0x44a4e000}, - {0x44a50000}, {0x44a52000}, {0x44a54000}, {0x44a56000}, - {0x44a58000}, {0x44a5a000}, {0x44a5c000}, {0x44a5e000}, - {0x44a60000}, {0x44a62000}, {0x44a64000}, {0x44a66000}, - {0x44a68000}, {0x44a6a000}, {0x44a6c000}, {0x44a6e000}, - {0x44a70000}, {0x44a72000}, {0x44a74000}, {0x44a76000}, - {0x44a78000}, {0x44a7a000}, {0x44a7c000}, {0x44a7e000}, - {0x44a80000}, {0x44a82000}, {0x44a84000}, {0x44a86000}, - {0x44a88000}, {0x44a8a000}, {0x44a8c000}, {0x44a8e000}, - {0x44a90000}, {0x44a92000}, {0x44a94000}, {0x44a96000}, - {0x44a98000}, {0x44a9a000}, {0x44a9c000}, {0x44a9e000}, - {0x44aa0000}, {0x44aa2000}, {0x44aa4000}, {0x44aa6000}, - {0x44aa8000}, {0x44aaa000}, {0x44aac000}, {0x44aae000}, - {0x44ab0000}, {0x44ab2000}, {0x44ab4000}, {0x44ab6000}, - {0x44ab8000}, {0x44aba000}, {0x44abc000}, {0x44abe000}, - {0x44ac0000}, {0x44ac2000}, {0x44ac4000}, {0x44ac6000}, - {0x44ac8000}, {0x44aca000}, {0x44acc000}, {0x44ace000}, - {0x44ad0000}, {0x44ad2000}, {0x44ad4000}, {0x44ad6000}, - {0x44ad8000}, {0x44ada000}, {0x44adc000}, {0x44ade000}, - {0x44ae0000}, {0x44ae2000}, {0x44ae4000}, {0x44ae6000}, - {0x44ae8000}, {0x44aea000}, {0x44aec000}, {0x44aee000}, - {0x44af0000}, {0x44af2000}, {0x44af4000}, {0x44af6000}, - {0x44af8000}, {0x44afa000}, {0x44afc000}, {0x44afe000}, - {0x44b00000}, {0x44b02000}, {0x44b04000}, {0x44b06000}, - {0x44b08000}, {0x44b0a000}, {0x44b0c000}, {0x44b0e000}, - {0x44b10000}, {0x44b12000}, {0x44b14000}, {0x44b16000}, - {0x44b18000}, {0x44b1a000}, {0x44b1c000}, {0x44b1e000}, - {0x44b20000}, {0x44b22000}, {0x44b24000}, {0x44b26000}, - {0x44b28000}, {0x44b2a000}, {0x44b2c000}, {0x44b2e000}, - {0x44b30000}, {0x44b32000}, {0x44b34000}, {0x44b36000}, - {0x44b38000}, {0x44b3a000}, {0x44b3c000}, {0x44b3e000}, - {0x44b40000}, {0x44b42000}, {0x44b44000}, {0x44b46000}, - {0x44b48000}, {0x44b4a000}, {0x44b4c000}, {0x44b4e000}, - {0x44b50000}, {0x44b52000}, {0x44b54000}, {0x44b56000}, - {0x44b58000}, {0x44b5a000}, {0x44b5c000}, {0x44b5e000}, - {0x44b60000}, {0x44b62000}, {0x44b64000}, {0x44b66000}, - {0x44b68000}, {0x44b6a000}, {0x44b6c000}, {0x44b6e000}, - {0x44b70000}, {0x44b72000}, {0x44b74000}, {0x44b76000}, - {0x44b78000}, {0x44b7a000}, {0x44b7c000}, {0x44b7e000}, - {0x44b80000}, {0x44b82000}, {0x44b84000}, {0x44b86000}, - {0x44b88000}, {0x44b8a000}, {0x44b8c000}, {0x44b8e000}, - {0x44b90000}, {0x44b92000}, {0x44b94000}, {0x44b96000}, - {0x44b98000}, {0x44b9a000}, {0x44b9c000}, {0x44b9e000}, - {0x44ba0000}, {0x44ba2000}, {0x44ba4000}, {0x44ba6000}, - {0x44ba8000}, {0x44baa000}, {0x44bac000}, {0x44bae000}, - {0x44bb0000}, {0x44bb2000}, {0x44bb4000}, {0x44bb6000}, - {0x44bb8000}, {0x44bba000}, {0x44bbc000}, {0x44bbe000}, - {0x44bc0000}, {0x44bc2000}, {0x44bc4000}, {0x44bc6000}, - {0x44bc8000}, {0x44bca000}, {0x44bcc000}, {0x44bce000}, - {0x44bd0000}, {0x44bd2000}, {0x44bd4000}, {0x44bd6000}, - {0x44bd8000}, {0x44bda000}, {0x44bdc000}, {0x44bde000}, - {0x44be0000}, {0x44be2000}, {0x44be4000}, {0x44be6000}, - {0x44be8000}, {0x44bea000}, {0x44bec000}, {0x44bee000}, - {0x44bf0000}, {0x44bf2000}, {0x44bf4000}, {0x44bf6000}, - {0x44bf8000}, {0x44bfa000}, {0x44bfc000}, {0x44bfe000}, - {0x44c00000}, {0x44c02000}, {0x44c04000}, {0x44c06000}, - {0x44c08000}, {0x44c0a000}, {0x44c0c000}, {0x44c0e000}, - {0x44c10000}, {0x44c12000}, {0x44c14000}, {0x44c16000}, - {0x44c18000}, {0x44c1a000}, {0x44c1c000}, {0x44c1e000}, - {0x44c20000}, {0x44c22000}, {0x44c24000}, {0x44c26000}, - {0x44c28000}, {0x44c2a000}, {0x44c2c000}, {0x44c2e000}, - {0x44c30000}, {0x44c32000}, {0x44c34000}, {0x44c36000}, - {0x44c38000}, {0x44c3a000}, {0x44c3c000}, {0x44c3e000}, - {0x44c40000}, {0x44c42000}, {0x44c44000}, {0x44c46000}, - {0x44c48000}, {0x44c4a000}, {0x44c4c000}, {0x44c4e000}, - {0x44c50000}, {0x44c52000}, {0x44c54000}, {0x44c56000}, - {0x44c58000}, {0x44c5a000}, {0x44c5c000}, {0x44c5e000}, - {0x44c60000}, {0x44c62000}, {0x44c64000}, {0x44c66000}, - {0x44c68000}, {0x44c6a000}, {0x44c6c000}, {0x44c6e000}, - {0x44c70000}, {0x44c72000}, {0x44c74000}, {0x44c76000}, - {0x44c78000}, {0x44c7a000}, {0x44c7c000}, {0x44c7e000}, - {0x44c80000}, {0x44c82000}, {0x44c84000}, {0x44c86000}, - {0x44c88000}, {0x44c8a000}, {0x44c8c000}, {0x44c8e000}, - {0x44c90000}, {0x44c92000}, {0x44c94000}, {0x44c96000}, - {0x44c98000}, {0x44c9a000}, {0x44c9c000}, {0x44c9e000}, - {0x44ca0000}, {0x44ca2000}, {0x44ca4000}, {0x44ca6000}, - {0x44ca8000}, {0x44caa000}, {0x44cac000}, {0x44cae000}, - {0x44cb0000}, {0x44cb2000}, {0x44cb4000}, {0x44cb6000}, - {0x44cb8000}, {0x44cba000}, {0x44cbc000}, {0x44cbe000}, - {0x44cc0000}, {0x44cc2000}, {0x44cc4000}, {0x44cc6000}, - {0x44cc8000}, {0x44cca000}, {0x44ccc000}, {0x44cce000}, - {0x44cd0000}, {0x44cd2000}, {0x44cd4000}, {0x44cd6000}, - {0x44cd8000}, {0x44cda000}, {0x44cdc000}, {0x44cde000}, - {0x44ce0000}, {0x44ce2000}, {0x44ce4000}, {0x44ce6000}, - {0x44ce8000}, {0x44cea000}, {0x44cec000}, {0x44cee000}, - {0x44cf0000}, {0x44cf2000}, {0x44cf4000}, {0x44cf6000}, - {0x44cf8000}, {0x44cfa000}, {0x44cfc000}, {0x44cfe000}, - {0x44d00000}, {0x44d02000}, {0x44d04000}, {0x44d06000}, - {0x44d08000}, {0x44d0a000}, {0x44d0c000}, {0x44d0e000}, - {0x44d10000}, {0x44d12000}, {0x44d14000}, {0x44d16000}, - {0x44d18000}, {0x44d1a000}, {0x44d1c000}, {0x44d1e000}, - {0x44d20000}, {0x44d22000}, {0x44d24000}, {0x44d26000}, - {0x44d28000}, {0x44d2a000}, {0x44d2c000}, {0x44d2e000}, - {0x44d30000}, {0x44d32000}, {0x44d34000}, {0x44d36000}, - {0x44d38000}, {0x44d3a000}, {0x44d3c000}, {0x44d3e000}, - {0x44d40000}, {0x44d42000}, {0x44d44000}, {0x44d46000}, - {0x44d48000}, {0x44d4a000}, {0x44d4c000}, {0x44d4e000}, - {0x44d50000}, {0x44d52000}, {0x44d54000}, {0x44d56000}, - {0x44d58000}, {0x44d5a000}, {0x44d5c000}, {0x44d5e000}, - {0x44d60000}, {0x44d62000}, {0x44d64000}, {0x44d66000}, - {0x44d68000}, {0x44d6a000}, {0x44d6c000}, {0x44d6e000}, - {0x44d70000}, {0x44d72000}, {0x44d74000}, {0x44d76000}, - {0x44d78000}, {0x44d7a000}, {0x44d7c000}, {0x44d7e000}, - {0x44d80000}, {0x44d82000}, {0x44d84000}, {0x44d86000}, - {0x44d88000}, {0x44d8a000}, {0x44d8c000}, {0x44d8e000}, - {0x44d90000}, {0x44d92000}, {0x44d94000}, {0x44d96000}, - {0x44d98000}, {0x44d9a000}, {0x44d9c000}, {0x44d9e000}, - {0x44da0000}, {0x44da2000}, {0x44da4000}, {0x44da6000}, - {0x44da8000}, {0x44daa000}, {0x44dac000}, {0x44dae000}, - {0x44db0000}, {0x44db2000}, {0x44db4000}, {0x44db6000}, - {0x44db8000}, {0x44dba000}, {0x44dbc000}, {0x44dbe000}, - {0x44dc0000}, {0x44dc2000}, {0x44dc4000}, {0x44dc6000}, - {0x44dc8000}, {0x44dca000}, {0x44dcc000}, {0x44dce000}, - {0x44dd0000}, {0x44dd2000}, {0x44dd4000}, {0x44dd6000}, - {0x44dd8000}, {0x44dda000}, {0x44ddc000}, {0x44dde000}, - {0x44de0000}, {0x44de2000}, {0x44de4000}, {0x44de6000}, - {0x44de8000}, {0x44dea000}, {0x44dec000}, {0x44dee000}, - {0x44df0000}, {0x44df2000}, {0x44df4000}, {0x44df6000}, - {0x44df8000}, {0x44dfa000}, {0x44dfc000}, {0x44dfe000}, - {0x44e00000}, {0x44e02000}, {0x44e04000}, {0x44e06000}, - {0x44e08000}, {0x44e0a000}, {0x44e0c000}, {0x44e0e000}, - {0x44e10000}, {0x44e12000}, {0x44e14000}, {0x44e16000}, - {0x44e18000}, {0x44e1a000}, {0x44e1c000}, {0x44e1e000}, - {0x44e20000}, {0x44e22000}, {0x44e24000}, {0x44e26000}, - {0x44e28000}, {0x44e2a000}, {0x44e2c000}, {0x44e2e000}, - {0x44e30000}, {0x44e32000}, {0x44e34000}, {0x44e36000}, - {0x44e38000}, {0x44e3a000}, {0x44e3c000}, {0x44e3e000}, - {0x44e40000}, {0x44e42000}, {0x44e44000}, {0x44e46000}, - {0x44e48000}, {0x44e4a000}, {0x44e4c000}, {0x44e4e000}, - {0x44e50000}, {0x44e52000}, {0x44e54000}, {0x44e56000}, - {0x44e58000}, {0x44e5a000}, {0x44e5c000}, {0x44e5e000}, - {0x44e60000}, {0x44e62000}, {0x44e64000}, {0x44e66000}, - {0x44e68000}, {0x44e6a000}, {0x44e6c000}, {0x44e6e000}, - {0x44e70000}, {0x44e72000}, {0x44e74000}, {0x44e76000}, - {0x44e78000}, {0x44e7a000}, {0x44e7c000}, {0x44e7e000}, - {0x44e80000}, {0x44e82000}, {0x44e84000}, {0x44e86000}, - {0x44e88000}, {0x44e8a000}, {0x44e8c000}, {0x44e8e000}, - {0x44e90000}, {0x44e92000}, {0x44e94000}, {0x44e96000}, - {0x44e98000}, {0x44e9a000}, {0x44e9c000}, {0x44e9e000}, - {0x44ea0000}, {0x44ea2000}, {0x44ea4000}, {0x44ea6000}, - {0x44ea8000}, {0x44eaa000}, {0x44eac000}, {0x44eae000}, - {0x44eb0000}, {0x44eb2000}, {0x44eb4000}, {0x44eb6000}, - {0x44eb8000}, {0x44eba000}, {0x44ebc000}, {0x44ebe000}, - {0x44ec0000}, {0x44ec2000}, {0x44ec4000}, {0x44ec6000}, - {0x44ec8000}, {0x44eca000}, {0x44ecc000}, {0x44ece000}, - {0x44ed0000}, {0x44ed2000}, {0x44ed4000}, {0x44ed6000}, - {0x44ed8000}, {0x44eda000}, {0x44edc000}, {0x44ede000}, - {0x44ee0000}, {0x44ee2000}, {0x44ee4000}, {0x44ee6000}, - {0x44ee8000}, {0x44eea000}, {0x44eec000}, {0x44eee000}, - {0x44ef0000}, {0x44ef2000}, {0x44ef4000}, {0x44ef6000}, - {0x44ef8000}, {0x44efa000}, {0x44efc000}, {0x44efe000}, - {0x44f00000}, {0x44f02000}, {0x44f04000}, {0x44f06000}, - {0x44f08000}, {0x44f0a000}, {0x44f0c000}, {0x44f0e000}, - {0x44f10000}, {0x44f12000}, {0x44f14000}, {0x44f16000}, - {0x44f18000}, {0x44f1a000}, {0x44f1c000}, {0x44f1e000}, - {0x44f20000}, {0x44f22000}, {0x44f24000}, {0x44f26000}, - {0x44f28000}, {0x44f2a000}, {0x44f2c000}, {0x44f2e000}, - {0x44f30000}, {0x44f32000}, {0x44f34000}, {0x44f36000}, - {0x44f38000}, {0x44f3a000}, {0x44f3c000}, {0x44f3e000}, - {0x44f40000}, {0x44f42000}, {0x44f44000}, {0x44f46000}, - {0x44f48000}, {0x44f4a000}, {0x44f4c000}, {0x44f4e000}, - {0x44f50000}, {0x44f52000}, {0x44f54000}, {0x44f56000}, - {0x44f58000}, {0x44f5a000}, {0x44f5c000}, {0x44f5e000}, - {0x44f60000}, {0x44f62000}, {0x44f64000}, {0x44f66000}, - {0x44f68000}, {0x44f6a000}, {0x44f6c000}, {0x44f6e000}, - {0x44f70000}, {0x44f72000}, {0x44f74000}, {0x44f76000}, - {0x44f78000}, {0x44f7a000}, {0x44f7c000}, {0x44f7e000}, - {0x44f80000}, {0x44f82000}, {0x44f84000}, {0x44f86000}, - {0x44f88000}, {0x44f8a000}, {0x44f8c000}, {0x44f8e000}, - {0x44f90000}, {0x44f92000}, {0x44f94000}, {0x44f96000}, - {0x44f98000}, {0x44f9a000}, {0x44f9c000}, {0x44f9e000}, - {0x44fa0000}, {0x44fa2000}, {0x44fa4000}, {0x44fa6000}, - {0x44fa8000}, {0x44faa000}, {0x44fac000}, {0x44fae000}, - {0x44fb0000}, {0x44fb2000}, {0x44fb4000}, {0x44fb6000}, - {0x44fb8000}, {0x44fba000}, {0x44fbc000}, {0x44fbe000}, - {0x44fc0000}, {0x44fc2000}, {0x44fc4000}, {0x44fc6000}, - {0x44fc8000}, {0x44fca000}, {0x44fcc000}, {0x44fce000}, - {0x44fd0000}, {0x44fd2000}, {0x44fd4000}, {0x44fd6000}, - {0x44fd8000}, {0x44fda000}, {0x44fdc000}, {0x44fde000}, - {0x44fe0000}, {0x44fe2000}, {0x44fe4000}, {0x44fe6000}, - {0x44fe8000}, {0x44fea000}, {0x44fec000}, {0x44fee000}, - {0x44ff0000}, {0x44ff2000}, {0x44ff4000}, {0x44ff6000}, - {0x44ff8000}, {0x44ffa000}, {0x44ffc000}, {0x44ffe000}, - {0x45000000}, {0x45002000}, {0x45004000}, {0x45006000}, - {0x45008000}, {0x4500a000}, {0x4500c000}, {0x4500e000}, - {0x45010000}, {0x45012000}, {0x45014000}, {0x45016000}, - {0x45018000}, {0x4501a000}, {0x4501c000}, {0x4501e000}, - {0x45020000}, {0x45022000}, {0x45024000}, {0x45026000}, - {0x45028000}, {0x4502a000}, {0x4502c000}, {0x4502e000}, - {0x45030000}, {0x45032000}, {0x45034000}, {0x45036000}, - {0x45038000}, {0x4503a000}, {0x4503c000}, {0x4503e000}, - {0x45040000}, {0x45042000}, {0x45044000}, {0x45046000}, - {0x45048000}, {0x4504a000}, {0x4504c000}, {0x4504e000}, - {0x45050000}, {0x45052000}, {0x45054000}, {0x45056000}, - {0x45058000}, {0x4505a000}, {0x4505c000}, {0x4505e000}, - {0x45060000}, {0x45062000}, {0x45064000}, {0x45066000}, - {0x45068000}, {0x4506a000}, {0x4506c000}, {0x4506e000}, - {0x45070000}, {0x45072000}, {0x45074000}, {0x45076000}, - {0x45078000}, {0x4507a000}, {0x4507c000}, {0x4507e000}, - {0x45080000}, {0x45082000}, {0x45084000}, {0x45086000}, - {0x45088000}, {0x4508a000}, {0x4508c000}, {0x4508e000}, - {0x45090000}, {0x45092000}, {0x45094000}, {0x45096000}, - {0x45098000}, {0x4509a000}, {0x4509c000}, {0x4509e000}, - {0x450a0000}, {0x450a2000}, {0x450a4000}, {0x450a6000}, - {0x450a8000}, {0x450aa000}, {0x450ac000}, {0x450ae000}, - {0x450b0000}, {0x450b2000}, {0x450b4000}, {0x450b6000}, - {0x450b8000}, {0x450ba000}, {0x450bc000}, {0x450be000}, - {0x450c0000}, {0x450c2000}, {0x450c4000}, {0x450c6000}, - {0x450c8000}, {0x450ca000}, {0x450cc000}, {0x450ce000}, - {0x450d0000}, {0x450d2000}, {0x450d4000}, {0x450d6000}, - {0x450d8000}, {0x450da000}, {0x450dc000}, {0x450de000}, - {0x450e0000}, {0x450e2000}, {0x450e4000}, {0x450e6000}, - {0x450e8000}, {0x450ea000}, {0x450ec000}, {0x450ee000}, - {0x450f0000}, {0x450f2000}, {0x450f4000}, {0x450f6000}, - {0x450f8000}, {0x450fa000}, {0x450fc000}, {0x450fe000}, - {0x45100000}, {0x45102000}, {0x45104000}, {0x45106000}, - {0x45108000}, {0x4510a000}, {0x4510c000}, {0x4510e000}, - {0x45110000}, {0x45112000}, {0x45114000}, {0x45116000}, - {0x45118000}, {0x4511a000}, {0x4511c000}, {0x4511e000}, - {0x45120000}, {0x45122000}, {0x45124000}, {0x45126000}, - {0x45128000}, {0x4512a000}, {0x4512c000}, {0x4512e000}, - {0x45130000}, {0x45132000}, {0x45134000}, {0x45136000}, - {0x45138000}, {0x4513a000}, {0x4513c000}, {0x4513e000}, - {0x45140000}, {0x45142000}, {0x45144000}, {0x45146000}, - {0x45148000}, {0x4514a000}, {0x4514c000}, {0x4514e000}, - {0x45150000}, {0x45152000}, {0x45154000}, {0x45156000}, - {0x45158000}, {0x4515a000}, {0x4515c000}, {0x4515e000}, - {0x45160000}, {0x45162000}, {0x45164000}, {0x45166000}, - {0x45168000}, {0x4516a000}, {0x4516c000}, {0x4516e000}, - {0x45170000}, {0x45172000}, {0x45174000}, {0x45176000}, - {0x45178000}, {0x4517a000}, {0x4517c000}, {0x4517e000}, - {0x45180000}, {0x45182000}, {0x45184000}, {0x45186000}, - {0x45188000}, {0x4518a000}, {0x4518c000}, {0x4518e000}, - {0x45190000}, {0x45192000}, {0x45194000}, {0x45196000}, - {0x45198000}, {0x4519a000}, {0x4519c000}, {0x4519e000}, - {0x451a0000}, {0x451a2000}, {0x451a4000}, {0x451a6000}, - {0x451a8000}, {0x451aa000}, {0x451ac000}, {0x451ae000}, - {0x451b0000}, {0x451b2000}, {0x451b4000}, {0x451b6000}, - {0x451b8000}, {0x451ba000}, {0x451bc000}, {0x451be000}, - {0x451c0000}, {0x451c2000}, {0x451c4000}, {0x451c6000}, - {0x451c8000}, {0x451ca000}, {0x451cc000}, {0x451ce000}, - {0x451d0000}, {0x451d2000}, {0x451d4000}, {0x451d6000}, - {0x451d8000}, {0x451da000}, {0x451dc000}, {0x451de000}, - {0x451e0000}, {0x451e2000}, {0x451e4000}, {0x451e6000}, - {0x451e8000}, {0x451ea000}, {0x451ec000}, {0x451ee000}, - {0x451f0000}, {0x451f2000}, {0x451f4000}, {0x451f6000}, - {0x451f8000}, {0x451fa000}, {0x451fc000}, {0x451fe000}, - {0x45200000}, {0x45202000}, {0x45204000}, {0x45206000}, - {0x45208000}, {0x4520a000}, {0x4520c000}, {0x4520e000}, - {0x45210000}, {0x45212000}, {0x45214000}, {0x45216000}, - {0x45218000}, {0x4521a000}, {0x4521c000}, {0x4521e000}, - {0x45220000}, {0x45222000}, {0x45224000}, {0x45226000}, - {0x45228000}, {0x4522a000}, {0x4522c000}, {0x4522e000}, - {0x45230000}, {0x45232000}, {0x45234000}, {0x45236000}, - {0x45238000}, {0x4523a000}, {0x4523c000}, {0x4523e000}, - {0x45240000}, {0x45242000}, {0x45244000}, {0x45246000}, - {0x45248000}, {0x4524a000}, {0x4524c000}, {0x4524e000}, - {0x45250000}, {0x45252000}, {0x45254000}, {0x45256000}, - {0x45258000}, {0x4525a000}, {0x4525c000}, {0x4525e000}, - {0x45260000}, {0x45262000}, {0x45264000}, {0x45266000}, - {0x45268000}, {0x4526a000}, {0x4526c000}, {0x4526e000}, - {0x45270000}, {0x45272000}, {0x45274000}, {0x45276000}, - {0x45278000}, {0x4527a000}, {0x4527c000}, {0x4527e000}, - {0x45280000}, {0x45282000}, {0x45284000}, {0x45286000}, - {0x45288000}, {0x4528a000}, {0x4528c000}, {0x4528e000}, - {0x45290000}, {0x45292000}, {0x45294000}, {0x45296000}, - {0x45298000}, {0x4529a000}, {0x4529c000}, {0x4529e000}, - {0x452a0000}, {0x452a2000}, {0x452a4000}, {0x452a6000}, - {0x452a8000}, {0x452aa000}, {0x452ac000}, {0x452ae000}, - {0x452b0000}, {0x452b2000}, {0x452b4000}, {0x452b6000}, - {0x452b8000}, {0x452ba000}, {0x452bc000}, {0x452be000}, - {0x452c0000}, {0x452c2000}, {0x452c4000}, {0x452c6000}, - {0x452c8000}, {0x452ca000}, {0x452cc000}, {0x452ce000}, - {0x452d0000}, {0x452d2000}, {0x452d4000}, {0x452d6000}, - {0x452d8000}, {0x452da000}, {0x452dc000}, {0x452de000}, - {0x452e0000}, {0x452e2000}, {0x452e4000}, {0x452e6000}, - {0x452e8000}, {0x452ea000}, {0x452ec000}, {0x452ee000}, - {0x452f0000}, {0x452f2000}, {0x452f4000}, {0x452f6000}, - {0x452f8000}, {0x452fa000}, {0x452fc000}, {0x452fe000}, - {0x45300000}, {0x45302000}, {0x45304000}, {0x45306000}, - {0x45308000}, {0x4530a000}, {0x4530c000}, {0x4530e000}, - {0x45310000}, {0x45312000}, {0x45314000}, {0x45316000}, - {0x45318000}, {0x4531a000}, {0x4531c000}, {0x4531e000}, - {0x45320000}, {0x45322000}, {0x45324000}, {0x45326000}, - {0x45328000}, {0x4532a000}, {0x4532c000}, {0x4532e000}, - {0x45330000}, {0x45332000}, {0x45334000}, {0x45336000}, - {0x45338000}, {0x4533a000}, {0x4533c000}, {0x4533e000}, - {0x45340000}, {0x45342000}, {0x45344000}, {0x45346000}, - {0x45348000}, {0x4534a000}, {0x4534c000}, {0x4534e000}, - {0x45350000}, {0x45352000}, {0x45354000}, {0x45356000}, - {0x45358000}, {0x4535a000}, {0x4535c000}, {0x4535e000}, - {0x45360000}, {0x45362000}, {0x45364000}, {0x45366000}, - {0x45368000}, {0x4536a000}, {0x4536c000}, {0x4536e000}, - {0x45370000}, {0x45372000}, {0x45374000}, {0x45376000}, - {0x45378000}, {0x4537a000}, {0x4537c000}, {0x4537e000}, - {0x45380000}, {0x45382000}, {0x45384000}, {0x45386000}, - {0x45388000}, {0x4538a000}, {0x4538c000}, {0x4538e000}, - {0x45390000}, {0x45392000}, {0x45394000}, {0x45396000}, - {0x45398000}, {0x4539a000}, {0x4539c000}, {0x4539e000}, - {0x453a0000}, {0x453a2000}, {0x453a4000}, {0x453a6000}, - {0x453a8000}, {0x453aa000}, {0x453ac000}, {0x453ae000}, - {0x453b0000}, {0x453b2000}, {0x453b4000}, {0x453b6000}, - {0x453b8000}, {0x453ba000}, {0x453bc000}, {0x453be000}, - {0x453c0000}, {0x453c2000}, {0x453c4000}, {0x453c6000}, - {0x453c8000}, {0x453ca000}, {0x453cc000}, {0x453ce000}, - {0x453d0000}, {0x453d2000}, {0x453d4000}, {0x453d6000}, - {0x453d8000}, {0x453da000}, {0x453dc000}, {0x453de000}, - {0x453e0000}, {0x453e2000}, {0x453e4000}, {0x453e6000}, - {0x453e8000}, {0x453ea000}, {0x453ec000}, {0x453ee000}, - {0x453f0000}, {0x453f2000}, {0x453f4000}, {0x453f6000}, - {0x453f8000}, {0x453fa000}, {0x453fc000}, {0x453fe000}, - {0x45400000}, {0x45402000}, {0x45404000}, {0x45406000}, - {0x45408000}, {0x4540a000}, {0x4540c000}, {0x4540e000}, - {0x45410000}, {0x45412000}, {0x45414000}, {0x45416000}, - {0x45418000}, {0x4541a000}, {0x4541c000}, {0x4541e000}, - {0x45420000}, {0x45422000}, {0x45424000}, {0x45426000}, - {0x45428000}, {0x4542a000}, {0x4542c000}, {0x4542e000}, - {0x45430000}, {0x45432000}, {0x45434000}, {0x45436000}, - {0x45438000}, {0x4543a000}, {0x4543c000}, {0x4543e000}, - {0x45440000}, {0x45442000}, {0x45444000}, {0x45446000}, - {0x45448000}, {0x4544a000}, {0x4544c000}, {0x4544e000}, - {0x45450000}, {0x45452000}, {0x45454000}, {0x45456000}, - {0x45458000}, {0x4545a000}, {0x4545c000}, {0x4545e000}, - {0x45460000}, {0x45462000}, {0x45464000}, {0x45466000}, - {0x45468000}, {0x4546a000}, {0x4546c000}, {0x4546e000}, - {0x45470000}, {0x45472000}, {0x45474000}, {0x45476000}, - {0x45478000}, {0x4547a000}, {0x4547c000}, {0x4547e000}, - {0x45480000}, {0x45482000}, {0x45484000}, {0x45486000}, - {0x45488000}, {0x4548a000}, {0x4548c000}, {0x4548e000}, - {0x45490000}, {0x45492000}, {0x45494000}, {0x45496000}, - {0x45498000}, {0x4549a000}, {0x4549c000}, {0x4549e000}, - {0x454a0000}, {0x454a2000}, {0x454a4000}, {0x454a6000}, - {0x454a8000}, {0x454aa000}, {0x454ac000}, {0x454ae000}, - {0x454b0000}, {0x454b2000}, {0x454b4000}, {0x454b6000}, - {0x454b8000}, {0x454ba000}, {0x454bc000}, {0x454be000}, - {0x454c0000}, {0x454c2000}, {0x454c4000}, {0x454c6000}, - {0x454c8000}, {0x454ca000}, {0x454cc000}, {0x454ce000}, - {0x454d0000}, {0x454d2000}, {0x454d4000}, {0x454d6000}, - {0x454d8000}, {0x454da000}, {0x454dc000}, {0x454de000}, - {0x454e0000}, {0x454e2000}, {0x454e4000}, {0x454e6000}, - {0x454e8000}, {0x454ea000}, {0x454ec000}, {0x454ee000}, - {0x454f0000}, {0x454f2000}, {0x454f4000}, {0x454f6000}, - {0x454f8000}, {0x454fa000}, {0x454fc000}, {0x454fe000}, - {0x45500000}, {0x45502000}, {0x45504000}, {0x45506000}, - {0x45508000}, {0x4550a000}, {0x4550c000}, {0x4550e000}, - {0x45510000}, {0x45512000}, {0x45514000}, {0x45516000}, - {0x45518000}, {0x4551a000}, {0x4551c000}, {0x4551e000}, - {0x45520000}, {0x45522000}, {0x45524000}, {0x45526000}, - {0x45528000}, {0x4552a000}, {0x4552c000}, {0x4552e000}, - {0x45530000}, {0x45532000}, {0x45534000}, {0x45536000}, - {0x45538000}, {0x4553a000}, {0x4553c000}, {0x4553e000}, - {0x45540000}, {0x45542000}, {0x45544000}, {0x45546000}, - {0x45548000}, {0x4554a000}, {0x4554c000}, {0x4554e000}, - {0x45550000}, {0x45552000}, {0x45554000}, {0x45556000}, - {0x45558000}, {0x4555a000}, {0x4555c000}, {0x4555e000}, - {0x45560000}, {0x45562000}, {0x45564000}, {0x45566000}, - {0x45568000}, {0x4556a000}, {0x4556c000}, {0x4556e000}, - {0x45570000}, {0x45572000}, {0x45574000}, {0x45576000}, - {0x45578000}, {0x4557a000}, {0x4557c000}, {0x4557e000}, - {0x45580000}, {0x45582000}, {0x45584000}, {0x45586000}, - {0x45588000}, {0x4558a000}, {0x4558c000}, {0x4558e000}, - {0x45590000}, {0x45592000}, {0x45594000}, {0x45596000}, - {0x45598000}, {0x4559a000}, {0x4559c000}, {0x4559e000}, - {0x455a0000}, {0x455a2000}, {0x455a4000}, {0x455a6000}, - {0x455a8000}, {0x455aa000}, {0x455ac000}, {0x455ae000}, - {0x455b0000}, {0x455b2000}, {0x455b4000}, {0x455b6000}, - {0x455b8000}, {0x455ba000}, {0x455bc000}, {0x455be000}, - {0x455c0000}, {0x455c2000}, {0x455c4000}, {0x455c6000}, - {0x455c8000}, {0x455ca000}, {0x455cc000}, {0x455ce000}, - {0x455d0000}, {0x455d2000}, {0x455d4000}, {0x455d6000}, - {0x455d8000}, {0x455da000}, {0x455dc000}, {0x455de000}, - {0x455e0000}, {0x455e2000}, {0x455e4000}, {0x455e6000}, - {0x455e8000}, {0x455ea000}, {0x455ec000}, {0x455ee000}, - {0x455f0000}, {0x455f2000}, {0x455f4000}, {0x455f6000}, - {0x455f8000}, {0x455fa000}, {0x455fc000}, {0x455fe000}, - {0x45600000}, {0x45602000}, {0x45604000}, {0x45606000}, - {0x45608000}, {0x4560a000}, {0x4560c000}, {0x4560e000}, - {0x45610000}, {0x45612000}, {0x45614000}, {0x45616000}, - {0x45618000}, {0x4561a000}, {0x4561c000}, {0x4561e000}, - {0x45620000}, {0x45622000}, {0x45624000}, {0x45626000}, - {0x45628000}, {0x4562a000}, {0x4562c000}, {0x4562e000}, - {0x45630000}, {0x45632000}, {0x45634000}, {0x45636000}, - {0x45638000}, {0x4563a000}, {0x4563c000}, {0x4563e000}, - {0x45640000}, {0x45642000}, {0x45644000}, {0x45646000}, - {0x45648000}, {0x4564a000}, {0x4564c000}, {0x4564e000}, - {0x45650000}, {0x45652000}, {0x45654000}, {0x45656000}, - {0x45658000}, {0x4565a000}, {0x4565c000}, {0x4565e000}, - {0x45660000}, {0x45662000}, {0x45664000}, {0x45666000}, - {0x45668000}, {0x4566a000}, {0x4566c000}, {0x4566e000}, - {0x45670000}, {0x45672000}, {0x45674000}, {0x45676000}, - {0x45678000}, {0x4567a000}, {0x4567c000}, {0x4567e000}, - {0x45680000}, {0x45682000}, {0x45684000}, {0x45686000}, - {0x45688000}, {0x4568a000}, {0x4568c000}, {0x4568e000}, - {0x45690000}, {0x45692000}, {0x45694000}, {0x45696000}, - {0x45698000}, {0x4569a000}, {0x4569c000}, {0x4569e000}, - {0x456a0000}, {0x456a2000}, {0x456a4000}, {0x456a6000}, - {0x456a8000}, {0x456aa000}, {0x456ac000}, {0x456ae000}, - {0x456b0000}, {0x456b2000}, {0x456b4000}, {0x456b6000}, - {0x456b8000}, {0x456ba000}, {0x456bc000}, {0x456be000}, - {0x456c0000}, {0x456c2000}, {0x456c4000}, {0x456c6000}, - {0x456c8000}, {0x456ca000}, {0x456cc000}, {0x456ce000}, - {0x456d0000}, {0x456d2000}, {0x456d4000}, {0x456d6000}, - {0x456d8000}, {0x456da000}, {0x456dc000}, {0x456de000}, - {0x456e0000}, {0x456e2000}, {0x456e4000}, {0x456e6000}, - {0x456e8000}, {0x456ea000}, {0x456ec000}, {0x456ee000}, - {0x456f0000}, {0x456f2000}, {0x456f4000}, {0x456f6000}, - {0x456f8000}, {0x456fa000}, {0x456fc000}, {0x456fe000}, - {0x45700000}, {0x45702000}, {0x45704000}, {0x45706000}, - {0x45708000}, {0x4570a000}, {0x4570c000}, {0x4570e000}, - {0x45710000}, {0x45712000}, {0x45714000}, {0x45716000}, - {0x45718000}, {0x4571a000}, {0x4571c000}, {0x4571e000}, - {0x45720000}, {0x45722000}, {0x45724000}, {0x45726000}, - {0x45728000}, {0x4572a000}, {0x4572c000}, {0x4572e000}, - {0x45730000}, {0x45732000}, {0x45734000}, {0x45736000}, - {0x45738000}, {0x4573a000}, {0x4573c000}, {0x4573e000}, - {0x45740000}, {0x45742000}, {0x45744000}, {0x45746000}, - {0x45748000}, {0x4574a000}, {0x4574c000}, {0x4574e000}, - {0x45750000}, {0x45752000}, {0x45754000}, {0x45756000}, - {0x45758000}, {0x4575a000}, {0x4575c000}, {0x4575e000}, - {0x45760000}, {0x45762000}, {0x45764000}, {0x45766000}, - {0x45768000}, {0x4576a000}, {0x4576c000}, {0x4576e000}, - {0x45770000}, {0x45772000}, {0x45774000}, {0x45776000}, - {0x45778000}, {0x4577a000}, {0x4577c000}, {0x4577e000}, - {0x45780000}, {0x45782000}, {0x45784000}, {0x45786000}, - {0x45788000}, {0x4578a000}, {0x4578c000}, {0x4578e000}, - {0x45790000}, {0x45792000}, {0x45794000}, {0x45796000}, - {0x45798000}, {0x4579a000}, {0x4579c000}, {0x4579e000}, - {0x457a0000}, {0x457a2000}, {0x457a4000}, {0x457a6000}, - {0x457a8000}, {0x457aa000}, {0x457ac000}, {0x457ae000}, - {0x457b0000}, {0x457b2000}, {0x457b4000}, {0x457b6000}, - {0x457b8000}, {0x457ba000}, {0x457bc000}, {0x457be000}, - {0x457c0000}, {0x457c2000}, {0x457c4000}, {0x457c6000}, - {0x457c8000}, {0x457ca000}, {0x457cc000}, {0x457ce000}, - {0x457d0000}, {0x457d2000}, {0x457d4000}, {0x457d6000}, - {0x457d8000}, {0x457da000}, {0x457dc000}, {0x457de000}, - {0x457e0000}, {0x457e2000}, {0x457e4000}, {0x457e6000}, - {0x457e8000}, {0x457ea000}, {0x457ec000}, {0x457ee000}, - {0x457f0000}, {0x457f2000}, {0x457f4000}, {0x457f6000}, - {0x457f8000}, {0x457fa000}, {0x457fc000}, {0x457fe000}, - {0x45800000}, {0x45802000}, {0x45804000}, {0x45806000}, - {0x45808000}, {0x4580a000}, {0x4580c000}, {0x4580e000}, - {0x45810000}, {0x45812000}, {0x45814000}, {0x45816000}, - {0x45818000}, {0x4581a000}, {0x4581c000}, {0x4581e000}, - {0x45820000}, {0x45822000}, {0x45824000}, {0x45826000}, - {0x45828000}, {0x4582a000}, {0x4582c000}, {0x4582e000}, - {0x45830000}, {0x45832000}, {0x45834000}, {0x45836000}, - {0x45838000}, {0x4583a000}, {0x4583c000}, {0x4583e000}, - {0x45840000}, {0x45842000}, {0x45844000}, {0x45846000}, - {0x45848000}, {0x4584a000}, {0x4584c000}, {0x4584e000}, - {0x45850000}, {0x45852000}, {0x45854000}, {0x45856000}, - {0x45858000}, {0x4585a000}, {0x4585c000}, {0x4585e000}, - {0x45860000}, {0x45862000}, {0x45864000}, {0x45866000}, - {0x45868000}, {0x4586a000}, {0x4586c000}, {0x4586e000}, - {0x45870000}, {0x45872000}, {0x45874000}, {0x45876000}, - {0x45878000}, {0x4587a000}, {0x4587c000}, {0x4587e000}, - {0x45880000}, {0x45882000}, {0x45884000}, {0x45886000}, - {0x45888000}, {0x4588a000}, {0x4588c000}, {0x4588e000}, - {0x45890000}, {0x45892000}, {0x45894000}, {0x45896000}, - {0x45898000}, {0x4589a000}, {0x4589c000}, {0x4589e000}, - {0x458a0000}, {0x458a2000}, {0x458a4000}, {0x458a6000}, - {0x458a8000}, {0x458aa000}, {0x458ac000}, {0x458ae000}, - {0x458b0000}, {0x458b2000}, {0x458b4000}, {0x458b6000}, - {0x458b8000}, {0x458ba000}, {0x458bc000}, {0x458be000}, - {0x458c0000}, {0x458c2000}, {0x458c4000}, {0x458c6000}, - {0x458c8000}, {0x458ca000}, {0x458cc000}, {0x458ce000}, - {0x458d0000}, {0x458d2000}, {0x458d4000}, {0x458d6000}, - {0x458d8000}, {0x458da000}, {0x458dc000}, {0x458de000}, - {0x458e0000}, {0x458e2000}, {0x458e4000}, {0x458e6000}, - {0x458e8000}, {0x458ea000}, {0x458ec000}, {0x458ee000}, - {0x458f0000}, {0x458f2000}, {0x458f4000}, {0x458f6000}, - {0x458f8000}, {0x458fa000}, {0x458fc000}, {0x458fe000}, - {0x45900000}, {0x45902000}, {0x45904000}, {0x45906000}, - {0x45908000}, {0x4590a000}, {0x4590c000}, {0x4590e000}, - {0x45910000}, {0x45912000}, {0x45914000}, {0x45916000}, - {0x45918000}, {0x4591a000}, {0x4591c000}, {0x4591e000}, - {0x45920000}, {0x45922000}, {0x45924000}, {0x45926000}, - {0x45928000}, {0x4592a000}, {0x4592c000}, {0x4592e000}, - {0x45930000}, {0x45932000}, {0x45934000}, {0x45936000}, - {0x45938000}, {0x4593a000}, {0x4593c000}, {0x4593e000}, - {0x45940000}, {0x45942000}, {0x45944000}, {0x45946000}, - {0x45948000}, {0x4594a000}, {0x4594c000}, {0x4594e000}, - {0x45950000}, {0x45952000}, {0x45954000}, {0x45956000}, - {0x45958000}, {0x4595a000}, {0x4595c000}, {0x4595e000}, - {0x45960000}, {0x45962000}, {0x45964000}, {0x45966000}, - {0x45968000}, {0x4596a000}, {0x4596c000}, {0x4596e000}, - {0x45970000}, {0x45972000}, {0x45974000}, {0x45976000}, - {0x45978000}, {0x4597a000}, {0x4597c000}, {0x4597e000}, - {0x45980000}, {0x45982000}, {0x45984000}, {0x45986000}, - {0x45988000}, {0x4598a000}, {0x4598c000}, {0x4598e000}, - {0x45990000}, {0x45992000}, {0x45994000}, {0x45996000}, - {0x45998000}, {0x4599a000}, {0x4599c000}, {0x4599e000}, - {0x459a0000}, {0x459a2000}, {0x459a4000}, {0x459a6000}, - {0x459a8000}, {0x459aa000}, {0x459ac000}, {0x459ae000}, - {0x459b0000}, {0x459b2000}, {0x459b4000}, {0x459b6000}, - {0x459b8000}, {0x459ba000}, {0x459bc000}, {0x459be000}, - {0x459c0000}, {0x459c2000}, {0x459c4000}, {0x459c6000}, - {0x459c8000}, {0x459ca000}, {0x459cc000}, {0x459ce000}, - {0x459d0000}, {0x459d2000}, {0x459d4000}, {0x459d6000}, - {0x459d8000}, {0x459da000}, {0x459dc000}, {0x459de000}, - {0x459e0000}, {0x459e2000}, {0x459e4000}, {0x459e6000}, - {0x459e8000}, {0x459ea000}, {0x459ec000}, {0x459ee000}, - {0x459f0000}, {0x459f2000}, {0x459f4000}, {0x459f6000}, - {0x459f8000}, {0x459fa000}, {0x459fc000}, {0x459fe000}, - {0x45a00000}, {0x45a02000}, {0x45a04000}, {0x45a06000}, - {0x45a08000}, {0x45a0a000}, {0x45a0c000}, {0x45a0e000}, - {0x45a10000}, {0x45a12000}, {0x45a14000}, {0x45a16000}, - {0x45a18000}, {0x45a1a000}, {0x45a1c000}, {0x45a1e000}, - {0x45a20000}, {0x45a22000}, {0x45a24000}, {0x45a26000}, - {0x45a28000}, {0x45a2a000}, {0x45a2c000}, {0x45a2e000}, - {0x45a30000}, {0x45a32000}, {0x45a34000}, {0x45a36000}, - {0x45a38000}, {0x45a3a000}, {0x45a3c000}, {0x45a3e000}, - {0x45a40000}, {0x45a42000}, {0x45a44000}, {0x45a46000}, - {0x45a48000}, {0x45a4a000}, {0x45a4c000}, {0x45a4e000}, - {0x45a50000}, {0x45a52000}, {0x45a54000}, {0x45a56000}, - {0x45a58000}, {0x45a5a000}, {0x45a5c000}, {0x45a5e000}, - {0x45a60000}, {0x45a62000}, {0x45a64000}, {0x45a66000}, - {0x45a68000}, {0x45a6a000}, {0x45a6c000}, {0x45a6e000}, - {0x45a70000}, {0x45a72000}, {0x45a74000}, {0x45a76000}, - {0x45a78000}, {0x45a7a000}, {0x45a7c000}, {0x45a7e000}, - {0x45a80000}, {0x45a82000}, {0x45a84000}, {0x45a86000}, - {0x45a88000}, {0x45a8a000}, {0x45a8c000}, {0x45a8e000}, - {0x45a90000}, {0x45a92000}, {0x45a94000}, {0x45a96000}, - {0x45a98000}, {0x45a9a000}, {0x45a9c000}, {0x45a9e000}, - {0x45aa0000}, {0x45aa2000}, {0x45aa4000}, {0x45aa6000}, - {0x45aa8000}, {0x45aaa000}, {0x45aac000}, {0x45aae000}, - {0x45ab0000}, {0x45ab2000}, {0x45ab4000}, {0x45ab6000}, - {0x45ab8000}, {0x45aba000}, {0x45abc000}, {0x45abe000}, - {0x45ac0000}, {0x45ac2000}, {0x45ac4000}, {0x45ac6000}, - {0x45ac8000}, {0x45aca000}, {0x45acc000}, {0x45ace000}, - {0x45ad0000}, {0x45ad2000}, {0x45ad4000}, {0x45ad6000}, - {0x45ad8000}, {0x45ada000}, {0x45adc000}, {0x45ade000}, - {0x45ae0000}, {0x45ae2000}, {0x45ae4000}, {0x45ae6000}, - {0x45ae8000}, {0x45aea000}, {0x45aec000}, {0x45aee000}, - {0x45af0000}, {0x45af2000}, {0x45af4000}, {0x45af6000}, - {0x45af8000}, {0x45afa000}, {0x45afc000}, {0x45afe000}, - {0x45b00000}, {0x45b02000}, {0x45b04000}, {0x45b06000}, - {0x45b08000}, {0x45b0a000}, {0x45b0c000}, {0x45b0e000}, - {0x45b10000}, {0x45b12000}, {0x45b14000}, {0x45b16000}, - {0x45b18000}, {0x45b1a000}, {0x45b1c000}, {0x45b1e000}, - {0x45b20000}, {0x45b22000}, {0x45b24000}, {0x45b26000}, - {0x45b28000}, {0x45b2a000}, {0x45b2c000}, {0x45b2e000}, - {0x45b30000}, {0x45b32000}, {0x45b34000}, {0x45b36000}, - {0x45b38000}, {0x45b3a000}, {0x45b3c000}, {0x45b3e000}, - {0x45b40000}, {0x45b42000}, {0x45b44000}, {0x45b46000}, - {0x45b48000}, {0x45b4a000}, {0x45b4c000}, {0x45b4e000}, - {0x45b50000}, {0x45b52000}, {0x45b54000}, {0x45b56000}, - {0x45b58000}, {0x45b5a000}, {0x45b5c000}, {0x45b5e000}, - {0x45b60000}, {0x45b62000}, {0x45b64000}, {0x45b66000}, - {0x45b68000}, {0x45b6a000}, {0x45b6c000}, {0x45b6e000}, - {0x45b70000}, {0x45b72000}, {0x45b74000}, {0x45b76000}, - {0x45b78000}, {0x45b7a000}, {0x45b7c000}, {0x45b7e000}, - {0x45b80000}, {0x45b82000}, {0x45b84000}, {0x45b86000}, - {0x45b88000}, {0x45b8a000}, {0x45b8c000}, {0x45b8e000}, - {0x45b90000}, {0x45b92000}, {0x45b94000}, {0x45b96000}, - {0x45b98000}, {0x45b9a000}, {0x45b9c000}, {0x45b9e000}, - {0x45ba0000}, {0x45ba2000}, {0x45ba4000}, {0x45ba6000}, - {0x45ba8000}, {0x45baa000}, {0x45bac000}, {0x45bae000}, - {0x45bb0000}, {0x45bb2000}, {0x45bb4000}, {0x45bb6000}, - {0x45bb8000}, {0x45bba000}, {0x45bbc000}, {0x45bbe000}, - {0x45bc0000}, {0x45bc2000}, {0x45bc4000}, {0x45bc6000}, - {0x45bc8000}, {0x45bca000}, {0x45bcc000}, {0x45bce000}, - {0x45bd0000}, {0x45bd2000}, {0x45bd4000}, {0x45bd6000}, - {0x45bd8000}, {0x45bda000}, {0x45bdc000}, {0x45bde000}, - {0x45be0000}, {0x45be2000}, {0x45be4000}, {0x45be6000}, - {0x45be8000}, {0x45bea000}, {0x45bec000}, {0x45bee000}, - {0x45bf0000}, {0x45bf2000}, {0x45bf4000}, {0x45bf6000}, - {0x45bf8000}, {0x45bfa000}, {0x45bfc000}, {0x45bfe000}, - {0x45c00000}, {0x45c02000}, {0x45c04000}, {0x45c06000}, - {0x45c08000}, {0x45c0a000}, {0x45c0c000}, {0x45c0e000}, - {0x45c10000}, {0x45c12000}, {0x45c14000}, {0x45c16000}, - {0x45c18000}, {0x45c1a000}, {0x45c1c000}, {0x45c1e000}, - {0x45c20000}, {0x45c22000}, {0x45c24000}, {0x45c26000}, - {0x45c28000}, {0x45c2a000}, {0x45c2c000}, {0x45c2e000}, - {0x45c30000}, {0x45c32000}, {0x45c34000}, {0x45c36000}, - {0x45c38000}, {0x45c3a000}, {0x45c3c000}, {0x45c3e000}, - {0x45c40000}, {0x45c42000}, {0x45c44000}, {0x45c46000}, - {0x45c48000}, {0x45c4a000}, {0x45c4c000}, {0x45c4e000}, - {0x45c50000}, {0x45c52000}, {0x45c54000}, {0x45c56000}, - {0x45c58000}, {0x45c5a000}, {0x45c5c000}, {0x45c5e000}, - {0x45c60000}, {0x45c62000}, {0x45c64000}, {0x45c66000}, - {0x45c68000}, {0x45c6a000}, {0x45c6c000}, {0x45c6e000}, - {0x45c70000}, {0x45c72000}, {0x45c74000}, {0x45c76000}, - {0x45c78000}, {0x45c7a000}, {0x45c7c000}, {0x45c7e000}, - {0x45c80000}, {0x45c82000}, {0x45c84000}, {0x45c86000}, - {0x45c88000}, {0x45c8a000}, {0x45c8c000}, {0x45c8e000}, - {0x45c90000}, {0x45c92000}, {0x45c94000}, {0x45c96000}, - {0x45c98000}, {0x45c9a000}, {0x45c9c000}, {0x45c9e000}, - {0x45ca0000}, {0x45ca2000}, {0x45ca4000}, {0x45ca6000}, - {0x45ca8000}, {0x45caa000}, {0x45cac000}, {0x45cae000}, - {0x45cb0000}, {0x45cb2000}, {0x45cb4000}, {0x45cb6000}, - {0x45cb8000}, {0x45cba000}, {0x45cbc000}, {0x45cbe000}, - {0x45cc0000}, {0x45cc2000}, {0x45cc4000}, {0x45cc6000}, - {0x45cc8000}, {0x45cca000}, {0x45ccc000}, {0x45cce000}, - {0x45cd0000}, {0x45cd2000}, {0x45cd4000}, {0x45cd6000}, - {0x45cd8000}, {0x45cda000}, {0x45cdc000}, {0x45cde000}, - {0x45ce0000}, {0x45ce2000}, {0x45ce4000}, {0x45ce6000}, - {0x45ce8000}, {0x45cea000}, {0x45cec000}, {0x45cee000}, - {0x45cf0000}, {0x45cf2000}, {0x45cf4000}, {0x45cf6000}, - {0x45cf8000}, {0x45cfa000}, {0x45cfc000}, {0x45cfe000}, - {0x45d00000}, {0x45d02000}, {0x45d04000}, {0x45d06000}, - {0x45d08000}, {0x45d0a000}, {0x45d0c000}, {0x45d0e000}, - {0x45d10000}, {0x45d12000}, {0x45d14000}, {0x45d16000}, - {0x45d18000}, {0x45d1a000}, {0x45d1c000}, {0x45d1e000}, - {0x45d20000}, {0x45d22000}, {0x45d24000}, {0x45d26000}, - {0x45d28000}, {0x45d2a000}, {0x45d2c000}, {0x45d2e000}, - {0x45d30000}, {0x45d32000}, {0x45d34000}, {0x45d36000}, - {0x45d38000}, {0x45d3a000}, {0x45d3c000}, {0x45d3e000}, - {0x45d40000}, {0x45d42000}, {0x45d44000}, {0x45d46000}, - {0x45d48000}, {0x45d4a000}, {0x45d4c000}, {0x45d4e000}, - {0x45d50000}, {0x45d52000}, {0x45d54000}, {0x45d56000}, - {0x45d58000}, {0x45d5a000}, {0x45d5c000}, {0x45d5e000}, - {0x45d60000}, {0x45d62000}, {0x45d64000}, {0x45d66000}, - {0x45d68000}, {0x45d6a000}, {0x45d6c000}, {0x45d6e000}, - {0x45d70000}, {0x45d72000}, {0x45d74000}, {0x45d76000}, - {0x45d78000}, {0x45d7a000}, {0x45d7c000}, {0x45d7e000}, - {0x45d80000}, {0x45d82000}, {0x45d84000}, {0x45d86000}, - {0x45d88000}, {0x45d8a000}, {0x45d8c000}, {0x45d8e000}, - {0x45d90000}, {0x45d92000}, {0x45d94000}, {0x45d96000}, - {0x45d98000}, {0x45d9a000}, {0x45d9c000}, {0x45d9e000}, - {0x45da0000}, {0x45da2000}, {0x45da4000}, {0x45da6000}, - {0x45da8000}, {0x45daa000}, {0x45dac000}, {0x45dae000}, - {0x45db0000}, {0x45db2000}, {0x45db4000}, {0x45db6000}, - {0x45db8000}, {0x45dba000}, {0x45dbc000}, {0x45dbe000}, - {0x45dc0000}, {0x45dc2000}, {0x45dc4000}, {0x45dc6000}, - {0x45dc8000}, {0x45dca000}, {0x45dcc000}, {0x45dce000}, - {0x45dd0000}, {0x45dd2000}, {0x45dd4000}, {0x45dd6000}, - {0x45dd8000}, {0x45dda000}, {0x45ddc000}, {0x45dde000}, - {0x45de0000}, {0x45de2000}, {0x45de4000}, {0x45de6000}, - {0x45de8000}, {0x45dea000}, {0x45dec000}, {0x45dee000}, - {0x45df0000}, {0x45df2000}, {0x45df4000}, {0x45df6000}, - {0x45df8000}, {0x45dfa000}, {0x45dfc000}, {0x45dfe000}, - {0x45e00000}, {0x45e02000}, {0x45e04000}, {0x45e06000}, - {0x45e08000}, {0x45e0a000}, {0x45e0c000}, {0x45e0e000}, - {0x45e10000}, {0x45e12000}, {0x45e14000}, {0x45e16000}, - {0x45e18000}, {0x45e1a000}, {0x45e1c000}, {0x45e1e000}, - {0x45e20000}, {0x45e22000}, {0x45e24000}, {0x45e26000}, - {0x45e28000}, {0x45e2a000}, {0x45e2c000}, {0x45e2e000}, - {0x45e30000}, {0x45e32000}, {0x45e34000}, {0x45e36000}, - {0x45e38000}, {0x45e3a000}, {0x45e3c000}, {0x45e3e000}, - {0x45e40000}, {0x45e42000}, {0x45e44000}, {0x45e46000}, - {0x45e48000}, {0x45e4a000}, {0x45e4c000}, {0x45e4e000}, - {0x45e50000}, {0x45e52000}, {0x45e54000}, {0x45e56000}, - {0x45e58000}, {0x45e5a000}, {0x45e5c000}, {0x45e5e000}, - {0x45e60000}, {0x45e62000}, {0x45e64000}, {0x45e66000}, - {0x45e68000}, {0x45e6a000}, {0x45e6c000}, {0x45e6e000}, - {0x45e70000}, {0x45e72000}, {0x45e74000}, {0x45e76000}, - {0x45e78000}, {0x45e7a000}, {0x45e7c000}, {0x45e7e000}, - {0x45e80000}, {0x45e82000}, {0x45e84000}, {0x45e86000}, - {0x45e88000}, {0x45e8a000}, {0x45e8c000}, {0x45e8e000}, - {0x45e90000}, {0x45e92000}, {0x45e94000}, {0x45e96000}, - {0x45e98000}, {0x45e9a000}, {0x45e9c000}, {0x45e9e000}, - {0x45ea0000}, {0x45ea2000}, {0x45ea4000}, {0x45ea6000}, - {0x45ea8000}, {0x45eaa000}, {0x45eac000}, {0x45eae000}, - {0x45eb0000}, {0x45eb2000}, {0x45eb4000}, {0x45eb6000}, - {0x45eb8000}, {0x45eba000}, {0x45ebc000}, {0x45ebe000}, - {0x45ec0000}, {0x45ec2000}, {0x45ec4000}, {0x45ec6000}, - {0x45ec8000}, {0x45eca000}, {0x45ecc000}, {0x45ece000}, - {0x45ed0000}, {0x45ed2000}, {0x45ed4000}, {0x45ed6000}, - {0x45ed8000}, {0x45eda000}, {0x45edc000}, {0x45ede000}, - {0x45ee0000}, {0x45ee2000}, {0x45ee4000}, {0x45ee6000}, - {0x45ee8000}, {0x45eea000}, {0x45eec000}, {0x45eee000}, - {0x45ef0000}, {0x45ef2000}, {0x45ef4000}, {0x45ef6000}, - {0x45ef8000}, {0x45efa000}, {0x45efc000}, {0x45efe000}, - {0x45f00000}, {0x45f02000}, {0x45f04000}, {0x45f06000}, - {0x45f08000}, {0x45f0a000}, {0x45f0c000}, {0x45f0e000}, - {0x45f10000}, {0x45f12000}, {0x45f14000}, {0x45f16000}, - {0x45f18000}, {0x45f1a000}, {0x45f1c000}, {0x45f1e000}, - {0x45f20000}, {0x45f22000}, {0x45f24000}, {0x45f26000}, - {0x45f28000}, {0x45f2a000}, {0x45f2c000}, {0x45f2e000}, - {0x45f30000}, {0x45f32000}, {0x45f34000}, {0x45f36000}, - {0x45f38000}, {0x45f3a000}, {0x45f3c000}, {0x45f3e000}, - {0x45f40000}, {0x45f42000}, {0x45f44000}, {0x45f46000}, - {0x45f48000}, {0x45f4a000}, {0x45f4c000}, {0x45f4e000}, - {0x45f50000}, {0x45f52000}, {0x45f54000}, {0x45f56000}, - {0x45f58000}, {0x45f5a000}, {0x45f5c000}, {0x45f5e000}, - {0x45f60000}, {0x45f62000}, {0x45f64000}, {0x45f66000}, - {0x45f68000}, {0x45f6a000}, {0x45f6c000}, {0x45f6e000}, - {0x45f70000}, {0x45f72000}, {0x45f74000}, {0x45f76000}, - {0x45f78000}, {0x45f7a000}, {0x45f7c000}, {0x45f7e000}, - {0x45f80000}, {0x45f82000}, {0x45f84000}, {0x45f86000}, - {0x45f88000}, {0x45f8a000}, {0x45f8c000}, {0x45f8e000}, - {0x45f90000}, {0x45f92000}, {0x45f94000}, {0x45f96000}, - {0x45f98000}, {0x45f9a000}, {0x45f9c000}, {0x45f9e000}, - {0x45fa0000}, {0x45fa2000}, {0x45fa4000}, {0x45fa6000}, - {0x45fa8000}, {0x45faa000}, {0x45fac000}, {0x45fae000}, - {0x45fb0000}, {0x45fb2000}, {0x45fb4000}, {0x45fb6000}, - {0x45fb8000}, {0x45fba000}, {0x45fbc000}, {0x45fbe000}, - {0x45fc0000}, {0x45fc2000}, {0x45fc4000}, {0x45fc6000}, - {0x45fc8000}, {0x45fca000}, {0x45fcc000}, {0x45fce000}, - {0x45fd0000}, {0x45fd2000}, {0x45fd4000}, {0x45fd6000}, - {0x45fd8000}, {0x45fda000}, {0x45fdc000}, {0x45fde000}, - {0x45fe0000}, {0x45fe2000}, {0x45fe4000}, {0x45fe6000}, - {0x45fe8000}, {0x45fea000}, {0x45fec000}, {0x45fee000}, - {0x45ff0000}, {0x45ff2000}, {0x45ff4000}, {0x45ff6000}, - {0x45ff8000}, {0x45ffa000}, {0x45ffc000}, {0x45ffe000}, - {0x46000000}, {0x46002000}, {0x46004000}, {0x46006000}, - {0x46008000}, {0x4600a000}, {0x4600c000}, {0x4600e000}, - {0x46010000}, {0x46012000}, {0x46014000}, {0x46016000}, - {0x46018000}, {0x4601a000}, {0x4601c000}, {0x4601e000}, - {0x46020000}, {0x46022000}, {0x46024000}, {0x46026000}, - {0x46028000}, {0x4602a000}, {0x4602c000}, {0x4602e000}, - {0x46030000}, {0x46032000}, {0x46034000}, {0x46036000}, - {0x46038000}, {0x4603a000}, {0x4603c000}, {0x4603e000}, - {0x46040000}, {0x46042000}, {0x46044000}, {0x46046000}, - {0x46048000}, {0x4604a000}, {0x4604c000}, {0x4604e000}, - {0x46050000}, {0x46052000}, {0x46054000}, {0x46056000}, - {0x46058000}, {0x4605a000}, {0x4605c000}, {0x4605e000}, - {0x46060000}, {0x46062000}, {0x46064000}, {0x46066000}, - {0x46068000}, {0x4606a000}, {0x4606c000}, {0x4606e000}, - {0x46070000}, {0x46072000}, {0x46074000}, {0x46076000}, - {0x46078000}, {0x4607a000}, {0x4607c000}, {0x4607e000}, - {0x46080000}, {0x46082000}, {0x46084000}, {0x46086000}, - {0x46088000}, {0x4608a000}, {0x4608c000}, {0x4608e000}, - {0x46090000}, {0x46092000}, {0x46094000}, {0x46096000}, - {0x46098000}, {0x4609a000}, {0x4609c000}, {0x4609e000}, - {0x460a0000}, {0x460a2000}, {0x460a4000}, {0x460a6000}, - {0x460a8000}, {0x460aa000}, {0x460ac000}, {0x460ae000}, - {0x460b0000}, {0x460b2000}, {0x460b4000}, {0x460b6000}, - {0x460b8000}, {0x460ba000}, {0x460bc000}, {0x460be000}, - {0x460c0000}, {0x460c2000}, {0x460c4000}, {0x460c6000}, - {0x460c8000}, {0x460ca000}, {0x460cc000}, {0x460ce000}, - {0x460d0000}, {0x460d2000}, {0x460d4000}, {0x460d6000}, - {0x460d8000}, {0x460da000}, {0x460dc000}, {0x460de000}, - {0x460e0000}, {0x460e2000}, {0x460e4000}, {0x460e6000}, - {0x460e8000}, {0x460ea000}, {0x460ec000}, {0x460ee000}, - {0x460f0000}, {0x460f2000}, {0x460f4000}, {0x460f6000}, - {0x460f8000}, {0x460fa000}, {0x460fc000}, {0x460fe000}, - {0x46100000}, {0x46102000}, {0x46104000}, {0x46106000}, - {0x46108000}, {0x4610a000}, {0x4610c000}, {0x4610e000}, - {0x46110000}, {0x46112000}, {0x46114000}, {0x46116000}, - {0x46118000}, {0x4611a000}, {0x4611c000}, {0x4611e000}, - {0x46120000}, {0x46122000}, {0x46124000}, {0x46126000}, - {0x46128000}, {0x4612a000}, {0x4612c000}, {0x4612e000}, - {0x46130000}, {0x46132000}, {0x46134000}, {0x46136000}, - {0x46138000}, {0x4613a000}, {0x4613c000}, {0x4613e000}, - {0x46140000}, {0x46142000}, {0x46144000}, {0x46146000}, - {0x46148000}, {0x4614a000}, {0x4614c000}, {0x4614e000}, - {0x46150000}, {0x46152000}, {0x46154000}, {0x46156000}, - {0x46158000}, {0x4615a000}, {0x4615c000}, {0x4615e000}, - {0x46160000}, {0x46162000}, {0x46164000}, {0x46166000}, - {0x46168000}, {0x4616a000}, {0x4616c000}, {0x4616e000}, - {0x46170000}, {0x46172000}, {0x46174000}, {0x46176000}, - {0x46178000}, {0x4617a000}, {0x4617c000}, {0x4617e000}, - {0x46180000}, {0x46182000}, {0x46184000}, {0x46186000}, - {0x46188000}, {0x4618a000}, {0x4618c000}, {0x4618e000}, - {0x46190000}, {0x46192000}, {0x46194000}, {0x46196000}, - {0x46198000}, {0x4619a000}, {0x4619c000}, {0x4619e000}, - {0x461a0000}, {0x461a2000}, {0x461a4000}, {0x461a6000}, - {0x461a8000}, {0x461aa000}, {0x461ac000}, {0x461ae000}, - {0x461b0000}, {0x461b2000}, {0x461b4000}, {0x461b6000}, - {0x461b8000}, {0x461ba000}, {0x461bc000}, {0x461be000}, - {0x461c0000}, {0x461c2000}, {0x461c4000}, {0x461c6000}, - {0x461c8000}, {0x461ca000}, {0x461cc000}, {0x461ce000}, - {0x461d0000}, {0x461d2000}, {0x461d4000}, {0x461d6000}, - {0x461d8000}, {0x461da000}, {0x461dc000}, {0x461de000}, - {0x461e0000}, {0x461e2000}, {0x461e4000}, {0x461e6000}, - {0x461e8000}, {0x461ea000}, {0x461ec000}, {0x461ee000}, - {0x461f0000}, {0x461f2000}, {0x461f4000}, {0x461f6000}, - {0x461f8000}, {0x461fa000}, {0x461fc000}, {0x461fe000}, - {0x46200000}, {0x46202000}, {0x46204000}, {0x46206000}, - {0x46208000}, {0x4620a000}, {0x4620c000}, {0x4620e000}, - {0x46210000}, {0x46212000}, {0x46214000}, {0x46216000}, - {0x46218000}, {0x4621a000}, {0x4621c000}, {0x4621e000}, - {0x46220000}, {0x46222000}, {0x46224000}, {0x46226000}, - {0x46228000}, {0x4622a000}, {0x4622c000}, {0x4622e000}, - {0x46230000}, {0x46232000}, {0x46234000}, {0x46236000}, - {0x46238000}, {0x4623a000}, {0x4623c000}, {0x4623e000}, - {0x46240000}, {0x46242000}, {0x46244000}, {0x46246000}, - {0x46248000}, {0x4624a000}, {0x4624c000}, {0x4624e000}, - {0x46250000}, {0x46252000}, {0x46254000}, {0x46256000}, - {0x46258000}, {0x4625a000}, {0x4625c000}, {0x4625e000}, - {0x46260000}, {0x46262000}, {0x46264000}, {0x46266000}, - {0x46268000}, {0x4626a000}, {0x4626c000}, {0x4626e000}, - {0x46270000}, {0x46272000}, {0x46274000}, {0x46276000}, - {0x46278000}, {0x4627a000}, {0x4627c000}, {0x4627e000}, - {0x46280000}, {0x46282000}, {0x46284000}, {0x46286000}, - {0x46288000}, {0x4628a000}, {0x4628c000}, {0x4628e000}, - {0x46290000}, {0x46292000}, {0x46294000}, {0x46296000}, - {0x46298000}, {0x4629a000}, {0x4629c000}, {0x4629e000}, - {0x462a0000}, {0x462a2000}, {0x462a4000}, {0x462a6000}, - {0x462a8000}, {0x462aa000}, {0x462ac000}, {0x462ae000}, - {0x462b0000}, {0x462b2000}, {0x462b4000}, {0x462b6000}, - {0x462b8000}, {0x462ba000}, {0x462bc000}, {0x462be000}, - {0x462c0000}, {0x462c2000}, {0x462c4000}, {0x462c6000}, - {0x462c8000}, {0x462ca000}, {0x462cc000}, {0x462ce000}, - {0x462d0000}, {0x462d2000}, {0x462d4000}, {0x462d6000}, - {0x462d8000}, {0x462da000}, {0x462dc000}, {0x462de000}, - {0x462e0000}, {0x462e2000}, {0x462e4000}, {0x462e6000}, - {0x462e8000}, {0x462ea000}, {0x462ec000}, {0x462ee000}, - {0x462f0000}, {0x462f2000}, {0x462f4000}, {0x462f6000}, - {0x462f8000}, {0x462fa000}, {0x462fc000}, {0x462fe000}, - {0x46300000}, {0x46302000}, {0x46304000}, {0x46306000}, - {0x46308000}, {0x4630a000}, {0x4630c000}, {0x4630e000}, - {0x46310000}, {0x46312000}, {0x46314000}, {0x46316000}, - {0x46318000}, {0x4631a000}, {0x4631c000}, {0x4631e000}, - {0x46320000}, {0x46322000}, {0x46324000}, {0x46326000}, - {0x46328000}, {0x4632a000}, {0x4632c000}, {0x4632e000}, - {0x46330000}, {0x46332000}, {0x46334000}, {0x46336000}, - {0x46338000}, {0x4633a000}, {0x4633c000}, {0x4633e000}, - {0x46340000}, {0x46342000}, {0x46344000}, {0x46346000}, - {0x46348000}, {0x4634a000}, {0x4634c000}, {0x4634e000}, - {0x46350000}, {0x46352000}, {0x46354000}, {0x46356000}, - {0x46358000}, {0x4635a000}, {0x4635c000}, {0x4635e000}, - {0x46360000}, {0x46362000}, {0x46364000}, {0x46366000}, - {0x46368000}, {0x4636a000}, {0x4636c000}, {0x4636e000}, - {0x46370000}, {0x46372000}, {0x46374000}, {0x46376000}, - {0x46378000}, {0x4637a000}, {0x4637c000}, {0x4637e000}, - {0x46380000}, {0x46382000}, {0x46384000}, {0x46386000}, - {0x46388000}, {0x4638a000}, {0x4638c000}, {0x4638e000}, - {0x46390000}, {0x46392000}, {0x46394000}, {0x46396000}, - {0x46398000}, {0x4639a000}, {0x4639c000}, {0x4639e000}, - {0x463a0000}, {0x463a2000}, {0x463a4000}, {0x463a6000}, - {0x463a8000}, {0x463aa000}, {0x463ac000}, {0x463ae000}, - {0x463b0000}, {0x463b2000}, {0x463b4000}, {0x463b6000}, - {0x463b8000}, {0x463ba000}, {0x463bc000}, {0x463be000}, - {0x463c0000}, {0x463c2000}, {0x463c4000}, {0x463c6000}, - {0x463c8000}, {0x463ca000}, {0x463cc000}, {0x463ce000}, - {0x463d0000}, {0x463d2000}, {0x463d4000}, {0x463d6000}, - {0x463d8000}, {0x463da000}, {0x463dc000}, {0x463de000}, - {0x463e0000}, {0x463e2000}, {0x463e4000}, {0x463e6000}, - {0x463e8000}, {0x463ea000}, {0x463ec000}, {0x463ee000}, - {0x463f0000}, {0x463f2000}, {0x463f4000}, {0x463f6000}, - {0x463f8000}, {0x463fa000}, {0x463fc000}, {0x463fe000}, - {0x46400000}, {0x46402000}, {0x46404000}, {0x46406000}, - {0x46408000}, {0x4640a000}, {0x4640c000}, {0x4640e000}, - {0x46410000}, {0x46412000}, {0x46414000}, {0x46416000}, - {0x46418000}, {0x4641a000}, {0x4641c000}, {0x4641e000}, - {0x46420000}, {0x46422000}, {0x46424000}, {0x46426000}, - {0x46428000}, {0x4642a000}, {0x4642c000}, {0x4642e000}, - {0x46430000}, {0x46432000}, {0x46434000}, {0x46436000}, - {0x46438000}, {0x4643a000}, {0x4643c000}, {0x4643e000}, - {0x46440000}, {0x46442000}, {0x46444000}, {0x46446000}, - {0x46448000}, {0x4644a000}, {0x4644c000}, {0x4644e000}, - {0x46450000}, {0x46452000}, {0x46454000}, {0x46456000}, - {0x46458000}, {0x4645a000}, {0x4645c000}, {0x4645e000}, - {0x46460000}, {0x46462000}, {0x46464000}, {0x46466000}, - {0x46468000}, {0x4646a000}, {0x4646c000}, {0x4646e000}, - {0x46470000}, {0x46472000}, {0x46474000}, {0x46476000}, - {0x46478000}, {0x4647a000}, {0x4647c000}, {0x4647e000}, - {0x46480000}, {0x46482000}, {0x46484000}, {0x46486000}, - {0x46488000}, {0x4648a000}, {0x4648c000}, {0x4648e000}, - {0x46490000}, {0x46492000}, {0x46494000}, {0x46496000}, - {0x46498000}, {0x4649a000}, {0x4649c000}, {0x4649e000}, - {0x464a0000}, {0x464a2000}, {0x464a4000}, {0x464a6000}, - {0x464a8000}, {0x464aa000}, {0x464ac000}, {0x464ae000}, - {0x464b0000}, {0x464b2000}, {0x464b4000}, {0x464b6000}, - {0x464b8000}, {0x464ba000}, {0x464bc000}, {0x464be000}, - {0x464c0000}, {0x464c2000}, {0x464c4000}, {0x464c6000}, - {0x464c8000}, {0x464ca000}, {0x464cc000}, {0x464ce000}, - {0x464d0000}, {0x464d2000}, {0x464d4000}, {0x464d6000}, - {0x464d8000}, {0x464da000}, {0x464dc000}, {0x464de000}, - {0x464e0000}, {0x464e2000}, {0x464e4000}, {0x464e6000}, - {0x464e8000}, {0x464ea000}, {0x464ec000}, {0x464ee000}, - {0x464f0000}, {0x464f2000}, {0x464f4000}, {0x464f6000}, - {0x464f8000}, {0x464fa000}, {0x464fc000}, {0x464fe000}, - {0x46500000}, {0x46502000}, {0x46504000}, {0x46506000}, - {0x46508000}, {0x4650a000}, {0x4650c000}, {0x4650e000}, - {0x46510000}, {0x46512000}, {0x46514000}, {0x46516000}, - {0x46518000}, {0x4651a000}, {0x4651c000}, {0x4651e000}, - {0x46520000}, {0x46522000}, {0x46524000}, {0x46526000}, - {0x46528000}, {0x4652a000}, {0x4652c000}, {0x4652e000}, - {0x46530000}, {0x46532000}, {0x46534000}, {0x46536000}, - {0x46538000}, {0x4653a000}, {0x4653c000}, {0x4653e000}, - {0x46540000}, {0x46542000}, {0x46544000}, {0x46546000}, - {0x46548000}, {0x4654a000}, {0x4654c000}, {0x4654e000}, - {0x46550000}, {0x46552000}, {0x46554000}, {0x46556000}, - {0x46558000}, {0x4655a000}, {0x4655c000}, {0x4655e000}, - {0x46560000}, {0x46562000}, {0x46564000}, {0x46566000}, - {0x46568000}, {0x4656a000}, {0x4656c000}, {0x4656e000}, - {0x46570000}, {0x46572000}, {0x46574000}, {0x46576000}, - {0x46578000}, {0x4657a000}, {0x4657c000}, {0x4657e000}, - {0x46580000}, {0x46582000}, {0x46584000}, {0x46586000}, - {0x46588000}, {0x4658a000}, {0x4658c000}, {0x4658e000}, - {0x46590000}, {0x46592000}, {0x46594000}, {0x46596000}, - {0x46598000}, {0x4659a000}, {0x4659c000}, {0x4659e000}, - {0x465a0000}, {0x465a2000}, {0x465a4000}, {0x465a6000}, - {0x465a8000}, {0x465aa000}, {0x465ac000}, {0x465ae000}, - {0x465b0000}, {0x465b2000}, {0x465b4000}, {0x465b6000}, - {0x465b8000}, {0x465ba000}, {0x465bc000}, {0x465be000}, - {0x465c0000}, {0x465c2000}, {0x465c4000}, {0x465c6000}, - {0x465c8000}, {0x465ca000}, {0x465cc000}, {0x465ce000}, - {0x465d0000}, {0x465d2000}, {0x465d4000}, {0x465d6000}, - {0x465d8000}, {0x465da000}, {0x465dc000}, {0x465de000}, - {0x465e0000}, {0x465e2000}, {0x465e4000}, {0x465e6000}, - {0x465e8000}, {0x465ea000}, {0x465ec000}, {0x465ee000}, - {0x465f0000}, {0x465f2000}, {0x465f4000}, {0x465f6000}, - {0x465f8000}, {0x465fa000}, {0x465fc000}, {0x465fe000}, - {0x46600000}, {0x46602000}, {0x46604000}, {0x46606000}, - {0x46608000}, {0x4660a000}, {0x4660c000}, {0x4660e000}, - {0x46610000}, {0x46612000}, {0x46614000}, {0x46616000}, - {0x46618000}, {0x4661a000}, {0x4661c000}, {0x4661e000}, - {0x46620000}, {0x46622000}, {0x46624000}, {0x46626000}, - {0x46628000}, {0x4662a000}, {0x4662c000}, {0x4662e000}, - {0x46630000}, {0x46632000}, {0x46634000}, {0x46636000}, - {0x46638000}, {0x4663a000}, {0x4663c000}, {0x4663e000}, - {0x46640000}, {0x46642000}, {0x46644000}, {0x46646000}, - {0x46648000}, {0x4664a000}, {0x4664c000}, {0x4664e000}, - {0x46650000}, {0x46652000}, {0x46654000}, {0x46656000}, - {0x46658000}, {0x4665a000}, {0x4665c000}, {0x4665e000}, - {0x46660000}, {0x46662000}, {0x46664000}, {0x46666000}, - {0x46668000}, {0x4666a000}, {0x4666c000}, {0x4666e000}, - {0x46670000}, {0x46672000}, {0x46674000}, {0x46676000}, - {0x46678000}, {0x4667a000}, {0x4667c000}, {0x4667e000}, - {0x46680000}, {0x46682000}, {0x46684000}, {0x46686000}, - {0x46688000}, {0x4668a000}, {0x4668c000}, {0x4668e000}, - {0x46690000}, {0x46692000}, {0x46694000}, {0x46696000}, - {0x46698000}, {0x4669a000}, {0x4669c000}, {0x4669e000}, - {0x466a0000}, {0x466a2000}, {0x466a4000}, {0x466a6000}, - {0x466a8000}, {0x466aa000}, {0x466ac000}, {0x466ae000}, - {0x466b0000}, {0x466b2000}, {0x466b4000}, {0x466b6000}, - {0x466b8000}, {0x466ba000}, {0x466bc000}, {0x466be000}, - {0x466c0000}, {0x466c2000}, {0x466c4000}, {0x466c6000}, - {0x466c8000}, {0x466ca000}, {0x466cc000}, {0x466ce000}, - {0x466d0000}, {0x466d2000}, {0x466d4000}, {0x466d6000}, - {0x466d8000}, {0x466da000}, {0x466dc000}, {0x466de000}, - {0x466e0000}, {0x466e2000}, {0x466e4000}, {0x466e6000}, - {0x466e8000}, {0x466ea000}, {0x466ec000}, {0x466ee000}, - {0x466f0000}, {0x466f2000}, {0x466f4000}, {0x466f6000}, - {0x466f8000}, {0x466fa000}, {0x466fc000}, {0x466fe000}, - {0x46700000}, {0x46702000}, {0x46704000}, {0x46706000}, - {0x46708000}, {0x4670a000}, {0x4670c000}, {0x4670e000}, - {0x46710000}, {0x46712000}, {0x46714000}, {0x46716000}, - {0x46718000}, {0x4671a000}, {0x4671c000}, {0x4671e000}, - {0x46720000}, {0x46722000}, {0x46724000}, {0x46726000}, - {0x46728000}, {0x4672a000}, {0x4672c000}, {0x4672e000}, - {0x46730000}, {0x46732000}, {0x46734000}, {0x46736000}, - {0x46738000}, {0x4673a000}, {0x4673c000}, {0x4673e000}, - {0x46740000}, {0x46742000}, {0x46744000}, {0x46746000}, - {0x46748000}, {0x4674a000}, {0x4674c000}, {0x4674e000}, - {0x46750000}, {0x46752000}, {0x46754000}, {0x46756000}, - {0x46758000}, {0x4675a000}, {0x4675c000}, {0x4675e000}, - {0x46760000}, {0x46762000}, {0x46764000}, {0x46766000}, - {0x46768000}, {0x4676a000}, {0x4676c000}, {0x4676e000}, - {0x46770000}, {0x46772000}, {0x46774000}, {0x46776000}, - {0x46778000}, {0x4677a000}, {0x4677c000}, {0x4677e000}, - {0x46780000}, {0x46782000}, {0x46784000}, {0x46786000}, - {0x46788000}, {0x4678a000}, {0x4678c000}, {0x4678e000}, - {0x46790000}, {0x46792000}, {0x46794000}, {0x46796000}, - {0x46798000}, {0x4679a000}, {0x4679c000}, {0x4679e000}, - {0x467a0000}, {0x467a2000}, {0x467a4000}, {0x467a6000}, - {0x467a8000}, {0x467aa000}, {0x467ac000}, {0x467ae000}, - {0x467b0000}, {0x467b2000}, {0x467b4000}, {0x467b6000}, - {0x467b8000}, {0x467ba000}, {0x467bc000}, {0x467be000}, - {0x467c0000}, {0x467c2000}, {0x467c4000}, {0x467c6000}, - {0x467c8000}, {0x467ca000}, {0x467cc000}, {0x467ce000}, - {0x467d0000}, {0x467d2000}, {0x467d4000}, {0x467d6000}, - {0x467d8000}, {0x467da000}, {0x467dc000}, {0x467de000}, - {0x467e0000}, {0x467e2000}, {0x467e4000}, {0x467e6000}, - {0x467e8000}, {0x467ea000}, {0x467ec000}, {0x467ee000}, - {0x467f0000}, {0x467f2000}, {0x467f4000}, {0x467f6000}, - {0x467f8000}, {0x467fa000}, {0x467fc000}, {0x467fe000}, - {0x46800000}, {0x46802000}, {0x46804000}, {0x46806000}, - {0x46808000}, {0x4680a000}, {0x4680c000}, {0x4680e000}, - {0x46810000}, {0x46812000}, {0x46814000}, {0x46816000}, - {0x46818000}, {0x4681a000}, {0x4681c000}, {0x4681e000}, - {0x46820000}, {0x46822000}, {0x46824000}, {0x46826000}, - {0x46828000}, {0x4682a000}, {0x4682c000}, {0x4682e000}, - {0x46830000}, {0x46832000}, {0x46834000}, {0x46836000}, - {0x46838000}, {0x4683a000}, {0x4683c000}, {0x4683e000}, - {0x46840000}, {0x46842000}, {0x46844000}, {0x46846000}, - {0x46848000}, {0x4684a000}, {0x4684c000}, {0x4684e000}, - {0x46850000}, {0x46852000}, {0x46854000}, {0x46856000}, - {0x46858000}, {0x4685a000}, {0x4685c000}, {0x4685e000}, - {0x46860000}, {0x46862000}, {0x46864000}, {0x46866000}, - {0x46868000}, {0x4686a000}, {0x4686c000}, {0x4686e000}, - {0x46870000}, {0x46872000}, {0x46874000}, {0x46876000}, - {0x46878000}, {0x4687a000}, {0x4687c000}, {0x4687e000}, - {0x46880000}, {0x46882000}, {0x46884000}, {0x46886000}, - {0x46888000}, {0x4688a000}, {0x4688c000}, {0x4688e000}, - {0x46890000}, {0x46892000}, {0x46894000}, {0x46896000}, - {0x46898000}, {0x4689a000}, {0x4689c000}, {0x4689e000}, - {0x468a0000}, {0x468a2000}, {0x468a4000}, {0x468a6000}, - {0x468a8000}, {0x468aa000}, {0x468ac000}, {0x468ae000}, - {0x468b0000}, {0x468b2000}, {0x468b4000}, {0x468b6000}, - {0x468b8000}, {0x468ba000}, {0x468bc000}, {0x468be000}, - {0x468c0000}, {0x468c2000}, {0x468c4000}, {0x468c6000}, - {0x468c8000}, {0x468ca000}, {0x468cc000}, {0x468ce000}, - {0x468d0000}, {0x468d2000}, {0x468d4000}, {0x468d6000}, - {0x468d8000}, {0x468da000}, {0x468dc000}, {0x468de000}, - {0x468e0000}, {0x468e2000}, {0x468e4000}, {0x468e6000}, - {0x468e8000}, {0x468ea000}, {0x468ec000}, {0x468ee000}, - {0x468f0000}, {0x468f2000}, {0x468f4000}, {0x468f6000}, - {0x468f8000}, {0x468fa000}, {0x468fc000}, {0x468fe000}, - {0x46900000}, {0x46902000}, {0x46904000}, {0x46906000}, - {0x46908000}, {0x4690a000}, {0x4690c000}, {0x4690e000}, - {0x46910000}, {0x46912000}, {0x46914000}, {0x46916000}, - {0x46918000}, {0x4691a000}, {0x4691c000}, {0x4691e000}, - {0x46920000}, {0x46922000}, {0x46924000}, {0x46926000}, - {0x46928000}, {0x4692a000}, {0x4692c000}, {0x4692e000}, - {0x46930000}, {0x46932000}, {0x46934000}, {0x46936000}, - {0x46938000}, {0x4693a000}, {0x4693c000}, {0x4693e000}, - {0x46940000}, {0x46942000}, {0x46944000}, {0x46946000}, - {0x46948000}, {0x4694a000}, {0x4694c000}, {0x4694e000}, - {0x46950000}, {0x46952000}, {0x46954000}, {0x46956000}, - {0x46958000}, {0x4695a000}, {0x4695c000}, {0x4695e000}, - {0x46960000}, {0x46962000}, {0x46964000}, {0x46966000}, - {0x46968000}, {0x4696a000}, {0x4696c000}, {0x4696e000}, - {0x46970000}, {0x46972000}, {0x46974000}, {0x46976000}, - {0x46978000}, {0x4697a000}, {0x4697c000}, {0x4697e000}, - {0x46980000}, {0x46982000}, {0x46984000}, {0x46986000}, - {0x46988000}, {0x4698a000}, {0x4698c000}, {0x4698e000}, - {0x46990000}, {0x46992000}, {0x46994000}, {0x46996000}, - {0x46998000}, {0x4699a000}, {0x4699c000}, {0x4699e000}, - {0x469a0000}, {0x469a2000}, {0x469a4000}, {0x469a6000}, - {0x469a8000}, {0x469aa000}, {0x469ac000}, {0x469ae000}, - {0x469b0000}, {0x469b2000}, {0x469b4000}, {0x469b6000}, - {0x469b8000}, {0x469ba000}, {0x469bc000}, {0x469be000}, - {0x469c0000}, {0x469c2000}, {0x469c4000}, {0x469c6000}, - {0x469c8000}, {0x469ca000}, {0x469cc000}, {0x469ce000}, - {0x469d0000}, {0x469d2000}, {0x469d4000}, {0x469d6000}, - {0x469d8000}, {0x469da000}, {0x469dc000}, {0x469de000}, - {0x469e0000}, {0x469e2000}, {0x469e4000}, {0x469e6000}, - {0x469e8000}, {0x469ea000}, {0x469ec000}, {0x469ee000}, - {0x469f0000}, {0x469f2000}, {0x469f4000}, {0x469f6000}, - {0x469f8000}, {0x469fa000}, {0x469fc000}, {0x469fe000}, - {0x46a00000}, {0x46a02000}, {0x46a04000}, {0x46a06000}, - {0x46a08000}, {0x46a0a000}, {0x46a0c000}, {0x46a0e000}, - {0x46a10000}, {0x46a12000}, {0x46a14000}, {0x46a16000}, - {0x46a18000}, {0x46a1a000}, {0x46a1c000}, {0x46a1e000}, - {0x46a20000}, {0x46a22000}, {0x46a24000}, {0x46a26000}, - {0x46a28000}, {0x46a2a000}, {0x46a2c000}, {0x46a2e000}, - {0x46a30000}, {0x46a32000}, {0x46a34000}, {0x46a36000}, - {0x46a38000}, {0x46a3a000}, {0x46a3c000}, {0x46a3e000}, - {0x46a40000}, {0x46a42000}, {0x46a44000}, {0x46a46000}, - {0x46a48000}, {0x46a4a000}, {0x46a4c000}, {0x46a4e000}, - {0x46a50000}, {0x46a52000}, {0x46a54000}, {0x46a56000}, - {0x46a58000}, {0x46a5a000}, {0x46a5c000}, {0x46a5e000}, - {0x46a60000}, {0x46a62000}, {0x46a64000}, {0x46a66000}, - {0x46a68000}, {0x46a6a000}, {0x46a6c000}, {0x46a6e000}, - {0x46a70000}, {0x46a72000}, {0x46a74000}, {0x46a76000}, - {0x46a78000}, {0x46a7a000}, {0x46a7c000}, {0x46a7e000}, - {0x46a80000}, {0x46a82000}, {0x46a84000}, {0x46a86000}, - {0x46a88000}, {0x46a8a000}, {0x46a8c000}, {0x46a8e000}, - {0x46a90000}, {0x46a92000}, {0x46a94000}, {0x46a96000}, - {0x46a98000}, {0x46a9a000}, {0x46a9c000}, {0x46a9e000}, - {0x46aa0000}, {0x46aa2000}, {0x46aa4000}, {0x46aa6000}, - {0x46aa8000}, {0x46aaa000}, {0x46aac000}, {0x46aae000}, - {0x46ab0000}, {0x46ab2000}, {0x46ab4000}, {0x46ab6000}, - {0x46ab8000}, {0x46aba000}, {0x46abc000}, {0x46abe000}, - {0x46ac0000}, {0x46ac2000}, {0x46ac4000}, {0x46ac6000}, - {0x46ac8000}, {0x46aca000}, {0x46acc000}, {0x46ace000}, - {0x46ad0000}, {0x46ad2000}, {0x46ad4000}, {0x46ad6000}, - {0x46ad8000}, {0x46ada000}, {0x46adc000}, {0x46ade000}, - {0x46ae0000}, {0x46ae2000}, {0x46ae4000}, {0x46ae6000}, - {0x46ae8000}, {0x46aea000}, {0x46aec000}, {0x46aee000}, - {0x46af0000}, {0x46af2000}, {0x46af4000}, {0x46af6000}, - {0x46af8000}, {0x46afa000}, {0x46afc000}, {0x46afe000}, - {0x46b00000}, {0x46b02000}, {0x46b04000}, {0x46b06000}, - {0x46b08000}, {0x46b0a000}, {0x46b0c000}, {0x46b0e000}, - {0x46b10000}, {0x46b12000}, {0x46b14000}, {0x46b16000}, - {0x46b18000}, {0x46b1a000}, {0x46b1c000}, {0x46b1e000}, - {0x46b20000}, {0x46b22000}, {0x46b24000}, {0x46b26000}, - {0x46b28000}, {0x46b2a000}, {0x46b2c000}, {0x46b2e000}, - {0x46b30000}, {0x46b32000}, {0x46b34000}, {0x46b36000}, - {0x46b38000}, {0x46b3a000}, {0x46b3c000}, {0x46b3e000}, - {0x46b40000}, {0x46b42000}, {0x46b44000}, {0x46b46000}, - {0x46b48000}, {0x46b4a000}, {0x46b4c000}, {0x46b4e000}, - {0x46b50000}, {0x46b52000}, {0x46b54000}, {0x46b56000}, - {0x46b58000}, {0x46b5a000}, {0x46b5c000}, {0x46b5e000}, - {0x46b60000}, {0x46b62000}, {0x46b64000}, {0x46b66000}, - {0x46b68000}, {0x46b6a000}, {0x46b6c000}, {0x46b6e000}, - {0x46b70000}, {0x46b72000}, {0x46b74000}, {0x46b76000}, - {0x46b78000}, {0x46b7a000}, {0x46b7c000}, {0x46b7e000}, - {0x46b80000}, {0x46b82000}, {0x46b84000}, {0x46b86000}, - {0x46b88000}, {0x46b8a000}, {0x46b8c000}, {0x46b8e000}, - {0x46b90000}, {0x46b92000}, {0x46b94000}, {0x46b96000}, - {0x46b98000}, {0x46b9a000}, {0x46b9c000}, {0x46b9e000}, - {0x46ba0000}, {0x46ba2000}, {0x46ba4000}, {0x46ba6000}, - {0x46ba8000}, {0x46baa000}, {0x46bac000}, {0x46bae000}, - {0x46bb0000}, {0x46bb2000}, {0x46bb4000}, {0x46bb6000}, - {0x46bb8000}, {0x46bba000}, {0x46bbc000}, {0x46bbe000}, - {0x46bc0000}, {0x46bc2000}, {0x46bc4000}, {0x46bc6000}, - {0x46bc8000}, {0x46bca000}, {0x46bcc000}, {0x46bce000}, - {0x46bd0000}, {0x46bd2000}, {0x46bd4000}, {0x46bd6000}, - {0x46bd8000}, {0x46bda000}, {0x46bdc000}, {0x46bde000}, - {0x46be0000}, {0x46be2000}, {0x46be4000}, {0x46be6000}, - {0x46be8000}, {0x46bea000}, {0x46bec000}, {0x46bee000}, - {0x46bf0000}, {0x46bf2000}, {0x46bf4000}, {0x46bf6000}, - {0x46bf8000}, {0x46bfa000}, {0x46bfc000}, {0x46bfe000}, - {0x46c00000}, {0x46c02000}, {0x46c04000}, {0x46c06000}, - {0x46c08000}, {0x46c0a000}, {0x46c0c000}, {0x46c0e000}, - {0x46c10000}, {0x46c12000}, {0x46c14000}, {0x46c16000}, - {0x46c18000}, {0x46c1a000}, {0x46c1c000}, {0x46c1e000}, - {0x46c20000}, {0x46c22000}, {0x46c24000}, {0x46c26000}, - {0x46c28000}, {0x46c2a000}, {0x46c2c000}, {0x46c2e000}, - {0x46c30000}, {0x46c32000}, {0x46c34000}, {0x46c36000}, - {0x46c38000}, {0x46c3a000}, {0x46c3c000}, {0x46c3e000}, - {0x46c40000}, {0x46c42000}, {0x46c44000}, {0x46c46000}, - {0x46c48000}, {0x46c4a000}, {0x46c4c000}, {0x46c4e000}, - {0x46c50000}, {0x46c52000}, {0x46c54000}, {0x46c56000}, - {0x46c58000}, {0x46c5a000}, {0x46c5c000}, {0x46c5e000}, - {0x46c60000}, {0x46c62000}, {0x46c64000}, {0x46c66000}, - {0x46c68000}, {0x46c6a000}, {0x46c6c000}, {0x46c6e000}, - {0x46c70000}, {0x46c72000}, {0x46c74000}, {0x46c76000}, - {0x46c78000}, {0x46c7a000}, {0x46c7c000}, {0x46c7e000}, - {0x46c80000}, {0x46c82000}, {0x46c84000}, {0x46c86000}, - {0x46c88000}, {0x46c8a000}, {0x46c8c000}, {0x46c8e000}, - {0x46c90000}, {0x46c92000}, {0x46c94000}, {0x46c96000}, - {0x46c98000}, {0x46c9a000}, {0x46c9c000}, {0x46c9e000}, - {0x46ca0000}, {0x46ca2000}, {0x46ca4000}, {0x46ca6000}, - {0x46ca8000}, {0x46caa000}, {0x46cac000}, {0x46cae000}, - {0x46cb0000}, {0x46cb2000}, {0x46cb4000}, {0x46cb6000}, - {0x46cb8000}, {0x46cba000}, {0x46cbc000}, {0x46cbe000}, - {0x46cc0000}, {0x46cc2000}, {0x46cc4000}, {0x46cc6000}, - {0x46cc8000}, {0x46cca000}, {0x46ccc000}, {0x46cce000}, - {0x46cd0000}, {0x46cd2000}, {0x46cd4000}, {0x46cd6000}, - {0x46cd8000}, {0x46cda000}, {0x46cdc000}, {0x46cde000}, - {0x46ce0000}, {0x46ce2000}, {0x46ce4000}, {0x46ce6000}, - {0x46ce8000}, {0x46cea000}, {0x46cec000}, {0x46cee000}, - {0x46cf0000}, {0x46cf2000}, {0x46cf4000}, {0x46cf6000}, - {0x46cf8000}, {0x46cfa000}, {0x46cfc000}, {0x46cfe000}, - {0x46d00000}, {0x46d02000}, {0x46d04000}, {0x46d06000}, - {0x46d08000}, {0x46d0a000}, {0x46d0c000}, {0x46d0e000}, - {0x46d10000}, {0x46d12000}, {0x46d14000}, {0x46d16000}, - {0x46d18000}, {0x46d1a000}, {0x46d1c000}, {0x46d1e000}, - {0x46d20000}, {0x46d22000}, {0x46d24000}, {0x46d26000}, - {0x46d28000}, {0x46d2a000}, {0x46d2c000}, {0x46d2e000}, - {0x46d30000}, {0x46d32000}, {0x46d34000}, {0x46d36000}, - {0x46d38000}, {0x46d3a000}, {0x46d3c000}, {0x46d3e000}, - {0x46d40000}, {0x46d42000}, {0x46d44000}, {0x46d46000}, - {0x46d48000}, {0x46d4a000}, {0x46d4c000}, {0x46d4e000}, - {0x46d50000}, {0x46d52000}, {0x46d54000}, {0x46d56000}, - {0x46d58000}, {0x46d5a000}, {0x46d5c000}, {0x46d5e000}, - {0x46d60000}, {0x46d62000}, {0x46d64000}, {0x46d66000}, - {0x46d68000}, {0x46d6a000}, {0x46d6c000}, {0x46d6e000}, - {0x46d70000}, {0x46d72000}, {0x46d74000}, {0x46d76000}, - {0x46d78000}, {0x46d7a000}, {0x46d7c000}, {0x46d7e000}, - {0x46d80000}, {0x46d82000}, {0x46d84000}, {0x46d86000}, - {0x46d88000}, {0x46d8a000}, {0x46d8c000}, {0x46d8e000}, - {0x46d90000}, {0x46d92000}, {0x46d94000}, {0x46d96000}, - {0x46d98000}, {0x46d9a000}, {0x46d9c000}, {0x46d9e000}, - {0x46da0000}, {0x46da2000}, {0x46da4000}, {0x46da6000}, - {0x46da8000}, {0x46daa000}, {0x46dac000}, {0x46dae000}, - {0x46db0000}, {0x46db2000}, {0x46db4000}, {0x46db6000}, - {0x46db8000}, {0x46dba000}, {0x46dbc000}, {0x46dbe000}, - {0x46dc0000}, {0x46dc2000}, {0x46dc4000}, {0x46dc6000}, - {0x46dc8000}, {0x46dca000}, {0x46dcc000}, {0x46dce000}, - {0x46dd0000}, {0x46dd2000}, {0x46dd4000}, {0x46dd6000}, - {0x46dd8000}, {0x46dda000}, {0x46ddc000}, {0x46dde000}, - {0x46de0000}, {0x46de2000}, {0x46de4000}, {0x46de6000}, - {0x46de8000}, {0x46dea000}, {0x46dec000}, {0x46dee000}, - {0x46df0000}, {0x46df2000}, {0x46df4000}, {0x46df6000}, - {0x46df8000}, {0x46dfa000}, {0x46dfc000}, {0x46dfe000}, - {0x46e00000}, {0x46e02000}, {0x46e04000}, {0x46e06000}, - {0x46e08000}, {0x46e0a000}, {0x46e0c000}, {0x46e0e000}, - {0x46e10000}, {0x46e12000}, {0x46e14000}, {0x46e16000}, - {0x46e18000}, {0x46e1a000}, {0x46e1c000}, {0x46e1e000}, - {0x46e20000}, {0x46e22000}, {0x46e24000}, {0x46e26000}, - {0x46e28000}, {0x46e2a000}, {0x46e2c000}, {0x46e2e000}, - {0x46e30000}, {0x46e32000}, {0x46e34000}, {0x46e36000}, - {0x46e38000}, {0x46e3a000}, {0x46e3c000}, {0x46e3e000}, - {0x46e40000}, {0x46e42000}, {0x46e44000}, {0x46e46000}, - {0x46e48000}, {0x46e4a000}, {0x46e4c000}, {0x46e4e000}, - {0x46e50000}, {0x46e52000}, {0x46e54000}, {0x46e56000}, - {0x46e58000}, {0x46e5a000}, {0x46e5c000}, {0x46e5e000}, - {0x46e60000}, {0x46e62000}, {0x46e64000}, {0x46e66000}, - {0x46e68000}, {0x46e6a000}, {0x46e6c000}, {0x46e6e000}, - {0x46e70000}, {0x46e72000}, {0x46e74000}, {0x46e76000}, - {0x46e78000}, {0x46e7a000}, {0x46e7c000}, {0x46e7e000}, - {0x46e80000}, {0x46e82000}, {0x46e84000}, {0x46e86000}, - {0x46e88000}, {0x46e8a000}, {0x46e8c000}, {0x46e8e000}, - {0x46e90000}, {0x46e92000}, {0x46e94000}, {0x46e96000}, - {0x46e98000}, {0x46e9a000}, {0x46e9c000}, {0x46e9e000}, - {0x46ea0000}, {0x46ea2000}, {0x46ea4000}, {0x46ea6000}, - {0x46ea8000}, {0x46eaa000}, {0x46eac000}, {0x46eae000}, - {0x46eb0000}, {0x46eb2000}, {0x46eb4000}, {0x46eb6000}, - {0x46eb8000}, {0x46eba000}, {0x46ebc000}, {0x46ebe000}, - {0x46ec0000}, {0x46ec2000}, {0x46ec4000}, {0x46ec6000}, - {0x46ec8000}, {0x46eca000}, {0x46ecc000}, {0x46ece000}, - {0x46ed0000}, {0x46ed2000}, {0x46ed4000}, {0x46ed6000}, - {0x46ed8000}, {0x46eda000}, {0x46edc000}, {0x46ede000}, - {0x46ee0000}, {0x46ee2000}, {0x46ee4000}, {0x46ee6000}, - {0x46ee8000}, {0x46eea000}, {0x46eec000}, {0x46eee000}, - {0x46ef0000}, {0x46ef2000}, {0x46ef4000}, {0x46ef6000}, - {0x46ef8000}, {0x46efa000}, {0x46efc000}, {0x46efe000}, - {0x46f00000}, {0x46f02000}, {0x46f04000}, {0x46f06000}, - {0x46f08000}, {0x46f0a000}, {0x46f0c000}, {0x46f0e000}, - {0x46f10000}, {0x46f12000}, {0x46f14000}, {0x46f16000}, - {0x46f18000}, {0x46f1a000}, {0x46f1c000}, {0x46f1e000}, - {0x46f20000}, {0x46f22000}, {0x46f24000}, {0x46f26000}, - {0x46f28000}, {0x46f2a000}, {0x46f2c000}, {0x46f2e000}, - {0x46f30000}, {0x46f32000}, {0x46f34000}, {0x46f36000}, - {0x46f38000}, {0x46f3a000}, {0x46f3c000}, {0x46f3e000}, - {0x46f40000}, {0x46f42000}, {0x46f44000}, {0x46f46000}, - {0x46f48000}, {0x46f4a000}, {0x46f4c000}, {0x46f4e000}, - {0x46f50000}, {0x46f52000}, {0x46f54000}, {0x46f56000}, - {0x46f58000}, {0x46f5a000}, {0x46f5c000}, {0x46f5e000}, - {0x46f60000}, {0x46f62000}, {0x46f64000}, {0x46f66000}, - {0x46f68000}, {0x46f6a000}, {0x46f6c000}, {0x46f6e000}, - {0x46f70000}, {0x46f72000}, {0x46f74000}, {0x46f76000}, - {0x46f78000}, {0x46f7a000}, {0x46f7c000}, {0x46f7e000}, - {0x46f80000}, {0x46f82000}, {0x46f84000}, {0x46f86000}, - {0x46f88000}, {0x46f8a000}, {0x46f8c000}, {0x46f8e000}, - {0x46f90000}, {0x46f92000}, {0x46f94000}, {0x46f96000}, - {0x46f98000}, {0x46f9a000}, {0x46f9c000}, {0x46f9e000}, - {0x46fa0000}, {0x46fa2000}, {0x46fa4000}, {0x46fa6000}, - {0x46fa8000}, {0x46faa000}, {0x46fac000}, {0x46fae000}, - {0x46fb0000}, {0x46fb2000}, {0x46fb4000}, {0x46fb6000}, - {0x46fb8000}, {0x46fba000}, {0x46fbc000}, {0x46fbe000}, - {0x46fc0000}, {0x46fc2000}, {0x46fc4000}, {0x46fc6000}, - {0x46fc8000}, {0x46fca000}, {0x46fcc000}, {0x46fce000}, - {0x46fd0000}, {0x46fd2000}, {0x46fd4000}, {0x46fd6000}, - {0x46fd8000}, {0x46fda000}, {0x46fdc000}, {0x46fde000}, - {0x46fe0000}, {0x46fe2000}, {0x46fe4000}, {0x46fe6000}, - {0x46fe8000}, {0x46fea000}, {0x46fec000}, {0x46fee000}, - {0x46ff0000}, {0x46ff2000}, {0x46ff4000}, {0x46ff6000}, - {0x46ff8000}, {0x46ffa000}, {0x46ffc000}, {0x46ffe000}, - {0x47000000}, {0x47002000}, {0x47004000}, {0x47006000}, - {0x47008000}, {0x4700a000}, {0x4700c000}, {0x4700e000}, - {0x47010000}, {0x47012000}, {0x47014000}, {0x47016000}, - {0x47018000}, {0x4701a000}, {0x4701c000}, {0x4701e000}, - {0x47020000}, {0x47022000}, {0x47024000}, {0x47026000}, - {0x47028000}, {0x4702a000}, {0x4702c000}, {0x4702e000}, - {0x47030000}, {0x47032000}, {0x47034000}, {0x47036000}, - {0x47038000}, {0x4703a000}, {0x4703c000}, {0x4703e000}, - {0x47040000}, {0x47042000}, {0x47044000}, {0x47046000}, - {0x47048000}, {0x4704a000}, {0x4704c000}, {0x4704e000}, - {0x47050000}, {0x47052000}, {0x47054000}, {0x47056000}, - {0x47058000}, {0x4705a000}, {0x4705c000}, {0x4705e000}, - {0x47060000}, {0x47062000}, {0x47064000}, {0x47066000}, - {0x47068000}, {0x4706a000}, {0x4706c000}, {0x4706e000}, - {0x47070000}, {0x47072000}, {0x47074000}, {0x47076000}, - {0x47078000}, {0x4707a000}, {0x4707c000}, {0x4707e000}, - {0x47080000}, {0x47082000}, {0x47084000}, {0x47086000}, - {0x47088000}, {0x4708a000}, {0x4708c000}, {0x4708e000}, - {0x47090000}, {0x47092000}, {0x47094000}, {0x47096000}, - {0x47098000}, {0x4709a000}, {0x4709c000}, {0x4709e000}, - {0x470a0000}, {0x470a2000}, {0x470a4000}, {0x470a6000}, - {0x470a8000}, {0x470aa000}, {0x470ac000}, {0x470ae000}, - {0x470b0000}, {0x470b2000}, {0x470b4000}, {0x470b6000}, - {0x470b8000}, {0x470ba000}, {0x470bc000}, {0x470be000}, - {0x470c0000}, {0x470c2000}, {0x470c4000}, {0x470c6000}, - {0x470c8000}, {0x470ca000}, {0x470cc000}, {0x470ce000}, - {0x470d0000}, {0x470d2000}, {0x470d4000}, {0x470d6000}, - {0x470d8000}, {0x470da000}, {0x470dc000}, {0x470de000}, - {0x470e0000}, {0x470e2000}, {0x470e4000}, {0x470e6000}, - {0x470e8000}, {0x470ea000}, {0x470ec000}, {0x470ee000}, - {0x470f0000}, {0x470f2000}, {0x470f4000}, {0x470f6000}, - {0x470f8000}, {0x470fa000}, {0x470fc000}, {0x470fe000}, - {0x47100000}, {0x47102000}, {0x47104000}, {0x47106000}, - {0x47108000}, {0x4710a000}, {0x4710c000}, {0x4710e000}, - {0x47110000}, {0x47112000}, {0x47114000}, {0x47116000}, - {0x47118000}, {0x4711a000}, {0x4711c000}, {0x4711e000}, - {0x47120000}, {0x47122000}, {0x47124000}, {0x47126000}, - {0x47128000}, {0x4712a000}, {0x4712c000}, {0x4712e000}, - {0x47130000}, {0x47132000}, {0x47134000}, {0x47136000}, - {0x47138000}, {0x4713a000}, {0x4713c000}, {0x4713e000}, - {0x47140000}, {0x47142000}, {0x47144000}, {0x47146000}, - {0x47148000}, {0x4714a000}, {0x4714c000}, {0x4714e000}, - {0x47150000}, {0x47152000}, {0x47154000}, {0x47156000}, - {0x47158000}, {0x4715a000}, {0x4715c000}, {0x4715e000}, - {0x47160000}, {0x47162000}, {0x47164000}, {0x47166000}, - {0x47168000}, {0x4716a000}, {0x4716c000}, {0x4716e000}, - {0x47170000}, {0x47172000}, {0x47174000}, {0x47176000}, - {0x47178000}, {0x4717a000}, {0x4717c000}, {0x4717e000}, - {0x47180000}, {0x47182000}, {0x47184000}, {0x47186000}, - {0x47188000}, {0x4718a000}, {0x4718c000}, {0x4718e000}, - {0x47190000}, {0x47192000}, {0x47194000}, {0x47196000}, - {0x47198000}, {0x4719a000}, {0x4719c000}, {0x4719e000}, - {0x471a0000}, {0x471a2000}, {0x471a4000}, {0x471a6000}, - {0x471a8000}, {0x471aa000}, {0x471ac000}, {0x471ae000}, - {0x471b0000}, {0x471b2000}, {0x471b4000}, {0x471b6000}, - {0x471b8000}, {0x471ba000}, {0x471bc000}, {0x471be000}, - {0x471c0000}, {0x471c2000}, {0x471c4000}, {0x471c6000}, - {0x471c8000}, {0x471ca000}, {0x471cc000}, {0x471ce000}, - {0x471d0000}, {0x471d2000}, {0x471d4000}, {0x471d6000}, - {0x471d8000}, {0x471da000}, {0x471dc000}, {0x471de000}, - {0x471e0000}, {0x471e2000}, {0x471e4000}, {0x471e6000}, - {0x471e8000}, {0x471ea000}, {0x471ec000}, {0x471ee000}, - {0x471f0000}, {0x471f2000}, {0x471f4000}, {0x471f6000}, - {0x471f8000}, {0x471fa000}, {0x471fc000}, {0x471fe000}, - {0x47200000}, {0x47202000}, {0x47204000}, {0x47206000}, - {0x47208000}, {0x4720a000}, {0x4720c000}, {0x4720e000}, - {0x47210000}, {0x47212000}, {0x47214000}, {0x47216000}, - {0x47218000}, {0x4721a000}, {0x4721c000}, {0x4721e000}, - {0x47220000}, {0x47222000}, {0x47224000}, {0x47226000}, - {0x47228000}, {0x4722a000}, {0x4722c000}, {0x4722e000}, - {0x47230000}, {0x47232000}, {0x47234000}, {0x47236000}, - {0x47238000}, {0x4723a000}, {0x4723c000}, {0x4723e000}, - {0x47240000}, {0x47242000}, {0x47244000}, {0x47246000}, - {0x47248000}, {0x4724a000}, {0x4724c000}, {0x4724e000}, - {0x47250000}, {0x47252000}, {0x47254000}, {0x47256000}, - {0x47258000}, {0x4725a000}, {0x4725c000}, {0x4725e000}, - {0x47260000}, {0x47262000}, {0x47264000}, {0x47266000}, - {0x47268000}, {0x4726a000}, {0x4726c000}, {0x4726e000}, - {0x47270000}, {0x47272000}, {0x47274000}, {0x47276000}, - {0x47278000}, {0x4727a000}, {0x4727c000}, {0x4727e000}, - {0x47280000}, {0x47282000}, {0x47284000}, {0x47286000}, - {0x47288000}, {0x4728a000}, {0x4728c000}, {0x4728e000}, - {0x47290000}, {0x47292000}, {0x47294000}, {0x47296000}, - {0x47298000}, {0x4729a000}, {0x4729c000}, {0x4729e000}, - {0x472a0000}, {0x472a2000}, {0x472a4000}, {0x472a6000}, - {0x472a8000}, {0x472aa000}, {0x472ac000}, {0x472ae000}, - {0x472b0000}, {0x472b2000}, {0x472b4000}, {0x472b6000}, - {0x472b8000}, {0x472ba000}, {0x472bc000}, {0x472be000}, - {0x472c0000}, {0x472c2000}, {0x472c4000}, {0x472c6000}, - {0x472c8000}, {0x472ca000}, {0x472cc000}, {0x472ce000}, - {0x472d0000}, {0x472d2000}, {0x472d4000}, {0x472d6000}, - {0x472d8000}, {0x472da000}, {0x472dc000}, {0x472de000}, - {0x472e0000}, {0x472e2000}, {0x472e4000}, {0x472e6000}, - {0x472e8000}, {0x472ea000}, {0x472ec000}, {0x472ee000}, - {0x472f0000}, {0x472f2000}, {0x472f4000}, {0x472f6000}, - {0x472f8000}, {0x472fa000}, {0x472fc000}, {0x472fe000}, - {0x47300000}, {0x47302000}, {0x47304000}, {0x47306000}, - {0x47308000}, {0x4730a000}, {0x4730c000}, {0x4730e000}, - {0x47310000}, {0x47312000}, {0x47314000}, {0x47316000}, - {0x47318000}, {0x4731a000}, {0x4731c000}, {0x4731e000}, - {0x47320000}, {0x47322000}, {0x47324000}, {0x47326000}, - {0x47328000}, {0x4732a000}, {0x4732c000}, {0x4732e000}, - {0x47330000}, {0x47332000}, {0x47334000}, {0x47336000}, - {0x47338000}, {0x4733a000}, {0x4733c000}, {0x4733e000}, - {0x47340000}, {0x47342000}, {0x47344000}, {0x47346000}, - {0x47348000}, {0x4734a000}, {0x4734c000}, {0x4734e000}, - {0x47350000}, {0x47352000}, {0x47354000}, {0x47356000}, - {0x47358000}, {0x4735a000}, {0x4735c000}, {0x4735e000}, - {0x47360000}, {0x47362000}, {0x47364000}, {0x47366000}, - {0x47368000}, {0x4736a000}, {0x4736c000}, {0x4736e000}, - {0x47370000}, {0x47372000}, {0x47374000}, {0x47376000}, - {0x47378000}, {0x4737a000}, {0x4737c000}, {0x4737e000}, - {0x47380000}, {0x47382000}, {0x47384000}, {0x47386000}, - {0x47388000}, {0x4738a000}, {0x4738c000}, {0x4738e000}, - {0x47390000}, {0x47392000}, {0x47394000}, {0x47396000}, - {0x47398000}, {0x4739a000}, {0x4739c000}, {0x4739e000}, - {0x473a0000}, {0x473a2000}, {0x473a4000}, {0x473a6000}, - {0x473a8000}, {0x473aa000}, {0x473ac000}, {0x473ae000}, - {0x473b0000}, {0x473b2000}, {0x473b4000}, {0x473b6000}, - {0x473b8000}, {0x473ba000}, {0x473bc000}, {0x473be000}, - {0x473c0000}, {0x473c2000}, {0x473c4000}, {0x473c6000}, - {0x473c8000}, {0x473ca000}, {0x473cc000}, {0x473ce000}, - {0x473d0000}, {0x473d2000}, {0x473d4000}, {0x473d6000}, - {0x473d8000}, {0x473da000}, {0x473dc000}, {0x473de000}, - {0x473e0000}, {0x473e2000}, {0x473e4000}, {0x473e6000}, - {0x473e8000}, {0x473ea000}, {0x473ec000}, {0x473ee000}, - {0x473f0000}, {0x473f2000}, {0x473f4000}, {0x473f6000}, - {0x473f8000}, {0x473fa000}, {0x473fc000}, {0x473fe000}, - {0x47400000}, {0x47402000}, {0x47404000}, {0x47406000}, - {0x47408000}, {0x4740a000}, {0x4740c000}, {0x4740e000}, - {0x47410000}, {0x47412000}, {0x47414000}, {0x47416000}, - {0x47418000}, {0x4741a000}, {0x4741c000}, {0x4741e000}, - {0x47420000}, {0x47422000}, {0x47424000}, {0x47426000}, - {0x47428000}, {0x4742a000}, {0x4742c000}, {0x4742e000}, - {0x47430000}, {0x47432000}, {0x47434000}, {0x47436000}, - {0x47438000}, {0x4743a000}, {0x4743c000}, {0x4743e000}, - {0x47440000}, {0x47442000}, {0x47444000}, {0x47446000}, - {0x47448000}, {0x4744a000}, {0x4744c000}, {0x4744e000}, - {0x47450000}, {0x47452000}, {0x47454000}, {0x47456000}, - {0x47458000}, {0x4745a000}, {0x4745c000}, {0x4745e000}, - {0x47460000}, {0x47462000}, {0x47464000}, {0x47466000}, - {0x47468000}, {0x4746a000}, {0x4746c000}, {0x4746e000}, - {0x47470000}, {0x47472000}, {0x47474000}, {0x47476000}, - {0x47478000}, {0x4747a000}, {0x4747c000}, {0x4747e000}, - {0x47480000}, {0x47482000}, {0x47484000}, {0x47486000}, - {0x47488000}, {0x4748a000}, {0x4748c000}, {0x4748e000}, - {0x47490000}, {0x47492000}, {0x47494000}, {0x47496000}, - {0x47498000}, {0x4749a000}, {0x4749c000}, {0x4749e000}, - {0x474a0000}, {0x474a2000}, {0x474a4000}, {0x474a6000}, - {0x474a8000}, {0x474aa000}, {0x474ac000}, {0x474ae000}, - {0x474b0000}, {0x474b2000}, {0x474b4000}, {0x474b6000}, - {0x474b8000}, {0x474ba000}, {0x474bc000}, {0x474be000}, - {0x474c0000}, {0x474c2000}, {0x474c4000}, {0x474c6000}, - {0x474c8000}, {0x474ca000}, {0x474cc000}, {0x474ce000}, - {0x474d0000}, {0x474d2000}, {0x474d4000}, {0x474d6000}, - {0x474d8000}, {0x474da000}, {0x474dc000}, {0x474de000}, - {0x474e0000}, {0x474e2000}, {0x474e4000}, {0x474e6000}, - {0x474e8000}, {0x474ea000}, {0x474ec000}, {0x474ee000}, - {0x474f0000}, {0x474f2000}, {0x474f4000}, {0x474f6000}, - {0x474f8000}, {0x474fa000}, {0x474fc000}, {0x474fe000}, - {0x47500000}, {0x47502000}, {0x47504000}, {0x47506000}, - {0x47508000}, {0x4750a000}, {0x4750c000}, {0x4750e000}, - {0x47510000}, {0x47512000}, {0x47514000}, {0x47516000}, - {0x47518000}, {0x4751a000}, {0x4751c000}, {0x4751e000}, - {0x47520000}, {0x47522000}, {0x47524000}, {0x47526000}, - {0x47528000}, {0x4752a000}, {0x4752c000}, {0x4752e000}, - {0x47530000}, {0x47532000}, {0x47534000}, {0x47536000}, - {0x47538000}, {0x4753a000}, {0x4753c000}, {0x4753e000}, - {0x47540000}, {0x47542000}, {0x47544000}, {0x47546000}, - {0x47548000}, {0x4754a000}, {0x4754c000}, {0x4754e000}, - {0x47550000}, {0x47552000}, {0x47554000}, {0x47556000}, - {0x47558000}, {0x4755a000}, {0x4755c000}, {0x4755e000}, - {0x47560000}, {0x47562000}, {0x47564000}, {0x47566000}, - {0x47568000}, {0x4756a000}, {0x4756c000}, {0x4756e000}, - {0x47570000}, {0x47572000}, {0x47574000}, {0x47576000}, - {0x47578000}, {0x4757a000}, {0x4757c000}, {0x4757e000}, - {0x47580000}, {0x47582000}, {0x47584000}, {0x47586000}, - {0x47588000}, {0x4758a000}, {0x4758c000}, {0x4758e000}, - {0x47590000}, {0x47592000}, {0x47594000}, {0x47596000}, - {0x47598000}, {0x4759a000}, {0x4759c000}, {0x4759e000}, - {0x475a0000}, {0x475a2000}, {0x475a4000}, {0x475a6000}, - {0x475a8000}, {0x475aa000}, {0x475ac000}, {0x475ae000}, - {0x475b0000}, {0x475b2000}, {0x475b4000}, {0x475b6000}, - {0x475b8000}, {0x475ba000}, {0x475bc000}, {0x475be000}, - {0x475c0000}, {0x475c2000}, {0x475c4000}, {0x475c6000}, - {0x475c8000}, {0x475ca000}, {0x475cc000}, {0x475ce000}, - {0x475d0000}, {0x475d2000}, {0x475d4000}, {0x475d6000}, - {0x475d8000}, {0x475da000}, {0x475dc000}, {0x475de000}, - {0x475e0000}, {0x475e2000}, {0x475e4000}, {0x475e6000}, - {0x475e8000}, {0x475ea000}, {0x475ec000}, {0x475ee000}, - {0x475f0000}, {0x475f2000}, {0x475f4000}, {0x475f6000}, - {0x475f8000}, {0x475fa000}, {0x475fc000}, {0x475fe000}, - {0x47600000}, {0x47602000}, {0x47604000}, {0x47606000}, - {0x47608000}, {0x4760a000}, {0x4760c000}, {0x4760e000}, - {0x47610000}, {0x47612000}, {0x47614000}, {0x47616000}, - {0x47618000}, {0x4761a000}, {0x4761c000}, {0x4761e000}, - {0x47620000}, {0x47622000}, {0x47624000}, {0x47626000}, - {0x47628000}, {0x4762a000}, {0x4762c000}, {0x4762e000}, - {0x47630000}, {0x47632000}, {0x47634000}, {0x47636000}, - {0x47638000}, {0x4763a000}, {0x4763c000}, {0x4763e000}, - {0x47640000}, {0x47642000}, {0x47644000}, {0x47646000}, - {0x47648000}, {0x4764a000}, {0x4764c000}, {0x4764e000}, - {0x47650000}, {0x47652000}, {0x47654000}, {0x47656000}, - {0x47658000}, {0x4765a000}, {0x4765c000}, {0x4765e000}, - {0x47660000}, {0x47662000}, {0x47664000}, {0x47666000}, - {0x47668000}, {0x4766a000}, {0x4766c000}, {0x4766e000}, - {0x47670000}, {0x47672000}, {0x47674000}, {0x47676000}, - {0x47678000}, {0x4767a000}, {0x4767c000}, {0x4767e000}, - {0x47680000}, {0x47682000}, {0x47684000}, {0x47686000}, - {0x47688000}, {0x4768a000}, {0x4768c000}, {0x4768e000}, - {0x47690000}, {0x47692000}, {0x47694000}, {0x47696000}, - {0x47698000}, {0x4769a000}, {0x4769c000}, {0x4769e000}, - {0x476a0000}, {0x476a2000}, {0x476a4000}, {0x476a6000}, - {0x476a8000}, {0x476aa000}, {0x476ac000}, {0x476ae000}, - {0x476b0000}, {0x476b2000}, {0x476b4000}, {0x476b6000}, - {0x476b8000}, {0x476ba000}, {0x476bc000}, {0x476be000}, - {0x476c0000}, {0x476c2000}, {0x476c4000}, {0x476c6000}, - {0x476c8000}, {0x476ca000}, {0x476cc000}, {0x476ce000}, - {0x476d0000}, {0x476d2000}, {0x476d4000}, {0x476d6000}, - {0x476d8000}, {0x476da000}, {0x476dc000}, {0x476de000}, - {0x476e0000}, {0x476e2000}, {0x476e4000}, {0x476e6000}, - {0x476e8000}, {0x476ea000}, {0x476ec000}, {0x476ee000}, - {0x476f0000}, {0x476f2000}, {0x476f4000}, {0x476f6000}, - {0x476f8000}, {0x476fa000}, {0x476fc000}, {0x476fe000}, - {0x47700000}, {0x47702000}, {0x47704000}, {0x47706000}, - {0x47708000}, {0x4770a000}, {0x4770c000}, {0x4770e000}, - {0x47710000}, {0x47712000}, {0x47714000}, {0x47716000}, - {0x47718000}, {0x4771a000}, {0x4771c000}, {0x4771e000}, - {0x47720000}, {0x47722000}, {0x47724000}, {0x47726000}, - {0x47728000}, {0x4772a000}, {0x4772c000}, {0x4772e000}, - {0x47730000}, {0x47732000}, {0x47734000}, {0x47736000}, - {0x47738000}, {0x4773a000}, {0x4773c000}, {0x4773e000}, - {0x47740000}, {0x47742000}, {0x47744000}, {0x47746000}, - {0x47748000}, {0x4774a000}, {0x4774c000}, {0x4774e000}, - {0x47750000}, {0x47752000}, {0x47754000}, {0x47756000}, - {0x47758000}, {0x4775a000}, {0x4775c000}, {0x4775e000}, - {0x47760000}, {0x47762000}, {0x47764000}, {0x47766000}, - {0x47768000}, {0x4776a000}, {0x4776c000}, {0x4776e000}, - {0x47770000}, {0x47772000}, {0x47774000}, {0x47776000}, - {0x47778000}, {0x4777a000}, {0x4777c000}, {0x4777e000}, - {0x47780000}, {0x47782000}, {0x47784000}, {0x47786000}, - {0x47788000}, {0x4778a000}, {0x4778c000}, {0x4778e000}, - {0x47790000}, {0x47792000}, {0x47794000}, {0x47796000}, - {0x47798000}, {0x4779a000}, {0x4779c000}, {0x4779e000}, - {0x477a0000}, {0x477a2000}, {0x477a4000}, {0x477a6000}, - {0x477a8000}, {0x477aa000}, {0x477ac000}, {0x477ae000}, - {0x477b0000}, {0x477b2000}, {0x477b4000}, {0x477b6000}, - {0x477b8000}, {0x477ba000}, {0x477bc000}, {0x477be000}, - {0x477c0000}, {0x477c2000}, {0x477c4000}, {0x477c6000}, - {0x477c8000}, {0x477ca000}, {0x477cc000}, {0x477ce000}, - {0x477d0000}, {0x477d2000}, {0x477d4000}, {0x477d6000}, - {0x477d8000}, {0x477da000}, {0x477dc000}, {0x477de000}, - {0x477e0000}, {0x477e2000}, {0x477e4000}, {0x477e6000}, - {0x477e8000}, {0x477ea000}, {0x477ec000}, {0x477ee000}, - {0x477f0000}, {0x477f2000}, {0x477f4000}, {0x477f6000}, - {0x477f8000}, {0x477fa000}, {0x477fc000}, {0x477fe000}, - {0x7f800000}, {0x7f802000}, {0x7f804000}, {0x7f806000}, - {0x7f808000}, {0x7f80a000}, {0x7f80c000}, {0x7f80e000}, - {0x7f810000}, {0x7f812000}, {0x7f814000}, {0x7f816000}, - {0x7f818000}, {0x7f81a000}, {0x7f81c000}, {0x7f81e000}, - {0x7f820000}, {0x7f822000}, {0x7f824000}, {0x7f826000}, - {0x7f828000}, {0x7f82a000}, {0x7f82c000}, {0x7f82e000}, - {0x7f830000}, {0x7f832000}, {0x7f834000}, {0x7f836000}, - {0x7f838000}, {0x7f83a000}, {0x7f83c000}, {0x7f83e000}, - {0x7f840000}, {0x7f842000}, {0x7f844000}, {0x7f846000}, - {0x7f848000}, {0x7f84a000}, {0x7f84c000}, {0x7f84e000}, - {0x7f850000}, {0x7f852000}, {0x7f854000}, {0x7f856000}, - {0x7f858000}, {0x7f85a000}, {0x7f85c000}, {0x7f85e000}, - {0x7f860000}, {0x7f862000}, {0x7f864000}, {0x7f866000}, - {0x7f868000}, {0x7f86a000}, {0x7f86c000}, {0x7f86e000}, - {0x7f870000}, {0x7f872000}, {0x7f874000}, {0x7f876000}, - {0x7f878000}, {0x7f87a000}, {0x7f87c000}, {0x7f87e000}, - {0x7f880000}, {0x7f882000}, {0x7f884000}, {0x7f886000}, - {0x7f888000}, {0x7f88a000}, {0x7f88c000}, {0x7f88e000}, - {0x7f890000}, {0x7f892000}, {0x7f894000}, {0x7f896000}, - {0x7f898000}, {0x7f89a000}, {0x7f89c000}, {0x7f89e000}, - {0x7f8a0000}, {0x7f8a2000}, {0x7f8a4000}, {0x7f8a6000}, - {0x7f8a8000}, {0x7f8aa000}, {0x7f8ac000}, {0x7f8ae000}, - {0x7f8b0000}, {0x7f8b2000}, {0x7f8b4000}, {0x7f8b6000}, - {0x7f8b8000}, {0x7f8ba000}, {0x7f8bc000}, {0x7f8be000}, - {0x7f8c0000}, {0x7f8c2000}, {0x7f8c4000}, {0x7f8c6000}, - {0x7f8c8000}, {0x7f8ca000}, {0x7f8cc000}, {0x7f8ce000}, - {0x7f8d0000}, {0x7f8d2000}, {0x7f8d4000}, {0x7f8d6000}, - {0x7f8d8000}, {0x7f8da000}, {0x7f8dc000}, {0x7f8de000}, - {0x7f8e0000}, {0x7f8e2000}, {0x7f8e4000}, {0x7f8e6000}, - {0x7f8e8000}, {0x7f8ea000}, {0x7f8ec000}, {0x7f8ee000}, - {0x7f8f0000}, {0x7f8f2000}, {0x7f8f4000}, {0x7f8f6000}, - {0x7f8f8000}, {0x7f8fa000}, {0x7f8fc000}, {0x7f8fe000}, - {0x7f900000}, {0x7f902000}, {0x7f904000}, {0x7f906000}, - {0x7f908000}, {0x7f90a000}, {0x7f90c000}, {0x7f90e000}, - {0x7f910000}, {0x7f912000}, {0x7f914000}, {0x7f916000}, - {0x7f918000}, {0x7f91a000}, {0x7f91c000}, {0x7f91e000}, - {0x7f920000}, {0x7f922000}, {0x7f924000}, {0x7f926000}, - {0x7f928000}, {0x7f92a000}, {0x7f92c000}, {0x7f92e000}, - {0x7f930000}, {0x7f932000}, {0x7f934000}, {0x7f936000}, - {0x7f938000}, {0x7f93a000}, {0x7f93c000}, {0x7f93e000}, - {0x7f940000}, {0x7f942000}, {0x7f944000}, {0x7f946000}, - {0x7f948000}, {0x7f94a000}, {0x7f94c000}, {0x7f94e000}, - {0x7f950000}, {0x7f952000}, {0x7f954000}, {0x7f956000}, - {0x7f958000}, {0x7f95a000}, {0x7f95c000}, {0x7f95e000}, - {0x7f960000}, {0x7f962000}, {0x7f964000}, {0x7f966000}, - {0x7f968000}, {0x7f96a000}, {0x7f96c000}, {0x7f96e000}, - {0x7f970000}, {0x7f972000}, {0x7f974000}, {0x7f976000}, - {0x7f978000}, {0x7f97a000}, {0x7f97c000}, {0x7f97e000}, - {0x7f980000}, {0x7f982000}, {0x7f984000}, {0x7f986000}, - {0x7f988000}, {0x7f98a000}, {0x7f98c000}, {0x7f98e000}, - {0x7f990000}, {0x7f992000}, {0x7f994000}, {0x7f996000}, - {0x7f998000}, {0x7f99a000}, {0x7f99c000}, {0x7f99e000}, - {0x7f9a0000}, {0x7f9a2000}, {0x7f9a4000}, {0x7f9a6000}, - {0x7f9a8000}, {0x7f9aa000}, {0x7f9ac000}, {0x7f9ae000}, - {0x7f9b0000}, {0x7f9b2000}, {0x7f9b4000}, {0x7f9b6000}, - {0x7f9b8000}, {0x7f9ba000}, {0x7f9bc000}, {0x7f9be000}, - {0x7f9c0000}, {0x7f9c2000}, {0x7f9c4000}, {0x7f9c6000}, - {0x7f9c8000}, {0x7f9ca000}, {0x7f9cc000}, {0x7f9ce000}, - {0x7f9d0000}, {0x7f9d2000}, {0x7f9d4000}, {0x7f9d6000}, - {0x7f9d8000}, {0x7f9da000}, {0x7f9dc000}, {0x7f9de000}, - {0x7f9e0000}, {0x7f9e2000}, {0x7f9e4000}, {0x7f9e6000}, - {0x7f9e8000}, {0x7f9ea000}, {0x7f9ec000}, {0x7f9ee000}, - {0x7f9f0000}, {0x7f9f2000}, {0x7f9f4000}, {0x7f9f6000}, - {0x7f9f8000}, {0x7f9fa000}, {0x7f9fc000}, {0x7f9fe000}, - {0x7fa00000}, {0x7fa02000}, {0x7fa04000}, {0x7fa06000}, - {0x7fa08000}, {0x7fa0a000}, {0x7fa0c000}, {0x7fa0e000}, - {0x7fa10000}, {0x7fa12000}, {0x7fa14000}, {0x7fa16000}, - {0x7fa18000}, {0x7fa1a000}, {0x7fa1c000}, {0x7fa1e000}, - {0x7fa20000}, {0x7fa22000}, {0x7fa24000}, {0x7fa26000}, - {0x7fa28000}, {0x7fa2a000}, {0x7fa2c000}, {0x7fa2e000}, - {0x7fa30000}, {0x7fa32000}, {0x7fa34000}, {0x7fa36000}, - {0x7fa38000}, {0x7fa3a000}, {0x7fa3c000}, {0x7fa3e000}, - {0x7fa40000}, {0x7fa42000}, {0x7fa44000}, {0x7fa46000}, - {0x7fa48000}, {0x7fa4a000}, {0x7fa4c000}, {0x7fa4e000}, - {0x7fa50000}, {0x7fa52000}, {0x7fa54000}, {0x7fa56000}, - {0x7fa58000}, {0x7fa5a000}, {0x7fa5c000}, {0x7fa5e000}, - {0x7fa60000}, {0x7fa62000}, {0x7fa64000}, {0x7fa66000}, - {0x7fa68000}, {0x7fa6a000}, {0x7fa6c000}, {0x7fa6e000}, - {0x7fa70000}, {0x7fa72000}, {0x7fa74000}, {0x7fa76000}, - {0x7fa78000}, {0x7fa7a000}, {0x7fa7c000}, {0x7fa7e000}, - {0x7fa80000}, {0x7fa82000}, {0x7fa84000}, {0x7fa86000}, - {0x7fa88000}, {0x7fa8a000}, {0x7fa8c000}, {0x7fa8e000}, - {0x7fa90000}, {0x7fa92000}, {0x7fa94000}, {0x7fa96000}, - {0x7fa98000}, {0x7fa9a000}, {0x7fa9c000}, {0x7fa9e000}, - {0x7faa0000}, {0x7faa2000}, {0x7faa4000}, {0x7faa6000}, - {0x7faa8000}, {0x7faaa000}, {0x7faac000}, {0x7faae000}, - {0x7fab0000}, {0x7fab2000}, {0x7fab4000}, {0x7fab6000}, - {0x7fab8000}, {0x7faba000}, {0x7fabc000}, {0x7fabe000}, - {0x7fac0000}, {0x7fac2000}, {0x7fac4000}, {0x7fac6000}, - {0x7fac8000}, {0x7faca000}, {0x7facc000}, {0x7face000}, - {0x7fad0000}, {0x7fad2000}, {0x7fad4000}, {0x7fad6000}, - {0x7fad8000}, {0x7fada000}, {0x7fadc000}, {0x7fade000}, - {0x7fae0000}, {0x7fae2000}, {0x7fae4000}, {0x7fae6000}, - {0x7fae8000}, {0x7faea000}, {0x7faec000}, {0x7faee000}, - {0x7faf0000}, {0x7faf2000}, {0x7faf4000}, {0x7faf6000}, - {0x7faf8000}, {0x7fafa000}, {0x7fafc000}, {0x7fafe000}, - {0x7fb00000}, {0x7fb02000}, {0x7fb04000}, {0x7fb06000}, - {0x7fb08000}, {0x7fb0a000}, {0x7fb0c000}, {0x7fb0e000}, - {0x7fb10000}, {0x7fb12000}, {0x7fb14000}, {0x7fb16000}, - {0x7fb18000}, {0x7fb1a000}, {0x7fb1c000}, {0x7fb1e000}, - {0x7fb20000}, {0x7fb22000}, {0x7fb24000}, {0x7fb26000}, - {0x7fb28000}, {0x7fb2a000}, {0x7fb2c000}, {0x7fb2e000}, - {0x7fb30000}, {0x7fb32000}, {0x7fb34000}, {0x7fb36000}, - {0x7fb38000}, {0x7fb3a000}, {0x7fb3c000}, {0x7fb3e000}, - {0x7fb40000}, {0x7fb42000}, {0x7fb44000}, {0x7fb46000}, - {0x7fb48000}, {0x7fb4a000}, {0x7fb4c000}, {0x7fb4e000}, - {0x7fb50000}, {0x7fb52000}, {0x7fb54000}, {0x7fb56000}, - {0x7fb58000}, {0x7fb5a000}, {0x7fb5c000}, {0x7fb5e000}, - {0x7fb60000}, {0x7fb62000}, {0x7fb64000}, {0x7fb66000}, - {0x7fb68000}, {0x7fb6a000}, {0x7fb6c000}, {0x7fb6e000}, - {0x7fb70000}, {0x7fb72000}, {0x7fb74000}, {0x7fb76000}, - {0x7fb78000}, {0x7fb7a000}, {0x7fb7c000}, {0x7fb7e000}, - {0x7fb80000}, {0x7fb82000}, {0x7fb84000}, {0x7fb86000}, - {0x7fb88000}, {0x7fb8a000}, {0x7fb8c000}, {0x7fb8e000}, - {0x7fb90000}, {0x7fb92000}, {0x7fb94000}, {0x7fb96000}, - {0x7fb98000}, {0x7fb9a000}, {0x7fb9c000}, {0x7fb9e000}, - {0x7fba0000}, {0x7fba2000}, {0x7fba4000}, {0x7fba6000}, - {0x7fba8000}, {0x7fbaa000}, {0x7fbac000}, {0x7fbae000}, - {0x7fbb0000}, {0x7fbb2000}, {0x7fbb4000}, {0x7fbb6000}, - {0x7fbb8000}, {0x7fbba000}, {0x7fbbc000}, {0x7fbbe000}, - {0x7fbc0000}, {0x7fbc2000}, {0x7fbc4000}, {0x7fbc6000}, - {0x7fbc8000}, {0x7fbca000}, {0x7fbcc000}, {0x7fbce000}, - {0x7fbd0000}, {0x7fbd2000}, {0x7fbd4000}, {0x7fbd6000}, - {0x7fbd8000}, {0x7fbda000}, {0x7fbdc000}, {0x7fbde000}, - {0x7fbe0000}, {0x7fbe2000}, {0x7fbe4000}, {0x7fbe6000}, - {0x7fbe8000}, {0x7fbea000}, {0x7fbec000}, {0x7fbee000}, - {0x7fbf0000}, {0x7fbf2000}, {0x7fbf4000}, {0x7fbf6000}, - {0x7fbf8000}, {0x7fbfa000}, {0x7fbfc000}, {0x7fbfe000}, - {0x7fc00000}, {0x7fc02000}, {0x7fc04000}, {0x7fc06000}, - {0x7fc08000}, {0x7fc0a000}, {0x7fc0c000}, {0x7fc0e000}, - {0x7fc10000}, {0x7fc12000}, {0x7fc14000}, {0x7fc16000}, - {0x7fc18000}, {0x7fc1a000}, {0x7fc1c000}, {0x7fc1e000}, - {0x7fc20000}, {0x7fc22000}, {0x7fc24000}, {0x7fc26000}, - {0x7fc28000}, {0x7fc2a000}, {0x7fc2c000}, {0x7fc2e000}, - {0x7fc30000}, {0x7fc32000}, {0x7fc34000}, {0x7fc36000}, - {0x7fc38000}, {0x7fc3a000}, {0x7fc3c000}, {0x7fc3e000}, - {0x7fc40000}, {0x7fc42000}, {0x7fc44000}, {0x7fc46000}, - {0x7fc48000}, {0x7fc4a000}, {0x7fc4c000}, {0x7fc4e000}, - {0x7fc50000}, {0x7fc52000}, {0x7fc54000}, {0x7fc56000}, - {0x7fc58000}, {0x7fc5a000}, {0x7fc5c000}, {0x7fc5e000}, - {0x7fc60000}, {0x7fc62000}, {0x7fc64000}, {0x7fc66000}, - {0x7fc68000}, {0x7fc6a000}, {0x7fc6c000}, {0x7fc6e000}, - {0x7fc70000}, {0x7fc72000}, {0x7fc74000}, {0x7fc76000}, - {0x7fc78000}, {0x7fc7a000}, {0x7fc7c000}, {0x7fc7e000}, - {0x7fc80000}, {0x7fc82000}, {0x7fc84000}, {0x7fc86000}, - {0x7fc88000}, {0x7fc8a000}, {0x7fc8c000}, {0x7fc8e000}, - {0x7fc90000}, {0x7fc92000}, {0x7fc94000}, {0x7fc96000}, - {0x7fc98000}, {0x7fc9a000}, {0x7fc9c000}, {0x7fc9e000}, - {0x7fca0000}, {0x7fca2000}, {0x7fca4000}, {0x7fca6000}, - {0x7fca8000}, {0x7fcaa000}, {0x7fcac000}, {0x7fcae000}, - {0x7fcb0000}, {0x7fcb2000}, {0x7fcb4000}, {0x7fcb6000}, - {0x7fcb8000}, {0x7fcba000}, {0x7fcbc000}, {0x7fcbe000}, - {0x7fcc0000}, {0x7fcc2000}, {0x7fcc4000}, {0x7fcc6000}, - {0x7fcc8000}, {0x7fcca000}, {0x7fccc000}, {0x7fcce000}, - {0x7fcd0000}, {0x7fcd2000}, {0x7fcd4000}, {0x7fcd6000}, - {0x7fcd8000}, {0x7fcda000}, {0x7fcdc000}, {0x7fcde000}, - {0x7fce0000}, {0x7fce2000}, {0x7fce4000}, {0x7fce6000}, - {0x7fce8000}, {0x7fcea000}, {0x7fcec000}, {0x7fcee000}, - {0x7fcf0000}, {0x7fcf2000}, {0x7fcf4000}, {0x7fcf6000}, - {0x7fcf8000}, {0x7fcfa000}, {0x7fcfc000}, {0x7fcfe000}, - {0x7fd00000}, {0x7fd02000}, {0x7fd04000}, {0x7fd06000}, - {0x7fd08000}, {0x7fd0a000}, {0x7fd0c000}, {0x7fd0e000}, - {0x7fd10000}, {0x7fd12000}, {0x7fd14000}, {0x7fd16000}, - {0x7fd18000}, {0x7fd1a000}, {0x7fd1c000}, {0x7fd1e000}, - {0x7fd20000}, {0x7fd22000}, {0x7fd24000}, {0x7fd26000}, - {0x7fd28000}, {0x7fd2a000}, {0x7fd2c000}, {0x7fd2e000}, - {0x7fd30000}, {0x7fd32000}, {0x7fd34000}, {0x7fd36000}, - {0x7fd38000}, {0x7fd3a000}, {0x7fd3c000}, {0x7fd3e000}, - {0x7fd40000}, {0x7fd42000}, {0x7fd44000}, {0x7fd46000}, - {0x7fd48000}, {0x7fd4a000}, {0x7fd4c000}, {0x7fd4e000}, - {0x7fd50000}, {0x7fd52000}, {0x7fd54000}, {0x7fd56000}, - {0x7fd58000}, {0x7fd5a000}, {0x7fd5c000}, {0x7fd5e000}, - {0x7fd60000}, {0x7fd62000}, {0x7fd64000}, {0x7fd66000}, - {0x7fd68000}, {0x7fd6a000}, {0x7fd6c000}, {0x7fd6e000}, - {0x7fd70000}, {0x7fd72000}, {0x7fd74000}, {0x7fd76000}, - {0x7fd78000}, {0x7fd7a000}, {0x7fd7c000}, {0x7fd7e000}, - {0x7fd80000}, {0x7fd82000}, {0x7fd84000}, {0x7fd86000}, - {0x7fd88000}, {0x7fd8a000}, {0x7fd8c000}, {0x7fd8e000}, - {0x7fd90000}, {0x7fd92000}, {0x7fd94000}, {0x7fd96000}, - {0x7fd98000}, {0x7fd9a000}, {0x7fd9c000}, {0x7fd9e000}, - {0x7fda0000}, {0x7fda2000}, {0x7fda4000}, {0x7fda6000}, - {0x7fda8000}, {0x7fdaa000}, {0x7fdac000}, {0x7fdae000}, - {0x7fdb0000}, {0x7fdb2000}, {0x7fdb4000}, {0x7fdb6000}, - {0x7fdb8000}, {0x7fdba000}, {0x7fdbc000}, {0x7fdbe000}, - {0x7fdc0000}, {0x7fdc2000}, {0x7fdc4000}, {0x7fdc6000}, - {0x7fdc8000}, {0x7fdca000}, {0x7fdcc000}, {0x7fdce000}, - {0x7fdd0000}, {0x7fdd2000}, {0x7fdd4000}, {0x7fdd6000}, - {0x7fdd8000}, {0x7fdda000}, {0x7fddc000}, {0x7fdde000}, - {0x7fde0000}, {0x7fde2000}, {0x7fde4000}, {0x7fde6000}, - {0x7fde8000}, {0x7fdea000}, {0x7fdec000}, {0x7fdee000}, - {0x7fdf0000}, {0x7fdf2000}, {0x7fdf4000}, {0x7fdf6000}, - {0x7fdf8000}, {0x7fdfa000}, {0x7fdfc000}, {0x7fdfe000}, - {0x7fe00000}, {0x7fe02000}, {0x7fe04000}, {0x7fe06000}, - {0x7fe08000}, {0x7fe0a000}, {0x7fe0c000}, {0x7fe0e000}, - {0x7fe10000}, {0x7fe12000}, {0x7fe14000}, {0x7fe16000}, - {0x7fe18000}, {0x7fe1a000}, {0x7fe1c000}, {0x7fe1e000}, - {0x7fe20000}, {0x7fe22000}, {0x7fe24000}, {0x7fe26000}, - {0x7fe28000}, {0x7fe2a000}, {0x7fe2c000}, {0x7fe2e000}, - {0x7fe30000}, {0x7fe32000}, {0x7fe34000}, {0x7fe36000}, - {0x7fe38000}, {0x7fe3a000}, {0x7fe3c000}, {0x7fe3e000}, - {0x7fe40000}, {0x7fe42000}, {0x7fe44000}, {0x7fe46000}, - {0x7fe48000}, {0x7fe4a000}, {0x7fe4c000}, {0x7fe4e000}, - {0x7fe50000}, {0x7fe52000}, {0x7fe54000}, {0x7fe56000}, - {0x7fe58000}, {0x7fe5a000}, {0x7fe5c000}, {0x7fe5e000}, - {0x7fe60000}, {0x7fe62000}, {0x7fe64000}, {0x7fe66000}, - {0x7fe68000}, {0x7fe6a000}, {0x7fe6c000}, {0x7fe6e000}, - {0x7fe70000}, {0x7fe72000}, {0x7fe74000}, {0x7fe76000}, - {0x7fe78000}, {0x7fe7a000}, {0x7fe7c000}, {0x7fe7e000}, - {0x7fe80000}, {0x7fe82000}, {0x7fe84000}, {0x7fe86000}, - {0x7fe88000}, {0x7fe8a000}, {0x7fe8c000}, {0x7fe8e000}, - {0x7fe90000}, {0x7fe92000}, {0x7fe94000}, {0x7fe96000}, - {0x7fe98000}, {0x7fe9a000}, {0x7fe9c000}, {0x7fe9e000}, - {0x7fea0000}, {0x7fea2000}, {0x7fea4000}, {0x7fea6000}, - {0x7fea8000}, {0x7feaa000}, {0x7feac000}, {0x7feae000}, - {0x7feb0000}, {0x7feb2000}, {0x7feb4000}, {0x7feb6000}, - {0x7feb8000}, {0x7feba000}, {0x7febc000}, {0x7febe000}, - {0x7fec0000}, {0x7fec2000}, {0x7fec4000}, {0x7fec6000}, - {0x7fec8000}, {0x7feca000}, {0x7fecc000}, {0x7fece000}, - {0x7fed0000}, {0x7fed2000}, {0x7fed4000}, {0x7fed6000}, - {0x7fed8000}, {0x7feda000}, {0x7fedc000}, {0x7fede000}, - {0x7fee0000}, {0x7fee2000}, {0x7fee4000}, {0x7fee6000}, - {0x7fee8000}, {0x7feea000}, {0x7feec000}, {0x7feee000}, - {0x7fef0000}, {0x7fef2000}, {0x7fef4000}, {0x7fef6000}, - {0x7fef8000}, {0x7fefa000}, {0x7fefc000}, {0x7fefe000}, - {0x7ff00000}, {0x7ff02000}, {0x7ff04000}, {0x7ff06000}, - {0x7ff08000}, {0x7ff0a000}, {0x7ff0c000}, {0x7ff0e000}, - {0x7ff10000}, {0x7ff12000}, {0x7ff14000}, {0x7ff16000}, - {0x7ff18000}, {0x7ff1a000}, {0x7ff1c000}, {0x7ff1e000}, - {0x7ff20000}, {0x7ff22000}, {0x7ff24000}, {0x7ff26000}, - {0x7ff28000}, {0x7ff2a000}, {0x7ff2c000}, {0x7ff2e000}, - {0x7ff30000}, {0x7ff32000}, {0x7ff34000}, {0x7ff36000}, - {0x7ff38000}, {0x7ff3a000}, {0x7ff3c000}, {0x7ff3e000}, - {0x7ff40000}, {0x7ff42000}, {0x7ff44000}, {0x7ff46000}, - {0x7ff48000}, {0x7ff4a000}, {0x7ff4c000}, {0x7ff4e000}, - {0x7ff50000}, {0x7ff52000}, {0x7ff54000}, {0x7ff56000}, - {0x7ff58000}, {0x7ff5a000}, {0x7ff5c000}, {0x7ff5e000}, - {0x7ff60000}, {0x7ff62000}, {0x7ff64000}, {0x7ff66000}, - {0x7ff68000}, {0x7ff6a000}, {0x7ff6c000}, {0x7ff6e000}, - {0x7ff70000}, {0x7ff72000}, {0x7ff74000}, {0x7ff76000}, - {0x7ff78000}, {0x7ff7a000}, {0x7ff7c000}, {0x7ff7e000}, - {0x7ff80000}, {0x7ff82000}, {0x7ff84000}, {0x7ff86000}, - {0x7ff88000}, {0x7ff8a000}, {0x7ff8c000}, {0x7ff8e000}, - {0x7ff90000}, {0x7ff92000}, {0x7ff94000}, {0x7ff96000}, - {0x7ff98000}, {0x7ff9a000}, {0x7ff9c000}, {0x7ff9e000}, - {0x7ffa0000}, {0x7ffa2000}, {0x7ffa4000}, {0x7ffa6000}, - {0x7ffa8000}, {0x7ffaa000}, {0x7ffac000}, {0x7ffae000}, - {0x7ffb0000}, {0x7ffb2000}, {0x7ffb4000}, {0x7ffb6000}, - {0x7ffb8000}, {0x7ffba000}, {0x7ffbc000}, {0x7ffbe000}, - {0x7ffc0000}, {0x7ffc2000}, {0x7ffc4000}, {0x7ffc6000}, - {0x7ffc8000}, {0x7ffca000}, {0x7ffcc000}, {0x7ffce000}, - {0x7ffd0000}, {0x7ffd2000}, {0x7ffd4000}, {0x7ffd6000}, - {0x7ffd8000}, {0x7ffda000}, {0x7ffdc000}, {0x7ffde000}, - {0x7ffe0000}, {0x7ffe2000}, {0x7ffe4000}, {0x7ffe6000}, - {0x7ffe8000}, {0x7ffea000}, {0x7ffec000}, {0x7ffee000}, - {0x7fff0000}, {0x7fff2000}, {0x7fff4000}, {0x7fff6000}, - {0x7fff8000}, {0x7fffa000}, {0x7fffc000}, {0x7fffe000}, - {0x80000000}, {0xb3800000}, {0xb4000000}, {0xb4400000}, - {0xb4800000}, {0xb4a00000}, {0xb4c00000}, {0xb4e00000}, - {0xb5000000}, {0xb5100000}, {0xb5200000}, {0xb5300000}, - {0xb5400000}, {0xb5500000}, {0xb5600000}, {0xb5700000}, - {0xb5800000}, {0xb5880000}, {0xb5900000}, {0xb5980000}, - {0xb5a00000}, {0xb5a80000}, {0xb5b00000}, {0xb5b80000}, - {0xb5c00000}, {0xb5c80000}, {0xb5d00000}, {0xb5d80000}, - {0xb5e00000}, {0xb5e80000}, {0xb5f00000}, {0xb5f80000}, - {0xb6000000}, {0xb6040000}, {0xb6080000}, {0xb60c0000}, - {0xb6100000}, {0xb6140000}, {0xb6180000}, {0xb61c0000}, - {0xb6200000}, {0xb6240000}, {0xb6280000}, {0xb62c0000}, - {0xb6300000}, {0xb6340000}, {0xb6380000}, {0xb63c0000}, - {0xb6400000}, {0xb6440000}, {0xb6480000}, {0xb64c0000}, - {0xb6500000}, {0xb6540000}, {0xb6580000}, {0xb65c0000}, - {0xb6600000}, {0xb6640000}, {0xb6680000}, {0xb66c0000}, - {0xb6700000}, {0xb6740000}, {0xb6780000}, {0xb67c0000}, - {0xb6800000}, {0xb6820000}, {0xb6840000}, {0xb6860000}, - {0xb6880000}, {0xb68a0000}, {0xb68c0000}, {0xb68e0000}, - {0xb6900000}, {0xb6920000}, {0xb6940000}, {0xb6960000}, - {0xb6980000}, {0xb69a0000}, {0xb69c0000}, {0xb69e0000}, - {0xb6a00000}, {0xb6a20000}, {0xb6a40000}, {0xb6a60000}, - {0xb6a80000}, {0xb6aa0000}, {0xb6ac0000}, {0xb6ae0000}, - {0xb6b00000}, {0xb6b20000}, {0xb6b40000}, {0xb6b60000}, - {0xb6b80000}, {0xb6ba0000}, {0xb6bc0000}, {0xb6be0000}, - {0xb6c00000}, {0xb6c20000}, {0xb6c40000}, {0xb6c60000}, - {0xb6c80000}, {0xb6ca0000}, {0xb6cc0000}, {0xb6ce0000}, - {0xb6d00000}, {0xb6d20000}, {0xb6d40000}, {0xb6d60000}, - {0xb6d80000}, {0xb6da0000}, {0xb6dc0000}, {0xb6de0000}, - {0xb6e00000}, {0xb6e20000}, {0xb6e40000}, {0xb6e60000}, - {0xb6e80000}, {0xb6ea0000}, {0xb6ec0000}, {0xb6ee0000}, - {0xb6f00000}, {0xb6f20000}, {0xb6f40000}, {0xb6f60000}, - {0xb6f80000}, {0xb6fa0000}, {0xb6fc0000}, {0xb6fe0000}, - {0xb7000000}, {0xb7010000}, {0xb7020000}, {0xb7030000}, - {0xb7040000}, {0xb7050000}, {0xb7060000}, {0xb7070000}, - {0xb7080000}, {0xb7090000}, {0xb70a0000}, {0xb70b0000}, - {0xb70c0000}, {0xb70d0000}, {0xb70e0000}, {0xb70f0000}, - {0xb7100000}, {0xb7110000}, {0xb7120000}, {0xb7130000}, - {0xb7140000}, {0xb7150000}, {0xb7160000}, {0xb7170000}, - {0xb7180000}, {0xb7190000}, {0xb71a0000}, {0xb71b0000}, - {0xb71c0000}, {0xb71d0000}, {0xb71e0000}, {0xb71f0000}, - {0xb7200000}, {0xb7210000}, {0xb7220000}, {0xb7230000}, - {0xb7240000}, {0xb7250000}, {0xb7260000}, {0xb7270000}, - {0xb7280000}, {0xb7290000}, {0xb72a0000}, {0xb72b0000}, - {0xb72c0000}, {0xb72d0000}, {0xb72e0000}, {0xb72f0000}, - {0xb7300000}, {0xb7310000}, {0xb7320000}, {0xb7330000}, - {0xb7340000}, {0xb7350000}, {0xb7360000}, {0xb7370000}, - {0xb7380000}, {0xb7390000}, {0xb73a0000}, {0xb73b0000}, - {0xb73c0000}, {0xb73d0000}, {0xb73e0000}, {0xb73f0000}, - {0xb7400000}, {0xb7410000}, {0xb7420000}, {0xb7430000}, - {0xb7440000}, {0xb7450000}, {0xb7460000}, {0xb7470000}, - {0xb7480000}, {0xb7490000}, {0xb74a0000}, {0xb74b0000}, - {0xb74c0000}, {0xb74d0000}, {0xb74e0000}, {0xb74f0000}, - {0xb7500000}, {0xb7510000}, {0xb7520000}, {0xb7530000}, - {0xb7540000}, {0xb7550000}, {0xb7560000}, {0xb7570000}, - {0xb7580000}, {0xb7590000}, {0xb75a0000}, {0xb75b0000}, - {0xb75c0000}, {0xb75d0000}, {0xb75e0000}, {0xb75f0000}, - {0xb7600000}, {0xb7610000}, {0xb7620000}, {0xb7630000}, - {0xb7640000}, {0xb7650000}, {0xb7660000}, {0xb7670000}, - {0xb7680000}, {0xb7690000}, {0xb76a0000}, {0xb76b0000}, - {0xb76c0000}, {0xb76d0000}, {0xb76e0000}, {0xb76f0000}, - {0xb7700000}, {0xb7710000}, {0xb7720000}, {0xb7730000}, - {0xb7740000}, {0xb7750000}, {0xb7760000}, {0xb7770000}, - {0xb7780000}, {0xb7790000}, {0xb77a0000}, {0xb77b0000}, - {0xb77c0000}, {0xb77d0000}, {0xb77e0000}, {0xb77f0000}, - {0xb7800000}, {0xb7808000}, {0xb7810000}, {0xb7818000}, - {0xb7820000}, {0xb7828000}, {0xb7830000}, {0xb7838000}, - {0xb7840000}, {0xb7848000}, {0xb7850000}, {0xb7858000}, - {0xb7860000}, {0xb7868000}, {0xb7870000}, {0xb7878000}, - {0xb7880000}, {0xb7888000}, {0xb7890000}, {0xb7898000}, - {0xb78a0000}, {0xb78a8000}, {0xb78b0000}, {0xb78b8000}, - {0xb78c0000}, {0xb78c8000}, {0xb78d0000}, {0xb78d8000}, - {0xb78e0000}, {0xb78e8000}, {0xb78f0000}, {0xb78f8000}, - {0xb7900000}, {0xb7908000}, {0xb7910000}, {0xb7918000}, - {0xb7920000}, {0xb7928000}, {0xb7930000}, {0xb7938000}, - {0xb7940000}, {0xb7948000}, {0xb7950000}, {0xb7958000}, - {0xb7960000}, {0xb7968000}, {0xb7970000}, {0xb7978000}, - {0xb7980000}, {0xb7988000}, {0xb7990000}, {0xb7998000}, - {0xb79a0000}, {0xb79a8000}, {0xb79b0000}, {0xb79b8000}, - {0xb79c0000}, {0xb79c8000}, {0xb79d0000}, {0xb79d8000}, - {0xb79e0000}, {0xb79e8000}, {0xb79f0000}, {0xb79f8000}, - {0xb7a00000}, {0xb7a08000}, {0xb7a10000}, {0xb7a18000}, - {0xb7a20000}, {0xb7a28000}, {0xb7a30000}, {0xb7a38000}, - {0xb7a40000}, {0xb7a48000}, {0xb7a50000}, {0xb7a58000}, - {0xb7a60000}, {0xb7a68000}, {0xb7a70000}, {0xb7a78000}, - {0xb7a80000}, {0xb7a88000}, {0xb7a90000}, {0xb7a98000}, - {0xb7aa0000}, {0xb7aa8000}, {0xb7ab0000}, {0xb7ab8000}, - {0xb7ac0000}, {0xb7ac8000}, {0xb7ad0000}, {0xb7ad8000}, - {0xb7ae0000}, {0xb7ae8000}, {0xb7af0000}, {0xb7af8000}, - {0xb7b00000}, {0xb7b08000}, {0xb7b10000}, {0xb7b18000}, - {0xb7b20000}, {0xb7b28000}, {0xb7b30000}, {0xb7b38000}, - {0xb7b40000}, {0xb7b48000}, {0xb7b50000}, {0xb7b58000}, - {0xb7b60000}, {0xb7b68000}, {0xb7b70000}, {0xb7b78000}, - {0xb7b80000}, {0xb7b88000}, {0xb7b90000}, {0xb7b98000}, - {0xb7ba0000}, {0xb7ba8000}, {0xb7bb0000}, {0xb7bb8000}, - {0xb7bc0000}, {0xb7bc8000}, {0xb7bd0000}, {0xb7bd8000}, - {0xb7be0000}, {0xb7be8000}, {0xb7bf0000}, {0xb7bf8000}, - {0xb7c00000}, {0xb7c08000}, {0xb7c10000}, {0xb7c18000}, - {0xb7c20000}, {0xb7c28000}, {0xb7c30000}, {0xb7c38000}, - {0xb7c40000}, {0xb7c48000}, {0xb7c50000}, {0xb7c58000}, - {0xb7c60000}, {0xb7c68000}, {0xb7c70000}, {0xb7c78000}, - {0xb7c80000}, {0xb7c88000}, {0xb7c90000}, {0xb7c98000}, - {0xb7ca0000}, {0xb7ca8000}, {0xb7cb0000}, {0xb7cb8000}, - {0xb7cc0000}, {0xb7cc8000}, {0xb7cd0000}, {0xb7cd8000}, - {0xb7ce0000}, {0xb7ce8000}, {0xb7cf0000}, {0xb7cf8000}, - {0xb7d00000}, {0xb7d08000}, {0xb7d10000}, {0xb7d18000}, - {0xb7d20000}, {0xb7d28000}, {0xb7d30000}, {0xb7d38000}, - {0xb7d40000}, {0xb7d48000}, {0xb7d50000}, {0xb7d58000}, - {0xb7d60000}, {0xb7d68000}, {0xb7d70000}, {0xb7d78000}, - {0xb7d80000}, {0xb7d88000}, {0xb7d90000}, {0xb7d98000}, - {0xb7da0000}, {0xb7da8000}, {0xb7db0000}, {0xb7db8000}, - {0xb7dc0000}, {0xb7dc8000}, {0xb7dd0000}, {0xb7dd8000}, - {0xb7de0000}, {0xb7de8000}, {0xb7df0000}, {0xb7df8000}, - {0xb7e00000}, {0xb7e08000}, {0xb7e10000}, {0xb7e18000}, - {0xb7e20000}, {0xb7e28000}, {0xb7e30000}, {0xb7e38000}, - {0xb7e40000}, {0xb7e48000}, {0xb7e50000}, {0xb7e58000}, - {0xb7e60000}, {0xb7e68000}, {0xb7e70000}, {0xb7e78000}, - {0xb7e80000}, {0xb7e88000}, {0xb7e90000}, {0xb7e98000}, - {0xb7ea0000}, {0xb7ea8000}, {0xb7eb0000}, {0xb7eb8000}, - {0xb7ec0000}, {0xb7ec8000}, {0xb7ed0000}, {0xb7ed8000}, - {0xb7ee0000}, {0xb7ee8000}, {0xb7ef0000}, {0xb7ef8000}, - {0xb7f00000}, {0xb7f08000}, {0xb7f10000}, {0xb7f18000}, - {0xb7f20000}, {0xb7f28000}, {0xb7f30000}, {0xb7f38000}, - {0xb7f40000}, {0xb7f48000}, {0xb7f50000}, {0xb7f58000}, - {0xb7f60000}, {0xb7f68000}, {0xb7f70000}, {0xb7f78000}, - {0xb7f80000}, {0xb7f88000}, {0xb7f90000}, {0xb7f98000}, - {0xb7fa0000}, {0xb7fa8000}, {0xb7fb0000}, {0xb7fb8000}, - {0xb7fc0000}, {0xb7fc8000}, {0xb7fd0000}, {0xb7fd8000}, - {0xb7fe0000}, {0xb7fe8000}, {0xb7ff0000}, {0xb7ff8000}, - {0xb8000000}, {0xb8004000}, {0xb8008000}, {0xb800c000}, - {0xb8010000}, {0xb8014000}, {0xb8018000}, {0xb801c000}, - {0xb8020000}, {0xb8024000}, {0xb8028000}, {0xb802c000}, - {0xb8030000}, {0xb8034000}, {0xb8038000}, {0xb803c000}, - {0xb8040000}, {0xb8044000}, {0xb8048000}, {0xb804c000}, - {0xb8050000}, {0xb8054000}, {0xb8058000}, {0xb805c000}, - {0xb8060000}, {0xb8064000}, {0xb8068000}, {0xb806c000}, - {0xb8070000}, {0xb8074000}, {0xb8078000}, {0xb807c000}, - {0xb8080000}, {0xb8084000}, {0xb8088000}, {0xb808c000}, - {0xb8090000}, {0xb8094000}, {0xb8098000}, {0xb809c000}, - {0xb80a0000}, {0xb80a4000}, {0xb80a8000}, {0xb80ac000}, - {0xb80b0000}, {0xb80b4000}, {0xb80b8000}, {0xb80bc000}, - {0xb80c0000}, {0xb80c4000}, {0xb80c8000}, {0xb80cc000}, - {0xb80d0000}, {0xb80d4000}, {0xb80d8000}, {0xb80dc000}, - {0xb80e0000}, {0xb80e4000}, {0xb80e8000}, {0xb80ec000}, - {0xb80f0000}, {0xb80f4000}, {0xb80f8000}, {0xb80fc000}, - {0xb8100000}, {0xb8104000}, {0xb8108000}, {0xb810c000}, - {0xb8110000}, {0xb8114000}, {0xb8118000}, {0xb811c000}, - {0xb8120000}, {0xb8124000}, {0xb8128000}, {0xb812c000}, - {0xb8130000}, {0xb8134000}, {0xb8138000}, {0xb813c000}, - {0xb8140000}, {0xb8144000}, {0xb8148000}, {0xb814c000}, - {0xb8150000}, {0xb8154000}, {0xb8158000}, {0xb815c000}, - {0xb8160000}, {0xb8164000}, {0xb8168000}, {0xb816c000}, - {0xb8170000}, {0xb8174000}, {0xb8178000}, {0xb817c000}, - {0xb8180000}, {0xb8184000}, {0xb8188000}, {0xb818c000}, - {0xb8190000}, {0xb8194000}, {0xb8198000}, {0xb819c000}, - {0xb81a0000}, {0xb81a4000}, {0xb81a8000}, {0xb81ac000}, - {0xb81b0000}, {0xb81b4000}, {0xb81b8000}, {0xb81bc000}, - {0xb81c0000}, {0xb81c4000}, {0xb81c8000}, {0xb81cc000}, - {0xb81d0000}, {0xb81d4000}, {0xb81d8000}, {0xb81dc000}, - {0xb81e0000}, {0xb81e4000}, {0xb81e8000}, {0xb81ec000}, - {0xb81f0000}, {0xb81f4000}, {0xb81f8000}, {0xb81fc000}, - {0xb8200000}, {0xb8204000}, {0xb8208000}, {0xb820c000}, - {0xb8210000}, {0xb8214000}, {0xb8218000}, {0xb821c000}, - {0xb8220000}, {0xb8224000}, {0xb8228000}, {0xb822c000}, - {0xb8230000}, {0xb8234000}, {0xb8238000}, {0xb823c000}, - {0xb8240000}, {0xb8244000}, {0xb8248000}, {0xb824c000}, - {0xb8250000}, {0xb8254000}, {0xb8258000}, {0xb825c000}, - {0xb8260000}, {0xb8264000}, {0xb8268000}, {0xb826c000}, - {0xb8270000}, {0xb8274000}, {0xb8278000}, {0xb827c000}, - {0xb8280000}, {0xb8284000}, {0xb8288000}, {0xb828c000}, - {0xb8290000}, {0xb8294000}, {0xb8298000}, {0xb829c000}, - {0xb82a0000}, {0xb82a4000}, {0xb82a8000}, {0xb82ac000}, - {0xb82b0000}, {0xb82b4000}, {0xb82b8000}, {0xb82bc000}, - {0xb82c0000}, {0xb82c4000}, {0xb82c8000}, {0xb82cc000}, - {0xb82d0000}, {0xb82d4000}, {0xb82d8000}, {0xb82dc000}, - {0xb82e0000}, {0xb82e4000}, {0xb82e8000}, {0xb82ec000}, - {0xb82f0000}, {0xb82f4000}, {0xb82f8000}, {0xb82fc000}, - {0xb8300000}, {0xb8304000}, {0xb8308000}, {0xb830c000}, - {0xb8310000}, {0xb8314000}, {0xb8318000}, {0xb831c000}, - {0xb8320000}, {0xb8324000}, {0xb8328000}, {0xb832c000}, - {0xb8330000}, {0xb8334000}, {0xb8338000}, {0xb833c000}, - {0xb8340000}, {0xb8344000}, {0xb8348000}, {0xb834c000}, - {0xb8350000}, {0xb8354000}, {0xb8358000}, {0xb835c000}, - {0xb8360000}, {0xb8364000}, {0xb8368000}, {0xb836c000}, - {0xb8370000}, {0xb8374000}, {0xb8378000}, {0xb837c000}, - {0xb8380000}, {0xb8384000}, {0xb8388000}, {0xb838c000}, - {0xb8390000}, {0xb8394000}, {0xb8398000}, {0xb839c000}, - {0xb83a0000}, {0xb83a4000}, {0xb83a8000}, {0xb83ac000}, - {0xb83b0000}, {0xb83b4000}, {0xb83b8000}, {0xb83bc000}, - {0xb83c0000}, {0xb83c4000}, {0xb83c8000}, {0xb83cc000}, - {0xb83d0000}, {0xb83d4000}, {0xb83d8000}, {0xb83dc000}, - {0xb83e0000}, {0xb83e4000}, {0xb83e8000}, {0xb83ec000}, - {0xb83f0000}, {0xb83f4000}, {0xb83f8000}, {0xb83fc000}, - {0xb8400000}, {0xb8404000}, {0xb8408000}, {0xb840c000}, - {0xb8410000}, {0xb8414000}, {0xb8418000}, {0xb841c000}, - {0xb8420000}, {0xb8424000}, {0xb8428000}, {0xb842c000}, - {0xb8430000}, {0xb8434000}, {0xb8438000}, {0xb843c000}, - {0xb8440000}, {0xb8444000}, {0xb8448000}, {0xb844c000}, - {0xb8450000}, {0xb8454000}, {0xb8458000}, {0xb845c000}, - {0xb8460000}, {0xb8464000}, {0xb8468000}, {0xb846c000}, - {0xb8470000}, {0xb8474000}, {0xb8478000}, {0xb847c000}, - {0xb8480000}, {0xb8484000}, {0xb8488000}, {0xb848c000}, - {0xb8490000}, {0xb8494000}, {0xb8498000}, {0xb849c000}, - {0xb84a0000}, {0xb84a4000}, {0xb84a8000}, {0xb84ac000}, - {0xb84b0000}, {0xb84b4000}, {0xb84b8000}, {0xb84bc000}, - {0xb84c0000}, {0xb84c4000}, {0xb84c8000}, {0xb84cc000}, - {0xb84d0000}, {0xb84d4000}, {0xb84d8000}, {0xb84dc000}, - {0xb84e0000}, {0xb84e4000}, {0xb84e8000}, {0xb84ec000}, - {0xb84f0000}, {0xb84f4000}, {0xb84f8000}, {0xb84fc000}, - {0xb8500000}, {0xb8504000}, {0xb8508000}, {0xb850c000}, - {0xb8510000}, {0xb8514000}, {0xb8518000}, {0xb851c000}, - {0xb8520000}, {0xb8524000}, {0xb8528000}, {0xb852c000}, - {0xb8530000}, {0xb8534000}, {0xb8538000}, {0xb853c000}, - {0xb8540000}, {0xb8544000}, {0xb8548000}, {0xb854c000}, - {0xb8550000}, {0xb8554000}, {0xb8558000}, {0xb855c000}, - {0xb8560000}, {0xb8564000}, {0xb8568000}, {0xb856c000}, - {0xb8570000}, {0xb8574000}, {0xb8578000}, {0xb857c000}, - {0xb8580000}, {0xb8584000}, {0xb8588000}, {0xb858c000}, - {0xb8590000}, {0xb8594000}, {0xb8598000}, {0xb859c000}, - {0xb85a0000}, {0xb85a4000}, {0xb85a8000}, {0xb85ac000}, - {0xb85b0000}, {0xb85b4000}, {0xb85b8000}, {0xb85bc000}, - {0xb85c0000}, {0xb85c4000}, {0xb85c8000}, {0xb85cc000}, - {0xb85d0000}, {0xb85d4000}, {0xb85d8000}, {0xb85dc000}, - {0xb85e0000}, {0xb85e4000}, {0xb85e8000}, {0xb85ec000}, - {0xb85f0000}, {0xb85f4000}, {0xb85f8000}, {0xb85fc000}, - {0xb8600000}, {0xb8604000}, {0xb8608000}, {0xb860c000}, - {0xb8610000}, {0xb8614000}, {0xb8618000}, {0xb861c000}, - {0xb8620000}, {0xb8624000}, {0xb8628000}, {0xb862c000}, - {0xb8630000}, {0xb8634000}, {0xb8638000}, {0xb863c000}, - {0xb8640000}, {0xb8644000}, {0xb8648000}, {0xb864c000}, - {0xb8650000}, {0xb8654000}, {0xb8658000}, {0xb865c000}, - {0xb8660000}, {0xb8664000}, {0xb8668000}, {0xb866c000}, - {0xb8670000}, {0xb8674000}, {0xb8678000}, {0xb867c000}, - {0xb8680000}, {0xb8684000}, {0xb8688000}, {0xb868c000}, - {0xb8690000}, {0xb8694000}, {0xb8698000}, {0xb869c000}, - {0xb86a0000}, {0xb86a4000}, {0xb86a8000}, {0xb86ac000}, - {0xb86b0000}, {0xb86b4000}, {0xb86b8000}, {0xb86bc000}, - {0xb86c0000}, {0xb86c4000}, {0xb86c8000}, {0xb86cc000}, - {0xb86d0000}, {0xb86d4000}, {0xb86d8000}, {0xb86dc000}, - {0xb86e0000}, {0xb86e4000}, {0xb86e8000}, {0xb86ec000}, - {0xb86f0000}, {0xb86f4000}, {0xb86f8000}, {0xb86fc000}, - {0xb8700000}, {0xb8704000}, {0xb8708000}, {0xb870c000}, - {0xb8710000}, {0xb8714000}, {0xb8718000}, {0xb871c000}, - {0xb8720000}, {0xb8724000}, {0xb8728000}, {0xb872c000}, - {0xb8730000}, {0xb8734000}, {0xb8738000}, {0xb873c000}, - {0xb8740000}, {0xb8744000}, {0xb8748000}, {0xb874c000}, - {0xb8750000}, {0xb8754000}, {0xb8758000}, {0xb875c000}, - {0xb8760000}, {0xb8764000}, {0xb8768000}, {0xb876c000}, - {0xb8770000}, {0xb8774000}, {0xb8778000}, {0xb877c000}, - {0xb8780000}, {0xb8784000}, {0xb8788000}, {0xb878c000}, - {0xb8790000}, {0xb8794000}, {0xb8798000}, {0xb879c000}, - {0xb87a0000}, {0xb87a4000}, {0xb87a8000}, {0xb87ac000}, - {0xb87b0000}, {0xb87b4000}, {0xb87b8000}, {0xb87bc000}, - {0xb87c0000}, {0xb87c4000}, {0xb87c8000}, {0xb87cc000}, - {0xb87d0000}, {0xb87d4000}, {0xb87d8000}, {0xb87dc000}, - {0xb87e0000}, {0xb87e4000}, {0xb87e8000}, {0xb87ec000}, - {0xb87f0000}, {0xb87f4000}, {0xb87f8000}, {0xb87fc000}, - {0xb8800000}, {0xb8802000}, {0xb8804000}, {0xb8806000}, - {0xb8808000}, {0xb880a000}, {0xb880c000}, {0xb880e000}, - {0xb8810000}, {0xb8812000}, {0xb8814000}, {0xb8816000}, - {0xb8818000}, {0xb881a000}, {0xb881c000}, {0xb881e000}, - {0xb8820000}, {0xb8822000}, {0xb8824000}, {0xb8826000}, - {0xb8828000}, {0xb882a000}, {0xb882c000}, {0xb882e000}, - {0xb8830000}, {0xb8832000}, {0xb8834000}, {0xb8836000}, - {0xb8838000}, {0xb883a000}, {0xb883c000}, {0xb883e000}, - {0xb8840000}, {0xb8842000}, {0xb8844000}, {0xb8846000}, - {0xb8848000}, {0xb884a000}, {0xb884c000}, {0xb884e000}, - {0xb8850000}, {0xb8852000}, {0xb8854000}, {0xb8856000}, - {0xb8858000}, {0xb885a000}, {0xb885c000}, {0xb885e000}, - {0xb8860000}, {0xb8862000}, {0xb8864000}, {0xb8866000}, - {0xb8868000}, {0xb886a000}, {0xb886c000}, {0xb886e000}, - {0xb8870000}, {0xb8872000}, {0xb8874000}, {0xb8876000}, - {0xb8878000}, {0xb887a000}, {0xb887c000}, {0xb887e000}, - {0xb8880000}, {0xb8882000}, {0xb8884000}, {0xb8886000}, - {0xb8888000}, {0xb888a000}, {0xb888c000}, {0xb888e000}, - {0xb8890000}, {0xb8892000}, {0xb8894000}, {0xb8896000}, - {0xb8898000}, {0xb889a000}, {0xb889c000}, {0xb889e000}, - {0xb88a0000}, {0xb88a2000}, {0xb88a4000}, {0xb88a6000}, - {0xb88a8000}, {0xb88aa000}, {0xb88ac000}, {0xb88ae000}, - {0xb88b0000}, {0xb88b2000}, {0xb88b4000}, {0xb88b6000}, - {0xb88b8000}, {0xb88ba000}, {0xb88bc000}, {0xb88be000}, - {0xb88c0000}, {0xb88c2000}, {0xb88c4000}, {0xb88c6000}, - {0xb88c8000}, {0xb88ca000}, {0xb88cc000}, {0xb88ce000}, - {0xb88d0000}, {0xb88d2000}, {0xb88d4000}, {0xb88d6000}, - {0xb88d8000}, {0xb88da000}, {0xb88dc000}, {0xb88de000}, - {0xb88e0000}, {0xb88e2000}, {0xb88e4000}, {0xb88e6000}, - {0xb88e8000}, {0xb88ea000}, {0xb88ec000}, {0xb88ee000}, - {0xb88f0000}, {0xb88f2000}, {0xb88f4000}, {0xb88f6000}, - {0xb88f8000}, {0xb88fa000}, {0xb88fc000}, {0xb88fe000}, - {0xb8900000}, {0xb8902000}, {0xb8904000}, {0xb8906000}, - {0xb8908000}, {0xb890a000}, {0xb890c000}, {0xb890e000}, - {0xb8910000}, {0xb8912000}, {0xb8914000}, {0xb8916000}, - {0xb8918000}, {0xb891a000}, {0xb891c000}, {0xb891e000}, - {0xb8920000}, {0xb8922000}, {0xb8924000}, {0xb8926000}, - {0xb8928000}, {0xb892a000}, {0xb892c000}, {0xb892e000}, - {0xb8930000}, {0xb8932000}, {0xb8934000}, {0xb8936000}, - {0xb8938000}, {0xb893a000}, {0xb893c000}, {0xb893e000}, - {0xb8940000}, {0xb8942000}, {0xb8944000}, {0xb8946000}, - {0xb8948000}, {0xb894a000}, {0xb894c000}, {0xb894e000}, - {0xb8950000}, {0xb8952000}, {0xb8954000}, {0xb8956000}, - {0xb8958000}, {0xb895a000}, {0xb895c000}, {0xb895e000}, - {0xb8960000}, {0xb8962000}, {0xb8964000}, {0xb8966000}, - {0xb8968000}, {0xb896a000}, {0xb896c000}, {0xb896e000}, - {0xb8970000}, {0xb8972000}, {0xb8974000}, {0xb8976000}, - {0xb8978000}, {0xb897a000}, {0xb897c000}, {0xb897e000}, - {0xb8980000}, {0xb8982000}, {0xb8984000}, {0xb8986000}, - {0xb8988000}, {0xb898a000}, {0xb898c000}, {0xb898e000}, - {0xb8990000}, {0xb8992000}, {0xb8994000}, {0xb8996000}, - {0xb8998000}, {0xb899a000}, {0xb899c000}, {0xb899e000}, - {0xb89a0000}, {0xb89a2000}, {0xb89a4000}, {0xb89a6000}, - {0xb89a8000}, {0xb89aa000}, {0xb89ac000}, {0xb89ae000}, - {0xb89b0000}, {0xb89b2000}, {0xb89b4000}, {0xb89b6000}, - {0xb89b8000}, {0xb89ba000}, {0xb89bc000}, {0xb89be000}, - {0xb89c0000}, {0xb89c2000}, {0xb89c4000}, {0xb89c6000}, - {0xb89c8000}, {0xb89ca000}, {0xb89cc000}, {0xb89ce000}, - {0xb89d0000}, {0xb89d2000}, {0xb89d4000}, {0xb89d6000}, - {0xb89d8000}, {0xb89da000}, {0xb89dc000}, {0xb89de000}, - {0xb89e0000}, {0xb89e2000}, {0xb89e4000}, {0xb89e6000}, - {0xb89e8000}, {0xb89ea000}, {0xb89ec000}, {0xb89ee000}, - {0xb89f0000}, {0xb89f2000}, {0xb89f4000}, {0xb89f6000}, - {0xb89f8000}, {0xb89fa000}, {0xb89fc000}, {0xb89fe000}, - {0xb8a00000}, {0xb8a02000}, {0xb8a04000}, {0xb8a06000}, - {0xb8a08000}, {0xb8a0a000}, {0xb8a0c000}, {0xb8a0e000}, - {0xb8a10000}, {0xb8a12000}, {0xb8a14000}, {0xb8a16000}, - {0xb8a18000}, {0xb8a1a000}, {0xb8a1c000}, {0xb8a1e000}, - {0xb8a20000}, {0xb8a22000}, {0xb8a24000}, {0xb8a26000}, - {0xb8a28000}, {0xb8a2a000}, {0xb8a2c000}, {0xb8a2e000}, - {0xb8a30000}, {0xb8a32000}, {0xb8a34000}, {0xb8a36000}, - {0xb8a38000}, {0xb8a3a000}, {0xb8a3c000}, {0xb8a3e000}, - {0xb8a40000}, {0xb8a42000}, {0xb8a44000}, {0xb8a46000}, - {0xb8a48000}, {0xb8a4a000}, {0xb8a4c000}, {0xb8a4e000}, - {0xb8a50000}, {0xb8a52000}, {0xb8a54000}, {0xb8a56000}, - {0xb8a58000}, {0xb8a5a000}, {0xb8a5c000}, {0xb8a5e000}, - {0xb8a60000}, {0xb8a62000}, {0xb8a64000}, {0xb8a66000}, - {0xb8a68000}, {0xb8a6a000}, {0xb8a6c000}, {0xb8a6e000}, - {0xb8a70000}, {0xb8a72000}, {0xb8a74000}, {0xb8a76000}, - {0xb8a78000}, {0xb8a7a000}, {0xb8a7c000}, {0xb8a7e000}, - {0xb8a80000}, {0xb8a82000}, {0xb8a84000}, {0xb8a86000}, - {0xb8a88000}, {0xb8a8a000}, {0xb8a8c000}, {0xb8a8e000}, - {0xb8a90000}, {0xb8a92000}, {0xb8a94000}, {0xb8a96000}, - {0xb8a98000}, {0xb8a9a000}, {0xb8a9c000}, {0xb8a9e000}, - {0xb8aa0000}, {0xb8aa2000}, {0xb8aa4000}, {0xb8aa6000}, - {0xb8aa8000}, {0xb8aaa000}, {0xb8aac000}, {0xb8aae000}, - {0xb8ab0000}, {0xb8ab2000}, {0xb8ab4000}, {0xb8ab6000}, - {0xb8ab8000}, {0xb8aba000}, {0xb8abc000}, {0xb8abe000}, - {0xb8ac0000}, {0xb8ac2000}, {0xb8ac4000}, {0xb8ac6000}, - {0xb8ac8000}, {0xb8aca000}, {0xb8acc000}, {0xb8ace000}, - {0xb8ad0000}, {0xb8ad2000}, {0xb8ad4000}, {0xb8ad6000}, - {0xb8ad8000}, {0xb8ada000}, {0xb8adc000}, {0xb8ade000}, - {0xb8ae0000}, {0xb8ae2000}, {0xb8ae4000}, {0xb8ae6000}, - {0xb8ae8000}, {0xb8aea000}, {0xb8aec000}, {0xb8aee000}, - {0xb8af0000}, {0xb8af2000}, {0xb8af4000}, {0xb8af6000}, - {0xb8af8000}, {0xb8afa000}, {0xb8afc000}, {0xb8afe000}, - {0xb8b00000}, {0xb8b02000}, {0xb8b04000}, {0xb8b06000}, - {0xb8b08000}, {0xb8b0a000}, {0xb8b0c000}, {0xb8b0e000}, - {0xb8b10000}, {0xb8b12000}, {0xb8b14000}, {0xb8b16000}, - {0xb8b18000}, {0xb8b1a000}, {0xb8b1c000}, {0xb8b1e000}, - {0xb8b20000}, {0xb8b22000}, {0xb8b24000}, {0xb8b26000}, - {0xb8b28000}, {0xb8b2a000}, {0xb8b2c000}, {0xb8b2e000}, - {0xb8b30000}, {0xb8b32000}, {0xb8b34000}, {0xb8b36000}, - {0xb8b38000}, {0xb8b3a000}, {0xb8b3c000}, {0xb8b3e000}, - {0xb8b40000}, {0xb8b42000}, {0xb8b44000}, {0xb8b46000}, - {0xb8b48000}, {0xb8b4a000}, {0xb8b4c000}, {0xb8b4e000}, - {0xb8b50000}, {0xb8b52000}, {0xb8b54000}, {0xb8b56000}, - {0xb8b58000}, {0xb8b5a000}, {0xb8b5c000}, {0xb8b5e000}, - {0xb8b60000}, {0xb8b62000}, {0xb8b64000}, {0xb8b66000}, - {0xb8b68000}, {0xb8b6a000}, {0xb8b6c000}, {0xb8b6e000}, - {0xb8b70000}, {0xb8b72000}, {0xb8b74000}, {0xb8b76000}, - {0xb8b78000}, {0xb8b7a000}, {0xb8b7c000}, {0xb8b7e000}, - {0xb8b80000}, {0xb8b82000}, {0xb8b84000}, {0xb8b86000}, - {0xb8b88000}, {0xb8b8a000}, {0xb8b8c000}, {0xb8b8e000}, - {0xb8b90000}, {0xb8b92000}, {0xb8b94000}, {0xb8b96000}, - {0xb8b98000}, {0xb8b9a000}, {0xb8b9c000}, {0xb8b9e000}, - {0xb8ba0000}, {0xb8ba2000}, {0xb8ba4000}, {0xb8ba6000}, - {0xb8ba8000}, {0xb8baa000}, {0xb8bac000}, {0xb8bae000}, - {0xb8bb0000}, {0xb8bb2000}, {0xb8bb4000}, {0xb8bb6000}, - {0xb8bb8000}, {0xb8bba000}, {0xb8bbc000}, {0xb8bbe000}, - {0xb8bc0000}, {0xb8bc2000}, {0xb8bc4000}, {0xb8bc6000}, - {0xb8bc8000}, {0xb8bca000}, {0xb8bcc000}, {0xb8bce000}, - {0xb8bd0000}, {0xb8bd2000}, {0xb8bd4000}, {0xb8bd6000}, - {0xb8bd8000}, {0xb8bda000}, {0xb8bdc000}, {0xb8bde000}, - {0xb8be0000}, {0xb8be2000}, {0xb8be4000}, {0xb8be6000}, - {0xb8be8000}, {0xb8bea000}, {0xb8bec000}, {0xb8bee000}, - {0xb8bf0000}, {0xb8bf2000}, {0xb8bf4000}, {0xb8bf6000}, - {0xb8bf8000}, {0xb8bfa000}, {0xb8bfc000}, {0xb8bfe000}, - {0xb8c00000}, {0xb8c02000}, {0xb8c04000}, {0xb8c06000}, - {0xb8c08000}, {0xb8c0a000}, {0xb8c0c000}, {0xb8c0e000}, - {0xb8c10000}, {0xb8c12000}, {0xb8c14000}, {0xb8c16000}, - {0xb8c18000}, {0xb8c1a000}, {0xb8c1c000}, {0xb8c1e000}, - {0xb8c20000}, {0xb8c22000}, {0xb8c24000}, {0xb8c26000}, - {0xb8c28000}, {0xb8c2a000}, {0xb8c2c000}, {0xb8c2e000}, - {0xb8c30000}, {0xb8c32000}, {0xb8c34000}, {0xb8c36000}, - {0xb8c38000}, {0xb8c3a000}, {0xb8c3c000}, {0xb8c3e000}, - {0xb8c40000}, {0xb8c42000}, {0xb8c44000}, {0xb8c46000}, - {0xb8c48000}, {0xb8c4a000}, {0xb8c4c000}, {0xb8c4e000}, - {0xb8c50000}, {0xb8c52000}, {0xb8c54000}, {0xb8c56000}, - {0xb8c58000}, {0xb8c5a000}, {0xb8c5c000}, {0xb8c5e000}, - {0xb8c60000}, {0xb8c62000}, {0xb8c64000}, {0xb8c66000}, - {0xb8c68000}, {0xb8c6a000}, {0xb8c6c000}, {0xb8c6e000}, - {0xb8c70000}, {0xb8c72000}, {0xb8c74000}, {0xb8c76000}, - {0xb8c78000}, {0xb8c7a000}, {0xb8c7c000}, {0xb8c7e000}, - {0xb8c80000}, {0xb8c82000}, {0xb8c84000}, {0xb8c86000}, - {0xb8c88000}, {0xb8c8a000}, {0xb8c8c000}, {0xb8c8e000}, - {0xb8c90000}, {0xb8c92000}, {0xb8c94000}, {0xb8c96000}, - {0xb8c98000}, {0xb8c9a000}, {0xb8c9c000}, {0xb8c9e000}, - {0xb8ca0000}, {0xb8ca2000}, {0xb8ca4000}, {0xb8ca6000}, - {0xb8ca8000}, {0xb8caa000}, {0xb8cac000}, {0xb8cae000}, - {0xb8cb0000}, {0xb8cb2000}, {0xb8cb4000}, {0xb8cb6000}, - {0xb8cb8000}, {0xb8cba000}, {0xb8cbc000}, {0xb8cbe000}, - {0xb8cc0000}, {0xb8cc2000}, {0xb8cc4000}, {0xb8cc6000}, - {0xb8cc8000}, {0xb8cca000}, {0xb8ccc000}, {0xb8cce000}, - {0xb8cd0000}, {0xb8cd2000}, {0xb8cd4000}, {0xb8cd6000}, - {0xb8cd8000}, {0xb8cda000}, {0xb8cdc000}, {0xb8cde000}, - {0xb8ce0000}, {0xb8ce2000}, {0xb8ce4000}, {0xb8ce6000}, - {0xb8ce8000}, {0xb8cea000}, {0xb8cec000}, {0xb8cee000}, - {0xb8cf0000}, {0xb8cf2000}, {0xb8cf4000}, {0xb8cf6000}, - {0xb8cf8000}, {0xb8cfa000}, {0xb8cfc000}, {0xb8cfe000}, - {0xb8d00000}, {0xb8d02000}, {0xb8d04000}, {0xb8d06000}, - {0xb8d08000}, {0xb8d0a000}, {0xb8d0c000}, {0xb8d0e000}, - {0xb8d10000}, {0xb8d12000}, {0xb8d14000}, {0xb8d16000}, - {0xb8d18000}, {0xb8d1a000}, {0xb8d1c000}, {0xb8d1e000}, - {0xb8d20000}, {0xb8d22000}, {0xb8d24000}, {0xb8d26000}, - {0xb8d28000}, {0xb8d2a000}, {0xb8d2c000}, {0xb8d2e000}, - {0xb8d30000}, {0xb8d32000}, {0xb8d34000}, {0xb8d36000}, - {0xb8d38000}, {0xb8d3a000}, {0xb8d3c000}, {0xb8d3e000}, - {0xb8d40000}, {0xb8d42000}, {0xb8d44000}, {0xb8d46000}, - {0xb8d48000}, {0xb8d4a000}, {0xb8d4c000}, {0xb8d4e000}, - {0xb8d50000}, {0xb8d52000}, {0xb8d54000}, {0xb8d56000}, - {0xb8d58000}, {0xb8d5a000}, {0xb8d5c000}, {0xb8d5e000}, - {0xb8d60000}, {0xb8d62000}, {0xb8d64000}, {0xb8d66000}, - {0xb8d68000}, {0xb8d6a000}, {0xb8d6c000}, {0xb8d6e000}, - {0xb8d70000}, {0xb8d72000}, {0xb8d74000}, {0xb8d76000}, - {0xb8d78000}, {0xb8d7a000}, {0xb8d7c000}, {0xb8d7e000}, - {0xb8d80000}, {0xb8d82000}, {0xb8d84000}, {0xb8d86000}, - {0xb8d88000}, {0xb8d8a000}, {0xb8d8c000}, {0xb8d8e000}, - {0xb8d90000}, {0xb8d92000}, {0xb8d94000}, {0xb8d96000}, - {0xb8d98000}, {0xb8d9a000}, {0xb8d9c000}, {0xb8d9e000}, - {0xb8da0000}, {0xb8da2000}, {0xb8da4000}, {0xb8da6000}, - {0xb8da8000}, {0xb8daa000}, {0xb8dac000}, {0xb8dae000}, - {0xb8db0000}, {0xb8db2000}, {0xb8db4000}, {0xb8db6000}, - {0xb8db8000}, {0xb8dba000}, {0xb8dbc000}, {0xb8dbe000}, - {0xb8dc0000}, {0xb8dc2000}, {0xb8dc4000}, {0xb8dc6000}, - {0xb8dc8000}, {0xb8dca000}, {0xb8dcc000}, {0xb8dce000}, - {0xb8dd0000}, {0xb8dd2000}, {0xb8dd4000}, {0xb8dd6000}, - {0xb8dd8000}, {0xb8dda000}, {0xb8ddc000}, {0xb8dde000}, - {0xb8de0000}, {0xb8de2000}, {0xb8de4000}, {0xb8de6000}, - {0xb8de8000}, {0xb8dea000}, {0xb8dec000}, {0xb8dee000}, - {0xb8df0000}, {0xb8df2000}, {0xb8df4000}, {0xb8df6000}, - {0xb8df8000}, {0xb8dfa000}, {0xb8dfc000}, {0xb8dfe000}, - {0xb8e00000}, {0xb8e02000}, {0xb8e04000}, {0xb8e06000}, - {0xb8e08000}, {0xb8e0a000}, {0xb8e0c000}, {0xb8e0e000}, - {0xb8e10000}, {0xb8e12000}, {0xb8e14000}, {0xb8e16000}, - {0xb8e18000}, {0xb8e1a000}, {0xb8e1c000}, {0xb8e1e000}, - {0xb8e20000}, {0xb8e22000}, {0xb8e24000}, {0xb8e26000}, - {0xb8e28000}, {0xb8e2a000}, {0xb8e2c000}, {0xb8e2e000}, - {0xb8e30000}, {0xb8e32000}, {0xb8e34000}, {0xb8e36000}, - {0xb8e38000}, {0xb8e3a000}, {0xb8e3c000}, {0xb8e3e000}, - {0xb8e40000}, {0xb8e42000}, {0xb8e44000}, {0xb8e46000}, - {0xb8e48000}, {0xb8e4a000}, {0xb8e4c000}, {0xb8e4e000}, - {0xb8e50000}, {0xb8e52000}, {0xb8e54000}, {0xb8e56000}, - {0xb8e58000}, {0xb8e5a000}, {0xb8e5c000}, {0xb8e5e000}, - {0xb8e60000}, {0xb8e62000}, {0xb8e64000}, {0xb8e66000}, - {0xb8e68000}, {0xb8e6a000}, {0xb8e6c000}, {0xb8e6e000}, - {0xb8e70000}, {0xb8e72000}, {0xb8e74000}, {0xb8e76000}, - {0xb8e78000}, {0xb8e7a000}, {0xb8e7c000}, {0xb8e7e000}, - {0xb8e80000}, {0xb8e82000}, {0xb8e84000}, {0xb8e86000}, - {0xb8e88000}, {0xb8e8a000}, {0xb8e8c000}, {0xb8e8e000}, - {0xb8e90000}, {0xb8e92000}, {0xb8e94000}, {0xb8e96000}, - {0xb8e98000}, {0xb8e9a000}, {0xb8e9c000}, {0xb8e9e000}, - {0xb8ea0000}, {0xb8ea2000}, {0xb8ea4000}, {0xb8ea6000}, - {0xb8ea8000}, {0xb8eaa000}, {0xb8eac000}, {0xb8eae000}, - {0xb8eb0000}, {0xb8eb2000}, {0xb8eb4000}, {0xb8eb6000}, - {0xb8eb8000}, {0xb8eba000}, {0xb8ebc000}, {0xb8ebe000}, - {0xb8ec0000}, {0xb8ec2000}, {0xb8ec4000}, {0xb8ec6000}, - {0xb8ec8000}, {0xb8eca000}, {0xb8ecc000}, {0xb8ece000}, - {0xb8ed0000}, {0xb8ed2000}, {0xb8ed4000}, {0xb8ed6000}, - {0xb8ed8000}, {0xb8eda000}, {0xb8edc000}, {0xb8ede000}, - {0xb8ee0000}, {0xb8ee2000}, {0xb8ee4000}, {0xb8ee6000}, - {0xb8ee8000}, {0xb8eea000}, {0xb8eec000}, {0xb8eee000}, - {0xb8ef0000}, {0xb8ef2000}, {0xb8ef4000}, {0xb8ef6000}, - {0xb8ef8000}, {0xb8efa000}, {0xb8efc000}, {0xb8efe000}, - {0xb8f00000}, {0xb8f02000}, {0xb8f04000}, {0xb8f06000}, - {0xb8f08000}, {0xb8f0a000}, {0xb8f0c000}, {0xb8f0e000}, - {0xb8f10000}, {0xb8f12000}, {0xb8f14000}, {0xb8f16000}, - {0xb8f18000}, {0xb8f1a000}, {0xb8f1c000}, {0xb8f1e000}, - {0xb8f20000}, {0xb8f22000}, {0xb8f24000}, {0xb8f26000}, - {0xb8f28000}, {0xb8f2a000}, {0xb8f2c000}, {0xb8f2e000}, - {0xb8f30000}, {0xb8f32000}, {0xb8f34000}, {0xb8f36000}, - {0xb8f38000}, {0xb8f3a000}, {0xb8f3c000}, {0xb8f3e000}, - {0xb8f40000}, {0xb8f42000}, {0xb8f44000}, {0xb8f46000}, - {0xb8f48000}, {0xb8f4a000}, {0xb8f4c000}, {0xb8f4e000}, - {0xb8f50000}, {0xb8f52000}, {0xb8f54000}, {0xb8f56000}, - {0xb8f58000}, {0xb8f5a000}, {0xb8f5c000}, {0xb8f5e000}, - {0xb8f60000}, {0xb8f62000}, {0xb8f64000}, {0xb8f66000}, - {0xb8f68000}, {0xb8f6a000}, {0xb8f6c000}, {0xb8f6e000}, - {0xb8f70000}, {0xb8f72000}, {0xb8f74000}, {0xb8f76000}, - {0xb8f78000}, {0xb8f7a000}, {0xb8f7c000}, {0xb8f7e000}, - {0xb8f80000}, {0xb8f82000}, {0xb8f84000}, {0xb8f86000}, - {0xb8f88000}, {0xb8f8a000}, {0xb8f8c000}, {0xb8f8e000}, - {0xb8f90000}, {0xb8f92000}, {0xb8f94000}, {0xb8f96000}, - {0xb8f98000}, {0xb8f9a000}, {0xb8f9c000}, {0xb8f9e000}, - {0xb8fa0000}, {0xb8fa2000}, {0xb8fa4000}, {0xb8fa6000}, - {0xb8fa8000}, {0xb8faa000}, {0xb8fac000}, {0xb8fae000}, - {0xb8fb0000}, {0xb8fb2000}, {0xb8fb4000}, {0xb8fb6000}, - {0xb8fb8000}, {0xb8fba000}, {0xb8fbc000}, {0xb8fbe000}, - {0xb8fc0000}, {0xb8fc2000}, {0xb8fc4000}, {0xb8fc6000}, - {0xb8fc8000}, {0xb8fca000}, {0xb8fcc000}, {0xb8fce000}, - {0xb8fd0000}, {0xb8fd2000}, {0xb8fd4000}, {0xb8fd6000}, - {0xb8fd8000}, {0xb8fda000}, {0xb8fdc000}, {0xb8fde000}, - {0xb8fe0000}, {0xb8fe2000}, {0xb8fe4000}, {0xb8fe6000}, - {0xb8fe8000}, {0xb8fea000}, {0xb8fec000}, {0xb8fee000}, - {0xb8ff0000}, {0xb8ff2000}, {0xb8ff4000}, {0xb8ff6000}, - {0xb8ff8000}, {0xb8ffa000}, {0xb8ffc000}, {0xb8ffe000}, - {0xb9000000}, {0xb9002000}, {0xb9004000}, {0xb9006000}, - {0xb9008000}, {0xb900a000}, {0xb900c000}, {0xb900e000}, - {0xb9010000}, {0xb9012000}, {0xb9014000}, {0xb9016000}, - {0xb9018000}, {0xb901a000}, {0xb901c000}, {0xb901e000}, - {0xb9020000}, {0xb9022000}, {0xb9024000}, {0xb9026000}, - {0xb9028000}, {0xb902a000}, {0xb902c000}, {0xb902e000}, - {0xb9030000}, {0xb9032000}, {0xb9034000}, {0xb9036000}, - {0xb9038000}, {0xb903a000}, {0xb903c000}, {0xb903e000}, - {0xb9040000}, {0xb9042000}, {0xb9044000}, {0xb9046000}, - {0xb9048000}, {0xb904a000}, {0xb904c000}, {0xb904e000}, - {0xb9050000}, {0xb9052000}, {0xb9054000}, {0xb9056000}, - {0xb9058000}, {0xb905a000}, {0xb905c000}, {0xb905e000}, - {0xb9060000}, {0xb9062000}, {0xb9064000}, {0xb9066000}, - {0xb9068000}, {0xb906a000}, {0xb906c000}, {0xb906e000}, - {0xb9070000}, {0xb9072000}, {0xb9074000}, {0xb9076000}, - {0xb9078000}, {0xb907a000}, {0xb907c000}, {0xb907e000}, - {0xb9080000}, {0xb9082000}, {0xb9084000}, {0xb9086000}, - {0xb9088000}, {0xb908a000}, {0xb908c000}, {0xb908e000}, - {0xb9090000}, {0xb9092000}, {0xb9094000}, {0xb9096000}, - {0xb9098000}, {0xb909a000}, {0xb909c000}, {0xb909e000}, - {0xb90a0000}, {0xb90a2000}, {0xb90a4000}, {0xb90a6000}, - {0xb90a8000}, {0xb90aa000}, {0xb90ac000}, {0xb90ae000}, - {0xb90b0000}, {0xb90b2000}, {0xb90b4000}, {0xb90b6000}, - {0xb90b8000}, {0xb90ba000}, {0xb90bc000}, {0xb90be000}, - {0xb90c0000}, {0xb90c2000}, {0xb90c4000}, {0xb90c6000}, - {0xb90c8000}, {0xb90ca000}, {0xb90cc000}, {0xb90ce000}, - {0xb90d0000}, {0xb90d2000}, {0xb90d4000}, {0xb90d6000}, - {0xb90d8000}, {0xb90da000}, {0xb90dc000}, {0xb90de000}, - {0xb90e0000}, {0xb90e2000}, {0xb90e4000}, {0xb90e6000}, - {0xb90e8000}, {0xb90ea000}, {0xb90ec000}, {0xb90ee000}, - {0xb90f0000}, {0xb90f2000}, {0xb90f4000}, {0xb90f6000}, - {0xb90f8000}, {0xb90fa000}, {0xb90fc000}, {0xb90fe000}, - {0xb9100000}, {0xb9102000}, {0xb9104000}, {0xb9106000}, - {0xb9108000}, {0xb910a000}, {0xb910c000}, {0xb910e000}, - {0xb9110000}, {0xb9112000}, {0xb9114000}, {0xb9116000}, - {0xb9118000}, {0xb911a000}, {0xb911c000}, {0xb911e000}, - {0xb9120000}, {0xb9122000}, {0xb9124000}, {0xb9126000}, - {0xb9128000}, {0xb912a000}, {0xb912c000}, {0xb912e000}, - {0xb9130000}, {0xb9132000}, {0xb9134000}, {0xb9136000}, - {0xb9138000}, {0xb913a000}, {0xb913c000}, {0xb913e000}, - {0xb9140000}, {0xb9142000}, {0xb9144000}, {0xb9146000}, - {0xb9148000}, {0xb914a000}, {0xb914c000}, {0xb914e000}, - {0xb9150000}, {0xb9152000}, {0xb9154000}, {0xb9156000}, - {0xb9158000}, {0xb915a000}, {0xb915c000}, {0xb915e000}, - {0xb9160000}, {0xb9162000}, {0xb9164000}, {0xb9166000}, - {0xb9168000}, {0xb916a000}, {0xb916c000}, {0xb916e000}, - {0xb9170000}, {0xb9172000}, {0xb9174000}, {0xb9176000}, - {0xb9178000}, {0xb917a000}, {0xb917c000}, {0xb917e000}, - {0xb9180000}, {0xb9182000}, {0xb9184000}, {0xb9186000}, - {0xb9188000}, {0xb918a000}, {0xb918c000}, {0xb918e000}, - {0xb9190000}, {0xb9192000}, {0xb9194000}, {0xb9196000}, - {0xb9198000}, {0xb919a000}, {0xb919c000}, {0xb919e000}, - {0xb91a0000}, {0xb91a2000}, {0xb91a4000}, {0xb91a6000}, - {0xb91a8000}, {0xb91aa000}, {0xb91ac000}, {0xb91ae000}, - {0xb91b0000}, {0xb91b2000}, {0xb91b4000}, {0xb91b6000}, - {0xb91b8000}, {0xb91ba000}, {0xb91bc000}, {0xb91be000}, - {0xb91c0000}, {0xb91c2000}, {0xb91c4000}, {0xb91c6000}, - {0xb91c8000}, {0xb91ca000}, {0xb91cc000}, {0xb91ce000}, - {0xb91d0000}, {0xb91d2000}, {0xb91d4000}, {0xb91d6000}, - {0xb91d8000}, {0xb91da000}, {0xb91dc000}, {0xb91de000}, - {0xb91e0000}, {0xb91e2000}, {0xb91e4000}, {0xb91e6000}, - {0xb91e8000}, {0xb91ea000}, {0xb91ec000}, {0xb91ee000}, - {0xb91f0000}, {0xb91f2000}, {0xb91f4000}, {0xb91f6000}, - {0xb91f8000}, {0xb91fa000}, {0xb91fc000}, {0xb91fe000}, - {0xb9200000}, {0xb9202000}, {0xb9204000}, {0xb9206000}, - {0xb9208000}, {0xb920a000}, {0xb920c000}, {0xb920e000}, - {0xb9210000}, {0xb9212000}, {0xb9214000}, {0xb9216000}, - {0xb9218000}, {0xb921a000}, {0xb921c000}, {0xb921e000}, - {0xb9220000}, {0xb9222000}, {0xb9224000}, {0xb9226000}, - {0xb9228000}, {0xb922a000}, {0xb922c000}, {0xb922e000}, - {0xb9230000}, {0xb9232000}, {0xb9234000}, {0xb9236000}, - {0xb9238000}, {0xb923a000}, {0xb923c000}, {0xb923e000}, - {0xb9240000}, {0xb9242000}, {0xb9244000}, {0xb9246000}, - {0xb9248000}, {0xb924a000}, {0xb924c000}, {0xb924e000}, - {0xb9250000}, {0xb9252000}, {0xb9254000}, {0xb9256000}, - {0xb9258000}, {0xb925a000}, {0xb925c000}, {0xb925e000}, - {0xb9260000}, {0xb9262000}, {0xb9264000}, {0xb9266000}, - {0xb9268000}, {0xb926a000}, {0xb926c000}, {0xb926e000}, - {0xb9270000}, {0xb9272000}, {0xb9274000}, {0xb9276000}, - {0xb9278000}, {0xb927a000}, {0xb927c000}, {0xb927e000}, - {0xb9280000}, {0xb9282000}, {0xb9284000}, {0xb9286000}, - {0xb9288000}, {0xb928a000}, {0xb928c000}, {0xb928e000}, - {0xb9290000}, {0xb9292000}, {0xb9294000}, {0xb9296000}, - {0xb9298000}, {0xb929a000}, {0xb929c000}, {0xb929e000}, - {0xb92a0000}, {0xb92a2000}, {0xb92a4000}, {0xb92a6000}, - {0xb92a8000}, {0xb92aa000}, {0xb92ac000}, {0xb92ae000}, - {0xb92b0000}, {0xb92b2000}, {0xb92b4000}, {0xb92b6000}, - {0xb92b8000}, {0xb92ba000}, {0xb92bc000}, {0xb92be000}, - {0xb92c0000}, {0xb92c2000}, {0xb92c4000}, {0xb92c6000}, - {0xb92c8000}, {0xb92ca000}, {0xb92cc000}, {0xb92ce000}, - {0xb92d0000}, {0xb92d2000}, {0xb92d4000}, {0xb92d6000}, - {0xb92d8000}, {0xb92da000}, {0xb92dc000}, {0xb92de000}, - {0xb92e0000}, {0xb92e2000}, {0xb92e4000}, {0xb92e6000}, - {0xb92e8000}, {0xb92ea000}, {0xb92ec000}, {0xb92ee000}, - {0xb92f0000}, {0xb92f2000}, {0xb92f4000}, {0xb92f6000}, - {0xb92f8000}, {0xb92fa000}, {0xb92fc000}, {0xb92fe000}, - {0xb9300000}, {0xb9302000}, {0xb9304000}, {0xb9306000}, - {0xb9308000}, {0xb930a000}, {0xb930c000}, {0xb930e000}, - {0xb9310000}, {0xb9312000}, {0xb9314000}, {0xb9316000}, - {0xb9318000}, {0xb931a000}, {0xb931c000}, {0xb931e000}, - {0xb9320000}, {0xb9322000}, {0xb9324000}, {0xb9326000}, - {0xb9328000}, {0xb932a000}, {0xb932c000}, {0xb932e000}, - {0xb9330000}, {0xb9332000}, {0xb9334000}, {0xb9336000}, - {0xb9338000}, {0xb933a000}, {0xb933c000}, {0xb933e000}, - {0xb9340000}, {0xb9342000}, {0xb9344000}, {0xb9346000}, - {0xb9348000}, {0xb934a000}, {0xb934c000}, {0xb934e000}, - {0xb9350000}, {0xb9352000}, {0xb9354000}, {0xb9356000}, - {0xb9358000}, {0xb935a000}, {0xb935c000}, {0xb935e000}, - {0xb9360000}, {0xb9362000}, {0xb9364000}, {0xb9366000}, - {0xb9368000}, {0xb936a000}, {0xb936c000}, {0xb936e000}, - {0xb9370000}, {0xb9372000}, {0xb9374000}, {0xb9376000}, - {0xb9378000}, {0xb937a000}, {0xb937c000}, {0xb937e000}, - {0xb9380000}, {0xb9382000}, {0xb9384000}, {0xb9386000}, - {0xb9388000}, {0xb938a000}, {0xb938c000}, {0xb938e000}, - {0xb9390000}, {0xb9392000}, {0xb9394000}, {0xb9396000}, - {0xb9398000}, {0xb939a000}, {0xb939c000}, {0xb939e000}, - {0xb93a0000}, {0xb93a2000}, {0xb93a4000}, {0xb93a6000}, - {0xb93a8000}, {0xb93aa000}, {0xb93ac000}, {0xb93ae000}, - {0xb93b0000}, {0xb93b2000}, {0xb93b4000}, {0xb93b6000}, - {0xb93b8000}, {0xb93ba000}, {0xb93bc000}, {0xb93be000}, - {0xb93c0000}, {0xb93c2000}, {0xb93c4000}, {0xb93c6000}, - {0xb93c8000}, {0xb93ca000}, {0xb93cc000}, {0xb93ce000}, - {0xb93d0000}, {0xb93d2000}, {0xb93d4000}, {0xb93d6000}, - {0xb93d8000}, {0xb93da000}, {0xb93dc000}, {0xb93de000}, - {0xb93e0000}, {0xb93e2000}, {0xb93e4000}, {0xb93e6000}, - {0xb93e8000}, {0xb93ea000}, {0xb93ec000}, {0xb93ee000}, - {0xb93f0000}, {0xb93f2000}, {0xb93f4000}, {0xb93f6000}, - {0xb93f8000}, {0xb93fa000}, {0xb93fc000}, {0xb93fe000}, - {0xb9400000}, {0xb9402000}, {0xb9404000}, {0xb9406000}, - {0xb9408000}, {0xb940a000}, {0xb940c000}, {0xb940e000}, - {0xb9410000}, {0xb9412000}, {0xb9414000}, {0xb9416000}, - {0xb9418000}, {0xb941a000}, {0xb941c000}, {0xb941e000}, - {0xb9420000}, {0xb9422000}, {0xb9424000}, {0xb9426000}, - {0xb9428000}, {0xb942a000}, {0xb942c000}, {0xb942e000}, - {0xb9430000}, {0xb9432000}, {0xb9434000}, {0xb9436000}, - {0xb9438000}, {0xb943a000}, {0xb943c000}, {0xb943e000}, - {0xb9440000}, {0xb9442000}, {0xb9444000}, {0xb9446000}, - {0xb9448000}, {0xb944a000}, {0xb944c000}, {0xb944e000}, - {0xb9450000}, {0xb9452000}, {0xb9454000}, {0xb9456000}, - {0xb9458000}, {0xb945a000}, {0xb945c000}, {0xb945e000}, - {0xb9460000}, {0xb9462000}, {0xb9464000}, {0xb9466000}, - {0xb9468000}, {0xb946a000}, {0xb946c000}, {0xb946e000}, - {0xb9470000}, {0xb9472000}, {0xb9474000}, {0xb9476000}, - {0xb9478000}, {0xb947a000}, {0xb947c000}, {0xb947e000}, - {0xb9480000}, {0xb9482000}, {0xb9484000}, {0xb9486000}, - {0xb9488000}, {0xb948a000}, {0xb948c000}, {0xb948e000}, - {0xb9490000}, {0xb9492000}, {0xb9494000}, {0xb9496000}, - {0xb9498000}, {0xb949a000}, {0xb949c000}, {0xb949e000}, - {0xb94a0000}, {0xb94a2000}, {0xb94a4000}, {0xb94a6000}, - {0xb94a8000}, {0xb94aa000}, {0xb94ac000}, {0xb94ae000}, - {0xb94b0000}, {0xb94b2000}, {0xb94b4000}, {0xb94b6000}, - {0xb94b8000}, {0xb94ba000}, {0xb94bc000}, {0xb94be000}, - {0xb94c0000}, {0xb94c2000}, {0xb94c4000}, {0xb94c6000}, - {0xb94c8000}, {0xb94ca000}, {0xb94cc000}, {0xb94ce000}, - {0xb94d0000}, {0xb94d2000}, {0xb94d4000}, {0xb94d6000}, - {0xb94d8000}, {0xb94da000}, {0xb94dc000}, {0xb94de000}, - {0xb94e0000}, {0xb94e2000}, {0xb94e4000}, {0xb94e6000}, - {0xb94e8000}, {0xb94ea000}, {0xb94ec000}, {0xb94ee000}, - {0xb94f0000}, {0xb94f2000}, {0xb94f4000}, {0xb94f6000}, - {0xb94f8000}, {0xb94fa000}, {0xb94fc000}, {0xb94fe000}, - {0xb9500000}, {0xb9502000}, {0xb9504000}, {0xb9506000}, - {0xb9508000}, {0xb950a000}, {0xb950c000}, {0xb950e000}, - {0xb9510000}, {0xb9512000}, {0xb9514000}, {0xb9516000}, - {0xb9518000}, {0xb951a000}, {0xb951c000}, {0xb951e000}, - {0xb9520000}, {0xb9522000}, {0xb9524000}, {0xb9526000}, - {0xb9528000}, {0xb952a000}, {0xb952c000}, {0xb952e000}, - {0xb9530000}, {0xb9532000}, {0xb9534000}, {0xb9536000}, - {0xb9538000}, {0xb953a000}, {0xb953c000}, {0xb953e000}, - {0xb9540000}, {0xb9542000}, {0xb9544000}, {0xb9546000}, - {0xb9548000}, {0xb954a000}, {0xb954c000}, {0xb954e000}, - {0xb9550000}, {0xb9552000}, {0xb9554000}, {0xb9556000}, - {0xb9558000}, {0xb955a000}, {0xb955c000}, {0xb955e000}, - {0xb9560000}, {0xb9562000}, {0xb9564000}, {0xb9566000}, - {0xb9568000}, {0xb956a000}, {0xb956c000}, {0xb956e000}, - {0xb9570000}, {0xb9572000}, {0xb9574000}, {0xb9576000}, - {0xb9578000}, {0xb957a000}, {0xb957c000}, {0xb957e000}, - {0xb9580000}, {0xb9582000}, {0xb9584000}, {0xb9586000}, - {0xb9588000}, {0xb958a000}, {0xb958c000}, {0xb958e000}, - {0xb9590000}, {0xb9592000}, {0xb9594000}, {0xb9596000}, - {0xb9598000}, {0xb959a000}, {0xb959c000}, {0xb959e000}, - {0xb95a0000}, {0xb95a2000}, {0xb95a4000}, {0xb95a6000}, - {0xb95a8000}, {0xb95aa000}, {0xb95ac000}, {0xb95ae000}, - {0xb95b0000}, {0xb95b2000}, {0xb95b4000}, {0xb95b6000}, - {0xb95b8000}, {0xb95ba000}, {0xb95bc000}, {0xb95be000}, - {0xb95c0000}, {0xb95c2000}, {0xb95c4000}, {0xb95c6000}, - {0xb95c8000}, {0xb95ca000}, {0xb95cc000}, {0xb95ce000}, - {0xb95d0000}, {0xb95d2000}, {0xb95d4000}, {0xb95d6000}, - {0xb95d8000}, {0xb95da000}, {0xb95dc000}, {0xb95de000}, - {0xb95e0000}, {0xb95e2000}, {0xb95e4000}, {0xb95e6000}, - {0xb95e8000}, {0xb95ea000}, {0xb95ec000}, {0xb95ee000}, - {0xb95f0000}, {0xb95f2000}, {0xb95f4000}, {0xb95f6000}, - {0xb95f8000}, {0xb95fa000}, {0xb95fc000}, {0xb95fe000}, - {0xb9600000}, {0xb9602000}, {0xb9604000}, {0xb9606000}, - {0xb9608000}, {0xb960a000}, {0xb960c000}, {0xb960e000}, - {0xb9610000}, {0xb9612000}, {0xb9614000}, {0xb9616000}, - {0xb9618000}, {0xb961a000}, {0xb961c000}, {0xb961e000}, - {0xb9620000}, {0xb9622000}, {0xb9624000}, {0xb9626000}, - {0xb9628000}, {0xb962a000}, {0xb962c000}, {0xb962e000}, - {0xb9630000}, {0xb9632000}, {0xb9634000}, {0xb9636000}, - {0xb9638000}, {0xb963a000}, {0xb963c000}, {0xb963e000}, - {0xb9640000}, {0xb9642000}, {0xb9644000}, {0xb9646000}, - {0xb9648000}, {0xb964a000}, {0xb964c000}, {0xb964e000}, - {0xb9650000}, {0xb9652000}, {0xb9654000}, {0xb9656000}, - {0xb9658000}, {0xb965a000}, {0xb965c000}, {0xb965e000}, - {0xb9660000}, {0xb9662000}, {0xb9664000}, {0xb9666000}, - {0xb9668000}, {0xb966a000}, {0xb966c000}, {0xb966e000}, - {0xb9670000}, {0xb9672000}, {0xb9674000}, {0xb9676000}, - {0xb9678000}, {0xb967a000}, {0xb967c000}, {0xb967e000}, - {0xb9680000}, {0xb9682000}, {0xb9684000}, {0xb9686000}, - {0xb9688000}, {0xb968a000}, {0xb968c000}, {0xb968e000}, - {0xb9690000}, {0xb9692000}, {0xb9694000}, {0xb9696000}, - {0xb9698000}, {0xb969a000}, {0xb969c000}, {0xb969e000}, - {0xb96a0000}, {0xb96a2000}, {0xb96a4000}, {0xb96a6000}, - {0xb96a8000}, {0xb96aa000}, {0xb96ac000}, {0xb96ae000}, - {0xb96b0000}, {0xb96b2000}, {0xb96b4000}, {0xb96b6000}, - {0xb96b8000}, {0xb96ba000}, {0xb96bc000}, {0xb96be000}, - {0xb96c0000}, {0xb96c2000}, {0xb96c4000}, {0xb96c6000}, - {0xb96c8000}, {0xb96ca000}, {0xb96cc000}, {0xb96ce000}, - {0xb96d0000}, {0xb96d2000}, {0xb96d4000}, {0xb96d6000}, - {0xb96d8000}, {0xb96da000}, {0xb96dc000}, {0xb96de000}, - {0xb96e0000}, {0xb96e2000}, {0xb96e4000}, {0xb96e6000}, - {0xb96e8000}, {0xb96ea000}, {0xb96ec000}, {0xb96ee000}, - {0xb96f0000}, {0xb96f2000}, {0xb96f4000}, {0xb96f6000}, - {0xb96f8000}, {0xb96fa000}, {0xb96fc000}, {0xb96fe000}, - {0xb9700000}, {0xb9702000}, {0xb9704000}, {0xb9706000}, - {0xb9708000}, {0xb970a000}, {0xb970c000}, {0xb970e000}, - {0xb9710000}, {0xb9712000}, {0xb9714000}, {0xb9716000}, - {0xb9718000}, {0xb971a000}, {0xb971c000}, {0xb971e000}, - {0xb9720000}, {0xb9722000}, {0xb9724000}, {0xb9726000}, - {0xb9728000}, {0xb972a000}, {0xb972c000}, {0xb972e000}, - {0xb9730000}, {0xb9732000}, {0xb9734000}, {0xb9736000}, - {0xb9738000}, {0xb973a000}, {0xb973c000}, {0xb973e000}, - {0xb9740000}, {0xb9742000}, {0xb9744000}, {0xb9746000}, - {0xb9748000}, {0xb974a000}, {0xb974c000}, {0xb974e000}, - {0xb9750000}, {0xb9752000}, {0xb9754000}, {0xb9756000}, - {0xb9758000}, {0xb975a000}, {0xb975c000}, {0xb975e000}, - {0xb9760000}, {0xb9762000}, {0xb9764000}, {0xb9766000}, - {0xb9768000}, {0xb976a000}, {0xb976c000}, {0xb976e000}, - {0xb9770000}, {0xb9772000}, {0xb9774000}, {0xb9776000}, - {0xb9778000}, {0xb977a000}, {0xb977c000}, {0xb977e000}, - {0xb9780000}, {0xb9782000}, {0xb9784000}, {0xb9786000}, - {0xb9788000}, {0xb978a000}, {0xb978c000}, {0xb978e000}, - {0xb9790000}, {0xb9792000}, {0xb9794000}, {0xb9796000}, - {0xb9798000}, {0xb979a000}, {0xb979c000}, {0xb979e000}, - {0xb97a0000}, {0xb97a2000}, {0xb97a4000}, {0xb97a6000}, - {0xb97a8000}, {0xb97aa000}, {0xb97ac000}, {0xb97ae000}, - {0xb97b0000}, {0xb97b2000}, {0xb97b4000}, {0xb97b6000}, - {0xb97b8000}, {0xb97ba000}, {0xb97bc000}, {0xb97be000}, - {0xb97c0000}, {0xb97c2000}, {0xb97c4000}, {0xb97c6000}, - {0xb97c8000}, {0xb97ca000}, {0xb97cc000}, {0xb97ce000}, - {0xb97d0000}, {0xb97d2000}, {0xb97d4000}, {0xb97d6000}, - {0xb97d8000}, {0xb97da000}, {0xb97dc000}, {0xb97de000}, - {0xb97e0000}, {0xb97e2000}, {0xb97e4000}, {0xb97e6000}, - {0xb97e8000}, {0xb97ea000}, {0xb97ec000}, {0xb97ee000}, - {0xb97f0000}, {0xb97f2000}, {0xb97f4000}, {0xb97f6000}, - {0xb97f8000}, {0xb97fa000}, {0xb97fc000}, {0xb97fe000}, - {0xb9800000}, {0xb9802000}, {0xb9804000}, {0xb9806000}, - {0xb9808000}, {0xb980a000}, {0xb980c000}, {0xb980e000}, - {0xb9810000}, {0xb9812000}, {0xb9814000}, {0xb9816000}, - {0xb9818000}, {0xb981a000}, {0xb981c000}, {0xb981e000}, - {0xb9820000}, {0xb9822000}, {0xb9824000}, {0xb9826000}, - {0xb9828000}, {0xb982a000}, {0xb982c000}, {0xb982e000}, - {0xb9830000}, {0xb9832000}, {0xb9834000}, {0xb9836000}, - {0xb9838000}, {0xb983a000}, {0xb983c000}, {0xb983e000}, - {0xb9840000}, {0xb9842000}, {0xb9844000}, {0xb9846000}, - {0xb9848000}, {0xb984a000}, {0xb984c000}, {0xb984e000}, - {0xb9850000}, {0xb9852000}, {0xb9854000}, {0xb9856000}, - {0xb9858000}, {0xb985a000}, {0xb985c000}, {0xb985e000}, - {0xb9860000}, {0xb9862000}, {0xb9864000}, {0xb9866000}, - {0xb9868000}, {0xb986a000}, {0xb986c000}, {0xb986e000}, - {0xb9870000}, {0xb9872000}, {0xb9874000}, {0xb9876000}, - {0xb9878000}, {0xb987a000}, {0xb987c000}, {0xb987e000}, - {0xb9880000}, {0xb9882000}, {0xb9884000}, {0xb9886000}, - {0xb9888000}, {0xb988a000}, {0xb988c000}, {0xb988e000}, - {0xb9890000}, {0xb9892000}, {0xb9894000}, {0xb9896000}, - {0xb9898000}, {0xb989a000}, {0xb989c000}, {0xb989e000}, - {0xb98a0000}, {0xb98a2000}, {0xb98a4000}, {0xb98a6000}, - {0xb98a8000}, {0xb98aa000}, {0xb98ac000}, {0xb98ae000}, - {0xb98b0000}, {0xb98b2000}, {0xb98b4000}, {0xb98b6000}, - {0xb98b8000}, {0xb98ba000}, {0xb98bc000}, {0xb98be000}, - {0xb98c0000}, {0xb98c2000}, {0xb98c4000}, {0xb98c6000}, - {0xb98c8000}, {0xb98ca000}, {0xb98cc000}, {0xb98ce000}, - {0xb98d0000}, {0xb98d2000}, {0xb98d4000}, {0xb98d6000}, - {0xb98d8000}, {0xb98da000}, {0xb98dc000}, {0xb98de000}, - {0xb98e0000}, {0xb98e2000}, {0xb98e4000}, {0xb98e6000}, - {0xb98e8000}, {0xb98ea000}, {0xb98ec000}, {0xb98ee000}, - {0xb98f0000}, {0xb98f2000}, {0xb98f4000}, {0xb98f6000}, - {0xb98f8000}, {0xb98fa000}, {0xb98fc000}, {0xb98fe000}, - {0xb9900000}, {0xb9902000}, {0xb9904000}, {0xb9906000}, - {0xb9908000}, {0xb990a000}, {0xb990c000}, {0xb990e000}, - {0xb9910000}, {0xb9912000}, {0xb9914000}, {0xb9916000}, - {0xb9918000}, {0xb991a000}, {0xb991c000}, {0xb991e000}, - {0xb9920000}, {0xb9922000}, {0xb9924000}, {0xb9926000}, - {0xb9928000}, {0xb992a000}, {0xb992c000}, {0xb992e000}, - {0xb9930000}, {0xb9932000}, {0xb9934000}, {0xb9936000}, - {0xb9938000}, {0xb993a000}, {0xb993c000}, {0xb993e000}, - {0xb9940000}, {0xb9942000}, {0xb9944000}, {0xb9946000}, - {0xb9948000}, {0xb994a000}, {0xb994c000}, {0xb994e000}, - {0xb9950000}, {0xb9952000}, {0xb9954000}, {0xb9956000}, - {0xb9958000}, {0xb995a000}, {0xb995c000}, {0xb995e000}, - {0xb9960000}, {0xb9962000}, {0xb9964000}, {0xb9966000}, - {0xb9968000}, {0xb996a000}, {0xb996c000}, {0xb996e000}, - {0xb9970000}, {0xb9972000}, {0xb9974000}, {0xb9976000}, - {0xb9978000}, {0xb997a000}, {0xb997c000}, {0xb997e000}, - {0xb9980000}, {0xb9982000}, {0xb9984000}, {0xb9986000}, - {0xb9988000}, {0xb998a000}, {0xb998c000}, {0xb998e000}, - {0xb9990000}, {0xb9992000}, {0xb9994000}, {0xb9996000}, - {0xb9998000}, {0xb999a000}, {0xb999c000}, {0xb999e000}, - {0xb99a0000}, {0xb99a2000}, {0xb99a4000}, {0xb99a6000}, - {0xb99a8000}, {0xb99aa000}, {0xb99ac000}, {0xb99ae000}, - {0xb99b0000}, {0xb99b2000}, {0xb99b4000}, {0xb99b6000}, - {0xb99b8000}, {0xb99ba000}, {0xb99bc000}, {0xb99be000}, - {0xb99c0000}, {0xb99c2000}, {0xb99c4000}, {0xb99c6000}, - {0xb99c8000}, {0xb99ca000}, {0xb99cc000}, {0xb99ce000}, - {0xb99d0000}, {0xb99d2000}, {0xb99d4000}, {0xb99d6000}, - {0xb99d8000}, {0xb99da000}, {0xb99dc000}, {0xb99de000}, - {0xb99e0000}, {0xb99e2000}, {0xb99e4000}, {0xb99e6000}, - {0xb99e8000}, {0xb99ea000}, {0xb99ec000}, {0xb99ee000}, - {0xb99f0000}, {0xb99f2000}, {0xb99f4000}, {0xb99f6000}, - {0xb99f8000}, {0xb99fa000}, {0xb99fc000}, {0xb99fe000}, - {0xb9a00000}, {0xb9a02000}, {0xb9a04000}, {0xb9a06000}, - {0xb9a08000}, {0xb9a0a000}, {0xb9a0c000}, {0xb9a0e000}, - {0xb9a10000}, {0xb9a12000}, {0xb9a14000}, {0xb9a16000}, - {0xb9a18000}, {0xb9a1a000}, {0xb9a1c000}, {0xb9a1e000}, - {0xb9a20000}, {0xb9a22000}, {0xb9a24000}, {0xb9a26000}, - {0xb9a28000}, {0xb9a2a000}, {0xb9a2c000}, {0xb9a2e000}, - {0xb9a30000}, {0xb9a32000}, {0xb9a34000}, {0xb9a36000}, - {0xb9a38000}, {0xb9a3a000}, {0xb9a3c000}, {0xb9a3e000}, - {0xb9a40000}, {0xb9a42000}, {0xb9a44000}, {0xb9a46000}, - {0xb9a48000}, {0xb9a4a000}, {0xb9a4c000}, {0xb9a4e000}, - {0xb9a50000}, {0xb9a52000}, {0xb9a54000}, {0xb9a56000}, - {0xb9a58000}, {0xb9a5a000}, {0xb9a5c000}, {0xb9a5e000}, - {0xb9a60000}, {0xb9a62000}, {0xb9a64000}, {0xb9a66000}, - {0xb9a68000}, {0xb9a6a000}, {0xb9a6c000}, {0xb9a6e000}, - {0xb9a70000}, {0xb9a72000}, {0xb9a74000}, {0xb9a76000}, - {0xb9a78000}, {0xb9a7a000}, {0xb9a7c000}, {0xb9a7e000}, - {0xb9a80000}, {0xb9a82000}, {0xb9a84000}, {0xb9a86000}, - {0xb9a88000}, {0xb9a8a000}, {0xb9a8c000}, {0xb9a8e000}, - {0xb9a90000}, {0xb9a92000}, {0xb9a94000}, {0xb9a96000}, - {0xb9a98000}, {0xb9a9a000}, {0xb9a9c000}, {0xb9a9e000}, - {0xb9aa0000}, {0xb9aa2000}, {0xb9aa4000}, {0xb9aa6000}, - {0xb9aa8000}, {0xb9aaa000}, {0xb9aac000}, {0xb9aae000}, - {0xb9ab0000}, {0xb9ab2000}, {0xb9ab4000}, {0xb9ab6000}, - {0xb9ab8000}, {0xb9aba000}, {0xb9abc000}, {0xb9abe000}, - {0xb9ac0000}, {0xb9ac2000}, {0xb9ac4000}, {0xb9ac6000}, - {0xb9ac8000}, {0xb9aca000}, {0xb9acc000}, {0xb9ace000}, - {0xb9ad0000}, {0xb9ad2000}, {0xb9ad4000}, {0xb9ad6000}, - {0xb9ad8000}, {0xb9ada000}, {0xb9adc000}, {0xb9ade000}, - {0xb9ae0000}, {0xb9ae2000}, {0xb9ae4000}, {0xb9ae6000}, - {0xb9ae8000}, {0xb9aea000}, {0xb9aec000}, {0xb9aee000}, - {0xb9af0000}, {0xb9af2000}, {0xb9af4000}, {0xb9af6000}, - {0xb9af8000}, {0xb9afa000}, {0xb9afc000}, {0xb9afe000}, - {0xb9b00000}, {0xb9b02000}, {0xb9b04000}, {0xb9b06000}, - {0xb9b08000}, {0xb9b0a000}, {0xb9b0c000}, {0xb9b0e000}, - {0xb9b10000}, {0xb9b12000}, {0xb9b14000}, {0xb9b16000}, - {0xb9b18000}, {0xb9b1a000}, {0xb9b1c000}, {0xb9b1e000}, - {0xb9b20000}, {0xb9b22000}, {0xb9b24000}, {0xb9b26000}, - {0xb9b28000}, {0xb9b2a000}, {0xb9b2c000}, {0xb9b2e000}, - {0xb9b30000}, {0xb9b32000}, {0xb9b34000}, {0xb9b36000}, - {0xb9b38000}, {0xb9b3a000}, {0xb9b3c000}, {0xb9b3e000}, - {0xb9b40000}, {0xb9b42000}, {0xb9b44000}, {0xb9b46000}, - {0xb9b48000}, {0xb9b4a000}, {0xb9b4c000}, {0xb9b4e000}, - {0xb9b50000}, {0xb9b52000}, {0xb9b54000}, {0xb9b56000}, - {0xb9b58000}, {0xb9b5a000}, {0xb9b5c000}, {0xb9b5e000}, - {0xb9b60000}, {0xb9b62000}, {0xb9b64000}, {0xb9b66000}, - {0xb9b68000}, {0xb9b6a000}, {0xb9b6c000}, {0xb9b6e000}, - {0xb9b70000}, {0xb9b72000}, {0xb9b74000}, {0xb9b76000}, - {0xb9b78000}, {0xb9b7a000}, {0xb9b7c000}, {0xb9b7e000}, - {0xb9b80000}, {0xb9b82000}, {0xb9b84000}, {0xb9b86000}, - {0xb9b88000}, {0xb9b8a000}, {0xb9b8c000}, {0xb9b8e000}, - {0xb9b90000}, {0xb9b92000}, {0xb9b94000}, {0xb9b96000}, - {0xb9b98000}, {0xb9b9a000}, {0xb9b9c000}, {0xb9b9e000}, - {0xb9ba0000}, {0xb9ba2000}, {0xb9ba4000}, {0xb9ba6000}, - {0xb9ba8000}, {0xb9baa000}, {0xb9bac000}, {0xb9bae000}, - {0xb9bb0000}, {0xb9bb2000}, {0xb9bb4000}, {0xb9bb6000}, - {0xb9bb8000}, {0xb9bba000}, {0xb9bbc000}, {0xb9bbe000}, - {0xb9bc0000}, {0xb9bc2000}, {0xb9bc4000}, {0xb9bc6000}, - {0xb9bc8000}, {0xb9bca000}, {0xb9bcc000}, {0xb9bce000}, - {0xb9bd0000}, {0xb9bd2000}, {0xb9bd4000}, {0xb9bd6000}, - {0xb9bd8000}, {0xb9bda000}, {0xb9bdc000}, {0xb9bde000}, - {0xb9be0000}, {0xb9be2000}, {0xb9be4000}, {0xb9be6000}, - {0xb9be8000}, {0xb9bea000}, {0xb9bec000}, {0xb9bee000}, - {0xb9bf0000}, {0xb9bf2000}, {0xb9bf4000}, {0xb9bf6000}, - {0xb9bf8000}, {0xb9bfa000}, {0xb9bfc000}, {0xb9bfe000}, - {0xb9c00000}, {0xb9c02000}, {0xb9c04000}, {0xb9c06000}, - {0xb9c08000}, {0xb9c0a000}, {0xb9c0c000}, {0xb9c0e000}, - {0xb9c10000}, {0xb9c12000}, {0xb9c14000}, {0xb9c16000}, - {0xb9c18000}, {0xb9c1a000}, {0xb9c1c000}, {0xb9c1e000}, - {0xb9c20000}, {0xb9c22000}, {0xb9c24000}, {0xb9c26000}, - {0xb9c28000}, {0xb9c2a000}, {0xb9c2c000}, {0xb9c2e000}, - {0xb9c30000}, {0xb9c32000}, {0xb9c34000}, {0xb9c36000}, - {0xb9c38000}, {0xb9c3a000}, {0xb9c3c000}, {0xb9c3e000}, - {0xb9c40000}, {0xb9c42000}, {0xb9c44000}, {0xb9c46000}, - {0xb9c48000}, {0xb9c4a000}, {0xb9c4c000}, {0xb9c4e000}, - {0xb9c50000}, {0xb9c52000}, {0xb9c54000}, {0xb9c56000}, - {0xb9c58000}, {0xb9c5a000}, {0xb9c5c000}, {0xb9c5e000}, - {0xb9c60000}, {0xb9c62000}, {0xb9c64000}, {0xb9c66000}, - {0xb9c68000}, {0xb9c6a000}, {0xb9c6c000}, {0xb9c6e000}, - {0xb9c70000}, {0xb9c72000}, {0xb9c74000}, {0xb9c76000}, - {0xb9c78000}, {0xb9c7a000}, {0xb9c7c000}, {0xb9c7e000}, - {0xb9c80000}, {0xb9c82000}, {0xb9c84000}, {0xb9c86000}, - {0xb9c88000}, {0xb9c8a000}, {0xb9c8c000}, {0xb9c8e000}, - {0xb9c90000}, {0xb9c92000}, {0xb9c94000}, {0xb9c96000}, - {0xb9c98000}, {0xb9c9a000}, {0xb9c9c000}, {0xb9c9e000}, - {0xb9ca0000}, {0xb9ca2000}, {0xb9ca4000}, {0xb9ca6000}, - {0xb9ca8000}, {0xb9caa000}, {0xb9cac000}, {0xb9cae000}, - {0xb9cb0000}, {0xb9cb2000}, {0xb9cb4000}, {0xb9cb6000}, - {0xb9cb8000}, {0xb9cba000}, {0xb9cbc000}, {0xb9cbe000}, - {0xb9cc0000}, {0xb9cc2000}, {0xb9cc4000}, {0xb9cc6000}, - {0xb9cc8000}, {0xb9cca000}, {0xb9ccc000}, {0xb9cce000}, - {0xb9cd0000}, {0xb9cd2000}, {0xb9cd4000}, {0xb9cd6000}, - {0xb9cd8000}, {0xb9cda000}, {0xb9cdc000}, {0xb9cde000}, - {0xb9ce0000}, {0xb9ce2000}, {0xb9ce4000}, {0xb9ce6000}, - {0xb9ce8000}, {0xb9cea000}, {0xb9cec000}, {0xb9cee000}, - {0xb9cf0000}, {0xb9cf2000}, {0xb9cf4000}, {0xb9cf6000}, - {0xb9cf8000}, {0xb9cfa000}, {0xb9cfc000}, {0xb9cfe000}, - {0xb9d00000}, {0xb9d02000}, {0xb9d04000}, {0xb9d06000}, - {0xb9d08000}, {0xb9d0a000}, {0xb9d0c000}, {0xb9d0e000}, - {0xb9d10000}, {0xb9d12000}, {0xb9d14000}, {0xb9d16000}, - {0xb9d18000}, {0xb9d1a000}, {0xb9d1c000}, {0xb9d1e000}, - {0xb9d20000}, {0xb9d22000}, {0xb9d24000}, {0xb9d26000}, - {0xb9d28000}, {0xb9d2a000}, {0xb9d2c000}, {0xb9d2e000}, - {0xb9d30000}, {0xb9d32000}, {0xb9d34000}, {0xb9d36000}, - {0xb9d38000}, {0xb9d3a000}, {0xb9d3c000}, {0xb9d3e000}, - {0xb9d40000}, {0xb9d42000}, {0xb9d44000}, {0xb9d46000}, - {0xb9d48000}, {0xb9d4a000}, {0xb9d4c000}, {0xb9d4e000}, - {0xb9d50000}, {0xb9d52000}, {0xb9d54000}, {0xb9d56000}, - {0xb9d58000}, {0xb9d5a000}, {0xb9d5c000}, {0xb9d5e000}, - {0xb9d60000}, {0xb9d62000}, {0xb9d64000}, {0xb9d66000}, - {0xb9d68000}, {0xb9d6a000}, {0xb9d6c000}, {0xb9d6e000}, - {0xb9d70000}, {0xb9d72000}, {0xb9d74000}, {0xb9d76000}, - {0xb9d78000}, {0xb9d7a000}, {0xb9d7c000}, {0xb9d7e000}, - {0xb9d80000}, {0xb9d82000}, {0xb9d84000}, {0xb9d86000}, - {0xb9d88000}, {0xb9d8a000}, {0xb9d8c000}, {0xb9d8e000}, - {0xb9d90000}, {0xb9d92000}, {0xb9d94000}, {0xb9d96000}, - {0xb9d98000}, {0xb9d9a000}, {0xb9d9c000}, {0xb9d9e000}, - {0xb9da0000}, {0xb9da2000}, {0xb9da4000}, {0xb9da6000}, - {0xb9da8000}, {0xb9daa000}, {0xb9dac000}, {0xb9dae000}, - {0xb9db0000}, {0xb9db2000}, {0xb9db4000}, {0xb9db6000}, - {0xb9db8000}, {0xb9dba000}, {0xb9dbc000}, {0xb9dbe000}, - {0xb9dc0000}, {0xb9dc2000}, {0xb9dc4000}, {0xb9dc6000}, - {0xb9dc8000}, {0xb9dca000}, {0xb9dcc000}, {0xb9dce000}, - {0xb9dd0000}, {0xb9dd2000}, {0xb9dd4000}, {0xb9dd6000}, - {0xb9dd8000}, {0xb9dda000}, {0xb9ddc000}, {0xb9dde000}, - {0xb9de0000}, {0xb9de2000}, {0xb9de4000}, {0xb9de6000}, - {0xb9de8000}, {0xb9dea000}, {0xb9dec000}, {0xb9dee000}, - {0xb9df0000}, {0xb9df2000}, {0xb9df4000}, {0xb9df6000}, - {0xb9df8000}, {0xb9dfa000}, {0xb9dfc000}, {0xb9dfe000}, - {0xb9e00000}, {0xb9e02000}, {0xb9e04000}, {0xb9e06000}, - {0xb9e08000}, {0xb9e0a000}, {0xb9e0c000}, {0xb9e0e000}, - {0xb9e10000}, {0xb9e12000}, {0xb9e14000}, {0xb9e16000}, - {0xb9e18000}, {0xb9e1a000}, {0xb9e1c000}, {0xb9e1e000}, - {0xb9e20000}, {0xb9e22000}, {0xb9e24000}, {0xb9e26000}, - {0xb9e28000}, {0xb9e2a000}, {0xb9e2c000}, {0xb9e2e000}, - {0xb9e30000}, {0xb9e32000}, {0xb9e34000}, {0xb9e36000}, - {0xb9e38000}, {0xb9e3a000}, {0xb9e3c000}, {0xb9e3e000}, - {0xb9e40000}, {0xb9e42000}, {0xb9e44000}, {0xb9e46000}, - {0xb9e48000}, {0xb9e4a000}, {0xb9e4c000}, {0xb9e4e000}, - {0xb9e50000}, {0xb9e52000}, {0xb9e54000}, {0xb9e56000}, - {0xb9e58000}, {0xb9e5a000}, {0xb9e5c000}, {0xb9e5e000}, - {0xb9e60000}, {0xb9e62000}, {0xb9e64000}, {0xb9e66000}, - {0xb9e68000}, {0xb9e6a000}, {0xb9e6c000}, {0xb9e6e000}, - {0xb9e70000}, {0xb9e72000}, {0xb9e74000}, {0xb9e76000}, - {0xb9e78000}, {0xb9e7a000}, {0xb9e7c000}, {0xb9e7e000}, - {0xb9e80000}, {0xb9e82000}, {0xb9e84000}, {0xb9e86000}, - {0xb9e88000}, {0xb9e8a000}, {0xb9e8c000}, {0xb9e8e000}, - {0xb9e90000}, {0xb9e92000}, {0xb9e94000}, {0xb9e96000}, - {0xb9e98000}, {0xb9e9a000}, {0xb9e9c000}, {0xb9e9e000}, - {0xb9ea0000}, {0xb9ea2000}, {0xb9ea4000}, {0xb9ea6000}, - {0xb9ea8000}, {0xb9eaa000}, {0xb9eac000}, {0xb9eae000}, - {0xb9eb0000}, {0xb9eb2000}, {0xb9eb4000}, {0xb9eb6000}, - {0xb9eb8000}, {0xb9eba000}, {0xb9ebc000}, {0xb9ebe000}, - {0xb9ec0000}, {0xb9ec2000}, {0xb9ec4000}, {0xb9ec6000}, - {0xb9ec8000}, {0xb9eca000}, {0xb9ecc000}, {0xb9ece000}, - {0xb9ed0000}, {0xb9ed2000}, {0xb9ed4000}, {0xb9ed6000}, - {0xb9ed8000}, {0xb9eda000}, {0xb9edc000}, {0xb9ede000}, - {0xb9ee0000}, {0xb9ee2000}, {0xb9ee4000}, {0xb9ee6000}, - {0xb9ee8000}, {0xb9eea000}, {0xb9eec000}, {0xb9eee000}, - {0xb9ef0000}, {0xb9ef2000}, {0xb9ef4000}, {0xb9ef6000}, - {0xb9ef8000}, {0xb9efa000}, {0xb9efc000}, {0xb9efe000}, - {0xb9f00000}, {0xb9f02000}, {0xb9f04000}, {0xb9f06000}, - {0xb9f08000}, {0xb9f0a000}, {0xb9f0c000}, {0xb9f0e000}, - {0xb9f10000}, {0xb9f12000}, {0xb9f14000}, {0xb9f16000}, - {0xb9f18000}, {0xb9f1a000}, {0xb9f1c000}, {0xb9f1e000}, - {0xb9f20000}, {0xb9f22000}, {0xb9f24000}, {0xb9f26000}, - {0xb9f28000}, {0xb9f2a000}, {0xb9f2c000}, {0xb9f2e000}, - {0xb9f30000}, {0xb9f32000}, {0xb9f34000}, {0xb9f36000}, - {0xb9f38000}, {0xb9f3a000}, {0xb9f3c000}, {0xb9f3e000}, - {0xb9f40000}, {0xb9f42000}, {0xb9f44000}, {0xb9f46000}, - {0xb9f48000}, {0xb9f4a000}, {0xb9f4c000}, {0xb9f4e000}, - {0xb9f50000}, {0xb9f52000}, {0xb9f54000}, {0xb9f56000}, - {0xb9f58000}, {0xb9f5a000}, {0xb9f5c000}, {0xb9f5e000}, - {0xb9f60000}, {0xb9f62000}, {0xb9f64000}, {0xb9f66000}, - {0xb9f68000}, {0xb9f6a000}, {0xb9f6c000}, {0xb9f6e000}, - {0xb9f70000}, {0xb9f72000}, {0xb9f74000}, {0xb9f76000}, - {0xb9f78000}, {0xb9f7a000}, {0xb9f7c000}, {0xb9f7e000}, - {0xb9f80000}, {0xb9f82000}, {0xb9f84000}, {0xb9f86000}, - {0xb9f88000}, {0xb9f8a000}, {0xb9f8c000}, {0xb9f8e000}, - {0xb9f90000}, {0xb9f92000}, {0xb9f94000}, {0xb9f96000}, - {0xb9f98000}, {0xb9f9a000}, {0xb9f9c000}, {0xb9f9e000}, - {0xb9fa0000}, {0xb9fa2000}, {0xb9fa4000}, {0xb9fa6000}, - {0xb9fa8000}, {0xb9faa000}, {0xb9fac000}, {0xb9fae000}, - {0xb9fb0000}, {0xb9fb2000}, {0xb9fb4000}, {0xb9fb6000}, - {0xb9fb8000}, {0xb9fba000}, {0xb9fbc000}, {0xb9fbe000}, - {0xb9fc0000}, {0xb9fc2000}, {0xb9fc4000}, {0xb9fc6000}, - {0xb9fc8000}, {0xb9fca000}, {0xb9fcc000}, {0xb9fce000}, - {0xb9fd0000}, {0xb9fd2000}, {0xb9fd4000}, {0xb9fd6000}, - {0xb9fd8000}, {0xb9fda000}, {0xb9fdc000}, {0xb9fde000}, - {0xb9fe0000}, {0xb9fe2000}, {0xb9fe4000}, {0xb9fe6000}, - {0xb9fe8000}, {0xb9fea000}, {0xb9fec000}, {0xb9fee000}, - {0xb9ff0000}, {0xb9ff2000}, {0xb9ff4000}, {0xb9ff6000}, - {0xb9ff8000}, {0xb9ffa000}, {0xb9ffc000}, {0xb9ffe000}, - {0xba000000}, {0xba002000}, {0xba004000}, {0xba006000}, - {0xba008000}, {0xba00a000}, {0xba00c000}, {0xba00e000}, - {0xba010000}, {0xba012000}, {0xba014000}, {0xba016000}, - {0xba018000}, {0xba01a000}, {0xba01c000}, {0xba01e000}, - {0xba020000}, {0xba022000}, {0xba024000}, {0xba026000}, - {0xba028000}, {0xba02a000}, {0xba02c000}, {0xba02e000}, - {0xba030000}, {0xba032000}, {0xba034000}, {0xba036000}, - {0xba038000}, {0xba03a000}, {0xba03c000}, {0xba03e000}, - {0xba040000}, {0xba042000}, {0xba044000}, {0xba046000}, - {0xba048000}, {0xba04a000}, {0xba04c000}, {0xba04e000}, - {0xba050000}, {0xba052000}, {0xba054000}, {0xba056000}, - {0xba058000}, {0xba05a000}, {0xba05c000}, {0xba05e000}, - {0xba060000}, {0xba062000}, {0xba064000}, {0xba066000}, - {0xba068000}, {0xba06a000}, {0xba06c000}, {0xba06e000}, - {0xba070000}, {0xba072000}, {0xba074000}, {0xba076000}, - {0xba078000}, {0xba07a000}, {0xba07c000}, {0xba07e000}, - {0xba080000}, {0xba082000}, {0xba084000}, {0xba086000}, - {0xba088000}, {0xba08a000}, {0xba08c000}, {0xba08e000}, - {0xba090000}, {0xba092000}, {0xba094000}, {0xba096000}, - {0xba098000}, {0xba09a000}, {0xba09c000}, {0xba09e000}, - {0xba0a0000}, {0xba0a2000}, {0xba0a4000}, {0xba0a6000}, - {0xba0a8000}, {0xba0aa000}, {0xba0ac000}, {0xba0ae000}, - {0xba0b0000}, {0xba0b2000}, {0xba0b4000}, {0xba0b6000}, - {0xba0b8000}, {0xba0ba000}, {0xba0bc000}, {0xba0be000}, - {0xba0c0000}, {0xba0c2000}, {0xba0c4000}, {0xba0c6000}, - {0xba0c8000}, {0xba0ca000}, {0xba0cc000}, {0xba0ce000}, - {0xba0d0000}, {0xba0d2000}, {0xba0d4000}, {0xba0d6000}, - {0xba0d8000}, {0xba0da000}, {0xba0dc000}, {0xba0de000}, - {0xba0e0000}, {0xba0e2000}, {0xba0e4000}, {0xba0e6000}, - {0xba0e8000}, {0xba0ea000}, {0xba0ec000}, {0xba0ee000}, - {0xba0f0000}, {0xba0f2000}, {0xba0f4000}, {0xba0f6000}, - {0xba0f8000}, {0xba0fa000}, {0xba0fc000}, {0xba0fe000}, - {0xba100000}, {0xba102000}, {0xba104000}, {0xba106000}, - {0xba108000}, {0xba10a000}, {0xba10c000}, {0xba10e000}, - {0xba110000}, {0xba112000}, {0xba114000}, {0xba116000}, - {0xba118000}, {0xba11a000}, {0xba11c000}, {0xba11e000}, - {0xba120000}, {0xba122000}, {0xba124000}, {0xba126000}, - {0xba128000}, {0xba12a000}, {0xba12c000}, {0xba12e000}, - {0xba130000}, {0xba132000}, {0xba134000}, {0xba136000}, - {0xba138000}, {0xba13a000}, {0xba13c000}, {0xba13e000}, - {0xba140000}, {0xba142000}, {0xba144000}, {0xba146000}, - {0xba148000}, {0xba14a000}, {0xba14c000}, {0xba14e000}, - {0xba150000}, {0xba152000}, {0xba154000}, {0xba156000}, - {0xba158000}, {0xba15a000}, {0xba15c000}, {0xba15e000}, - {0xba160000}, {0xba162000}, {0xba164000}, {0xba166000}, - {0xba168000}, {0xba16a000}, {0xba16c000}, {0xba16e000}, - {0xba170000}, {0xba172000}, {0xba174000}, {0xba176000}, - {0xba178000}, {0xba17a000}, {0xba17c000}, {0xba17e000}, - {0xba180000}, {0xba182000}, {0xba184000}, {0xba186000}, - {0xba188000}, {0xba18a000}, {0xba18c000}, {0xba18e000}, - {0xba190000}, {0xba192000}, {0xba194000}, {0xba196000}, - {0xba198000}, {0xba19a000}, {0xba19c000}, {0xba19e000}, - {0xba1a0000}, {0xba1a2000}, {0xba1a4000}, {0xba1a6000}, - {0xba1a8000}, {0xba1aa000}, {0xba1ac000}, {0xba1ae000}, - {0xba1b0000}, {0xba1b2000}, {0xba1b4000}, {0xba1b6000}, - {0xba1b8000}, {0xba1ba000}, {0xba1bc000}, {0xba1be000}, - {0xba1c0000}, {0xba1c2000}, {0xba1c4000}, {0xba1c6000}, - {0xba1c8000}, {0xba1ca000}, {0xba1cc000}, {0xba1ce000}, - {0xba1d0000}, {0xba1d2000}, {0xba1d4000}, {0xba1d6000}, - {0xba1d8000}, {0xba1da000}, {0xba1dc000}, {0xba1de000}, - {0xba1e0000}, {0xba1e2000}, {0xba1e4000}, {0xba1e6000}, - {0xba1e8000}, {0xba1ea000}, {0xba1ec000}, {0xba1ee000}, - {0xba1f0000}, {0xba1f2000}, {0xba1f4000}, {0xba1f6000}, - {0xba1f8000}, {0xba1fa000}, {0xba1fc000}, {0xba1fe000}, - {0xba200000}, {0xba202000}, {0xba204000}, {0xba206000}, - {0xba208000}, {0xba20a000}, {0xba20c000}, {0xba20e000}, - {0xba210000}, {0xba212000}, {0xba214000}, {0xba216000}, - {0xba218000}, {0xba21a000}, {0xba21c000}, {0xba21e000}, - {0xba220000}, {0xba222000}, {0xba224000}, {0xba226000}, - {0xba228000}, {0xba22a000}, {0xba22c000}, {0xba22e000}, - {0xba230000}, {0xba232000}, {0xba234000}, {0xba236000}, - {0xba238000}, {0xba23a000}, {0xba23c000}, {0xba23e000}, - {0xba240000}, {0xba242000}, {0xba244000}, {0xba246000}, - {0xba248000}, {0xba24a000}, {0xba24c000}, {0xba24e000}, - {0xba250000}, {0xba252000}, {0xba254000}, {0xba256000}, - {0xba258000}, {0xba25a000}, {0xba25c000}, {0xba25e000}, - {0xba260000}, {0xba262000}, {0xba264000}, {0xba266000}, - {0xba268000}, {0xba26a000}, {0xba26c000}, {0xba26e000}, - {0xba270000}, {0xba272000}, {0xba274000}, {0xba276000}, - {0xba278000}, {0xba27a000}, {0xba27c000}, {0xba27e000}, - {0xba280000}, {0xba282000}, {0xba284000}, {0xba286000}, - {0xba288000}, {0xba28a000}, {0xba28c000}, {0xba28e000}, - {0xba290000}, {0xba292000}, {0xba294000}, {0xba296000}, - {0xba298000}, {0xba29a000}, {0xba29c000}, {0xba29e000}, - {0xba2a0000}, {0xba2a2000}, {0xba2a4000}, {0xba2a6000}, - {0xba2a8000}, {0xba2aa000}, {0xba2ac000}, {0xba2ae000}, - {0xba2b0000}, {0xba2b2000}, {0xba2b4000}, {0xba2b6000}, - {0xba2b8000}, {0xba2ba000}, {0xba2bc000}, {0xba2be000}, - {0xba2c0000}, {0xba2c2000}, {0xba2c4000}, {0xba2c6000}, - {0xba2c8000}, {0xba2ca000}, {0xba2cc000}, {0xba2ce000}, - {0xba2d0000}, {0xba2d2000}, {0xba2d4000}, {0xba2d6000}, - {0xba2d8000}, {0xba2da000}, {0xba2dc000}, {0xba2de000}, - {0xba2e0000}, {0xba2e2000}, {0xba2e4000}, {0xba2e6000}, - {0xba2e8000}, {0xba2ea000}, {0xba2ec000}, {0xba2ee000}, - {0xba2f0000}, {0xba2f2000}, {0xba2f4000}, {0xba2f6000}, - {0xba2f8000}, {0xba2fa000}, {0xba2fc000}, {0xba2fe000}, - {0xba300000}, {0xba302000}, {0xba304000}, {0xba306000}, - {0xba308000}, {0xba30a000}, {0xba30c000}, {0xba30e000}, - {0xba310000}, {0xba312000}, {0xba314000}, {0xba316000}, - {0xba318000}, {0xba31a000}, {0xba31c000}, {0xba31e000}, - {0xba320000}, {0xba322000}, {0xba324000}, {0xba326000}, - {0xba328000}, {0xba32a000}, {0xba32c000}, {0xba32e000}, - {0xba330000}, {0xba332000}, {0xba334000}, {0xba336000}, - {0xba338000}, {0xba33a000}, {0xba33c000}, {0xba33e000}, - {0xba340000}, {0xba342000}, {0xba344000}, {0xba346000}, - {0xba348000}, {0xba34a000}, {0xba34c000}, {0xba34e000}, - {0xba350000}, {0xba352000}, {0xba354000}, {0xba356000}, - {0xba358000}, {0xba35a000}, {0xba35c000}, {0xba35e000}, - {0xba360000}, {0xba362000}, {0xba364000}, {0xba366000}, - {0xba368000}, {0xba36a000}, {0xba36c000}, {0xba36e000}, - {0xba370000}, {0xba372000}, {0xba374000}, {0xba376000}, - {0xba378000}, {0xba37a000}, {0xba37c000}, {0xba37e000}, - {0xba380000}, {0xba382000}, {0xba384000}, {0xba386000}, - {0xba388000}, {0xba38a000}, {0xba38c000}, {0xba38e000}, - {0xba390000}, {0xba392000}, {0xba394000}, {0xba396000}, - {0xba398000}, {0xba39a000}, {0xba39c000}, {0xba39e000}, - {0xba3a0000}, {0xba3a2000}, {0xba3a4000}, {0xba3a6000}, - {0xba3a8000}, {0xba3aa000}, {0xba3ac000}, {0xba3ae000}, - {0xba3b0000}, {0xba3b2000}, {0xba3b4000}, {0xba3b6000}, - {0xba3b8000}, {0xba3ba000}, {0xba3bc000}, {0xba3be000}, - {0xba3c0000}, {0xba3c2000}, {0xba3c4000}, {0xba3c6000}, - {0xba3c8000}, {0xba3ca000}, {0xba3cc000}, {0xba3ce000}, - {0xba3d0000}, {0xba3d2000}, {0xba3d4000}, {0xba3d6000}, - {0xba3d8000}, {0xba3da000}, {0xba3dc000}, {0xba3de000}, - {0xba3e0000}, {0xba3e2000}, {0xba3e4000}, {0xba3e6000}, - {0xba3e8000}, {0xba3ea000}, {0xba3ec000}, {0xba3ee000}, - {0xba3f0000}, {0xba3f2000}, {0xba3f4000}, {0xba3f6000}, - {0xba3f8000}, {0xba3fa000}, {0xba3fc000}, {0xba3fe000}, - {0xba400000}, {0xba402000}, {0xba404000}, {0xba406000}, - {0xba408000}, {0xba40a000}, {0xba40c000}, {0xba40e000}, - {0xba410000}, {0xba412000}, {0xba414000}, {0xba416000}, - {0xba418000}, {0xba41a000}, {0xba41c000}, {0xba41e000}, - {0xba420000}, {0xba422000}, {0xba424000}, {0xba426000}, - {0xba428000}, {0xba42a000}, {0xba42c000}, {0xba42e000}, - {0xba430000}, {0xba432000}, {0xba434000}, {0xba436000}, - {0xba438000}, {0xba43a000}, {0xba43c000}, {0xba43e000}, - {0xba440000}, {0xba442000}, {0xba444000}, {0xba446000}, - {0xba448000}, {0xba44a000}, {0xba44c000}, {0xba44e000}, - {0xba450000}, {0xba452000}, {0xba454000}, {0xba456000}, - {0xba458000}, {0xba45a000}, {0xba45c000}, {0xba45e000}, - {0xba460000}, {0xba462000}, {0xba464000}, {0xba466000}, - {0xba468000}, {0xba46a000}, {0xba46c000}, {0xba46e000}, - {0xba470000}, {0xba472000}, {0xba474000}, {0xba476000}, - {0xba478000}, {0xba47a000}, {0xba47c000}, {0xba47e000}, - {0xba480000}, {0xba482000}, {0xba484000}, {0xba486000}, - {0xba488000}, {0xba48a000}, {0xba48c000}, {0xba48e000}, - {0xba490000}, {0xba492000}, {0xba494000}, {0xba496000}, - {0xba498000}, {0xba49a000}, {0xba49c000}, {0xba49e000}, - {0xba4a0000}, {0xba4a2000}, {0xba4a4000}, {0xba4a6000}, - {0xba4a8000}, {0xba4aa000}, {0xba4ac000}, {0xba4ae000}, - {0xba4b0000}, {0xba4b2000}, {0xba4b4000}, {0xba4b6000}, - {0xba4b8000}, {0xba4ba000}, {0xba4bc000}, {0xba4be000}, - {0xba4c0000}, {0xba4c2000}, {0xba4c4000}, {0xba4c6000}, - {0xba4c8000}, {0xba4ca000}, {0xba4cc000}, {0xba4ce000}, - {0xba4d0000}, {0xba4d2000}, {0xba4d4000}, {0xba4d6000}, - {0xba4d8000}, {0xba4da000}, {0xba4dc000}, {0xba4de000}, - {0xba4e0000}, {0xba4e2000}, {0xba4e4000}, {0xba4e6000}, - {0xba4e8000}, {0xba4ea000}, {0xba4ec000}, {0xba4ee000}, - {0xba4f0000}, {0xba4f2000}, {0xba4f4000}, {0xba4f6000}, - {0xba4f8000}, {0xba4fa000}, {0xba4fc000}, {0xba4fe000}, - {0xba500000}, {0xba502000}, {0xba504000}, {0xba506000}, - {0xba508000}, {0xba50a000}, {0xba50c000}, {0xba50e000}, - {0xba510000}, {0xba512000}, {0xba514000}, {0xba516000}, - {0xba518000}, {0xba51a000}, {0xba51c000}, {0xba51e000}, - {0xba520000}, {0xba522000}, {0xba524000}, {0xba526000}, - {0xba528000}, {0xba52a000}, {0xba52c000}, {0xba52e000}, - {0xba530000}, {0xba532000}, {0xba534000}, {0xba536000}, - {0xba538000}, {0xba53a000}, {0xba53c000}, {0xba53e000}, - {0xba540000}, {0xba542000}, {0xba544000}, {0xba546000}, - {0xba548000}, {0xba54a000}, {0xba54c000}, {0xba54e000}, - {0xba550000}, {0xba552000}, {0xba554000}, {0xba556000}, - {0xba558000}, {0xba55a000}, {0xba55c000}, {0xba55e000}, - {0xba560000}, {0xba562000}, {0xba564000}, {0xba566000}, - {0xba568000}, {0xba56a000}, {0xba56c000}, {0xba56e000}, - {0xba570000}, {0xba572000}, {0xba574000}, {0xba576000}, - {0xba578000}, {0xba57a000}, {0xba57c000}, {0xba57e000}, - {0xba580000}, {0xba582000}, {0xba584000}, {0xba586000}, - {0xba588000}, {0xba58a000}, {0xba58c000}, {0xba58e000}, - {0xba590000}, {0xba592000}, {0xba594000}, {0xba596000}, - {0xba598000}, {0xba59a000}, {0xba59c000}, {0xba59e000}, - {0xba5a0000}, {0xba5a2000}, {0xba5a4000}, {0xba5a6000}, - {0xba5a8000}, {0xba5aa000}, {0xba5ac000}, {0xba5ae000}, - {0xba5b0000}, {0xba5b2000}, {0xba5b4000}, {0xba5b6000}, - {0xba5b8000}, {0xba5ba000}, {0xba5bc000}, {0xba5be000}, - {0xba5c0000}, {0xba5c2000}, {0xba5c4000}, {0xba5c6000}, - {0xba5c8000}, {0xba5ca000}, {0xba5cc000}, {0xba5ce000}, - {0xba5d0000}, {0xba5d2000}, {0xba5d4000}, {0xba5d6000}, - {0xba5d8000}, {0xba5da000}, {0xba5dc000}, {0xba5de000}, - {0xba5e0000}, {0xba5e2000}, {0xba5e4000}, {0xba5e6000}, - {0xba5e8000}, {0xba5ea000}, {0xba5ec000}, {0xba5ee000}, - {0xba5f0000}, {0xba5f2000}, {0xba5f4000}, {0xba5f6000}, - {0xba5f8000}, {0xba5fa000}, {0xba5fc000}, {0xba5fe000}, - {0xba600000}, {0xba602000}, {0xba604000}, {0xba606000}, - {0xba608000}, {0xba60a000}, {0xba60c000}, {0xba60e000}, - {0xba610000}, {0xba612000}, {0xba614000}, {0xba616000}, - {0xba618000}, {0xba61a000}, {0xba61c000}, {0xba61e000}, - {0xba620000}, {0xba622000}, {0xba624000}, {0xba626000}, - {0xba628000}, {0xba62a000}, {0xba62c000}, {0xba62e000}, - {0xba630000}, {0xba632000}, {0xba634000}, {0xba636000}, - {0xba638000}, {0xba63a000}, {0xba63c000}, {0xba63e000}, - {0xba640000}, {0xba642000}, {0xba644000}, {0xba646000}, - {0xba648000}, {0xba64a000}, {0xba64c000}, {0xba64e000}, - {0xba650000}, {0xba652000}, {0xba654000}, {0xba656000}, - {0xba658000}, {0xba65a000}, {0xba65c000}, {0xba65e000}, - {0xba660000}, {0xba662000}, {0xba664000}, {0xba666000}, - {0xba668000}, {0xba66a000}, {0xba66c000}, {0xba66e000}, - {0xba670000}, {0xba672000}, {0xba674000}, {0xba676000}, - {0xba678000}, {0xba67a000}, {0xba67c000}, {0xba67e000}, - {0xba680000}, {0xba682000}, {0xba684000}, {0xba686000}, - {0xba688000}, {0xba68a000}, {0xba68c000}, {0xba68e000}, - {0xba690000}, {0xba692000}, {0xba694000}, {0xba696000}, - {0xba698000}, {0xba69a000}, {0xba69c000}, {0xba69e000}, - {0xba6a0000}, {0xba6a2000}, {0xba6a4000}, {0xba6a6000}, - {0xba6a8000}, {0xba6aa000}, {0xba6ac000}, {0xba6ae000}, - {0xba6b0000}, {0xba6b2000}, {0xba6b4000}, {0xba6b6000}, - {0xba6b8000}, {0xba6ba000}, {0xba6bc000}, {0xba6be000}, - {0xba6c0000}, {0xba6c2000}, {0xba6c4000}, {0xba6c6000}, - {0xba6c8000}, {0xba6ca000}, {0xba6cc000}, {0xba6ce000}, - {0xba6d0000}, {0xba6d2000}, {0xba6d4000}, {0xba6d6000}, - {0xba6d8000}, {0xba6da000}, {0xba6dc000}, {0xba6de000}, - {0xba6e0000}, {0xba6e2000}, {0xba6e4000}, {0xba6e6000}, - {0xba6e8000}, {0xba6ea000}, {0xba6ec000}, {0xba6ee000}, - {0xba6f0000}, {0xba6f2000}, {0xba6f4000}, {0xba6f6000}, - {0xba6f8000}, {0xba6fa000}, {0xba6fc000}, {0xba6fe000}, - {0xba700000}, {0xba702000}, {0xba704000}, {0xba706000}, - {0xba708000}, {0xba70a000}, {0xba70c000}, {0xba70e000}, - {0xba710000}, {0xba712000}, {0xba714000}, {0xba716000}, - {0xba718000}, {0xba71a000}, {0xba71c000}, {0xba71e000}, - {0xba720000}, {0xba722000}, {0xba724000}, {0xba726000}, - {0xba728000}, {0xba72a000}, {0xba72c000}, {0xba72e000}, - {0xba730000}, {0xba732000}, {0xba734000}, {0xba736000}, - {0xba738000}, {0xba73a000}, {0xba73c000}, {0xba73e000}, - {0xba740000}, {0xba742000}, {0xba744000}, {0xba746000}, - {0xba748000}, {0xba74a000}, {0xba74c000}, {0xba74e000}, - {0xba750000}, {0xba752000}, {0xba754000}, {0xba756000}, - {0xba758000}, {0xba75a000}, {0xba75c000}, {0xba75e000}, - {0xba760000}, {0xba762000}, {0xba764000}, {0xba766000}, - {0xba768000}, {0xba76a000}, {0xba76c000}, {0xba76e000}, - {0xba770000}, {0xba772000}, {0xba774000}, {0xba776000}, - {0xba778000}, {0xba77a000}, {0xba77c000}, {0xba77e000}, - {0xba780000}, {0xba782000}, {0xba784000}, {0xba786000}, - {0xba788000}, {0xba78a000}, {0xba78c000}, {0xba78e000}, - {0xba790000}, {0xba792000}, {0xba794000}, {0xba796000}, - {0xba798000}, {0xba79a000}, {0xba79c000}, {0xba79e000}, - {0xba7a0000}, {0xba7a2000}, {0xba7a4000}, {0xba7a6000}, - {0xba7a8000}, {0xba7aa000}, {0xba7ac000}, {0xba7ae000}, - {0xba7b0000}, {0xba7b2000}, {0xba7b4000}, {0xba7b6000}, - {0xba7b8000}, {0xba7ba000}, {0xba7bc000}, {0xba7be000}, - {0xba7c0000}, {0xba7c2000}, {0xba7c4000}, {0xba7c6000}, - {0xba7c8000}, {0xba7ca000}, {0xba7cc000}, {0xba7ce000}, - {0xba7d0000}, {0xba7d2000}, {0xba7d4000}, {0xba7d6000}, - {0xba7d8000}, {0xba7da000}, {0xba7dc000}, {0xba7de000}, - {0xba7e0000}, {0xba7e2000}, {0xba7e4000}, {0xba7e6000}, - {0xba7e8000}, {0xba7ea000}, {0xba7ec000}, {0xba7ee000}, - {0xba7f0000}, {0xba7f2000}, {0xba7f4000}, {0xba7f6000}, - {0xba7f8000}, {0xba7fa000}, {0xba7fc000}, {0xba7fe000}, - {0xba800000}, {0xba802000}, {0xba804000}, {0xba806000}, - {0xba808000}, {0xba80a000}, {0xba80c000}, {0xba80e000}, - {0xba810000}, {0xba812000}, {0xba814000}, {0xba816000}, - {0xba818000}, {0xba81a000}, {0xba81c000}, {0xba81e000}, - {0xba820000}, {0xba822000}, {0xba824000}, {0xba826000}, - {0xba828000}, {0xba82a000}, {0xba82c000}, {0xba82e000}, - {0xba830000}, {0xba832000}, {0xba834000}, {0xba836000}, - {0xba838000}, {0xba83a000}, {0xba83c000}, {0xba83e000}, - {0xba840000}, {0xba842000}, {0xba844000}, {0xba846000}, - {0xba848000}, {0xba84a000}, {0xba84c000}, {0xba84e000}, - {0xba850000}, {0xba852000}, {0xba854000}, {0xba856000}, - {0xba858000}, {0xba85a000}, {0xba85c000}, {0xba85e000}, - {0xba860000}, {0xba862000}, {0xba864000}, {0xba866000}, - {0xba868000}, {0xba86a000}, {0xba86c000}, {0xba86e000}, - {0xba870000}, {0xba872000}, {0xba874000}, {0xba876000}, - {0xba878000}, {0xba87a000}, {0xba87c000}, {0xba87e000}, - {0xba880000}, {0xba882000}, {0xba884000}, {0xba886000}, - {0xba888000}, {0xba88a000}, {0xba88c000}, {0xba88e000}, - {0xba890000}, {0xba892000}, {0xba894000}, {0xba896000}, - {0xba898000}, {0xba89a000}, {0xba89c000}, {0xba89e000}, - {0xba8a0000}, {0xba8a2000}, {0xba8a4000}, {0xba8a6000}, - {0xba8a8000}, {0xba8aa000}, {0xba8ac000}, {0xba8ae000}, - {0xba8b0000}, {0xba8b2000}, {0xba8b4000}, {0xba8b6000}, - {0xba8b8000}, {0xba8ba000}, {0xba8bc000}, {0xba8be000}, - {0xba8c0000}, {0xba8c2000}, {0xba8c4000}, {0xba8c6000}, - {0xba8c8000}, {0xba8ca000}, {0xba8cc000}, {0xba8ce000}, - {0xba8d0000}, {0xba8d2000}, {0xba8d4000}, {0xba8d6000}, - {0xba8d8000}, {0xba8da000}, {0xba8dc000}, {0xba8de000}, - {0xba8e0000}, {0xba8e2000}, {0xba8e4000}, {0xba8e6000}, - {0xba8e8000}, {0xba8ea000}, {0xba8ec000}, {0xba8ee000}, - {0xba8f0000}, {0xba8f2000}, {0xba8f4000}, {0xba8f6000}, - {0xba8f8000}, {0xba8fa000}, {0xba8fc000}, {0xba8fe000}, - {0xba900000}, {0xba902000}, {0xba904000}, {0xba906000}, - {0xba908000}, {0xba90a000}, {0xba90c000}, {0xba90e000}, - {0xba910000}, {0xba912000}, {0xba914000}, {0xba916000}, - {0xba918000}, {0xba91a000}, {0xba91c000}, {0xba91e000}, - {0xba920000}, {0xba922000}, {0xba924000}, {0xba926000}, - {0xba928000}, {0xba92a000}, {0xba92c000}, {0xba92e000}, - {0xba930000}, {0xba932000}, {0xba934000}, {0xba936000}, - {0xba938000}, {0xba93a000}, {0xba93c000}, {0xba93e000}, - {0xba940000}, {0xba942000}, {0xba944000}, {0xba946000}, - {0xba948000}, {0xba94a000}, {0xba94c000}, {0xba94e000}, - {0xba950000}, {0xba952000}, {0xba954000}, {0xba956000}, - {0xba958000}, {0xba95a000}, {0xba95c000}, {0xba95e000}, - {0xba960000}, {0xba962000}, {0xba964000}, {0xba966000}, - {0xba968000}, {0xba96a000}, {0xba96c000}, {0xba96e000}, - {0xba970000}, {0xba972000}, {0xba974000}, {0xba976000}, - {0xba978000}, {0xba97a000}, {0xba97c000}, {0xba97e000}, - {0xba980000}, {0xba982000}, {0xba984000}, {0xba986000}, - {0xba988000}, {0xba98a000}, {0xba98c000}, {0xba98e000}, - {0xba990000}, {0xba992000}, {0xba994000}, {0xba996000}, - {0xba998000}, {0xba99a000}, {0xba99c000}, {0xba99e000}, - {0xba9a0000}, {0xba9a2000}, {0xba9a4000}, {0xba9a6000}, - {0xba9a8000}, {0xba9aa000}, {0xba9ac000}, {0xba9ae000}, - {0xba9b0000}, {0xba9b2000}, {0xba9b4000}, {0xba9b6000}, - {0xba9b8000}, {0xba9ba000}, {0xba9bc000}, {0xba9be000}, - {0xba9c0000}, {0xba9c2000}, {0xba9c4000}, {0xba9c6000}, - {0xba9c8000}, {0xba9ca000}, {0xba9cc000}, {0xba9ce000}, - {0xba9d0000}, {0xba9d2000}, {0xba9d4000}, {0xba9d6000}, - {0xba9d8000}, {0xba9da000}, {0xba9dc000}, {0xba9de000}, - {0xba9e0000}, {0xba9e2000}, {0xba9e4000}, {0xba9e6000}, - {0xba9e8000}, {0xba9ea000}, {0xba9ec000}, {0xba9ee000}, - {0xba9f0000}, {0xba9f2000}, {0xba9f4000}, {0xba9f6000}, - {0xba9f8000}, {0xba9fa000}, {0xba9fc000}, {0xba9fe000}, - {0xbaa00000}, {0xbaa02000}, {0xbaa04000}, {0xbaa06000}, - {0xbaa08000}, {0xbaa0a000}, {0xbaa0c000}, {0xbaa0e000}, - {0xbaa10000}, {0xbaa12000}, {0xbaa14000}, {0xbaa16000}, - {0xbaa18000}, {0xbaa1a000}, {0xbaa1c000}, {0xbaa1e000}, - {0xbaa20000}, {0xbaa22000}, {0xbaa24000}, {0xbaa26000}, - {0xbaa28000}, {0xbaa2a000}, {0xbaa2c000}, {0xbaa2e000}, - {0xbaa30000}, {0xbaa32000}, {0xbaa34000}, {0xbaa36000}, - {0xbaa38000}, {0xbaa3a000}, {0xbaa3c000}, {0xbaa3e000}, - {0xbaa40000}, {0xbaa42000}, {0xbaa44000}, {0xbaa46000}, - {0xbaa48000}, {0xbaa4a000}, {0xbaa4c000}, {0xbaa4e000}, - {0xbaa50000}, {0xbaa52000}, {0xbaa54000}, {0xbaa56000}, - {0xbaa58000}, {0xbaa5a000}, {0xbaa5c000}, {0xbaa5e000}, - {0xbaa60000}, {0xbaa62000}, {0xbaa64000}, {0xbaa66000}, - {0xbaa68000}, {0xbaa6a000}, {0xbaa6c000}, {0xbaa6e000}, - {0xbaa70000}, {0xbaa72000}, {0xbaa74000}, {0xbaa76000}, - {0xbaa78000}, {0xbaa7a000}, {0xbaa7c000}, {0xbaa7e000}, - {0xbaa80000}, {0xbaa82000}, {0xbaa84000}, {0xbaa86000}, - {0xbaa88000}, {0xbaa8a000}, {0xbaa8c000}, {0xbaa8e000}, - {0xbaa90000}, {0xbaa92000}, {0xbaa94000}, {0xbaa96000}, - {0xbaa98000}, {0xbaa9a000}, {0xbaa9c000}, {0xbaa9e000}, - {0xbaaa0000}, {0xbaaa2000}, {0xbaaa4000}, {0xbaaa6000}, - {0xbaaa8000}, {0xbaaaa000}, {0xbaaac000}, {0xbaaae000}, - {0xbaab0000}, {0xbaab2000}, {0xbaab4000}, {0xbaab6000}, - {0xbaab8000}, {0xbaaba000}, {0xbaabc000}, {0xbaabe000}, - {0xbaac0000}, {0xbaac2000}, {0xbaac4000}, {0xbaac6000}, - {0xbaac8000}, {0xbaaca000}, {0xbaacc000}, {0xbaace000}, - {0xbaad0000}, {0xbaad2000}, {0xbaad4000}, {0xbaad6000}, - {0xbaad8000}, {0xbaada000}, {0xbaadc000}, {0xbaade000}, - {0xbaae0000}, {0xbaae2000}, {0xbaae4000}, {0xbaae6000}, - {0xbaae8000}, {0xbaaea000}, {0xbaaec000}, {0xbaaee000}, - {0xbaaf0000}, {0xbaaf2000}, {0xbaaf4000}, {0xbaaf6000}, - {0xbaaf8000}, {0xbaafa000}, {0xbaafc000}, {0xbaafe000}, - {0xbab00000}, {0xbab02000}, {0xbab04000}, {0xbab06000}, - {0xbab08000}, {0xbab0a000}, {0xbab0c000}, {0xbab0e000}, - {0xbab10000}, {0xbab12000}, {0xbab14000}, {0xbab16000}, - {0xbab18000}, {0xbab1a000}, {0xbab1c000}, {0xbab1e000}, - {0xbab20000}, {0xbab22000}, {0xbab24000}, {0xbab26000}, - {0xbab28000}, {0xbab2a000}, {0xbab2c000}, {0xbab2e000}, - {0xbab30000}, {0xbab32000}, {0xbab34000}, {0xbab36000}, - {0xbab38000}, {0xbab3a000}, {0xbab3c000}, {0xbab3e000}, - {0xbab40000}, {0xbab42000}, {0xbab44000}, {0xbab46000}, - {0xbab48000}, {0xbab4a000}, {0xbab4c000}, {0xbab4e000}, - {0xbab50000}, {0xbab52000}, {0xbab54000}, {0xbab56000}, - {0xbab58000}, {0xbab5a000}, {0xbab5c000}, {0xbab5e000}, - {0xbab60000}, {0xbab62000}, {0xbab64000}, {0xbab66000}, - {0xbab68000}, {0xbab6a000}, {0xbab6c000}, {0xbab6e000}, - {0xbab70000}, {0xbab72000}, {0xbab74000}, {0xbab76000}, - {0xbab78000}, {0xbab7a000}, {0xbab7c000}, {0xbab7e000}, - {0xbab80000}, {0xbab82000}, {0xbab84000}, {0xbab86000}, - {0xbab88000}, {0xbab8a000}, {0xbab8c000}, {0xbab8e000}, - {0xbab90000}, {0xbab92000}, {0xbab94000}, {0xbab96000}, - {0xbab98000}, {0xbab9a000}, {0xbab9c000}, {0xbab9e000}, - {0xbaba0000}, {0xbaba2000}, {0xbaba4000}, {0xbaba6000}, - {0xbaba8000}, {0xbabaa000}, {0xbabac000}, {0xbabae000}, - {0xbabb0000}, {0xbabb2000}, {0xbabb4000}, {0xbabb6000}, - {0xbabb8000}, {0xbabba000}, {0xbabbc000}, {0xbabbe000}, - {0xbabc0000}, {0xbabc2000}, {0xbabc4000}, {0xbabc6000}, - {0xbabc8000}, {0xbabca000}, {0xbabcc000}, {0xbabce000}, - {0xbabd0000}, {0xbabd2000}, {0xbabd4000}, {0xbabd6000}, - {0xbabd8000}, {0xbabda000}, {0xbabdc000}, {0xbabde000}, - {0xbabe0000}, {0xbabe2000}, {0xbabe4000}, {0xbabe6000}, - {0xbabe8000}, {0xbabea000}, {0xbabec000}, {0xbabee000}, - {0xbabf0000}, {0xbabf2000}, {0xbabf4000}, {0xbabf6000}, - {0xbabf8000}, {0xbabfa000}, {0xbabfc000}, {0xbabfe000}, - {0xbac00000}, {0xbac02000}, {0xbac04000}, {0xbac06000}, - {0xbac08000}, {0xbac0a000}, {0xbac0c000}, {0xbac0e000}, - {0xbac10000}, {0xbac12000}, {0xbac14000}, {0xbac16000}, - {0xbac18000}, {0xbac1a000}, {0xbac1c000}, {0xbac1e000}, - {0xbac20000}, {0xbac22000}, {0xbac24000}, {0xbac26000}, - {0xbac28000}, {0xbac2a000}, {0xbac2c000}, {0xbac2e000}, - {0xbac30000}, {0xbac32000}, {0xbac34000}, {0xbac36000}, - {0xbac38000}, {0xbac3a000}, {0xbac3c000}, {0xbac3e000}, - {0xbac40000}, {0xbac42000}, {0xbac44000}, {0xbac46000}, - {0xbac48000}, {0xbac4a000}, {0xbac4c000}, {0xbac4e000}, - {0xbac50000}, {0xbac52000}, {0xbac54000}, {0xbac56000}, - {0xbac58000}, {0xbac5a000}, {0xbac5c000}, {0xbac5e000}, - {0xbac60000}, {0xbac62000}, {0xbac64000}, {0xbac66000}, - {0xbac68000}, {0xbac6a000}, {0xbac6c000}, {0xbac6e000}, - {0xbac70000}, {0xbac72000}, {0xbac74000}, {0xbac76000}, - {0xbac78000}, {0xbac7a000}, {0xbac7c000}, {0xbac7e000}, - {0xbac80000}, {0xbac82000}, {0xbac84000}, {0xbac86000}, - {0xbac88000}, {0xbac8a000}, {0xbac8c000}, {0xbac8e000}, - {0xbac90000}, {0xbac92000}, {0xbac94000}, {0xbac96000}, - {0xbac98000}, {0xbac9a000}, {0xbac9c000}, {0xbac9e000}, - {0xbaca0000}, {0xbaca2000}, {0xbaca4000}, {0xbaca6000}, - {0xbaca8000}, {0xbacaa000}, {0xbacac000}, {0xbacae000}, - {0xbacb0000}, {0xbacb2000}, {0xbacb4000}, {0xbacb6000}, - {0xbacb8000}, {0xbacba000}, {0xbacbc000}, {0xbacbe000}, - {0xbacc0000}, {0xbacc2000}, {0xbacc4000}, {0xbacc6000}, - {0xbacc8000}, {0xbacca000}, {0xbaccc000}, {0xbacce000}, - {0xbacd0000}, {0xbacd2000}, {0xbacd4000}, {0xbacd6000}, - {0xbacd8000}, {0xbacda000}, {0xbacdc000}, {0xbacde000}, - {0xbace0000}, {0xbace2000}, {0xbace4000}, {0xbace6000}, - {0xbace8000}, {0xbacea000}, {0xbacec000}, {0xbacee000}, - {0xbacf0000}, {0xbacf2000}, {0xbacf4000}, {0xbacf6000}, - {0xbacf8000}, {0xbacfa000}, {0xbacfc000}, {0xbacfe000}, - {0xbad00000}, {0xbad02000}, {0xbad04000}, {0xbad06000}, - {0xbad08000}, {0xbad0a000}, {0xbad0c000}, {0xbad0e000}, - {0xbad10000}, {0xbad12000}, {0xbad14000}, {0xbad16000}, - {0xbad18000}, {0xbad1a000}, {0xbad1c000}, {0xbad1e000}, - {0xbad20000}, {0xbad22000}, {0xbad24000}, {0xbad26000}, - {0xbad28000}, {0xbad2a000}, {0xbad2c000}, {0xbad2e000}, - {0xbad30000}, {0xbad32000}, {0xbad34000}, {0xbad36000}, - {0xbad38000}, {0xbad3a000}, {0xbad3c000}, {0xbad3e000}, - {0xbad40000}, {0xbad42000}, {0xbad44000}, {0xbad46000}, - {0xbad48000}, {0xbad4a000}, {0xbad4c000}, {0xbad4e000}, - {0xbad50000}, {0xbad52000}, {0xbad54000}, {0xbad56000}, - {0xbad58000}, {0xbad5a000}, {0xbad5c000}, {0xbad5e000}, - {0xbad60000}, {0xbad62000}, {0xbad64000}, {0xbad66000}, - {0xbad68000}, {0xbad6a000}, {0xbad6c000}, {0xbad6e000}, - {0xbad70000}, {0xbad72000}, {0xbad74000}, {0xbad76000}, - {0xbad78000}, {0xbad7a000}, {0xbad7c000}, {0xbad7e000}, - {0xbad80000}, {0xbad82000}, {0xbad84000}, {0xbad86000}, - {0xbad88000}, {0xbad8a000}, {0xbad8c000}, {0xbad8e000}, - {0xbad90000}, {0xbad92000}, {0xbad94000}, {0xbad96000}, - {0xbad98000}, {0xbad9a000}, {0xbad9c000}, {0xbad9e000}, - {0xbada0000}, {0xbada2000}, {0xbada4000}, {0xbada6000}, - {0xbada8000}, {0xbadaa000}, {0xbadac000}, {0xbadae000}, - {0xbadb0000}, {0xbadb2000}, {0xbadb4000}, {0xbadb6000}, - {0xbadb8000}, {0xbadba000}, {0xbadbc000}, {0xbadbe000}, - {0xbadc0000}, {0xbadc2000}, {0xbadc4000}, {0xbadc6000}, - {0xbadc8000}, {0xbadca000}, {0xbadcc000}, {0xbadce000}, - {0xbadd0000}, {0xbadd2000}, {0xbadd4000}, {0xbadd6000}, - {0xbadd8000}, {0xbadda000}, {0xbaddc000}, {0xbadde000}, - {0xbade0000}, {0xbade2000}, {0xbade4000}, {0xbade6000}, - {0xbade8000}, {0xbadea000}, {0xbadec000}, {0xbadee000}, - {0xbadf0000}, {0xbadf2000}, {0xbadf4000}, {0xbadf6000}, - {0xbadf8000}, {0xbadfa000}, {0xbadfc000}, {0xbadfe000}, - {0xbae00000}, {0xbae02000}, {0xbae04000}, {0xbae06000}, - {0xbae08000}, {0xbae0a000}, {0xbae0c000}, {0xbae0e000}, - {0xbae10000}, {0xbae12000}, {0xbae14000}, {0xbae16000}, - {0xbae18000}, {0xbae1a000}, {0xbae1c000}, {0xbae1e000}, - {0xbae20000}, {0xbae22000}, {0xbae24000}, {0xbae26000}, - {0xbae28000}, {0xbae2a000}, {0xbae2c000}, {0xbae2e000}, - {0xbae30000}, {0xbae32000}, {0xbae34000}, {0xbae36000}, - {0xbae38000}, {0xbae3a000}, {0xbae3c000}, {0xbae3e000}, - {0xbae40000}, {0xbae42000}, {0xbae44000}, {0xbae46000}, - {0xbae48000}, {0xbae4a000}, {0xbae4c000}, {0xbae4e000}, - {0xbae50000}, {0xbae52000}, {0xbae54000}, {0xbae56000}, - {0xbae58000}, {0xbae5a000}, {0xbae5c000}, {0xbae5e000}, - {0xbae60000}, {0xbae62000}, {0xbae64000}, {0xbae66000}, - {0xbae68000}, {0xbae6a000}, {0xbae6c000}, {0xbae6e000}, - {0xbae70000}, {0xbae72000}, {0xbae74000}, {0xbae76000}, - {0xbae78000}, {0xbae7a000}, {0xbae7c000}, {0xbae7e000}, - {0xbae80000}, {0xbae82000}, {0xbae84000}, {0xbae86000}, - {0xbae88000}, {0xbae8a000}, {0xbae8c000}, {0xbae8e000}, - {0xbae90000}, {0xbae92000}, {0xbae94000}, {0xbae96000}, - {0xbae98000}, {0xbae9a000}, {0xbae9c000}, {0xbae9e000}, - {0xbaea0000}, {0xbaea2000}, {0xbaea4000}, {0xbaea6000}, - {0xbaea8000}, {0xbaeaa000}, {0xbaeac000}, {0xbaeae000}, - {0xbaeb0000}, {0xbaeb2000}, {0xbaeb4000}, {0xbaeb6000}, - {0xbaeb8000}, {0xbaeba000}, {0xbaebc000}, {0xbaebe000}, - {0xbaec0000}, {0xbaec2000}, {0xbaec4000}, {0xbaec6000}, - {0xbaec8000}, {0xbaeca000}, {0xbaecc000}, {0xbaece000}, - {0xbaed0000}, {0xbaed2000}, {0xbaed4000}, {0xbaed6000}, - {0xbaed8000}, {0xbaeda000}, {0xbaedc000}, {0xbaede000}, - {0xbaee0000}, {0xbaee2000}, {0xbaee4000}, {0xbaee6000}, - {0xbaee8000}, {0xbaeea000}, {0xbaeec000}, {0xbaeee000}, - {0xbaef0000}, {0xbaef2000}, {0xbaef4000}, {0xbaef6000}, - {0xbaef8000}, {0xbaefa000}, {0xbaefc000}, {0xbaefe000}, - {0xbaf00000}, {0xbaf02000}, {0xbaf04000}, {0xbaf06000}, - {0xbaf08000}, {0xbaf0a000}, {0xbaf0c000}, {0xbaf0e000}, - {0xbaf10000}, {0xbaf12000}, {0xbaf14000}, {0xbaf16000}, - {0xbaf18000}, {0xbaf1a000}, {0xbaf1c000}, {0xbaf1e000}, - {0xbaf20000}, {0xbaf22000}, {0xbaf24000}, {0xbaf26000}, - {0xbaf28000}, {0xbaf2a000}, {0xbaf2c000}, {0xbaf2e000}, - {0xbaf30000}, {0xbaf32000}, {0xbaf34000}, {0xbaf36000}, - {0xbaf38000}, {0xbaf3a000}, {0xbaf3c000}, {0xbaf3e000}, - {0xbaf40000}, {0xbaf42000}, {0xbaf44000}, {0xbaf46000}, - {0xbaf48000}, {0xbaf4a000}, {0xbaf4c000}, {0xbaf4e000}, - {0xbaf50000}, {0xbaf52000}, {0xbaf54000}, {0xbaf56000}, - {0xbaf58000}, {0xbaf5a000}, {0xbaf5c000}, {0xbaf5e000}, - {0xbaf60000}, {0xbaf62000}, {0xbaf64000}, {0xbaf66000}, - {0xbaf68000}, {0xbaf6a000}, {0xbaf6c000}, {0xbaf6e000}, - {0xbaf70000}, {0xbaf72000}, {0xbaf74000}, {0xbaf76000}, - {0xbaf78000}, {0xbaf7a000}, {0xbaf7c000}, {0xbaf7e000}, - {0xbaf80000}, {0xbaf82000}, {0xbaf84000}, {0xbaf86000}, - {0xbaf88000}, {0xbaf8a000}, {0xbaf8c000}, {0xbaf8e000}, - {0xbaf90000}, {0xbaf92000}, {0xbaf94000}, {0xbaf96000}, - {0xbaf98000}, {0xbaf9a000}, {0xbaf9c000}, {0xbaf9e000}, - {0xbafa0000}, {0xbafa2000}, {0xbafa4000}, {0xbafa6000}, - {0xbafa8000}, {0xbafaa000}, {0xbafac000}, {0xbafae000}, - {0xbafb0000}, {0xbafb2000}, {0xbafb4000}, {0xbafb6000}, - {0xbafb8000}, {0xbafba000}, {0xbafbc000}, {0xbafbe000}, - {0xbafc0000}, {0xbafc2000}, {0xbafc4000}, {0xbafc6000}, - {0xbafc8000}, {0xbafca000}, {0xbafcc000}, {0xbafce000}, - {0xbafd0000}, {0xbafd2000}, {0xbafd4000}, {0xbafd6000}, - {0xbafd8000}, {0xbafda000}, {0xbafdc000}, {0xbafde000}, - {0xbafe0000}, {0xbafe2000}, {0xbafe4000}, {0xbafe6000}, - {0xbafe8000}, {0xbafea000}, {0xbafec000}, {0xbafee000}, - {0xbaff0000}, {0xbaff2000}, {0xbaff4000}, {0xbaff6000}, - {0xbaff8000}, {0xbaffa000}, {0xbaffc000}, {0xbaffe000}, - {0xbb000000}, {0xbb002000}, {0xbb004000}, {0xbb006000}, - {0xbb008000}, {0xbb00a000}, {0xbb00c000}, {0xbb00e000}, - {0xbb010000}, {0xbb012000}, {0xbb014000}, {0xbb016000}, - {0xbb018000}, {0xbb01a000}, {0xbb01c000}, {0xbb01e000}, - {0xbb020000}, {0xbb022000}, {0xbb024000}, {0xbb026000}, - {0xbb028000}, {0xbb02a000}, {0xbb02c000}, {0xbb02e000}, - {0xbb030000}, {0xbb032000}, {0xbb034000}, {0xbb036000}, - {0xbb038000}, {0xbb03a000}, {0xbb03c000}, {0xbb03e000}, - {0xbb040000}, {0xbb042000}, {0xbb044000}, {0xbb046000}, - {0xbb048000}, {0xbb04a000}, {0xbb04c000}, {0xbb04e000}, - {0xbb050000}, {0xbb052000}, {0xbb054000}, {0xbb056000}, - {0xbb058000}, {0xbb05a000}, {0xbb05c000}, {0xbb05e000}, - {0xbb060000}, {0xbb062000}, {0xbb064000}, {0xbb066000}, - {0xbb068000}, {0xbb06a000}, {0xbb06c000}, {0xbb06e000}, - {0xbb070000}, {0xbb072000}, {0xbb074000}, {0xbb076000}, - {0xbb078000}, {0xbb07a000}, {0xbb07c000}, {0xbb07e000}, - {0xbb080000}, {0xbb082000}, {0xbb084000}, {0xbb086000}, - {0xbb088000}, {0xbb08a000}, {0xbb08c000}, {0xbb08e000}, - {0xbb090000}, {0xbb092000}, {0xbb094000}, {0xbb096000}, - {0xbb098000}, {0xbb09a000}, {0xbb09c000}, {0xbb09e000}, - {0xbb0a0000}, {0xbb0a2000}, {0xbb0a4000}, {0xbb0a6000}, - {0xbb0a8000}, {0xbb0aa000}, {0xbb0ac000}, {0xbb0ae000}, - {0xbb0b0000}, {0xbb0b2000}, {0xbb0b4000}, {0xbb0b6000}, - {0xbb0b8000}, {0xbb0ba000}, {0xbb0bc000}, {0xbb0be000}, - {0xbb0c0000}, {0xbb0c2000}, {0xbb0c4000}, {0xbb0c6000}, - {0xbb0c8000}, {0xbb0ca000}, {0xbb0cc000}, {0xbb0ce000}, - {0xbb0d0000}, {0xbb0d2000}, {0xbb0d4000}, {0xbb0d6000}, - {0xbb0d8000}, {0xbb0da000}, {0xbb0dc000}, {0xbb0de000}, - {0xbb0e0000}, {0xbb0e2000}, {0xbb0e4000}, {0xbb0e6000}, - {0xbb0e8000}, {0xbb0ea000}, {0xbb0ec000}, {0xbb0ee000}, - {0xbb0f0000}, {0xbb0f2000}, {0xbb0f4000}, {0xbb0f6000}, - {0xbb0f8000}, {0xbb0fa000}, {0xbb0fc000}, {0xbb0fe000}, - {0xbb100000}, {0xbb102000}, {0xbb104000}, {0xbb106000}, - {0xbb108000}, {0xbb10a000}, {0xbb10c000}, {0xbb10e000}, - {0xbb110000}, {0xbb112000}, {0xbb114000}, {0xbb116000}, - {0xbb118000}, {0xbb11a000}, {0xbb11c000}, {0xbb11e000}, - {0xbb120000}, {0xbb122000}, {0xbb124000}, {0xbb126000}, - {0xbb128000}, {0xbb12a000}, {0xbb12c000}, {0xbb12e000}, - {0xbb130000}, {0xbb132000}, {0xbb134000}, {0xbb136000}, - {0xbb138000}, {0xbb13a000}, {0xbb13c000}, {0xbb13e000}, - {0xbb140000}, {0xbb142000}, {0xbb144000}, {0xbb146000}, - {0xbb148000}, {0xbb14a000}, {0xbb14c000}, {0xbb14e000}, - {0xbb150000}, {0xbb152000}, {0xbb154000}, {0xbb156000}, - {0xbb158000}, {0xbb15a000}, {0xbb15c000}, {0xbb15e000}, - {0xbb160000}, {0xbb162000}, {0xbb164000}, {0xbb166000}, - {0xbb168000}, {0xbb16a000}, {0xbb16c000}, {0xbb16e000}, - {0xbb170000}, {0xbb172000}, {0xbb174000}, {0xbb176000}, - {0xbb178000}, {0xbb17a000}, {0xbb17c000}, {0xbb17e000}, - {0xbb180000}, {0xbb182000}, {0xbb184000}, {0xbb186000}, - {0xbb188000}, {0xbb18a000}, {0xbb18c000}, {0xbb18e000}, - {0xbb190000}, {0xbb192000}, {0xbb194000}, {0xbb196000}, - {0xbb198000}, {0xbb19a000}, {0xbb19c000}, {0xbb19e000}, - {0xbb1a0000}, {0xbb1a2000}, {0xbb1a4000}, {0xbb1a6000}, - {0xbb1a8000}, {0xbb1aa000}, {0xbb1ac000}, {0xbb1ae000}, - {0xbb1b0000}, {0xbb1b2000}, {0xbb1b4000}, {0xbb1b6000}, - {0xbb1b8000}, {0xbb1ba000}, {0xbb1bc000}, {0xbb1be000}, - {0xbb1c0000}, {0xbb1c2000}, {0xbb1c4000}, {0xbb1c6000}, - {0xbb1c8000}, {0xbb1ca000}, {0xbb1cc000}, {0xbb1ce000}, - {0xbb1d0000}, {0xbb1d2000}, {0xbb1d4000}, {0xbb1d6000}, - {0xbb1d8000}, {0xbb1da000}, {0xbb1dc000}, {0xbb1de000}, - {0xbb1e0000}, {0xbb1e2000}, {0xbb1e4000}, {0xbb1e6000}, - {0xbb1e8000}, {0xbb1ea000}, {0xbb1ec000}, {0xbb1ee000}, - {0xbb1f0000}, {0xbb1f2000}, {0xbb1f4000}, {0xbb1f6000}, - {0xbb1f8000}, {0xbb1fa000}, {0xbb1fc000}, {0xbb1fe000}, - {0xbb200000}, {0xbb202000}, {0xbb204000}, {0xbb206000}, - {0xbb208000}, {0xbb20a000}, {0xbb20c000}, {0xbb20e000}, - {0xbb210000}, {0xbb212000}, {0xbb214000}, {0xbb216000}, - {0xbb218000}, {0xbb21a000}, {0xbb21c000}, {0xbb21e000}, - {0xbb220000}, {0xbb222000}, {0xbb224000}, {0xbb226000}, - {0xbb228000}, {0xbb22a000}, {0xbb22c000}, {0xbb22e000}, - {0xbb230000}, {0xbb232000}, {0xbb234000}, {0xbb236000}, - {0xbb238000}, {0xbb23a000}, {0xbb23c000}, {0xbb23e000}, - {0xbb240000}, {0xbb242000}, {0xbb244000}, {0xbb246000}, - {0xbb248000}, {0xbb24a000}, {0xbb24c000}, {0xbb24e000}, - {0xbb250000}, {0xbb252000}, {0xbb254000}, {0xbb256000}, - {0xbb258000}, {0xbb25a000}, {0xbb25c000}, {0xbb25e000}, - {0xbb260000}, {0xbb262000}, {0xbb264000}, {0xbb266000}, - {0xbb268000}, {0xbb26a000}, {0xbb26c000}, {0xbb26e000}, - {0xbb270000}, {0xbb272000}, {0xbb274000}, {0xbb276000}, - {0xbb278000}, {0xbb27a000}, {0xbb27c000}, {0xbb27e000}, - {0xbb280000}, {0xbb282000}, {0xbb284000}, {0xbb286000}, - {0xbb288000}, {0xbb28a000}, {0xbb28c000}, {0xbb28e000}, - {0xbb290000}, {0xbb292000}, {0xbb294000}, {0xbb296000}, - {0xbb298000}, {0xbb29a000}, {0xbb29c000}, {0xbb29e000}, - {0xbb2a0000}, {0xbb2a2000}, {0xbb2a4000}, {0xbb2a6000}, - {0xbb2a8000}, {0xbb2aa000}, {0xbb2ac000}, {0xbb2ae000}, - {0xbb2b0000}, {0xbb2b2000}, {0xbb2b4000}, {0xbb2b6000}, - {0xbb2b8000}, {0xbb2ba000}, {0xbb2bc000}, {0xbb2be000}, - {0xbb2c0000}, {0xbb2c2000}, {0xbb2c4000}, {0xbb2c6000}, - {0xbb2c8000}, {0xbb2ca000}, {0xbb2cc000}, {0xbb2ce000}, - {0xbb2d0000}, {0xbb2d2000}, {0xbb2d4000}, {0xbb2d6000}, - {0xbb2d8000}, {0xbb2da000}, {0xbb2dc000}, {0xbb2de000}, - {0xbb2e0000}, {0xbb2e2000}, {0xbb2e4000}, {0xbb2e6000}, - {0xbb2e8000}, {0xbb2ea000}, {0xbb2ec000}, {0xbb2ee000}, - {0xbb2f0000}, {0xbb2f2000}, {0xbb2f4000}, {0xbb2f6000}, - {0xbb2f8000}, {0xbb2fa000}, {0xbb2fc000}, {0xbb2fe000}, - {0xbb300000}, {0xbb302000}, {0xbb304000}, {0xbb306000}, - {0xbb308000}, {0xbb30a000}, {0xbb30c000}, {0xbb30e000}, - {0xbb310000}, {0xbb312000}, {0xbb314000}, {0xbb316000}, - {0xbb318000}, {0xbb31a000}, {0xbb31c000}, {0xbb31e000}, - {0xbb320000}, {0xbb322000}, {0xbb324000}, {0xbb326000}, - {0xbb328000}, {0xbb32a000}, {0xbb32c000}, {0xbb32e000}, - {0xbb330000}, {0xbb332000}, {0xbb334000}, {0xbb336000}, - {0xbb338000}, {0xbb33a000}, {0xbb33c000}, {0xbb33e000}, - {0xbb340000}, {0xbb342000}, {0xbb344000}, {0xbb346000}, - {0xbb348000}, {0xbb34a000}, {0xbb34c000}, {0xbb34e000}, - {0xbb350000}, {0xbb352000}, {0xbb354000}, {0xbb356000}, - {0xbb358000}, {0xbb35a000}, {0xbb35c000}, {0xbb35e000}, - {0xbb360000}, {0xbb362000}, {0xbb364000}, {0xbb366000}, - {0xbb368000}, {0xbb36a000}, {0xbb36c000}, {0xbb36e000}, - {0xbb370000}, {0xbb372000}, {0xbb374000}, {0xbb376000}, - {0xbb378000}, {0xbb37a000}, {0xbb37c000}, {0xbb37e000}, - {0xbb380000}, {0xbb382000}, {0xbb384000}, {0xbb386000}, - {0xbb388000}, {0xbb38a000}, {0xbb38c000}, {0xbb38e000}, - {0xbb390000}, {0xbb392000}, {0xbb394000}, {0xbb396000}, - {0xbb398000}, {0xbb39a000}, {0xbb39c000}, {0xbb39e000}, - {0xbb3a0000}, {0xbb3a2000}, {0xbb3a4000}, {0xbb3a6000}, - {0xbb3a8000}, {0xbb3aa000}, {0xbb3ac000}, {0xbb3ae000}, - {0xbb3b0000}, {0xbb3b2000}, {0xbb3b4000}, {0xbb3b6000}, - {0xbb3b8000}, {0xbb3ba000}, {0xbb3bc000}, {0xbb3be000}, - {0xbb3c0000}, {0xbb3c2000}, {0xbb3c4000}, {0xbb3c6000}, - {0xbb3c8000}, {0xbb3ca000}, {0xbb3cc000}, {0xbb3ce000}, - {0xbb3d0000}, {0xbb3d2000}, {0xbb3d4000}, {0xbb3d6000}, - {0xbb3d8000}, {0xbb3da000}, {0xbb3dc000}, {0xbb3de000}, - {0xbb3e0000}, {0xbb3e2000}, {0xbb3e4000}, {0xbb3e6000}, - {0xbb3e8000}, {0xbb3ea000}, {0xbb3ec000}, {0xbb3ee000}, - {0xbb3f0000}, {0xbb3f2000}, {0xbb3f4000}, {0xbb3f6000}, - {0xbb3f8000}, {0xbb3fa000}, {0xbb3fc000}, {0xbb3fe000}, - {0xbb400000}, {0xbb402000}, {0xbb404000}, {0xbb406000}, - {0xbb408000}, {0xbb40a000}, {0xbb40c000}, {0xbb40e000}, - {0xbb410000}, {0xbb412000}, {0xbb414000}, {0xbb416000}, - {0xbb418000}, {0xbb41a000}, {0xbb41c000}, {0xbb41e000}, - {0xbb420000}, {0xbb422000}, {0xbb424000}, {0xbb426000}, - {0xbb428000}, {0xbb42a000}, {0xbb42c000}, {0xbb42e000}, - {0xbb430000}, {0xbb432000}, {0xbb434000}, {0xbb436000}, - {0xbb438000}, {0xbb43a000}, {0xbb43c000}, {0xbb43e000}, - {0xbb440000}, {0xbb442000}, {0xbb444000}, {0xbb446000}, - {0xbb448000}, {0xbb44a000}, {0xbb44c000}, {0xbb44e000}, - {0xbb450000}, {0xbb452000}, {0xbb454000}, {0xbb456000}, - {0xbb458000}, {0xbb45a000}, {0xbb45c000}, {0xbb45e000}, - {0xbb460000}, {0xbb462000}, {0xbb464000}, {0xbb466000}, - {0xbb468000}, {0xbb46a000}, {0xbb46c000}, {0xbb46e000}, - {0xbb470000}, {0xbb472000}, {0xbb474000}, {0xbb476000}, - {0xbb478000}, {0xbb47a000}, {0xbb47c000}, {0xbb47e000}, - {0xbb480000}, {0xbb482000}, {0xbb484000}, {0xbb486000}, - {0xbb488000}, {0xbb48a000}, {0xbb48c000}, {0xbb48e000}, - {0xbb490000}, {0xbb492000}, {0xbb494000}, {0xbb496000}, - {0xbb498000}, {0xbb49a000}, {0xbb49c000}, {0xbb49e000}, - {0xbb4a0000}, {0xbb4a2000}, {0xbb4a4000}, {0xbb4a6000}, - {0xbb4a8000}, {0xbb4aa000}, {0xbb4ac000}, {0xbb4ae000}, - {0xbb4b0000}, {0xbb4b2000}, {0xbb4b4000}, {0xbb4b6000}, - {0xbb4b8000}, {0xbb4ba000}, {0xbb4bc000}, {0xbb4be000}, - {0xbb4c0000}, {0xbb4c2000}, {0xbb4c4000}, {0xbb4c6000}, - {0xbb4c8000}, {0xbb4ca000}, {0xbb4cc000}, {0xbb4ce000}, - {0xbb4d0000}, {0xbb4d2000}, {0xbb4d4000}, {0xbb4d6000}, - {0xbb4d8000}, {0xbb4da000}, {0xbb4dc000}, {0xbb4de000}, - {0xbb4e0000}, {0xbb4e2000}, {0xbb4e4000}, {0xbb4e6000}, - {0xbb4e8000}, {0xbb4ea000}, {0xbb4ec000}, {0xbb4ee000}, - {0xbb4f0000}, {0xbb4f2000}, {0xbb4f4000}, {0xbb4f6000}, - {0xbb4f8000}, {0xbb4fa000}, {0xbb4fc000}, {0xbb4fe000}, - {0xbb500000}, {0xbb502000}, {0xbb504000}, {0xbb506000}, - {0xbb508000}, {0xbb50a000}, {0xbb50c000}, {0xbb50e000}, - {0xbb510000}, {0xbb512000}, {0xbb514000}, {0xbb516000}, - {0xbb518000}, {0xbb51a000}, {0xbb51c000}, {0xbb51e000}, - {0xbb520000}, {0xbb522000}, {0xbb524000}, {0xbb526000}, - {0xbb528000}, {0xbb52a000}, {0xbb52c000}, {0xbb52e000}, - {0xbb530000}, {0xbb532000}, {0xbb534000}, {0xbb536000}, - {0xbb538000}, {0xbb53a000}, {0xbb53c000}, {0xbb53e000}, - {0xbb540000}, {0xbb542000}, {0xbb544000}, {0xbb546000}, - {0xbb548000}, {0xbb54a000}, {0xbb54c000}, {0xbb54e000}, - {0xbb550000}, {0xbb552000}, {0xbb554000}, {0xbb556000}, - {0xbb558000}, {0xbb55a000}, {0xbb55c000}, {0xbb55e000}, - {0xbb560000}, {0xbb562000}, {0xbb564000}, {0xbb566000}, - {0xbb568000}, {0xbb56a000}, {0xbb56c000}, {0xbb56e000}, - {0xbb570000}, {0xbb572000}, {0xbb574000}, {0xbb576000}, - {0xbb578000}, {0xbb57a000}, {0xbb57c000}, {0xbb57e000}, - {0xbb580000}, {0xbb582000}, {0xbb584000}, {0xbb586000}, - {0xbb588000}, {0xbb58a000}, {0xbb58c000}, {0xbb58e000}, - {0xbb590000}, {0xbb592000}, {0xbb594000}, {0xbb596000}, - {0xbb598000}, {0xbb59a000}, {0xbb59c000}, {0xbb59e000}, - {0xbb5a0000}, {0xbb5a2000}, {0xbb5a4000}, {0xbb5a6000}, - {0xbb5a8000}, {0xbb5aa000}, {0xbb5ac000}, {0xbb5ae000}, - {0xbb5b0000}, {0xbb5b2000}, {0xbb5b4000}, {0xbb5b6000}, - {0xbb5b8000}, {0xbb5ba000}, {0xbb5bc000}, {0xbb5be000}, - {0xbb5c0000}, {0xbb5c2000}, {0xbb5c4000}, {0xbb5c6000}, - {0xbb5c8000}, {0xbb5ca000}, {0xbb5cc000}, {0xbb5ce000}, - {0xbb5d0000}, {0xbb5d2000}, {0xbb5d4000}, {0xbb5d6000}, - {0xbb5d8000}, {0xbb5da000}, {0xbb5dc000}, {0xbb5de000}, - {0xbb5e0000}, {0xbb5e2000}, {0xbb5e4000}, {0xbb5e6000}, - {0xbb5e8000}, {0xbb5ea000}, {0xbb5ec000}, {0xbb5ee000}, - {0xbb5f0000}, {0xbb5f2000}, {0xbb5f4000}, {0xbb5f6000}, - {0xbb5f8000}, {0xbb5fa000}, {0xbb5fc000}, {0xbb5fe000}, - {0xbb600000}, {0xbb602000}, {0xbb604000}, {0xbb606000}, - {0xbb608000}, {0xbb60a000}, {0xbb60c000}, {0xbb60e000}, - {0xbb610000}, {0xbb612000}, {0xbb614000}, {0xbb616000}, - {0xbb618000}, {0xbb61a000}, {0xbb61c000}, {0xbb61e000}, - {0xbb620000}, {0xbb622000}, {0xbb624000}, {0xbb626000}, - {0xbb628000}, {0xbb62a000}, {0xbb62c000}, {0xbb62e000}, - {0xbb630000}, {0xbb632000}, {0xbb634000}, {0xbb636000}, - {0xbb638000}, {0xbb63a000}, {0xbb63c000}, {0xbb63e000}, - {0xbb640000}, {0xbb642000}, {0xbb644000}, {0xbb646000}, - {0xbb648000}, {0xbb64a000}, {0xbb64c000}, {0xbb64e000}, - {0xbb650000}, {0xbb652000}, {0xbb654000}, {0xbb656000}, - {0xbb658000}, {0xbb65a000}, {0xbb65c000}, {0xbb65e000}, - {0xbb660000}, {0xbb662000}, {0xbb664000}, {0xbb666000}, - {0xbb668000}, {0xbb66a000}, {0xbb66c000}, {0xbb66e000}, - {0xbb670000}, {0xbb672000}, {0xbb674000}, {0xbb676000}, - {0xbb678000}, {0xbb67a000}, {0xbb67c000}, {0xbb67e000}, - {0xbb680000}, {0xbb682000}, {0xbb684000}, {0xbb686000}, - {0xbb688000}, {0xbb68a000}, {0xbb68c000}, {0xbb68e000}, - {0xbb690000}, {0xbb692000}, {0xbb694000}, {0xbb696000}, - {0xbb698000}, {0xbb69a000}, {0xbb69c000}, {0xbb69e000}, - {0xbb6a0000}, {0xbb6a2000}, {0xbb6a4000}, {0xbb6a6000}, - {0xbb6a8000}, {0xbb6aa000}, {0xbb6ac000}, {0xbb6ae000}, - {0xbb6b0000}, {0xbb6b2000}, {0xbb6b4000}, {0xbb6b6000}, - {0xbb6b8000}, {0xbb6ba000}, {0xbb6bc000}, {0xbb6be000}, - {0xbb6c0000}, {0xbb6c2000}, {0xbb6c4000}, {0xbb6c6000}, - {0xbb6c8000}, {0xbb6ca000}, {0xbb6cc000}, {0xbb6ce000}, - {0xbb6d0000}, {0xbb6d2000}, {0xbb6d4000}, {0xbb6d6000}, - {0xbb6d8000}, {0xbb6da000}, {0xbb6dc000}, {0xbb6de000}, - {0xbb6e0000}, {0xbb6e2000}, {0xbb6e4000}, {0xbb6e6000}, - {0xbb6e8000}, {0xbb6ea000}, {0xbb6ec000}, {0xbb6ee000}, - {0xbb6f0000}, {0xbb6f2000}, {0xbb6f4000}, {0xbb6f6000}, - {0xbb6f8000}, {0xbb6fa000}, {0xbb6fc000}, {0xbb6fe000}, - {0xbb700000}, {0xbb702000}, {0xbb704000}, {0xbb706000}, - {0xbb708000}, {0xbb70a000}, {0xbb70c000}, {0xbb70e000}, - {0xbb710000}, {0xbb712000}, {0xbb714000}, {0xbb716000}, - {0xbb718000}, {0xbb71a000}, {0xbb71c000}, {0xbb71e000}, - {0xbb720000}, {0xbb722000}, {0xbb724000}, {0xbb726000}, - {0xbb728000}, {0xbb72a000}, {0xbb72c000}, {0xbb72e000}, - {0xbb730000}, {0xbb732000}, {0xbb734000}, {0xbb736000}, - {0xbb738000}, {0xbb73a000}, {0xbb73c000}, {0xbb73e000}, - {0xbb740000}, {0xbb742000}, {0xbb744000}, {0xbb746000}, - {0xbb748000}, {0xbb74a000}, {0xbb74c000}, {0xbb74e000}, - {0xbb750000}, {0xbb752000}, {0xbb754000}, {0xbb756000}, - {0xbb758000}, {0xbb75a000}, {0xbb75c000}, {0xbb75e000}, - {0xbb760000}, {0xbb762000}, {0xbb764000}, {0xbb766000}, - {0xbb768000}, {0xbb76a000}, {0xbb76c000}, {0xbb76e000}, - {0xbb770000}, {0xbb772000}, {0xbb774000}, {0xbb776000}, - {0xbb778000}, {0xbb77a000}, {0xbb77c000}, {0xbb77e000}, - {0xbb780000}, {0xbb782000}, {0xbb784000}, {0xbb786000}, - {0xbb788000}, {0xbb78a000}, {0xbb78c000}, {0xbb78e000}, - {0xbb790000}, {0xbb792000}, {0xbb794000}, {0xbb796000}, - {0xbb798000}, {0xbb79a000}, {0xbb79c000}, {0xbb79e000}, - {0xbb7a0000}, {0xbb7a2000}, {0xbb7a4000}, {0xbb7a6000}, - {0xbb7a8000}, {0xbb7aa000}, {0xbb7ac000}, {0xbb7ae000}, - {0xbb7b0000}, {0xbb7b2000}, {0xbb7b4000}, {0xbb7b6000}, - {0xbb7b8000}, {0xbb7ba000}, {0xbb7bc000}, {0xbb7be000}, - {0xbb7c0000}, {0xbb7c2000}, {0xbb7c4000}, {0xbb7c6000}, - {0xbb7c8000}, {0xbb7ca000}, {0xbb7cc000}, {0xbb7ce000}, - {0xbb7d0000}, {0xbb7d2000}, {0xbb7d4000}, {0xbb7d6000}, - {0xbb7d8000}, {0xbb7da000}, {0xbb7dc000}, {0xbb7de000}, - {0xbb7e0000}, {0xbb7e2000}, {0xbb7e4000}, {0xbb7e6000}, - {0xbb7e8000}, {0xbb7ea000}, {0xbb7ec000}, {0xbb7ee000}, - {0xbb7f0000}, {0xbb7f2000}, {0xbb7f4000}, {0xbb7f6000}, - {0xbb7f8000}, {0xbb7fa000}, {0xbb7fc000}, {0xbb7fe000}, - {0xbb800000}, {0xbb802000}, {0xbb804000}, {0xbb806000}, - {0xbb808000}, {0xbb80a000}, {0xbb80c000}, {0xbb80e000}, - {0xbb810000}, {0xbb812000}, {0xbb814000}, {0xbb816000}, - {0xbb818000}, {0xbb81a000}, {0xbb81c000}, {0xbb81e000}, - {0xbb820000}, {0xbb822000}, {0xbb824000}, {0xbb826000}, - {0xbb828000}, {0xbb82a000}, {0xbb82c000}, {0xbb82e000}, - {0xbb830000}, {0xbb832000}, {0xbb834000}, {0xbb836000}, - {0xbb838000}, {0xbb83a000}, {0xbb83c000}, {0xbb83e000}, - {0xbb840000}, {0xbb842000}, {0xbb844000}, {0xbb846000}, - {0xbb848000}, {0xbb84a000}, {0xbb84c000}, {0xbb84e000}, - {0xbb850000}, {0xbb852000}, {0xbb854000}, {0xbb856000}, - {0xbb858000}, {0xbb85a000}, {0xbb85c000}, {0xbb85e000}, - {0xbb860000}, {0xbb862000}, {0xbb864000}, {0xbb866000}, - {0xbb868000}, {0xbb86a000}, {0xbb86c000}, {0xbb86e000}, - {0xbb870000}, {0xbb872000}, {0xbb874000}, {0xbb876000}, - {0xbb878000}, {0xbb87a000}, {0xbb87c000}, {0xbb87e000}, - {0xbb880000}, {0xbb882000}, {0xbb884000}, {0xbb886000}, - {0xbb888000}, {0xbb88a000}, {0xbb88c000}, {0xbb88e000}, - {0xbb890000}, {0xbb892000}, {0xbb894000}, {0xbb896000}, - {0xbb898000}, {0xbb89a000}, {0xbb89c000}, {0xbb89e000}, - {0xbb8a0000}, {0xbb8a2000}, {0xbb8a4000}, {0xbb8a6000}, - {0xbb8a8000}, {0xbb8aa000}, {0xbb8ac000}, {0xbb8ae000}, - {0xbb8b0000}, {0xbb8b2000}, {0xbb8b4000}, {0xbb8b6000}, - {0xbb8b8000}, {0xbb8ba000}, {0xbb8bc000}, {0xbb8be000}, - {0xbb8c0000}, {0xbb8c2000}, {0xbb8c4000}, {0xbb8c6000}, - {0xbb8c8000}, {0xbb8ca000}, {0xbb8cc000}, {0xbb8ce000}, - {0xbb8d0000}, {0xbb8d2000}, {0xbb8d4000}, {0xbb8d6000}, - {0xbb8d8000}, {0xbb8da000}, {0xbb8dc000}, {0xbb8de000}, - {0xbb8e0000}, {0xbb8e2000}, {0xbb8e4000}, {0xbb8e6000}, - {0xbb8e8000}, {0xbb8ea000}, {0xbb8ec000}, {0xbb8ee000}, - {0xbb8f0000}, {0xbb8f2000}, {0xbb8f4000}, {0xbb8f6000}, - {0xbb8f8000}, {0xbb8fa000}, {0xbb8fc000}, {0xbb8fe000}, - {0xbb900000}, {0xbb902000}, {0xbb904000}, {0xbb906000}, - {0xbb908000}, {0xbb90a000}, {0xbb90c000}, {0xbb90e000}, - {0xbb910000}, {0xbb912000}, {0xbb914000}, {0xbb916000}, - {0xbb918000}, {0xbb91a000}, {0xbb91c000}, {0xbb91e000}, - {0xbb920000}, {0xbb922000}, {0xbb924000}, {0xbb926000}, - {0xbb928000}, {0xbb92a000}, {0xbb92c000}, {0xbb92e000}, - {0xbb930000}, {0xbb932000}, {0xbb934000}, {0xbb936000}, - {0xbb938000}, {0xbb93a000}, {0xbb93c000}, {0xbb93e000}, - {0xbb940000}, {0xbb942000}, {0xbb944000}, {0xbb946000}, - {0xbb948000}, {0xbb94a000}, {0xbb94c000}, {0xbb94e000}, - {0xbb950000}, {0xbb952000}, {0xbb954000}, {0xbb956000}, - {0xbb958000}, {0xbb95a000}, {0xbb95c000}, {0xbb95e000}, - {0xbb960000}, {0xbb962000}, {0xbb964000}, {0xbb966000}, - {0xbb968000}, {0xbb96a000}, {0xbb96c000}, {0xbb96e000}, - {0xbb970000}, {0xbb972000}, {0xbb974000}, {0xbb976000}, - {0xbb978000}, {0xbb97a000}, {0xbb97c000}, {0xbb97e000}, - {0xbb980000}, {0xbb982000}, {0xbb984000}, {0xbb986000}, - {0xbb988000}, {0xbb98a000}, {0xbb98c000}, {0xbb98e000}, - {0xbb990000}, {0xbb992000}, {0xbb994000}, {0xbb996000}, - {0xbb998000}, {0xbb99a000}, {0xbb99c000}, {0xbb99e000}, - {0xbb9a0000}, {0xbb9a2000}, {0xbb9a4000}, {0xbb9a6000}, - {0xbb9a8000}, {0xbb9aa000}, {0xbb9ac000}, {0xbb9ae000}, - {0xbb9b0000}, {0xbb9b2000}, {0xbb9b4000}, {0xbb9b6000}, - {0xbb9b8000}, {0xbb9ba000}, {0xbb9bc000}, {0xbb9be000}, - {0xbb9c0000}, {0xbb9c2000}, {0xbb9c4000}, {0xbb9c6000}, - {0xbb9c8000}, {0xbb9ca000}, {0xbb9cc000}, {0xbb9ce000}, - {0xbb9d0000}, {0xbb9d2000}, {0xbb9d4000}, {0xbb9d6000}, - {0xbb9d8000}, {0xbb9da000}, {0xbb9dc000}, {0xbb9de000}, - {0xbb9e0000}, {0xbb9e2000}, {0xbb9e4000}, {0xbb9e6000}, - {0xbb9e8000}, {0xbb9ea000}, {0xbb9ec000}, {0xbb9ee000}, - {0xbb9f0000}, {0xbb9f2000}, {0xbb9f4000}, {0xbb9f6000}, - {0xbb9f8000}, {0xbb9fa000}, {0xbb9fc000}, {0xbb9fe000}, - {0xbba00000}, {0xbba02000}, {0xbba04000}, {0xbba06000}, - {0xbba08000}, {0xbba0a000}, {0xbba0c000}, {0xbba0e000}, - {0xbba10000}, {0xbba12000}, {0xbba14000}, {0xbba16000}, - {0xbba18000}, {0xbba1a000}, {0xbba1c000}, {0xbba1e000}, - {0xbba20000}, {0xbba22000}, {0xbba24000}, {0xbba26000}, - {0xbba28000}, {0xbba2a000}, {0xbba2c000}, {0xbba2e000}, - {0xbba30000}, {0xbba32000}, {0xbba34000}, {0xbba36000}, - {0xbba38000}, {0xbba3a000}, {0xbba3c000}, {0xbba3e000}, - {0xbba40000}, {0xbba42000}, {0xbba44000}, {0xbba46000}, - {0xbba48000}, {0xbba4a000}, {0xbba4c000}, {0xbba4e000}, - {0xbba50000}, {0xbba52000}, {0xbba54000}, {0xbba56000}, - {0xbba58000}, {0xbba5a000}, {0xbba5c000}, {0xbba5e000}, - {0xbba60000}, {0xbba62000}, {0xbba64000}, {0xbba66000}, - {0xbba68000}, {0xbba6a000}, {0xbba6c000}, {0xbba6e000}, - {0xbba70000}, {0xbba72000}, {0xbba74000}, {0xbba76000}, - {0xbba78000}, {0xbba7a000}, {0xbba7c000}, {0xbba7e000}, - {0xbba80000}, {0xbba82000}, {0xbba84000}, {0xbba86000}, - {0xbba88000}, {0xbba8a000}, {0xbba8c000}, {0xbba8e000}, - {0xbba90000}, {0xbba92000}, {0xbba94000}, {0xbba96000}, - {0xbba98000}, {0xbba9a000}, {0xbba9c000}, {0xbba9e000}, - {0xbbaa0000}, {0xbbaa2000}, {0xbbaa4000}, {0xbbaa6000}, - {0xbbaa8000}, {0xbbaaa000}, {0xbbaac000}, {0xbbaae000}, - {0xbbab0000}, {0xbbab2000}, {0xbbab4000}, {0xbbab6000}, - {0xbbab8000}, {0xbbaba000}, {0xbbabc000}, {0xbbabe000}, - {0xbbac0000}, {0xbbac2000}, {0xbbac4000}, {0xbbac6000}, - {0xbbac8000}, {0xbbaca000}, {0xbbacc000}, {0xbbace000}, - {0xbbad0000}, {0xbbad2000}, {0xbbad4000}, {0xbbad6000}, - {0xbbad8000}, {0xbbada000}, {0xbbadc000}, {0xbbade000}, - {0xbbae0000}, {0xbbae2000}, {0xbbae4000}, {0xbbae6000}, - {0xbbae8000}, {0xbbaea000}, {0xbbaec000}, {0xbbaee000}, - {0xbbaf0000}, {0xbbaf2000}, {0xbbaf4000}, {0xbbaf6000}, - {0xbbaf8000}, {0xbbafa000}, {0xbbafc000}, {0xbbafe000}, - {0xbbb00000}, {0xbbb02000}, {0xbbb04000}, {0xbbb06000}, - {0xbbb08000}, {0xbbb0a000}, {0xbbb0c000}, {0xbbb0e000}, - {0xbbb10000}, {0xbbb12000}, {0xbbb14000}, {0xbbb16000}, - {0xbbb18000}, {0xbbb1a000}, {0xbbb1c000}, {0xbbb1e000}, - {0xbbb20000}, {0xbbb22000}, {0xbbb24000}, {0xbbb26000}, - {0xbbb28000}, {0xbbb2a000}, {0xbbb2c000}, {0xbbb2e000}, - {0xbbb30000}, {0xbbb32000}, {0xbbb34000}, {0xbbb36000}, - {0xbbb38000}, {0xbbb3a000}, {0xbbb3c000}, {0xbbb3e000}, - {0xbbb40000}, {0xbbb42000}, {0xbbb44000}, {0xbbb46000}, - {0xbbb48000}, {0xbbb4a000}, {0xbbb4c000}, {0xbbb4e000}, - {0xbbb50000}, {0xbbb52000}, {0xbbb54000}, {0xbbb56000}, - {0xbbb58000}, {0xbbb5a000}, {0xbbb5c000}, {0xbbb5e000}, - {0xbbb60000}, {0xbbb62000}, {0xbbb64000}, {0xbbb66000}, - {0xbbb68000}, {0xbbb6a000}, {0xbbb6c000}, {0xbbb6e000}, - {0xbbb70000}, {0xbbb72000}, {0xbbb74000}, {0xbbb76000}, - {0xbbb78000}, {0xbbb7a000}, {0xbbb7c000}, {0xbbb7e000}, - {0xbbb80000}, {0xbbb82000}, {0xbbb84000}, {0xbbb86000}, - {0xbbb88000}, {0xbbb8a000}, {0xbbb8c000}, {0xbbb8e000}, - {0xbbb90000}, {0xbbb92000}, {0xbbb94000}, {0xbbb96000}, - {0xbbb98000}, {0xbbb9a000}, {0xbbb9c000}, {0xbbb9e000}, - {0xbbba0000}, {0xbbba2000}, {0xbbba4000}, {0xbbba6000}, - {0xbbba8000}, {0xbbbaa000}, {0xbbbac000}, {0xbbbae000}, - {0xbbbb0000}, {0xbbbb2000}, {0xbbbb4000}, {0xbbbb6000}, - {0xbbbb8000}, {0xbbbba000}, {0xbbbbc000}, {0xbbbbe000}, - {0xbbbc0000}, {0xbbbc2000}, {0xbbbc4000}, {0xbbbc6000}, - {0xbbbc8000}, {0xbbbca000}, {0xbbbcc000}, {0xbbbce000}, - {0xbbbd0000}, {0xbbbd2000}, {0xbbbd4000}, {0xbbbd6000}, - {0xbbbd8000}, {0xbbbda000}, {0xbbbdc000}, {0xbbbde000}, - {0xbbbe0000}, {0xbbbe2000}, {0xbbbe4000}, {0xbbbe6000}, - {0xbbbe8000}, {0xbbbea000}, {0xbbbec000}, {0xbbbee000}, - {0xbbbf0000}, {0xbbbf2000}, {0xbbbf4000}, {0xbbbf6000}, - {0xbbbf8000}, {0xbbbfa000}, {0xbbbfc000}, {0xbbbfe000}, - {0xbbc00000}, {0xbbc02000}, {0xbbc04000}, {0xbbc06000}, - {0xbbc08000}, {0xbbc0a000}, {0xbbc0c000}, {0xbbc0e000}, - {0xbbc10000}, {0xbbc12000}, {0xbbc14000}, {0xbbc16000}, - {0xbbc18000}, {0xbbc1a000}, {0xbbc1c000}, {0xbbc1e000}, - {0xbbc20000}, {0xbbc22000}, {0xbbc24000}, {0xbbc26000}, - {0xbbc28000}, {0xbbc2a000}, {0xbbc2c000}, {0xbbc2e000}, - {0xbbc30000}, {0xbbc32000}, {0xbbc34000}, {0xbbc36000}, - {0xbbc38000}, {0xbbc3a000}, {0xbbc3c000}, {0xbbc3e000}, - {0xbbc40000}, {0xbbc42000}, {0xbbc44000}, {0xbbc46000}, - {0xbbc48000}, {0xbbc4a000}, {0xbbc4c000}, {0xbbc4e000}, - {0xbbc50000}, {0xbbc52000}, {0xbbc54000}, {0xbbc56000}, - {0xbbc58000}, {0xbbc5a000}, {0xbbc5c000}, {0xbbc5e000}, - {0xbbc60000}, {0xbbc62000}, {0xbbc64000}, {0xbbc66000}, - {0xbbc68000}, {0xbbc6a000}, {0xbbc6c000}, {0xbbc6e000}, - {0xbbc70000}, {0xbbc72000}, {0xbbc74000}, {0xbbc76000}, - {0xbbc78000}, {0xbbc7a000}, {0xbbc7c000}, {0xbbc7e000}, - {0xbbc80000}, {0xbbc82000}, {0xbbc84000}, {0xbbc86000}, - {0xbbc88000}, {0xbbc8a000}, {0xbbc8c000}, {0xbbc8e000}, - {0xbbc90000}, {0xbbc92000}, {0xbbc94000}, {0xbbc96000}, - {0xbbc98000}, {0xbbc9a000}, {0xbbc9c000}, {0xbbc9e000}, - {0xbbca0000}, {0xbbca2000}, {0xbbca4000}, {0xbbca6000}, - {0xbbca8000}, {0xbbcaa000}, {0xbbcac000}, {0xbbcae000}, - {0xbbcb0000}, {0xbbcb2000}, {0xbbcb4000}, {0xbbcb6000}, - {0xbbcb8000}, {0xbbcba000}, {0xbbcbc000}, {0xbbcbe000}, - {0xbbcc0000}, {0xbbcc2000}, {0xbbcc4000}, {0xbbcc6000}, - {0xbbcc8000}, {0xbbcca000}, {0xbbccc000}, {0xbbcce000}, - {0xbbcd0000}, {0xbbcd2000}, {0xbbcd4000}, {0xbbcd6000}, - {0xbbcd8000}, {0xbbcda000}, {0xbbcdc000}, {0xbbcde000}, - {0xbbce0000}, {0xbbce2000}, {0xbbce4000}, {0xbbce6000}, - {0xbbce8000}, {0xbbcea000}, {0xbbcec000}, {0xbbcee000}, - {0xbbcf0000}, {0xbbcf2000}, {0xbbcf4000}, {0xbbcf6000}, - {0xbbcf8000}, {0xbbcfa000}, {0xbbcfc000}, {0xbbcfe000}, - {0xbbd00000}, {0xbbd02000}, {0xbbd04000}, {0xbbd06000}, - {0xbbd08000}, {0xbbd0a000}, {0xbbd0c000}, {0xbbd0e000}, - {0xbbd10000}, {0xbbd12000}, {0xbbd14000}, {0xbbd16000}, - {0xbbd18000}, {0xbbd1a000}, {0xbbd1c000}, {0xbbd1e000}, - {0xbbd20000}, {0xbbd22000}, {0xbbd24000}, {0xbbd26000}, - {0xbbd28000}, {0xbbd2a000}, {0xbbd2c000}, {0xbbd2e000}, - {0xbbd30000}, {0xbbd32000}, {0xbbd34000}, {0xbbd36000}, - {0xbbd38000}, {0xbbd3a000}, {0xbbd3c000}, {0xbbd3e000}, - {0xbbd40000}, {0xbbd42000}, {0xbbd44000}, {0xbbd46000}, - {0xbbd48000}, {0xbbd4a000}, {0xbbd4c000}, {0xbbd4e000}, - {0xbbd50000}, {0xbbd52000}, {0xbbd54000}, {0xbbd56000}, - {0xbbd58000}, {0xbbd5a000}, {0xbbd5c000}, {0xbbd5e000}, - {0xbbd60000}, {0xbbd62000}, {0xbbd64000}, {0xbbd66000}, - {0xbbd68000}, {0xbbd6a000}, {0xbbd6c000}, {0xbbd6e000}, - {0xbbd70000}, {0xbbd72000}, {0xbbd74000}, {0xbbd76000}, - {0xbbd78000}, {0xbbd7a000}, {0xbbd7c000}, {0xbbd7e000}, - {0xbbd80000}, {0xbbd82000}, {0xbbd84000}, {0xbbd86000}, - {0xbbd88000}, {0xbbd8a000}, {0xbbd8c000}, {0xbbd8e000}, - {0xbbd90000}, {0xbbd92000}, {0xbbd94000}, {0xbbd96000}, - {0xbbd98000}, {0xbbd9a000}, {0xbbd9c000}, {0xbbd9e000}, - {0xbbda0000}, {0xbbda2000}, {0xbbda4000}, {0xbbda6000}, - {0xbbda8000}, {0xbbdaa000}, {0xbbdac000}, {0xbbdae000}, - {0xbbdb0000}, {0xbbdb2000}, {0xbbdb4000}, {0xbbdb6000}, - {0xbbdb8000}, {0xbbdba000}, {0xbbdbc000}, {0xbbdbe000}, - {0xbbdc0000}, {0xbbdc2000}, {0xbbdc4000}, {0xbbdc6000}, - {0xbbdc8000}, {0xbbdca000}, {0xbbdcc000}, {0xbbdce000}, - {0xbbdd0000}, {0xbbdd2000}, {0xbbdd4000}, {0xbbdd6000}, - {0xbbdd8000}, {0xbbdda000}, {0xbbddc000}, {0xbbdde000}, - {0xbbde0000}, {0xbbde2000}, {0xbbde4000}, {0xbbde6000}, - {0xbbde8000}, {0xbbdea000}, {0xbbdec000}, {0xbbdee000}, - {0xbbdf0000}, {0xbbdf2000}, {0xbbdf4000}, {0xbbdf6000}, - {0xbbdf8000}, {0xbbdfa000}, {0xbbdfc000}, {0xbbdfe000}, - {0xbbe00000}, {0xbbe02000}, {0xbbe04000}, {0xbbe06000}, - {0xbbe08000}, {0xbbe0a000}, {0xbbe0c000}, {0xbbe0e000}, - {0xbbe10000}, {0xbbe12000}, {0xbbe14000}, {0xbbe16000}, - {0xbbe18000}, {0xbbe1a000}, {0xbbe1c000}, {0xbbe1e000}, - {0xbbe20000}, {0xbbe22000}, {0xbbe24000}, {0xbbe26000}, - {0xbbe28000}, {0xbbe2a000}, {0xbbe2c000}, {0xbbe2e000}, - {0xbbe30000}, {0xbbe32000}, {0xbbe34000}, {0xbbe36000}, - {0xbbe38000}, {0xbbe3a000}, {0xbbe3c000}, {0xbbe3e000}, - {0xbbe40000}, {0xbbe42000}, {0xbbe44000}, {0xbbe46000}, - {0xbbe48000}, {0xbbe4a000}, {0xbbe4c000}, {0xbbe4e000}, - {0xbbe50000}, {0xbbe52000}, {0xbbe54000}, {0xbbe56000}, - {0xbbe58000}, {0xbbe5a000}, {0xbbe5c000}, {0xbbe5e000}, - {0xbbe60000}, {0xbbe62000}, {0xbbe64000}, {0xbbe66000}, - {0xbbe68000}, {0xbbe6a000}, {0xbbe6c000}, {0xbbe6e000}, - {0xbbe70000}, {0xbbe72000}, {0xbbe74000}, {0xbbe76000}, - {0xbbe78000}, {0xbbe7a000}, {0xbbe7c000}, {0xbbe7e000}, - {0xbbe80000}, {0xbbe82000}, {0xbbe84000}, {0xbbe86000}, - {0xbbe88000}, {0xbbe8a000}, {0xbbe8c000}, {0xbbe8e000}, - {0xbbe90000}, {0xbbe92000}, {0xbbe94000}, {0xbbe96000}, - {0xbbe98000}, {0xbbe9a000}, {0xbbe9c000}, {0xbbe9e000}, - {0xbbea0000}, {0xbbea2000}, {0xbbea4000}, {0xbbea6000}, - {0xbbea8000}, {0xbbeaa000}, {0xbbeac000}, {0xbbeae000}, - {0xbbeb0000}, {0xbbeb2000}, {0xbbeb4000}, {0xbbeb6000}, - {0xbbeb8000}, {0xbbeba000}, {0xbbebc000}, {0xbbebe000}, - {0xbbec0000}, {0xbbec2000}, {0xbbec4000}, {0xbbec6000}, - {0xbbec8000}, {0xbbeca000}, {0xbbecc000}, {0xbbece000}, - {0xbbed0000}, {0xbbed2000}, {0xbbed4000}, {0xbbed6000}, - {0xbbed8000}, {0xbbeda000}, {0xbbedc000}, {0xbbede000}, - {0xbbee0000}, {0xbbee2000}, {0xbbee4000}, {0xbbee6000}, - {0xbbee8000}, {0xbbeea000}, {0xbbeec000}, {0xbbeee000}, - {0xbbef0000}, {0xbbef2000}, {0xbbef4000}, {0xbbef6000}, - {0xbbef8000}, {0xbbefa000}, {0xbbefc000}, {0xbbefe000}, - {0xbbf00000}, {0xbbf02000}, {0xbbf04000}, {0xbbf06000}, - {0xbbf08000}, {0xbbf0a000}, {0xbbf0c000}, {0xbbf0e000}, - {0xbbf10000}, {0xbbf12000}, {0xbbf14000}, {0xbbf16000}, - {0xbbf18000}, {0xbbf1a000}, {0xbbf1c000}, {0xbbf1e000}, - {0xbbf20000}, {0xbbf22000}, {0xbbf24000}, {0xbbf26000}, - {0xbbf28000}, {0xbbf2a000}, {0xbbf2c000}, {0xbbf2e000}, - {0xbbf30000}, {0xbbf32000}, {0xbbf34000}, {0xbbf36000}, - {0xbbf38000}, {0xbbf3a000}, {0xbbf3c000}, {0xbbf3e000}, - {0xbbf40000}, {0xbbf42000}, {0xbbf44000}, {0xbbf46000}, - {0xbbf48000}, {0xbbf4a000}, {0xbbf4c000}, {0xbbf4e000}, - {0xbbf50000}, {0xbbf52000}, {0xbbf54000}, {0xbbf56000}, - {0xbbf58000}, {0xbbf5a000}, {0xbbf5c000}, {0xbbf5e000}, - {0xbbf60000}, {0xbbf62000}, {0xbbf64000}, {0xbbf66000}, - {0xbbf68000}, {0xbbf6a000}, {0xbbf6c000}, {0xbbf6e000}, - {0xbbf70000}, {0xbbf72000}, {0xbbf74000}, {0xbbf76000}, - {0xbbf78000}, {0xbbf7a000}, {0xbbf7c000}, {0xbbf7e000}, - {0xbbf80000}, {0xbbf82000}, {0xbbf84000}, {0xbbf86000}, - {0xbbf88000}, {0xbbf8a000}, {0xbbf8c000}, {0xbbf8e000}, - {0xbbf90000}, {0xbbf92000}, {0xbbf94000}, {0xbbf96000}, - {0xbbf98000}, {0xbbf9a000}, {0xbbf9c000}, {0xbbf9e000}, - {0xbbfa0000}, {0xbbfa2000}, {0xbbfa4000}, {0xbbfa6000}, - {0xbbfa8000}, {0xbbfaa000}, {0xbbfac000}, {0xbbfae000}, - {0xbbfb0000}, {0xbbfb2000}, {0xbbfb4000}, {0xbbfb6000}, - {0xbbfb8000}, {0xbbfba000}, {0xbbfbc000}, {0xbbfbe000}, - {0xbbfc0000}, {0xbbfc2000}, {0xbbfc4000}, {0xbbfc6000}, - {0xbbfc8000}, {0xbbfca000}, {0xbbfcc000}, {0xbbfce000}, - {0xbbfd0000}, {0xbbfd2000}, {0xbbfd4000}, {0xbbfd6000}, - {0xbbfd8000}, {0xbbfda000}, {0xbbfdc000}, {0xbbfde000}, - {0xbbfe0000}, {0xbbfe2000}, {0xbbfe4000}, {0xbbfe6000}, - {0xbbfe8000}, {0xbbfea000}, {0xbbfec000}, {0xbbfee000}, - {0xbbff0000}, {0xbbff2000}, {0xbbff4000}, {0xbbff6000}, - {0xbbff8000}, {0xbbffa000}, {0xbbffc000}, {0xbbffe000}, - {0xbc000000}, {0xbc002000}, {0xbc004000}, {0xbc006000}, - {0xbc008000}, {0xbc00a000}, {0xbc00c000}, {0xbc00e000}, - {0xbc010000}, {0xbc012000}, {0xbc014000}, {0xbc016000}, - {0xbc018000}, {0xbc01a000}, {0xbc01c000}, {0xbc01e000}, - {0xbc020000}, {0xbc022000}, {0xbc024000}, {0xbc026000}, - {0xbc028000}, {0xbc02a000}, {0xbc02c000}, {0xbc02e000}, - {0xbc030000}, {0xbc032000}, {0xbc034000}, {0xbc036000}, - {0xbc038000}, {0xbc03a000}, {0xbc03c000}, {0xbc03e000}, - {0xbc040000}, {0xbc042000}, {0xbc044000}, {0xbc046000}, - {0xbc048000}, {0xbc04a000}, {0xbc04c000}, {0xbc04e000}, - {0xbc050000}, {0xbc052000}, {0xbc054000}, {0xbc056000}, - {0xbc058000}, {0xbc05a000}, {0xbc05c000}, {0xbc05e000}, - {0xbc060000}, {0xbc062000}, {0xbc064000}, {0xbc066000}, - {0xbc068000}, {0xbc06a000}, {0xbc06c000}, {0xbc06e000}, - {0xbc070000}, {0xbc072000}, {0xbc074000}, {0xbc076000}, - {0xbc078000}, {0xbc07a000}, {0xbc07c000}, {0xbc07e000}, - {0xbc080000}, {0xbc082000}, {0xbc084000}, {0xbc086000}, - {0xbc088000}, {0xbc08a000}, {0xbc08c000}, {0xbc08e000}, - {0xbc090000}, {0xbc092000}, {0xbc094000}, {0xbc096000}, - {0xbc098000}, {0xbc09a000}, {0xbc09c000}, {0xbc09e000}, - {0xbc0a0000}, {0xbc0a2000}, {0xbc0a4000}, {0xbc0a6000}, - {0xbc0a8000}, {0xbc0aa000}, {0xbc0ac000}, {0xbc0ae000}, - {0xbc0b0000}, {0xbc0b2000}, {0xbc0b4000}, {0xbc0b6000}, - {0xbc0b8000}, {0xbc0ba000}, {0xbc0bc000}, {0xbc0be000}, - {0xbc0c0000}, {0xbc0c2000}, {0xbc0c4000}, {0xbc0c6000}, - {0xbc0c8000}, {0xbc0ca000}, {0xbc0cc000}, {0xbc0ce000}, - {0xbc0d0000}, {0xbc0d2000}, {0xbc0d4000}, {0xbc0d6000}, - {0xbc0d8000}, {0xbc0da000}, {0xbc0dc000}, {0xbc0de000}, - {0xbc0e0000}, {0xbc0e2000}, {0xbc0e4000}, {0xbc0e6000}, - {0xbc0e8000}, {0xbc0ea000}, {0xbc0ec000}, {0xbc0ee000}, - {0xbc0f0000}, {0xbc0f2000}, {0xbc0f4000}, {0xbc0f6000}, - {0xbc0f8000}, {0xbc0fa000}, {0xbc0fc000}, {0xbc0fe000}, - {0xbc100000}, {0xbc102000}, {0xbc104000}, {0xbc106000}, - {0xbc108000}, {0xbc10a000}, {0xbc10c000}, {0xbc10e000}, - {0xbc110000}, {0xbc112000}, {0xbc114000}, {0xbc116000}, - {0xbc118000}, {0xbc11a000}, {0xbc11c000}, {0xbc11e000}, - {0xbc120000}, {0xbc122000}, {0xbc124000}, {0xbc126000}, - {0xbc128000}, {0xbc12a000}, {0xbc12c000}, {0xbc12e000}, - {0xbc130000}, {0xbc132000}, {0xbc134000}, {0xbc136000}, - {0xbc138000}, {0xbc13a000}, {0xbc13c000}, {0xbc13e000}, - {0xbc140000}, {0xbc142000}, {0xbc144000}, {0xbc146000}, - {0xbc148000}, {0xbc14a000}, {0xbc14c000}, {0xbc14e000}, - {0xbc150000}, {0xbc152000}, {0xbc154000}, {0xbc156000}, - {0xbc158000}, {0xbc15a000}, {0xbc15c000}, {0xbc15e000}, - {0xbc160000}, {0xbc162000}, {0xbc164000}, {0xbc166000}, - {0xbc168000}, {0xbc16a000}, {0xbc16c000}, {0xbc16e000}, - {0xbc170000}, {0xbc172000}, {0xbc174000}, {0xbc176000}, - {0xbc178000}, {0xbc17a000}, {0xbc17c000}, {0xbc17e000}, - {0xbc180000}, {0xbc182000}, {0xbc184000}, {0xbc186000}, - {0xbc188000}, {0xbc18a000}, {0xbc18c000}, {0xbc18e000}, - {0xbc190000}, {0xbc192000}, {0xbc194000}, {0xbc196000}, - {0xbc198000}, {0xbc19a000}, {0xbc19c000}, {0xbc19e000}, - {0xbc1a0000}, {0xbc1a2000}, {0xbc1a4000}, {0xbc1a6000}, - {0xbc1a8000}, {0xbc1aa000}, {0xbc1ac000}, {0xbc1ae000}, - {0xbc1b0000}, {0xbc1b2000}, {0xbc1b4000}, {0xbc1b6000}, - {0xbc1b8000}, {0xbc1ba000}, {0xbc1bc000}, {0xbc1be000}, - {0xbc1c0000}, {0xbc1c2000}, {0xbc1c4000}, {0xbc1c6000}, - {0xbc1c8000}, {0xbc1ca000}, {0xbc1cc000}, {0xbc1ce000}, - {0xbc1d0000}, {0xbc1d2000}, {0xbc1d4000}, {0xbc1d6000}, - {0xbc1d8000}, {0xbc1da000}, {0xbc1dc000}, {0xbc1de000}, - {0xbc1e0000}, {0xbc1e2000}, {0xbc1e4000}, {0xbc1e6000}, - {0xbc1e8000}, {0xbc1ea000}, {0xbc1ec000}, {0xbc1ee000}, - {0xbc1f0000}, {0xbc1f2000}, {0xbc1f4000}, {0xbc1f6000}, - {0xbc1f8000}, {0xbc1fa000}, {0xbc1fc000}, {0xbc1fe000}, - {0xbc200000}, {0xbc202000}, {0xbc204000}, {0xbc206000}, - {0xbc208000}, {0xbc20a000}, {0xbc20c000}, {0xbc20e000}, - {0xbc210000}, {0xbc212000}, {0xbc214000}, {0xbc216000}, - {0xbc218000}, {0xbc21a000}, {0xbc21c000}, {0xbc21e000}, - {0xbc220000}, {0xbc222000}, {0xbc224000}, {0xbc226000}, - {0xbc228000}, {0xbc22a000}, {0xbc22c000}, {0xbc22e000}, - {0xbc230000}, {0xbc232000}, {0xbc234000}, {0xbc236000}, - {0xbc238000}, {0xbc23a000}, {0xbc23c000}, {0xbc23e000}, - {0xbc240000}, {0xbc242000}, {0xbc244000}, {0xbc246000}, - {0xbc248000}, {0xbc24a000}, {0xbc24c000}, {0xbc24e000}, - {0xbc250000}, {0xbc252000}, {0xbc254000}, {0xbc256000}, - {0xbc258000}, {0xbc25a000}, {0xbc25c000}, {0xbc25e000}, - {0xbc260000}, {0xbc262000}, {0xbc264000}, {0xbc266000}, - {0xbc268000}, {0xbc26a000}, {0xbc26c000}, {0xbc26e000}, - {0xbc270000}, {0xbc272000}, {0xbc274000}, {0xbc276000}, - {0xbc278000}, {0xbc27a000}, {0xbc27c000}, {0xbc27e000}, - {0xbc280000}, {0xbc282000}, {0xbc284000}, {0xbc286000}, - {0xbc288000}, {0xbc28a000}, {0xbc28c000}, {0xbc28e000}, - {0xbc290000}, {0xbc292000}, {0xbc294000}, {0xbc296000}, - {0xbc298000}, {0xbc29a000}, {0xbc29c000}, {0xbc29e000}, - {0xbc2a0000}, {0xbc2a2000}, {0xbc2a4000}, {0xbc2a6000}, - {0xbc2a8000}, {0xbc2aa000}, {0xbc2ac000}, {0xbc2ae000}, - {0xbc2b0000}, {0xbc2b2000}, {0xbc2b4000}, {0xbc2b6000}, - {0xbc2b8000}, {0xbc2ba000}, {0xbc2bc000}, {0xbc2be000}, - {0xbc2c0000}, {0xbc2c2000}, {0xbc2c4000}, {0xbc2c6000}, - {0xbc2c8000}, {0xbc2ca000}, {0xbc2cc000}, {0xbc2ce000}, - {0xbc2d0000}, {0xbc2d2000}, {0xbc2d4000}, {0xbc2d6000}, - {0xbc2d8000}, {0xbc2da000}, {0xbc2dc000}, {0xbc2de000}, - {0xbc2e0000}, {0xbc2e2000}, {0xbc2e4000}, {0xbc2e6000}, - {0xbc2e8000}, {0xbc2ea000}, {0xbc2ec000}, {0xbc2ee000}, - {0xbc2f0000}, {0xbc2f2000}, {0xbc2f4000}, {0xbc2f6000}, - {0xbc2f8000}, {0xbc2fa000}, {0xbc2fc000}, {0xbc2fe000}, - {0xbc300000}, {0xbc302000}, {0xbc304000}, {0xbc306000}, - {0xbc308000}, {0xbc30a000}, {0xbc30c000}, {0xbc30e000}, - {0xbc310000}, {0xbc312000}, {0xbc314000}, {0xbc316000}, - {0xbc318000}, {0xbc31a000}, {0xbc31c000}, {0xbc31e000}, - {0xbc320000}, {0xbc322000}, {0xbc324000}, {0xbc326000}, - {0xbc328000}, {0xbc32a000}, {0xbc32c000}, {0xbc32e000}, - {0xbc330000}, {0xbc332000}, {0xbc334000}, {0xbc336000}, - {0xbc338000}, {0xbc33a000}, {0xbc33c000}, {0xbc33e000}, - {0xbc340000}, {0xbc342000}, {0xbc344000}, {0xbc346000}, - {0xbc348000}, {0xbc34a000}, {0xbc34c000}, {0xbc34e000}, - {0xbc350000}, {0xbc352000}, {0xbc354000}, {0xbc356000}, - {0xbc358000}, {0xbc35a000}, {0xbc35c000}, {0xbc35e000}, - {0xbc360000}, {0xbc362000}, {0xbc364000}, {0xbc366000}, - {0xbc368000}, {0xbc36a000}, {0xbc36c000}, {0xbc36e000}, - {0xbc370000}, {0xbc372000}, {0xbc374000}, {0xbc376000}, - {0xbc378000}, {0xbc37a000}, {0xbc37c000}, {0xbc37e000}, - {0xbc380000}, {0xbc382000}, {0xbc384000}, {0xbc386000}, - {0xbc388000}, {0xbc38a000}, {0xbc38c000}, {0xbc38e000}, - {0xbc390000}, {0xbc392000}, {0xbc394000}, {0xbc396000}, - {0xbc398000}, {0xbc39a000}, {0xbc39c000}, {0xbc39e000}, - {0xbc3a0000}, {0xbc3a2000}, {0xbc3a4000}, {0xbc3a6000}, - {0xbc3a8000}, {0xbc3aa000}, {0xbc3ac000}, {0xbc3ae000}, - {0xbc3b0000}, {0xbc3b2000}, {0xbc3b4000}, {0xbc3b6000}, - {0xbc3b8000}, {0xbc3ba000}, {0xbc3bc000}, {0xbc3be000}, - {0xbc3c0000}, {0xbc3c2000}, {0xbc3c4000}, {0xbc3c6000}, - {0xbc3c8000}, {0xbc3ca000}, {0xbc3cc000}, {0xbc3ce000}, - {0xbc3d0000}, {0xbc3d2000}, {0xbc3d4000}, {0xbc3d6000}, - {0xbc3d8000}, {0xbc3da000}, {0xbc3dc000}, {0xbc3de000}, - {0xbc3e0000}, {0xbc3e2000}, {0xbc3e4000}, {0xbc3e6000}, - {0xbc3e8000}, {0xbc3ea000}, {0xbc3ec000}, {0xbc3ee000}, - {0xbc3f0000}, {0xbc3f2000}, {0xbc3f4000}, {0xbc3f6000}, - {0xbc3f8000}, {0xbc3fa000}, {0xbc3fc000}, {0xbc3fe000}, - {0xbc400000}, {0xbc402000}, {0xbc404000}, {0xbc406000}, - {0xbc408000}, {0xbc40a000}, {0xbc40c000}, {0xbc40e000}, - {0xbc410000}, {0xbc412000}, {0xbc414000}, {0xbc416000}, - {0xbc418000}, {0xbc41a000}, {0xbc41c000}, {0xbc41e000}, - {0xbc420000}, {0xbc422000}, {0xbc424000}, {0xbc426000}, - {0xbc428000}, {0xbc42a000}, {0xbc42c000}, {0xbc42e000}, - {0xbc430000}, {0xbc432000}, {0xbc434000}, {0xbc436000}, - {0xbc438000}, {0xbc43a000}, {0xbc43c000}, {0xbc43e000}, - {0xbc440000}, {0xbc442000}, {0xbc444000}, {0xbc446000}, - {0xbc448000}, {0xbc44a000}, {0xbc44c000}, {0xbc44e000}, - {0xbc450000}, {0xbc452000}, {0xbc454000}, {0xbc456000}, - {0xbc458000}, {0xbc45a000}, {0xbc45c000}, {0xbc45e000}, - {0xbc460000}, {0xbc462000}, {0xbc464000}, {0xbc466000}, - {0xbc468000}, {0xbc46a000}, {0xbc46c000}, {0xbc46e000}, - {0xbc470000}, {0xbc472000}, {0xbc474000}, {0xbc476000}, - {0xbc478000}, {0xbc47a000}, {0xbc47c000}, {0xbc47e000}, - {0xbc480000}, {0xbc482000}, {0xbc484000}, {0xbc486000}, - {0xbc488000}, {0xbc48a000}, {0xbc48c000}, {0xbc48e000}, - {0xbc490000}, {0xbc492000}, {0xbc494000}, {0xbc496000}, - {0xbc498000}, {0xbc49a000}, {0xbc49c000}, {0xbc49e000}, - {0xbc4a0000}, {0xbc4a2000}, {0xbc4a4000}, {0xbc4a6000}, - {0xbc4a8000}, {0xbc4aa000}, {0xbc4ac000}, {0xbc4ae000}, - {0xbc4b0000}, {0xbc4b2000}, {0xbc4b4000}, {0xbc4b6000}, - {0xbc4b8000}, {0xbc4ba000}, {0xbc4bc000}, {0xbc4be000}, - {0xbc4c0000}, {0xbc4c2000}, {0xbc4c4000}, {0xbc4c6000}, - {0xbc4c8000}, {0xbc4ca000}, {0xbc4cc000}, {0xbc4ce000}, - {0xbc4d0000}, {0xbc4d2000}, {0xbc4d4000}, {0xbc4d6000}, - {0xbc4d8000}, {0xbc4da000}, {0xbc4dc000}, {0xbc4de000}, - {0xbc4e0000}, {0xbc4e2000}, {0xbc4e4000}, {0xbc4e6000}, - {0xbc4e8000}, {0xbc4ea000}, {0xbc4ec000}, {0xbc4ee000}, - {0xbc4f0000}, {0xbc4f2000}, {0xbc4f4000}, {0xbc4f6000}, - {0xbc4f8000}, {0xbc4fa000}, {0xbc4fc000}, {0xbc4fe000}, - {0xbc500000}, {0xbc502000}, {0xbc504000}, {0xbc506000}, - {0xbc508000}, {0xbc50a000}, {0xbc50c000}, {0xbc50e000}, - {0xbc510000}, {0xbc512000}, {0xbc514000}, {0xbc516000}, - {0xbc518000}, {0xbc51a000}, {0xbc51c000}, {0xbc51e000}, - {0xbc520000}, {0xbc522000}, {0xbc524000}, {0xbc526000}, - {0xbc528000}, {0xbc52a000}, {0xbc52c000}, {0xbc52e000}, - {0xbc530000}, {0xbc532000}, {0xbc534000}, {0xbc536000}, - {0xbc538000}, {0xbc53a000}, {0xbc53c000}, {0xbc53e000}, - {0xbc540000}, {0xbc542000}, {0xbc544000}, {0xbc546000}, - {0xbc548000}, {0xbc54a000}, {0xbc54c000}, {0xbc54e000}, - {0xbc550000}, {0xbc552000}, {0xbc554000}, {0xbc556000}, - {0xbc558000}, {0xbc55a000}, {0xbc55c000}, {0xbc55e000}, - {0xbc560000}, {0xbc562000}, {0xbc564000}, {0xbc566000}, - {0xbc568000}, {0xbc56a000}, {0xbc56c000}, {0xbc56e000}, - {0xbc570000}, {0xbc572000}, {0xbc574000}, {0xbc576000}, - {0xbc578000}, {0xbc57a000}, {0xbc57c000}, {0xbc57e000}, - {0xbc580000}, {0xbc582000}, {0xbc584000}, {0xbc586000}, - {0xbc588000}, {0xbc58a000}, {0xbc58c000}, {0xbc58e000}, - {0xbc590000}, {0xbc592000}, {0xbc594000}, {0xbc596000}, - {0xbc598000}, {0xbc59a000}, {0xbc59c000}, {0xbc59e000}, - {0xbc5a0000}, {0xbc5a2000}, {0xbc5a4000}, {0xbc5a6000}, - {0xbc5a8000}, {0xbc5aa000}, {0xbc5ac000}, {0xbc5ae000}, - {0xbc5b0000}, {0xbc5b2000}, {0xbc5b4000}, {0xbc5b6000}, - {0xbc5b8000}, {0xbc5ba000}, {0xbc5bc000}, {0xbc5be000}, - {0xbc5c0000}, {0xbc5c2000}, {0xbc5c4000}, {0xbc5c6000}, - {0xbc5c8000}, {0xbc5ca000}, {0xbc5cc000}, {0xbc5ce000}, - {0xbc5d0000}, {0xbc5d2000}, {0xbc5d4000}, {0xbc5d6000}, - {0xbc5d8000}, {0xbc5da000}, {0xbc5dc000}, {0xbc5de000}, - {0xbc5e0000}, {0xbc5e2000}, {0xbc5e4000}, {0xbc5e6000}, - {0xbc5e8000}, {0xbc5ea000}, {0xbc5ec000}, {0xbc5ee000}, - {0xbc5f0000}, {0xbc5f2000}, {0xbc5f4000}, {0xbc5f6000}, - {0xbc5f8000}, {0xbc5fa000}, {0xbc5fc000}, {0xbc5fe000}, - {0xbc600000}, {0xbc602000}, {0xbc604000}, {0xbc606000}, - {0xbc608000}, {0xbc60a000}, {0xbc60c000}, {0xbc60e000}, - {0xbc610000}, {0xbc612000}, {0xbc614000}, {0xbc616000}, - {0xbc618000}, {0xbc61a000}, {0xbc61c000}, {0xbc61e000}, - {0xbc620000}, {0xbc622000}, {0xbc624000}, {0xbc626000}, - {0xbc628000}, {0xbc62a000}, {0xbc62c000}, {0xbc62e000}, - {0xbc630000}, {0xbc632000}, {0xbc634000}, {0xbc636000}, - {0xbc638000}, {0xbc63a000}, {0xbc63c000}, {0xbc63e000}, - {0xbc640000}, {0xbc642000}, {0xbc644000}, {0xbc646000}, - {0xbc648000}, {0xbc64a000}, {0xbc64c000}, {0xbc64e000}, - {0xbc650000}, {0xbc652000}, {0xbc654000}, {0xbc656000}, - {0xbc658000}, {0xbc65a000}, {0xbc65c000}, {0xbc65e000}, - {0xbc660000}, {0xbc662000}, {0xbc664000}, {0xbc666000}, - {0xbc668000}, {0xbc66a000}, {0xbc66c000}, {0xbc66e000}, - {0xbc670000}, {0xbc672000}, {0xbc674000}, {0xbc676000}, - {0xbc678000}, {0xbc67a000}, {0xbc67c000}, {0xbc67e000}, - {0xbc680000}, {0xbc682000}, {0xbc684000}, {0xbc686000}, - {0xbc688000}, {0xbc68a000}, {0xbc68c000}, {0xbc68e000}, - {0xbc690000}, {0xbc692000}, {0xbc694000}, {0xbc696000}, - {0xbc698000}, {0xbc69a000}, {0xbc69c000}, {0xbc69e000}, - {0xbc6a0000}, {0xbc6a2000}, {0xbc6a4000}, {0xbc6a6000}, - {0xbc6a8000}, {0xbc6aa000}, {0xbc6ac000}, {0xbc6ae000}, - {0xbc6b0000}, {0xbc6b2000}, {0xbc6b4000}, {0xbc6b6000}, - {0xbc6b8000}, {0xbc6ba000}, {0xbc6bc000}, {0xbc6be000}, - {0xbc6c0000}, {0xbc6c2000}, {0xbc6c4000}, {0xbc6c6000}, - {0xbc6c8000}, {0xbc6ca000}, {0xbc6cc000}, {0xbc6ce000}, - {0xbc6d0000}, {0xbc6d2000}, {0xbc6d4000}, {0xbc6d6000}, - {0xbc6d8000}, {0xbc6da000}, {0xbc6dc000}, {0xbc6de000}, - {0xbc6e0000}, {0xbc6e2000}, {0xbc6e4000}, {0xbc6e6000}, - {0xbc6e8000}, {0xbc6ea000}, {0xbc6ec000}, {0xbc6ee000}, - {0xbc6f0000}, {0xbc6f2000}, {0xbc6f4000}, {0xbc6f6000}, - {0xbc6f8000}, {0xbc6fa000}, {0xbc6fc000}, {0xbc6fe000}, - {0xbc700000}, {0xbc702000}, {0xbc704000}, {0xbc706000}, - {0xbc708000}, {0xbc70a000}, {0xbc70c000}, {0xbc70e000}, - {0xbc710000}, {0xbc712000}, {0xbc714000}, {0xbc716000}, - {0xbc718000}, {0xbc71a000}, {0xbc71c000}, {0xbc71e000}, - {0xbc720000}, {0xbc722000}, {0xbc724000}, {0xbc726000}, - {0xbc728000}, {0xbc72a000}, {0xbc72c000}, {0xbc72e000}, - {0xbc730000}, {0xbc732000}, {0xbc734000}, {0xbc736000}, - {0xbc738000}, {0xbc73a000}, {0xbc73c000}, {0xbc73e000}, - {0xbc740000}, {0xbc742000}, {0xbc744000}, {0xbc746000}, - {0xbc748000}, {0xbc74a000}, {0xbc74c000}, {0xbc74e000}, - {0xbc750000}, {0xbc752000}, {0xbc754000}, {0xbc756000}, - {0xbc758000}, {0xbc75a000}, {0xbc75c000}, {0xbc75e000}, - {0xbc760000}, {0xbc762000}, {0xbc764000}, {0xbc766000}, - {0xbc768000}, {0xbc76a000}, {0xbc76c000}, {0xbc76e000}, - {0xbc770000}, {0xbc772000}, {0xbc774000}, {0xbc776000}, - {0xbc778000}, {0xbc77a000}, {0xbc77c000}, {0xbc77e000}, - {0xbc780000}, {0xbc782000}, {0xbc784000}, {0xbc786000}, - {0xbc788000}, {0xbc78a000}, {0xbc78c000}, {0xbc78e000}, - {0xbc790000}, {0xbc792000}, {0xbc794000}, {0xbc796000}, - {0xbc798000}, {0xbc79a000}, {0xbc79c000}, {0xbc79e000}, - {0xbc7a0000}, {0xbc7a2000}, {0xbc7a4000}, {0xbc7a6000}, - {0xbc7a8000}, {0xbc7aa000}, {0xbc7ac000}, {0xbc7ae000}, - {0xbc7b0000}, {0xbc7b2000}, {0xbc7b4000}, {0xbc7b6000}, - {0xbc7b8000}, {0xbc7ba000}, {0xbc7bc000}, {0xbc7be000}, - {0xbc7c0000}, {0xbc7c2000}, {0xbc7c4000}, {0xbc7c6000}, - {0xbc7c8000}, {0xbc7ca000}, {0xbc7cc000}, {0xbc7ce000}, - {0xbc7d0000}, {0xbc7d2000}, {0xbc7d4000}, {0xbc7d6000}, - {0xbc7d8000}, {0xbc7da000}, {0xbc7dc000}, {0xbc7de000}, - {0xbc7e0000}, {0xbc7e2000}, {0xbc7e4000}, {0xbc7e6000}, - {0xbc7e8000}, {0xbc7ea000}, {0xbc7ec000}, {0xbc7ee000}, - {0xbc7f0000}, {0xbc7f2000}, {0xbc7f4000}, {0xbc7f6000}, - {0xbc7f8000}, {0xbc7fa000}, {0xbc7fc000}, {0xbc7fe000}, - {0xbc800000}, {0xbc802000}, {0xbc804000}, {0xbc806000}, - {0xbc808000}, {0xbc80a000}, {0xbc80c000}, {0xbc80e000}, - {0xbc810000}, {0xbc812000}, {0xbc814000}, {0xbc816000}, - {0xbc818000}, {0xbc81a000}, {0xbc81c000}, {0xbc81e000}, - {0xbc820000}, {0xbc822000}, {0xbc824000}, {0xbc826000}, - {0xbc828000}, {0xbc82a000}, {0xbc82c000}, {0xbc82e000}, - {0xbc830000}, {0xbc832000}, {0xbc834000}, {0xbc836000}, - {0xbc838000}, {0xbc83a000}, {0xbc83c000}, {0xbc83e000}, - {0xbc840000}, {0xbc842000}, {0xbc844000}, {0xbc846000}, - {0xbc848000}, {0xbc84a000}, {0xbc84c000}, {0xbc84e000}, - {0xbc850000}, {0xbc852000}, {0xbc854000}, {0xbc856000}, - {0xbc858000}, {0xbc85a000}, {0xbc85c000}, {0xbc85e000}, - {0xbc860000}, {0xbc862000}, {0xbc864000}, {0xbc866000}, - {0xbc868000}, {0xbc86a000}, {0xbc86c000}, {0xbc86e000}, - {0xbc870000}, {0xbc872000}, {0xbc874000}, {0xbc876000}, - {0xbc878000}, {0xbc87a000}, {0xbc87c000}, {0xbc87e000}, - {0xbc880000}, {0xbc882000}, {0xbc884000}, {0xbc886000}, - {0xbc888000}, {0xbc88a000}, {0xbc88c000}, {0xbc88e000}, - {0xbc890000}, {0xbc892000}, {0xbc894000}, {0xbc896000}, - {0xbc898000}, {0xbc89a000}, {0xbc89c000}, {0xbc89e000}, - {0xbc8a0000}, {0xbc8a2000}, {0xbc8a4000}, {0xbc8a6000}, - {0xbc8a8000}, {0xbc8aa000}, {0xbc8ac000}, {0xbc8ae000}, - {0xbc8b0000}, {0xbc8b2000}, {0xbc8b4000}, {0xbc8b6000}, - {0xbc8b8000}, {0xbc8ba000}, {0xbc8bc000}, {0xbc8be000}, - {0xbc8c0000}, {0xbc8c2000}, {0xbc8c4000}, {0xbc8c6000}, - {0xbc8c8000}, {0xbc8ca000}, {0xbc8cc000}, {0xbc8ce000}, - {0xbc8d0000}, {0xbc8d2000}, {0xbc8d4000}, {0xbc8d6000}, - {0xbc8d8000}, {0xbc8da000}, {0xbc8dc000}, {0xbc8de000}, - {0xbc8e0000}, {0xbc8e2000}, {0xbc8e4000}, {0xbc8e6000}, - {0xbc8e8000}, {0xbc8ea000}, {0xbc8ec000}, {0xbc8ee000}, - {0xbc8f0000}, {0xbc8f2000}, {0xbc8f4000}, {0xbc8f6000}, - {0xbc8f8000}, {0xbc8fa000}, {0xbc8fc000}, {0xbc8fe000}, - {0xbc900000}, {0xbc902000}, {0xbc904000}, {0xbc906000}, - {0xbc908000}, {0xbc90a000}, {0xbc90c000}, {0xbc90e000}, - {0xbc910000}, {0xbc912000}, {0xbc914000}, {0xbc916000}, - {0xbc918000}, {0xbc91a000}, {0xbc91c000}, {0xbc91e000}, - {0xbc920000}, {0xbc922000}, {0xbc924000}, {0xbc926000}, - {0xbc928000}, {0xbc92a000}, {0xbc92c000}, {0xbc92e000}, - {0xbc930000}, {0xbc932000}, {0xbc934000}, {0xbc936000}, - {0xbc938000}, {0xbc93a000}, {0xbc93c000}, {0xbc93e000}, - {0xbc940000}, {0xbc942000}, {0xbc944000}, {0xbc946000}, - {0xbc948000}, {0xbc94a000}, {0xbc94c000}, {0xbc94e000}, - {0xbc950000}, {0xbc952000}, {0xbc954000}, {0xbc956000}, - {0xbc958000}, {0xbc95a000}, {0xbc95c000}, {0xbc95e000}, - {0xbc960000}, {0xbc962000}, {0xbc964000}, {0xbc966000}, - {0xbc968000}, {0xbc96a000}, {0xbc96c000}, {0xbc96e000}, - {0xbc970000}, {0xbc972000}, {0xbc974000}, {0xbc976000}, - {0xbc978000}, {0xbc97a000}, {0xbc97c000}, {0xbc97e000}, - {0xbc980000}, {0xbc982000}, {0xbc984000}, {0xbc986000}, - {0xbc988000}, {0xbc98a000}, {0xbc98c000}, {0xbc98e000}, - {0xbc990000}, {0xbc992000}, {0xbc994000}, {0xbc996000}, - {0xbc998000}, {0xbc99a000}, {0xbc99c000}, {0xbc99e000}, - {0xbc9a0000}, {0xbc9a2000}, {0xbc9a4000}, {0xbc9a6000}, - {0xbc9a8000}, {0xbc9aa000}, {0xbc9ac000}, {0xbc9ae000}, - {0xbc9b0000}, {0xbc9b2000}, {0xbc9b4000}, {0xbc9b6000}, - {0xbc9b8000}, {0xbc9ba000}, {0xbc9bc000}, {0xbc9be000}, - {0xbc9c0000}, {0xbc9c2000}, {0xbc9c4000}, {0xbc9c6000}, - {0xbc9c8000}, {0xbc9ca000}, {0xbc9cc000}, {0xbc9ce000}, - {0xbc9d0000}, {0xbc9d2000}, {0xbc9d4000}, {0xbc9d6000}, - {0xbc9d8000}, {0xbc9da000}, {0xbc9dc000}, {0xbc9de000}, - {0xbc9e0000}, {0xbc9e2000}, {0xbc9e4000}, {0xbc9e6000}, - {0xbc9e8000}, {0xbc9ea000}, {0xbc9ec000}, {0xbc9ee000}, - {0xbc9f0000}, {0xbc9f2000}, {0xbc9f4000}, {0xbc9f6000}, - {0xbc9f8000}, {0xbc9fa000}, {0xbc9fc000}, {0xbc9fe000}, - {0xbca00000}, {0xbca02000}, {0xbca04000}, {0xbca06000}, - {0xbca08000}, {0xbca0a000}, {0xbca0c000}, {0xbca0e000}, - {0xbca10000}, {0xbca12000}, {0xbca14000}, {0xbca16000}, - {0xbca18000}, {0xbca1a000}, {0xbca1c000}, {0xbca1e000}, - {0xbca20000}, {0xbca22000}, {0xbca24000}, {0xbca26000}, - {0xbca28000}, {0xbca2a000}, {0xbca2c000}, {0xbca2e000}, - {0xbca30000}, {0xbca32000}, {0xbca34000}, {0xbca36000}, - {0xbca38000}, {0xbca3a000}, {0xbca3c000}, {0xbca3e000}, - {0xbca40000}, {0xbca42000}, {0xbca44000}, {0xbca46000}, - {0xbca48000}, {0xbca4a000}, {0xbca4c000}, {0xbca4e000}, - {0xbca50000}, {0xbca52000}, {0xbca54000}, {0xbca56000}, - {0xbca58000}, {0xbca5a000}, {0xbca5c000}, {0xbca5e000}, - {0xbca60000}, {0xbca62000}, {0xbca64000}, {0xbca66000}, - {0xbca68000}, {0xbca6a000}, {0xbca6c000}, {0xbca6e000}, - {0xbca70000}, {0xbca72000}, {0xbca74000}, {0xbca76000}, - {0xbca78000}, {0xbca7a000}, {0xbca7c000}, {0xbca7e000}, - {0xbca80000}, {0xbca82000}, {0xbca84000}, {0xbca86000}, - {0xbca88000}, {0xbca8a000}, {0xbca8c000}, {0xbca8e000}, - {0xbca90000}, {0xbca92000}, {0xbca94000}, {0xbca96000}, - {0xbca98000}, {0xbca9a000}, {0xbca9c000}, {0xbca9e000}, - {0xbcaa0000}, {0xbcaa2000}, {0xbcaa4000}, {0xbcaa6000}, - {0xbcaa8000}, {0xbcaaa000}, {0xbcaac000}, {0xbcaae000}, - {0xbcab0000}, {0xbcab2000}, {0xbcab4000}, {0xbcab6000}, - {0xbcab8000}, {0xbcaba000}, {0xbcabc000}, {0xbcabe000}, - {0xbcac0000}, {0xbcac2000}, {0xbcac4000}, {0xbcac6000}, - {0xbcac8000}, {0xbcaca000}, {0xbcacc000}, {0xbcace000}, - {0xbcad0000}, {0xbcad2000}, {0xbcad4000}, {0xbcad6000}, - {0xbcad8000}, {0xbcada000}, {0xbcadc000}, {0xbcade000}, - {0xbcae0000}, {0xbcae2000}, {0xbcae4000}, {0xbcae6000}, - {0xbcae8000}, {0xbcaea000}, {0xbcaec000}, {0xbcaee000}, - {0xbcaf0000}, {0xbcaf2000}, {0xbcaf4000}, {0xbcaf6000}, - {0xbcaf8000}, {0xbcafa000}, {0xbcafc000}, {0xbcafe000}, - {0xbcb00000}, {0xbcb02000}, {0xbcb04000}, {0xbcb06000}, - {0xbcb08000}, {0xbcb0a000}, {0xbcb0c000}, {0xbcb0e000}, - {0xbcb10000}, {0xbcb12000}, {0xbcb14000}, {0xbcb16000}, - {0xbcb18000}, {0xbcb1a000}, {0xbcb1c000}, {0xbcb1e000}, - {0xbcb20000}, {0xbcb22000}, {0xbcb24000}, {0xbcb26000}, - {0xbcb28000}, {0xbcb2a000}, {0xbcb2c000}, {0xbcb2e000}, - {0xbcb30000}, {0xbcb32000}, {0xbcb34000}, {0xbcb36000}, - {0xbcb38000}, {0xbcb3a000}, {0xbcb3c000}, {0xbcb3e000}, - {0xbcb40000}, {0xbcb42000}, {0xbcb44000}, {0xbcb46000}, - {0xbcb48000}, {0xbcb4a000}, {0xbcb4c000}, {0xbcb4e000}, - {0xbcb50000}, {0xbcb52000}, {0xbcb54000}, {0xbcb56000}, - {0xbcb58000}, {0xbcb5a000}, {0xbcb5c000}, {0xbcb5e000}, - {0xbcb60000}, {0xbcb62000}, {0xbcb64000}, {0xbcb66000}, - {0xbcb68000}, {0xbcb6a000}, {0xbcb6c000}, {0xbcb6e000}, - {0xbcb70000}, {0xbcb72000}, {0xbcb74000}, {0xbcb76000}, - {0xbcb78000}, {0xbcb7a000}, {0xbcb7c000}, {0xbcb7e000}, - {0xbcb80000}, {0xbcb82000}, {0xbcb84000}, {0xbcb86000}, - {0xbcb88000}, {0xbcb8a000}, {0xbcb8c000}, {0xbcb8e000}, - {0xbcb90000}, {0xbcb92000}, {0xbcb94000}, {0xbcb96000}, - {0xbcb98000}, {0xbcb9a000}, {0xbcb9c000}, {0xbcb9e000}, - {0xbcba0000}, {0xbcba2000}, {0xbcba4000}, {0xbcba6000}, - {0xbcba8000}, {0xbcbaa000}, {0xbcbac000}, {0xbcbae000}, - {0xbcbb0000}, {0xbcbb2000}, {0xbcbb4000}, {0xbcbb6000}, - {0xbcbb8000}, {0xbcbba000}, {0xbcbbc000}, {0xbcbbe000}, - {0xbcbc0000}, {0xbcbc2000}, {0xbcbc4000}, {0xbcbc6000}, - {0xbcbc8000}, {0xbcbca000}, {0xbcbcc000}, {0xbcbce000}, - {0xbcbd0000}, {0xbcbd2000}, {0xbcbd4000}, {0xbcbd6000}, - {0xbcbd8000}, {0xbcbda000}, {0xbcbdc000}, {0xbcbde000}, - {0xbcbe0000}, {0xbcbe2000}, {0xbcbe4000}, {0xbcbe6000}, - {0xbcbe8000}, {0xbcbea000}, {0xbcbec000}, {0xbcbee000}, - {0xbcbf0000}, {0xbcbf2000}, {0xbcbf4000}, {0xbcbf6000}, - {0xbcbf8000}, {0xbcbfa000}, {0xbcbfc000}, {0xbcbfe000}, - {0xbcc00000}, {0xbcc02000}, {0xbcc04000}, {0xbcc06000}, - {0xbcc08000}, {0xbcc0a000}, {0xbcc0c000}, {0xbcc0e000}, - {0xbcc10000}, {0xbcc12000}, {0xbcc14000}, {0xbcc16000}, - {0xbcc18000}, {0xbcc1a000}, {0xbcc1c000}, {0xbcc1e000}, - {0xbcc20000}, {0xbcc22000}, {0xbcc24000}, {0xbcc26000}, - {0xbcc28000}, {0xbcc2a000}, {0xbcc2c000}, {0xbcc2e000}, - {0xbcc30000}, {0xbcc32000}, {0xbcc34000}, {0xbcc36000}, - {0xbcc38000}, {0xbcc3a000}, {0xbcc3c000}, {0xbcc3e000}, - {0xbcc40000}, {0xbcc42000}, {0xbcc44000}, {0xbcc46000}, - {0xbcc48000}, {0xbcc4a000}, {0xbcc4c000}, {0xbcc4e000}, - {0xbcc50000}, {0xbcc52000}, {0xbcc54000}, {0xbcc56000}, - {0xbcc58000}, {0xbcc5a000}, {0xbcc5c000}, {0xbcc5e000}, - {0xbcc60000}, {0xbcc62000}, {0xbcc64000}, {0xbcc66000}, - {0xbcc68000}, {0xbcc6a000}, {0xbcc6c000}, {0xbcc6e000}, - {0xbcc70000}, {0xbcc72000}, {0xbcc74000}, {0xbcc76000}, - {0xbcc78000}, {0xbcc7a000}, {0xbcc7c000}, {0xbcc7e000}, - {0xbcc80000}, {0xbcc82000}, {0xbcc84000}, {0xbcc86000}, - {0xbcc88000}, {0xbcc8a000}, {0xbcc8c000}, {0xbcc8e000}, - {0xbcc90000}, {0xbcc92000}, {0xbcc94000}, {0xbcc96000}, - {0xbcc98000}, {0xbcc9a000}, {0xbcc9c000}, {0xbcc9e000}, - {0xbcca0000}, {0xbcca2000}, {0xbcca4000}, {0xbcca6000}, - {0xbcca8000}, {0xbccaa000}, {0xbccac000}, {0xbccae000}, - {0xbccb0000}, {0xbccb2000}, {0xbccb4000}, {0xbccb6000}, - {0xbccb8000}, {0xbccba000}, {0xbccbc000}, {0xbccbe000}, - {0xbccc0000}, {0xbccc2000}, {0xbccc4000}, {0xbccc6000}, - {0xbccc8000}, {0xbccca000}, {0xbcccc000}, {0xbccce000}, - {0xbccd0000}, {0xbccd2000}, {0xbccd4000}, {0xbccd6000}, - {0xbccd8000}, {0xbccda000}, {0xbccdc000}, {0xbccde000}, - {0xbcce0000}, {0xbcce2000}, {0xbcce4000}, {0xbcce6000}, - {0xbcce8000}, {0xbccea000}, {0xbccec000}, {0xbccee000}, - {0xbccf0000}, {0xbccf2000}, {0xbccf4000}, {0xbccf6000}, - {0xbccf8000}, {0xbccfa000}, {0xbccfc000}, {0xbccfe000}, - {0xbcd00000}, {0xbcd02000}, {0xbcd04000}, {0xbcd06000}, - {0xbcd08000}, {0xbcd0a000}, {0xbcd0c000}, {0xbcd0e000}, - {0xbcd10000}, {0xbcd12000}, {0xbcd14000}, {0xbcd16000}, - {0xbcd18000}, {0xbcd1a000}, {0xbcd1c000}, {0xbcd1e000}, - {0xbcd20000}, {0xbcd22000}, {0xbcd24000}, {0xbcd26000}, - {0xbcd28000}, {0xbcd2a000}, {0xbcd2c000}, {0xbcd2e000}, - {0xbcd30000}, {0xbcd32000}, {0xbcd34000}, {0xbcd36000}, - {0xbcd38000}, {0xbcd3a000}, {0xbcd3c000}, {0xbcd3e000}, - {0xbcd40000}, {0xbcd42000}, {0xbcd44000}, {0xbcd46000}, - {0xbcd48000}, {0xbcd4a000}, {0xbcd4c000}, {0xbcd4e000}, - {0xbcd50000}, {0xbcd52000}, {0xbcd54000}, {0xbcd56000}, - {0xbcd58000}, {0xbcd5a000}, {0xbcd5c000}, {0xbcd5e000}, - {0xbcd60000}, {0xbcd62000}, {0xbcd64000}, {0xbcd66000}, - {0xbcd68000}, {0xbcd6a000}, {0xbcd6c000}, {0xbcd6e000}, - {0xbcd70000}, {0xbcd72000}, {0xbcd74000}, {0xbcd76000}, - {0xbcd78000}, {0xbcd7a000}, {0xbcd7c000}, {0xbcd7e000}, - {0xbcd80000}, {0xbcd82000}, {0xbcd84000}, {0xbcd86000}, - {0xbcd88000}, {0xbcd8a000}, {0xbcd8c000}, {0xbcd8e000}, - {0xbcd90000}, {0xbcd92000}, {0xbcd94000}, {0xbcd96000}, - {0xbcd98000}, {0xbcd9a000}, {0xbcd9c000}, {0xbcd9e000}, - {0xbcda0000}, {0xbcda2000}, {0xbcda4000}, {0xbcda6000}, - {0xbcda8000}, {0xbcdaa000}, {0xbcdac000}, {0xbcdae000}, - {0xbcdb0000}, {0xbcdb2000}, {0xbcdb4000}, {0xbcdb6000}, - {0xbcdb8000}, {0xbcdba000}, {0xbcdbc000}, {0xbcdbe000}, - {0xbcdc0000}, {0xbcdc2000}, {0xbcdc4000}, {0xbcdc6000}, - {0xbcdc8000}, {0xbcdca000}, {0xbcdcc000}, {0xbcdce000}, - {0xbcdd0000}, {0xbcdd2000}, {0xbcdd4000}, {0xbcdd6000}, - {0xbcdd8000}, {0xbcdda000}, {0xbcddc000}, {0xbcdde000}, - {0xbcde0000}, {0xbcde2000}, {0xbcde4000}, {0xbcde6000}, - {0xbcde8000}, {0xbcdea000}, {0xbcdec000}, {0xbcdee000}, - {0xbcdf0000}, {0xbcdf2000}, {0xbcdf4000}, {0xbcdf6000}, - {0xbcdf8000}, {0xbcdfa000}, {0xbcdfc000}, {0xbcdfe000}, - {0xbce00000}, {0xbce02000}, {0xbce04000}, {0xbce06000}, - {0xbce08000}, {0xbce0a000}, {0xbce0c000}, {0xbce0e000}, - {0xbce10000}, {0xbce12000}, {0xbce14000}, {0xbce16000}, - {0xbce18000}, {0xbce1a000}, {0xbce1c000}, {0xbce1e000}, - {0xbce20000}, {0xbce22000}, {0xbce24000}, {0xbce26000}, - {0xbce28000}, {0xbce2a000}, {0xbce2c000}, {0xbce2e000}, - {0xbce30000}, {0xbce32000}, {0xbce34000}, {0xbce36000}, - {0xbce38000}, {0xbce3a000}, {0xbce3c000}, {0xbce3e000}, - {0xbce40000}, {0xbce42000}, {0xbce44000}, {0xbce46000}, - {0xbce48000}, {0xbce4a000}, {0xbce4c000}, {0xbce4e000}, - {0xbce50000}, {0xbce52000}, {0xbce54000}, {0xbce56000}, - {0xbce58000}, {0xbce5a000}, {0xbce5c000}, {0xbce5e000}, - {0xbce60000}, {0xbce62000}, {0xbce64000}, {0xbce66000}, - {0xbce68000}, {0xbce6a000}, {0xbce6c000}, {0xbce6e000}, - {0xbce70000}, {0xbce72000}, {0xbce74000}, {0xbce76000}, - {0xbce78000}, {0xbce7a000}, {0xbce7c000}, {0xbce7e000}, - {0xbce80000}, {0xbce82000}, {0xbce84000}, {0xbce86000}, - {0xbce88000}, {0xbce8a000}, {0xbce8c000}, {0xbce8e000}, - {0xbce90000}, {0xbce92000}, {0xbce94000}, {0xbce96000}, - {0xbce98000}, {0xbce9a000}, {0xbce9c000}, {0xbce9e000}, - {0xbcea0000}, {0xbcea2000}, {0xbcea4000}, {0xbcea6000}, - {0xbcea8000}, {0xbceaa000}, {0xbceac000}, {0xbceae000}, - {0xbceb0000}, {0xbceb2000}, {0xbceb4000}, {0xbceb6000}, - {0xbceb8000}, {0xbceba000}, {0xbcebc000}, {0xbcebe000}, - {0xbcec0000}, {0xbcec2000}, {0xbcec4000}, {0xbcec6000}, - {0xbcec8000}, {0xbceca000}, {0xbcecc000}, {0xbcece000}, - {0xbced0000}, {0xbced2000}, {0xbced4000}, {0xbced6000}, - {0xbced8000}, {0xbceda000}, {0xbcedc000}, {0xbcede000}, - {0xbcee0000}, {0xbcee2000}, {0xbcee4000}, {0xbcee6000}, - {0xbcee8000}, {0xbceea000}, {0xbceec000}, {0xbceee000}, - {0xbcef0000}, {0xbcef2000}, {0xbcef4000}, {0xbcef6000}, - {0xbcef8000}, {0xbcefa000}, {0xbcefc000}, {0xbcefe000}, - {0xbcf00000}, {0xbcf02000}, {0xbcf04000}, {0xbcf06000}, - {0xbcf08000}, {0xbcf0a000}, {0xbcf0c000}, {0xbcf0e000}, - {0xbcf10000}, {0xbcf12000}, {0xbcf14000}, {0xbcf16000}, - {0xbcf18000}, {0xbcf1a000}, {0xbcf1c000}, {0xbcf1e000}, - {0xbcf20000}, {0xbcf22000}, {0xbcf24000}, {0xbcf26000}, - {0xbcf28000}, {0xbcf2a000}, {0xbcf2c000}, {0xbcf2e000}, - {0xbcf30000}, {0xbcf32000}, {0xbcf34000}, {0xbcf36000}, - {0xbcf38000}, {0xbcf3a000}, {0xbcf3c000}, {0xbcf3e000}, - {0xbcf40000}, {0xbcf42000}, {0xbcf44000}, {0xbcf46000}, - {0xbcf48000}, {0xbcf4a000}, {0xbcf4c000}, {0xbcf4e000}, - {0xbcf50000}, {0xbcf52000}, {0xbcf54000}, {0xbcf56000}, - {0xbcf58000}, {0xbcf5a000}, {0xbcf5c000}, {0xbcf5e000}, - {0xbcf60000}, {0xbcf62000}, {0xbcf64000}, {0xbcf66000}, - {0xbcf68000}, {0xbcf6a000}, {0xbcf6c000}, {0xbcf6e000}, - {0xbcf70000}, {0xbcf72000}, {0xbcf74000}, {0xbcf76000}, - {0xbcf78000}, {0xbcf7a000}, {0xbcf7c000}, {0xbcf7e000}, - {0xbcf80000}, {0xbcf82000}, {0xbcf84000}, {0xbcf86000}, - {0xbcf88000}, {0xbcf8a000}, {0xbcf8c000}, {0xbcf8e000}, - {0xbcf90000}, {0xbcf92000}, {0xbcf94000}, {0xbcf96000}, - {0xbcf98000}, {0xbcf9a000}, {0xbcf9c000}, {0xbcf9e000}, - {0xbcfa0000}, {0xbcfa2000}, {0xbcfa4000}, {0xbcfa6000}, - {0xbcfa8000}, {0xbcfaa000}, {0xbcfac000}, {0xbcfae000}, - {0xbcfb0000}, {0xbcfb2000}, {0xbcfb4000}, {0xbcfb6000}, - {0xbcfb8000}, {0xbcfba000}, {0xbcfbc000}, {0xbcfbe000}, - {0xbcfc0000}, {0xbcfc2000}, {0xbcfc4000}, {0xbcfc6000}, - {0xbcfc8000}, {0xbcfca000}, {0xbcfcc000}, {0xbcfce000}, - {0xbcfd0000}, {0xbcfd2000}, {0xbcfd4000}, {0xbcfd6000}, - {0xbcfd8000}, {0xbcfda000}, {0xbcfdc000}, {0xbcfde000}, - {0xbcfe0000}, {0xbcfe2000}, {0xbcfe4000}, {0xbcfe6000}, - {0xbcfe8000}, {0xbcfea000}, {0xbcfec000}, {0xbcfee000}, - {0xbcff0000}, {0xbcff2000}, {0xbcff4000}, {0xbcff6000}, - {0xbcff8000}, {0xbcffa000}, {0xbcffc000}, {0xbcffe000}, - {0xbd000000}, {0xbd002000}, {0xbd004000}, {0xbd006000}, - {0xbd008000}, {0xbd00a000}, {0xbd00c000}, {0xbd00e000}, - {0xbd010000}, {0xbd012000}, {0xbd014000}, {0xbd016000}, - {0xbd018000}, {0xbd01a000}, {0xbd01c000}, {0xbd01e000}, - {0xbd020000}, {0xbd022000}, {0xbd024000}, {0xbd026000}, - {0xbd028000}, {0xbd02a000}, {0xbd02c000}, {0xbd02e000}, - {0xbd030000}, {0xbd032000}, {0xbd034000}, {0xbd036000}, - {0xbd038000}, {0xbd03a000}, {0xbd03c000}, {0xbd03e000}, - {0xbd040000}, {0xbd042000}, {0xbd044000}, {0xbd046000}, - {0xbd048000}, {0xbd04a000}, {0xbd04c000}, {0xbd04e000}, - {0xbd050000}, {0xbd052000}, {0xbd054000}, {0xbd056000}, - {0xbd058000}, {0xbd05a000}, {0xbd05c000}, {0xbd05e000}, - {0xbd060000}, {0xbd062000}, {0xbd064000}, {0xbd066000}, - {0xbd068000}, {0xbd06a000}, {0xbd06c000}, {0xbd06e000}, - {0xbd070000}, {0xbd072000}, {0xbd074000}, {0xbd076000}, - {0xbd078000}, {0xbd07a000}, {0xbd07c000}, {0xbd07e000}, - {0xbd080000}, {0xbd082000}, {0xbd084000}, {0xbd086000}, - {0xbd088000}, {0xbd08a000}, {0xbd08c000}, {0xbd08e000}, - {0xbd090000}, {0xbd092000}, {0xbd094000}, {0xbd096000}, - {0xbd098000}, {0xbd09a000}, {0xbd09c000}, {0xbd09e000}, - {0xbd0a0000}, {0xbd0a2000}, {0xbd0a4000}, {0xbd0a6000}, - {0xbd0a8000}, {0xbd0aa000}, {0xbd0ac000}, {0xbd0ae000}, - {0xbd0b0000}, {0xbd0b2000}, {0xbd0b4000}, {0xbd0b6000}, - {0xbd0b8000}, {0xbd0ba000}, {0xbd0bc000}, {0xbd0be000}, - {0xbd0c0000}, {0xbd0c2000}, {0xbd0c4000}, {0xbd0c6000}, - {0xbd0c8000}, {0xbd0ca000}, {0xbd0cc000}, {0xbd0ce000}, - {0xbd0d0000}, {0xbd0d2000}, {0xbd0d4000}, {0xbd0d6000}, - {0xbd0d8000}, {0xbd0da000}, {0xbd0dc000}, {0xbd0de000}, - {0xbd0e0000}, {0xbd0e2000}, {0xbd0e4000}, {0xbd0e6000}, - {0xbd0e8000}, {0xbd0ea000}, {0xbd0ec000}, {0xbd0ee000}, - {0xbd0f0000}, {0xbd0f2000}, {0xbd0f4000}, {0xbd0f6000}, - {0xbd0f8000}, {0xbd0fa000}, {0xbd0fc000}, {0xbd0fe000}, - {0xbd100000}, {0xbd102000}, {0xbd104000}, {0xbd106000}, - {0xbd108000}, {0xbd10a000}, {0xbd10c000}, {0xbd10e000}, - {0xbd110000}, {0xbd112000}, {0xbd114000}, {0xbd116000}, - {0xbd118000}, {0xbd11a000}, {0xbd11c000}, {0xbd11e000}, - {0xbd120000}, {0xbd122000}, {0xbd124000}, {0xbd126000}, - {0xbd128000}, {0xbd12a000}, {0xbd12c000}, {0xbd12e000}, - {0xbd130000}, {0xbd132000}, {0xbd134000}, {0xbd136000}, - {0xbd138000}, {0xbd13a000}, {0xbd13c000}, {0xbd13e000}, - {0xbd140000}, {0xbd142000}, {0xbd144000}, {0xbd146000}, - {0xbd148000}, {0xbd14a000}, {0xbd14c000}, {0xbd14e000}, - {0xbd150000}, {0xbd152000}, {0xbd154000}, {0xbd156000}, - {0xbd158000}, {0xbd15a000}, {0xbd15c000}, {0xbd15e000}, - {0xbd160000}, {0xbd162000}, {0xbd164000}, {0xbd166000}, - {0xbd168000}, {0xbd16a000}, {0xbd16c000}, {0xbd16e000}, - {0xbd170000}, {0xbd172000}, {0xbd174000}, {0xbd176000}, - {0xbd178000}, {0xbd17a000}, {0xbd17c000}, {0xbd17e000}, - {0xbd180000}, {0xbd182000}, {0xbd184000}, {0xbd186000}, - {0xbd188000}, {0xbd18a000}, {0xbd18c000}, {0xbd18e000}, - {0xbd190000}, {0xbd192000}, {0xbd194000}, {0xbd196000}, - {0xbd198000}, {0xbd19a000}, {0xbd19c000}, {0xbd19e000}, - {0xbd1a0000}, {0xbd1a2000}, {0xbd1a4000}, {0xbd1a6000}, - {0xbd1a8000}, {0xbd1aa000}, {0xbd1ac000}, {0xbd1ae000}, - {0xbd1b0000}, {0xbd1b2000}, {0xbd1b4000}, {0xbd1b6000}, - {0xbd1b8000}, {0xbd1ba000}, {0xbd1bc000}, {0xbd1be000}, - {0xbd1c0000}, {0xbd1c2000}, {0xbd1c4000}, {0xbd1c6000}, - {0xbd1c8000}, {0xbd1ca000}, {0xbd1cc000}, {0xbd1ce000}, - {0xbd1d0000}, {0xbd1d2000}, {0xbd1d4000}, {0xbd1d6000}, - {0xbd1d8000}, {0xbd1da000}, {0xbd1dc000}, {0xbd1de000}, - {0xbd1e0000}, {0xbd1e2000}, {0xbd1e4000}, {0xbd1e6000}, - {0xbd1e8000}, {0xbd1ea000}, {0xbd1ec000}, {0xbd1ee000}, - {0xbd1f0000}, {0xbd1f2000}, {0xbd1f4000}, {0xbd1f6000}, - {0xbd1f8000}, {0xbd1fa000}, {0xbd1fc000}, {0xbd1fe000}, - {0xbd200000}, {0xbd202000}, {0xbd204000}, {0xbd206000}, - {0xbd208000}, {0xbd20a000}, {0xbd20c000}, {0xbd20e000}, - {0xbd210000}, {0xbd212000}, {0xbd214000}, {0xbd216000}, - {0xbd218000}, {0xbd21a000}, {0xbd21c000}, {0xbd21e000}, - {0xbd220000}, {0xbd222000}, {0xbd224000}, {0xbd226000}, - {0xbd228000}, {0xbd22a000}, {0xbd22c000}, {0xbd22e000}, - {0xbd230000}, {0xbd232000}, {0xbd234000}, {0xbd236000}, - {0xbd238000}, {0xbd23a000}, {0xbd23c000}, {0xbd23e000}, - {0xbd240000}, {0xbd242000}, {0xbd244000}, {0xbd246000}, - {0xbd248000}, {0xbd24a000}, {0xbd24c000}, {0xbd24e000}, - {0xbd250000}, {0xbd252000}, {0xbd254000}, {0xbd256000}, - {0xbd258000}, {0xbd25a000}, {0xbd25c000}, {0xbd25e000}, - {0xbd260000}, {0xbd262000}, {0xbd264000}, {0xbd266000}, - {0xbd268000}, {0xbd26a000}, {0xbd26c000}, {0xbd26e000}, - {0xbd270000}, {0xbd272000}, {0xbd274000}, {0xbd276000}, - {0xbd278000}, {0xbd27a000}, {0xbd27c000}, {0xbd27e000}, - {0xbd280000}, {0xbd282000}, {0xbd284000}, {0xbd286000}, - {0xbd288000}, {0xbd28a000}, {0xbd28c000}, {0xbd28e000}, - {0xbd290000}, {0xbd292000}, {0xbd294000}, {0xbd296000}, - {0xbd298000}, {0xbd29a000}, {0xbd29c000}, {0xbd29e000}, - {0xbd2a0000}, {0xbd2a2000}, {0xbd2a4000}, {0xbd2a6000}, - {0xbd2a8000}, {0xbd2aa000}, {0xbd2ac000}, {0xbd2ae000}, - {0xbd2b0000}, {0xbd2b2000}, {0xbd2b4000}, {0xbd2b6000}, - {0xbd2b8000}, {0xbd2ba000}, {0xbd2bc000}, {0xbd2be000}, - {0xbd2c0000}, {0xbd2c2000}, {0xbd2c4000}, {0xbd2c6000}, - {0xbd2c8000}, {0xbd2ca000}, {0xbd2cc000}, {0xbd2ce000}, - {0xbd2d0000}, {0xbd2d2000}, {0xbd2d4000}, {0xbd2d6000}, - {0xbd2d8000}, {0xbd2da000}, {0xbd2dc000}, {0xbd2de000}, - {0xbd2e0000}, {0xbd2e2000}, {0xbd2e4000}, {0xbd2e6000}, - {0xbd2e8000}, {0xbd2ea000}, {0xbd2ec000}, {0xbd2ee000}, - {0xbd2f0000}, {0xbd2f2000}, {0xbd2f4000}, {0xbd2f6000}, - {0xbd2f8000}, {0xbd2fa000}, {0xbd2fc000}, {0xbd2fe000}, - {0xbd300000}, {0xbd302000}, {0xbd304000}, {0xbd306000}, - {0xbd308000}, {0xbd30a000}, {0xbd30c000}, {0xbd30e000}, - {0xbd310000}, {0xbd312000}, {0xbd314000}, {0xbd316000}, - {0xbd318000}, {0xbd31a000}, {0xbd31c000}, {0xbd31e000}, - {0xbd320000}, {0xbd322000}, {0xbd324000}, {0xbd326000}, - {0xbd328000}, {0xbd32a000}, {0xbd32c000}, {0xbd32e000}, - {0xbd330000}, {0xbd332000}, {0xbd334000}, {0xbd336000}, - {0xbd338000}, {0xbd33a000}, {0xbd33c000}, {0xbd33e000}, - {0xbd340000}, {0xbd342000}, {0xbd344000}, {0xbd346000}, - {0xbd348000}, {0xbd34a000}, {0xbd34c000}, {0xbd34e000}, - {0xbd350000}, {0xbd352000}, {0xbd354000}, {0xbd356000}, - {0xbd358000}, {0xbd35a000}, {0xbd35c000}, {0xbd35e000}, - {0xbd360000}, {0xbd362000}, {0xbd364000}, {0xbd366000}, - {0xbd368000}, {0xbd36a000}, {0xbd36c000}, {0xbd36e000}, - {0xbd370000}, {0xbd372000}, {0xbd374000}, {0xbd376000}, - {0xbd378000}, {0xbd37a000}, {0xbd37c000}, {0xbd37e000}, - {0xbd380000}, {0xbd382000}, {0xbd384000}, {0xbd386000}, - {0xbd388000}, {0xbd38a000}, {0xbd38c000}, {0xbd38e000}, - {0xbd390000}, {0xbd392000}, {0xbd394000}, {0xbd396000}, - {0xbd398000}, {0xbd39a000}, {0xbd39c000}, {0xbd39e000}, - {0xbd3a0000}, {0xbd3a2000}, {0xbd3a4000}, {0xbd3a6000}, - {0xbd3a8000}, {0xbd3aa000}, {0xbd3ac000}, {0xbd3ae000}, - {0xbd3b0000}, {0xbd3b2000}, {0xbd3b4000}, {0xbd3b6000}, - {0xbd3b8000}, {0xbd3ba000}, {0xbd3bc000}, {0xbd3be000}, - {0xbd3c0000}, {0xbd3c2000}, {0xbd3c4000}, {0xbd3c6000}, - {0xbd3c8000}, {0xbd3ca000}, {0xbd3cc000}, {0xbd3ce000}, - {0xbd3d0000}, {0xbd3d2000}, {0xbd3d4000}, {0xbd3d6000}, - {0xbd3d8000}, {0xbd3da000}, {0xbd3dc000}, {0xbd3de000}, - {0xbd3e0000}, {0xbd3e2000}, {0xbd3e4000}, {0xbd3e6000}, - {0xbd3e8000}, {0xbd3ea000}, {0xbd3ec000}, {0xbd3ee000}, - {0xbd3f0000}, {0xbd3f2000}, {0xbd3f4000}, {0xbd3f6000}, - {0xbd3f8000}, {0xbd3fa000}, {0xbd3fc000}, {0xbd3fe000}, - {0xbd400000}, {0xbd402000}, {0xbd404000}, {0xbd406000}, - {0xbd408000}, {0xbd40a000}, {0xbd40c000}, {0xbd40e000}, - {0xbd410000}, {0xbd412000}, {0xbd414000}, {0xbd416000}, - {0xbd418000}, {0xbd41a000}, {0xbd41c000}, {0xbd41e000}, - {0xbd420000}, {0xbd422000}, {0xbd424000}, {0xbd426000}, - {0xbd428000}, {0xbd42a000}, {0xbd42c000}, {0xbd42e000}, - {0xbd430000}, {0xbd432000}, {0xbd434000}, {0xbd436000}, - {0xbd438000}, {0xbd43a000}, {0xbd43c000}, {0xbd43e000}, - {0xbd440000}, {0xbd442000}, {0xbd444000}, {0xbd446000}, - {0xbd448000}, {0xbd44a000}, {0xbd44c000}, {0xbd44e000}, - {0xbd450000}, {0xbd452000}, {0xbd454000}, {0xbd456000}, - {0xbd458000}, {0xbd45a000}, {0xbd45c000}, {0xbd45e000}, - {0xbd460000}, {0xbd462000}, {0xbd464000}, {0xbd466000}, - {0xbd468000}, {0xbd46a000}, {0xbd46c000}, {0xbd46e000}, - {0xbd470000}, {0xbd472000}, {0xbd474000}, {0xbd476000}, - {0xbd478000}, {0xbd47a000}, {0xbd47c000}, {0xbd47e000}, - {0xbd480000}, {0xbd482000}, {0xbd484000}, {0xbd486000}, - {0xbd488000}, {0xbd48a000}, {0xbd48c000}, {0xbd48e000}, - {0xbd490000}, {0xbd492000}, {0xbd494000}, {0xbd496000}, - {0xbd498000}, {0xbd49a000}, {0xbd49c000}, {0xbd49e000}, - {0xbd4a0000}, {0xbd4a2000}, {0xbd4a4000}, {0xbd4a6000}, - {0xbd4a8000}, {0xbd4aa000}, {0xbd4ac000}, {0xbd4ae000}, - {0xbd4b0000}, {0xbd4b2000}, {0xbd4b4000}, {0xbd4b6000}, - {0xbd4b8000}, {0xbd4ba000}, {0xbd4bc000}, {0xbd4be000}, - {0xbd4c0000}, {0xbd4c2000}, {0xbd4c4000}, {0xbd4c6000}, - {0xbd4c8000}, {0xbd4ca000}, {0xbd4cc000}, {0xbd4ce000}, - {0xbd4d0000}, {0xbd4d2000}, {0xbd4d4000}, {0xbd4d6000}, - {0xbd4d8000}, {0xbd4da000}, {0xbd4dc000}, {0xbd4de000}, - {0xbd4e0000}, {0xbd4e2000}, {0xbd4e4000}, {0xbd4e6000}, - {0xbd4e8000}, {0xbd4ea000}, {0xbd4ec000}, {0xbd4ee000}, - {0xbd4f0000}, {0xbd4f2000}, {0xbd4f4000}, {0xbd4f6000}, - {0xbd4f8000}, {0xbd4fa000}, {0xbd4fc000}, {0xbd4fe000}, - {0xbd500000}, {0xbd502000}, {0xbd504000}, {0xbd506000}, - {0xbd508000}, {0xbd50a000}, {0xbd50c000}, {0xbd50e000}, - {0xbd510000}, {0xbd512000}, {0xbd514000}, {0xbd516000}, - {0xbd518000}, {0xbd51a000}, {0xbd51c000}, {0xbd51e000}, - {0xbd520000}, {0xbd522000}, {0xbd524000}, {0xbd526000}, - {0xbd528000}, {0xbd52a000}, {0xbd52c000}, {0xbd52e000}, - {0xbd530000}, {0xbd532000}, {0xbd534000}, {0xbd536000}, - {0xbd538000}, {0xbd53a000}, {0xbd53c000}, {0xbd53e000}, - {0xbd540000}, {0xbd542000}, {0xbd544000}, {0xbd546000}, - {0xbd548000}, {0xbd54a000}, {0xbd54c000}, {0xbd54e000}, - {0xbd550000}, {0xbd552000}, {0xbd554000}, {0xbd556000}, - {0xbd558000}, {0xbd55a000}, {0xbd55c000}, {0xbd55e000}, - {0xbd560000}, {0xbd562000}, {0xbd564000}, {0xbd566000}, - {0xbd568000}, {0xbd56a000}, {0xbd56c000}, {0xbd56e000}, - {0xbd570000}, {0xbd572000}, {0xbd574000}, {0xbd576000}, - {0xbd578000}, {0xbd57a000}, {0xbd57c000}, {0xbd57e000}, - {0xbd580000}, {0xbd582000}, {0xbd584000}, {0xbd586000}, - {0xbd588000}, {0xbd58a000}, {0xbd58c000}, {0xbd58e000}, - {0xbd590000}, {0xbd592000}, {0xbd594000}, {0xbd596000}, - {0xbd598000}, {0xbd59a000}, {0xbd59c000}, {0xbd59e000}, - {0xbd5a0000}, {0xbd5a2000}, {0xbd5a4000}, {0xbd5a6000}, - {0xbd5a8000}, {0xbd5aa000}, {0xbd5ac000}, {0xbd5ae000}, - {0xbd5b0000}, {0xbd5b2000}, {0xbd5b4000}, {0xbd5b6000}, - {0xbd5b8000}, {0xbd5ba000}, {0xbd5bc000}, {0xbd5be000}, - {0xbd5c0000}, {0xbd5c2000}, {0xbd5c4000}, {0xbd5c6000}, - {0xbd5c8000}, {0xbd5ca000}, {0xbd5cc000}, {0xbd5ce000}, - {0xbd5d0000}, {0xbd5d2000}, {0xbd5d4000}, {0xbd5d6000}, - {0xbd5d8000}, {0xbd5da000}, {0xbd5dc000}, {0xbd5de000}, - {0xbd5e0000}, {0xbd5e2000}, {0xbd5e4000}, {0xbd5e6000}, - {0xbd5e8000}, {0xbd5ea000}, {0xbd5ec000}, {0xbd5ee000}, - {0xbd5f0000}, {0xbd5f2000}, {0xbd5f4000}, {0xbd5f6000}, - {0xbd5f8000}, {0xbd5fa000}, {0xbd5fc000}, {0xbd5fe000}, - {0xbd600000}, {0xbd602000}, {0xbd604000}, {0xbd606000}, - {0xbd608000}, {0xbd60a000}, {0xbd60c000}, {0xbd60e000}, - {0xbd610000}, {0xbd612000}, {0xbd614000}, {0xbd616000}, - {0xbd618000}, {0xbd61a000}, {0xbd61c000}, {0xbd61e000}, - {0xbd620000}, {0xbd622000}, {0xbd624000}, {0xbd626000}, - {0xbd628000}, {0xbd62a000}, {0xbd62c000}, {0xbd62e000}, - {0xbd630000}, {0xbd632000}, {0xbd634000}, {0xbd636000}, - {0xbd638000}, {0xbd63a000}, {0xbd63c000}, {0xbd63e000}, - {0xbd640000}, {0xbd642000}, {0xbd644000}, {0xbd646000}, - {0xbd648000}, {0xbd64a000}, {0xbd64c000}, {0xbd64e000}, - {0xbd650000}, {0xbd652000}, {0xbd654000}, {0xbd656000}, - {0xbd658000}, {0xbd65a000}, {0xbd65c000}, {0xbd65e000}, - {0xbd660000}, {0xbd662000}, {0xbd664000}, {0xbd666000}, - {0xbd668000}, {0xbd66a000}, {0xbd66c000}, {0xbd66e000}, - {0xbd670000}, {0xbd672000}, {0xbd674000}, {0xbd676000}, - {0xbd678000}, {0xbd67a000}, {0xbd67c000}, {0xbd67e000}, - {0xbd680000}, {0xbd682000}, {0xbd684000}, {0xbd686000}, - {0xbd688000}, {0xbd68a000}, {0xbd68c000}, {0xbd68e000}, - {0xbd690000}, {0xbd692000}, {0xbd694000}, {0xbd696000}, - {0xbd698000}, {0xbd69a000}, {0xbd69c000}, {0xbd69e000}, - {0xbd6a0000}, {0xbd6a2000}, {0xbd6a4000}, {0xbd6a6000}, - {0xbd6a8000}, {0xbd6aa000}, {0xbd6ac000}, {0xbd6ae000}, - {0xbd6b0000}, {0xbd6b2000}, {0xbd6b4000}, {0xbd6b6000}, - {0xbd6b8000}, {0xbd6ba000}, {0xbd6bc000}, {0xbd6be000}, - {0xbd6c0000}, {0xbd6c2000}, {0xbd6c4000}, {0xbd6c6000}, - {0xbd6c8000}, {0xbd6ca000}, {0xbd6cc000}, {0xbd6ce000}, - {0xbd6d0000}, {0xbd6d2000}, {0xbd6d4000}, {0xbd6d6000}, - {0xbd6d8000}, {0xbd6da000}, {0xbd6dc000}, {0xbd6de000}, - {0xbd6e0000}, {0xbd6e2000}, {0xbd6e4000}, {0xbd6e6000}, - {0xbd6e8000}, {0xbd6ea000}, {0xbd6ec000}, {0xbd6ee000}, - {0xbd6f0000}, {0xbd6f2000}, {0xbd6f4000}, {0xbd6f6000}, - {0xbd6f8000}, {0xbd6fa000}, {0xbd6fc000}, {0xbd6fe000}, - {0xbd700000}, {0xbd702000}, {0xbd704000}, {0xbd706000}, - {0xbd708000}, {0xbd70a000}, {0xbd70c000}, {0xbd70e000}, - {0xbd710000}, {0xbd712000}, {0xbd714000}, {0xbd716000}, - {0xbd718000}, {0xbd71a000}, {0xbd71c000}, {0xbd71e000}, - {0xbd720000}, {0xbd722000}, {0xbd724000}, {0xbd726000}, - {0xbd728000}, {0xbd72a000}, {0xbd72c000}, {0xbd72e000}, - {0xbd730000}, {0xbd732000}, {0xbd734000}, {0xbd736000}, - {0xbd738000}, {0xbd73a000}, {0xbd73c000}, {0xbd73e000}, - {0xbd740000}, {0xbd742000}, {0xbd744000}, {0xbd746000}, - {0xbd748000}, {0xbd74a000}, {0xbd74c000}, {0xbd74e000}, - {0xbd750000}, {0xbd752000}, {0xbd754000}, {0xbd756000}, - {0xbd758000}, {0xbd75a000}, {0xbd75c000}, {0xbd75e000}, - {0xbd760000}, {0xbd762000}, {0xbd764000}, {0xbd766000}, - {0xbd768000}, {0xbd76a000}, {0xbd76c000}, {0xbd76e000}, - {0xbd770000}, {0xbd772000}, {0xbd774000}, {0xbd776000}, - {0xbd778000}, {0xbd77a000}, {0xbd77c000}, {0xbd77e000}, - {0xbd780000}, {0xbd782000}, {0xbd784000}, {0xbd786000}, - {0xbd788000}, {0xbd78a000}, {0xbd78c000}, {0xbd78e000}, - {0xbd790000}, {0xbd792000}, {0xbd794000}, {0xbd796000}, - {0xbd798000}, {0xbd79a000}, {0xbd79c000}, {0xbd79e000}, - {0xbd7a0000}, {0xbd7a2000}, {0xbd7a4000}, {0xbd7a6000}, - {0xbd7a8000}, {0xbd7aa000}, {0xbd7ac000}, {0xbd7ae000}, - {0xbd7b0000}, {0xbd7b2000}, {0xbd7b4000}, {0xbd7b6000}, - {0xbd7b8000}, {0xbd7ba000}, {0xbd7bc000}, {0xbd7be000}, - {0xbd7c0000}, {0xbd7c2000}, {0xbd7c4000}, {0xbd7c6000}, - {0xbd7c8000}, {0xbd7ca000}, {0xbd7cc000}, {0xbd7ce000}, - {0xbd7d0000}, {0xbd7d2000}, {0xbd7d4000}, {0xbd7d6000}, - {0xbd7d8000}, {0xbd7da000}, {0xbd7dc000}, {0xbd7de000}, - {0xbd7e0000}, {0xbd7e2000}, {0xbd7e4000}, {0xbd7e6000}, - {0xbd7e8000}, {0xbd7ea000}, {0xbd7ec000}, {0xbd7ee000}, - {0xbd7f0000}, {0xbd7f2000}, {0xbd7f4000}, {0xbd7f6000}, - {0xbd7f8000}, {0xbd7fa000}, {0xbd7fc000}, {0xbd7fe000}, - {0xbd800000}, {0xbd802000}, {0xbd804000}, {0xbd806000}, - {0xbd808000}, {0xbd80a000}, {0xbd80c000}, {0xbd80e000}, - {0xbd810000}, {0xbd812000}, {0xbd814000}, {0xbd816000}, - {0xbd818000}, {0xbd81a000}, {0xbd81c000}, {0xbd81e000}, - {0xbd820000}, {0xbd822000}, {0xbd824000}, {0xbd826000}, - {0xbd828000}, {0xbd82a000}, {0xbd82c000}, {0xbd82e000}, - {0xbd830000}, {0xbd832000}, {0xbd834000}, {0xbd836000}, - {0xbd838000}, {0xbd83a000}, {0xbd83c000}, {0xbd83e000}, - {0xbd840000}, {0xbd842000}, {0xbd844000}, {0xbd846000}, - {0xbd848000}, {0xbd84a000}, {0xbd84c000}, {0xbd84e000}, - {0xbd850000}, {0xbd852000}, {0xbd854000}, {0xbd856000}, - {0xbd858000}, {0xbd85a000}, {0xbd85c000}, {0xbd85e000}, - {0xbd860000}, {0xbd862000}, {0xbd864000}, {0xbd866000}, - {0xbd868000}, {0xbd86a000}, {0xbd86c000}, {0xbd86e000}, - {0xbd870000}, {0xbd872000}, {0xbd874000}, {0xbd876000}, - {0xbd878000}, {0xbd87a000}, {0xbd87c000}, {0xbd87e000}, - {0xbd880000}, {0xbd882000}, {0xbd884000}, {0xbd886000}, - {0xbd888000}, {0xbd88a000}, {0xbd88c000}, {0xbd88e000}, - {0xbd890000}, {0xbd892000}, {0xbd894000}, {0xbd896000}, - {0xbd898000}, {0xbd89a000}, {0xbd89c000}, {0xbd89e000}, - {0xbd8a0000}, {0xbd8a2000}, {0xbd8a4000}, {0xbd8a6000}, - {0xbd8a8000}, {0xbd8aa000}, {0xbd8ac000}, {0xbd8ae000}, - {0xbd8b0000}, {0xbd8b2000}, {0xbd8b4000}, {0xbd8b6000}, - {0xbd8b8000}, {0xbd8ba000}, {0xbd8bc000}, {0xbd8be000}, - {0xbd8c0000}, {0xbd8c2000}, {0xbd8c4000}, {0xbd8c6000}, - {0xbd8c8000}, {0xbd8ca000}, {0xbd8cc000}, {0xbd8ce000}, - {0xbd8d0000}, {0xbd8d2000}, {0xbd8d4000}, {0xbd8d6000}, - {0xbd8d8000}, {0xbd8da000}, {0xbd8dc000}, {0xbd8de000}, - {0xbd8e0000}, {0xbd8e2000}, {0xbd8e4000}, {0xbd8e6000}, - {0xbd8e8000}, {0xbd8ea000}, {0xbd8ec000}, {0xbd8ee000}, - {0xbd8f0000}, {0xbd8f2000}, {0xbd8f4000}, {0xbd8f6000}, - {0xbd8f8000}, {0xbd8fa000}, {0xbd8fc000}, {0xbd8fe000}, - {0xbd900000}, {0xbd902000}, {0xbd904000}, {0xbd906000}, - {0xbd908000}, {0xbd90a000}, {0xbd90c000}, {0xbd90e000}, - {0xbd910000}, {0xbd912000}, {0xbd914000}, {0xbd916000}, - {0xbd918000}, {0xbd91a000}, {0xbd91c000}, {0xbd91e000}, - {0xbd920000}, {0xbd922000}, {0xbd924000}, {0xbd926000}, - {0xbd928000}, {0xbd92a000}, {0xbd92c000}, {0xbd92e000}, - {0xbd930000}, {0xbd932000}, {0xbd934000}, {0xbd936000}, - {0xbd938000}, {0xbd93a000}, {0xbd93c000}, {0xbd93e000}, - {0xbd940000}, {0xbd942000}, {0xbd944000}, {0xbd946000}, - {0xbd948000}, {0xbd94a000}, {0xbd94c000}, {0xbd94e000}, - {0xbd950000}, {0xbd952000}, {0xbd954000}, {0xbd956000}, - {0xbd958000}, {0xbd95a000}, {0xbd95c000}, {0xbd95e000}, - {0xbd960000}, {0xbd962000}, {0xbd964000}, {0xbd966000}, - {0xbd968000}, {0xbd96a000}, {0xbd96c000}, {0xbd96e000}, - {0xbd970000}, {0xbd972000}, {0xbd974000}, {0xbd976000}, - {0xbd978000}, {0xbd97a000}, {0xbd97c000}, {0xbd97e000}, - {0xbd980000}, {0xbd982000}, {0xbd984000}, {0xbd986000}, - {0xbd988000}, {0xbd98a000}, {0xbd98c000}, {0xbd98e000}, - {0xbd990000}, {0xbd992000}, {0xbd994000}, {0xbd996000}, - {0xbd998000}, {0xbd99a000}, {0xbd99c000}, {0xbd99e000}, - {0xbd9a0000}, {0xbd9a2000}, {0xbd9a4000}, {0xbd9a6000}, - {0xbd9a8000}, {0xbd9aa000}, {0xbd9ac000}, {0xbd9ae000}, - {0xbd9b0000}, {0xbd9b2000}, {0xbd9b4000}, {0xbd9b6000}, - {0xbd9b8000}, {0xbd9ba000}, {0xbd9bc000}, {0xbd9be000}, - {0xbd9c0000}, {0xbd9c2000}, {0xbd9c4000}, {0xbd9c6000}, - {0xbd9c8000}, {0xbd9ca000}, {0xbd9cc000}, {0xbd9ce000}, - {0xbd9d0000}, {0xbd9d2000}, {0xbd9d4000}, {0xbd9d6000}, - {0xbd9d8000}, {0xbd9da000}, {0xbd9dc000}, {0xbd9de000}, - {0xbd9e0000}, {0xbd9e2000}, {0xbd9e4000}, {0xbd9e6000}, - {0xbd9e8000}, {0xbd9ea000}, {0xbd9ec000}, {0xbd9ee000}, - {0xbd9f0000}, {0xbd9f2000}, {0xbd9f4000}, {0xbd9f6000}, - {0xbd9f8000}, {0xbd9fa000}, {0xbd9fc000}, {0xbd9fe000}, - {0xbda00000}, {0xbda02000}, {0xbda04000}, {0xbda06000}, - {0xbda08000}, {0xbda0a000}, {0xbda0c000}, {0xbda0e000}, - {0xbda10000}, {0xbda12000}, {0xbda14000}, {0xbda16000}, - {0xbda18000}, {0xbda1a000}, {0xbda1c000}, {0xbda1e000}, - {0xbda20000}, {0xbda22000}, {0xbda24000}, {0xbda26000}, - {0xbda28000}, {0xbda2a000}, {0xbda2c000}, {0xbda2e000}, - {0xbda30000}, {0xbda32000}, {0xbda34000}, {0xbda36000}, - {0xbda38000}, {0xbda3a000}, {0xbda3c000}, {0xbda3e000}, - {0xbda40000}, {0xbda42000}, {0xbda44000}, {0xbda46000}, - {0xbda48000}, {0xbda4a000}, {0xbda4c000}, {0xbda4e000}, - {0xbda50000}, {0xbda52000}, {0xbda54000}, {0xbda56000}, - {0xbda58000}, {0xbda5a000}, {0xbda5c000}, {0xbda5e000}, - {0xbda60000}, {0xbda62000}, {0xbda64000}, {0xbda66000}, - {0xbda68000}, {0xbda6a000}, {0xbda6c000}, {0xbda6e000}, - {0xbda70000}, {0xbda72000}, {0xbda74000}, {0xbda76000}, - {0xbda78000}, {0xbda7a000}, {0xbda7c000}, {0xbda7e000}, - {0xbda80000}, {0xbda82000}, {0xbda84000}, {0xbda86000}, - {0xbda88000}, {0xbda8a000}, {0xbda8c000}, {0xbda8e000}, - {0xbda90000}, {0xbda92000}, {0xbda94000}, {0xbda96000}, - {0xbda98000}, {0xbda9a000}, {0xbda9c000}, {0xbda9e000}, - {0xbdaa0000}, {0xbdaa2000}, {0xbdaa4000}, {0xbdaa6000}, - {0xbdaa8000}, {0xbdaaa000}, {0xbdaac000}, {0xbdaae000}, - {0xbdab0000}, {0xbdab2000}, {0xbdab4000}, {0xbdab6000}, - {0xbdab8000}, {0xbdaba000}, {0xbdabc000}, {0xbdabe000}, - {0xbdac0000}, {0xbdac2000}, {0xbdac4000}, {0xbdac6000}, - {0xbdac8000}, {0xbdaca000}, {0xbdacc000}, {0xbdace000}, - {0xbdad0000}, {0xbdad2000}, {0xbdad4000}, {0xbdad6000}, - {0xbdad8000}, {0xbdada000}, {0xbdadc000}, {0xbdade000}, - {0xbdae0000}, {0xbdae2000}, {0xbdae4000}, {0xbdae6000}, - {0xbdae8000}, {0xbdaea000}, {0xbdaec000}, {0xbdaee000}, - {0xbdaf0000}, {0xbdaf2000}, {0xbdaf4000}, {0xbdaf6000}, - {0xbdaf8000}, {0xbdafa000}, {0xbdafc000}, {0xbdafe000}, - {0xbdb00000}, {0xbdb02000}, {0xbdb04000}, {0xbdb06000}, - {0xbdb08000}, {0xbdb0a000}, {0xbdb0c000}, {0xbdb0e000}, - {0xbdb10000}, {0xbdb12000}, {0xbdb14000}, {0xbdb16000}, - {0xbdb18000}, {0xbdb1a000}, {0xbdb1c000}, {0xbdb1e000}, - {0xbdb20000}, {0xbdb22000}, {0xbdb24000}, {0xbdb26000}, - {0xbdb28000}, {0xbdb2a000}, {0xbdb2c000}, {0xbdb2e000}, - {0xbdb30000}, {0xbdb32000}, {0xbdb34000}, {0xbdb36000}, - {0xbdb38000}, {0xbdb3a000}, {0xbdb3c000}, {0xbdb3e000}, - {0xbdb40000}, {0xbdb42000}, {0xbdb44000}, {0xbdb46000}, - {0xbdb48000}, {0xbdb4a000}, {0xbdb4c000}, {0xbdb4e000}, - {0xbdb50000}, {0xbdb52000}, {0xbdb54000}, {0xbdb56000}, - {0xbdb58000}, {0xbdb5a000}, {0xbdb5c000}, {0xbdb5e000}, - {0xbdb60000}, {0xbdb62000}, {0xbdb64000}, {0xbdb66000}, - {0xbdb68000}, {0xbdb6a000}, {0xbdb6c000}, {0xbdb6e000}, - {0xbdb70000}, {0xbdb72000}, {0xbdb74000}, {0xbdb76000}, - {0xbdb78000}, {0xbdb7a000}, {0xbdb7c000}, {0xbdb7e000}, - {0xbdb80000}, {0xbdb82000}, {0xbdb84000}, {0xbdb86000}, - {0xbdb88000}, {0xbdb8a000}, {0xbdb8c000}, {0xbdb8e000}, - {0xbdb90000}, {0xbdb92000}, {0xbdb94000}, {0xbdb96000}, - {0xbdb98000}, {0xbdb9a000}, {0xbdb9c000}, {0xbdb9e000}, - {0xbdba0000}, {0xbdba2000}, {0xbdba4000}, {0xbdba6000}, - {0xbdba8000}, {0xbdbaa000}, {0xbdbac000}, {0xbdbae000}, - {0xbdbb0000}, {0xbdbb2000}, {0xbdbb4000}, {0xbdbb6000}, - {0xbdbb8000}, {0xbdbba000}, {0xbdbbc000}, {0xbdbbe000}, - {0xbdbc0000}, {0xbdbc2000}, {0xbdbc4000}, {0xbdbc6000}, - {0xbdbc8000}, {0xbdbca000}, {0xbdbcc000}, {0xbdbce000}, - {0xbdbd0000}, {0xbdbd2000}, {0xbdbd4000}, {0xbdbd6000}, - {0xbdbd8000}, {0xbdbda000}, {0xbdbdc000}, {0xbdbde000}, - {0xbdbe0000}, {0xbdbe2000}, {0xbdbe4000}, {0xbdbe6000}, - {0xbdbe8000}, {0xbdbea000}, {0xbdbec000}, {0xbdbee000}, - {0xbdbf0000}, {0xbdbf2000}, {0xbdbf4000}, {0xbdbf6000}, - {0xbdbf8000}, {0xbdbfa000}, {0xbdbfc000}, {0xbdbfe000}, - {0xbdc00000}, {0xbdc02000}, {0xbdc04000}, {0xbdc06000}, - {0xbdc08000}, {0xbdc0a000}, {0xbdc0c000}, {0xbdc0e000}, - {0xbdc10000}, {0xbdc12000}, {0xbdc14000}, {0xbdc16000}, - {0xbdc18000}, {0xbdc1a000}, {0xbdc1c000}, {0xbdc1e000}, - {0xbdc20000}, {0xbdc22000}, {0xbdc24000}, {0xbdc26000}, - {0xbdc28000}, {0xbdc2a000}, {0xbdc2c000}, {0xbdc2e000}, - {0xbdc30000}, {0xbdc32000}, {0xbdc34000}, {0xbdc36000}, - {0xbdc38000}, {0xbdc3a000}, {0xbdc3c000}, {0xbdc3e000}, - {0xbdc40000}, {0xbdc42000}, {0xbdc44000}, {0xbdc46000}, - {0xbdc48000}, {0xbdc4a000}, {0xbdc4c000}, {0xbdc4e000}, - {0xbdc50000}, {0xbdc52000}, {0xbdc54000}, {0xbdc56000}, - {0xbdc58000}, {0xbdc5a000}, {0xbdc5c000}, {0xbdc5e000}, - {0xbdc60000}, {0xbdc62000}, {0xbdc64000}, {0xbdc66000}, - {0xbdc68000}, {0xbdc6a000}, {0xbdc6c000}, {0xbdc6e000}, - {0xbdc70000}, {0xbdc72000}, {0xbdc74000}, {0xbdc76000}, - {0xbdc78000}, {0xbdc7a000}, {0xbdc7c000}, {0xbdc7e000}, - {0xbdc80000}, {0xbdc82000}, {0xbdc84000}, {0xbdc86000}, - {0xbdc88000}, {0xbdc8a000}, {0xbdc8c000}, {0xbdc8e000}, - {0xbdc90000}, {0xbdc92000}, {0xbdc94000}, {0xbdc96000}, - {0xbdc98000}, {0xbdc9a000}, {0xbdc9c000}, {0xbdc9e000}, - {0xbdca0000}, {0xbdca2000}, {0xbdca4000}, {0xbdca6000}, - {0xbdca8000}, {0xbdcaa000}, {0xbdcac000}, {0xbdcae000}, - {0xbdcb0000}, {0xbdcb2000}, {0xbdcb4000}, {0xbdcb6000}, - {0xbdcb8000}, {0xbdcba000}, {0xbdcbc000}, {0xbdcbe000}, - {0xbdcc0000}, {0xbdcc2000}, {0xbdcc4000}, {0xbdcc6000}, - {0xbdcc8000}, {0xbdcca000}, {0xbdccc000}, {0xbdcce000}, - {0xbdcd0000}, {0xbdcd2000}, {0xbdcd4000}, {0xbdcd6000}, - {0xbdcd8000}, {0xbdcda000}, {0xbdcdc000}, {0xbdcde000}, - {0xbdce0000}, {0xbdce2000}, {0xbdce4000}, {0xbdce6000}, - {0xbdce8000}, {0xbdcea000}, {0xbdcec000}, {0xbdcee000}, - {0xbdcf0000}, {0xbdcf2000}, {0xbdcf4000}, {0xbdcf6000}, - {0xbdcf8000}, {0xbdcfa000}, {0xbdcfc000}, {0xbdcfe000}, - {0xbdd00000}, {0xbdd02000}, {0xbdd04000}, {0xbdd06000}, - {0xbdd08000}, {0xbdd0a000}, {0xbdd0c000}, {0xbdd0e000}, - {0xbdd10000}, {0xbdd12000}, {0xbdd14000}, {0xbdd16000}, - {0xbdd18000}, {0xbdd1a000}, {0xbdd1c000}, {0xbdd1e000}, - {0xbdd20000}, {0xbdd22000}, {0xbdd24000}, {0xbdd26000}, - {0xbdd28000}, {0xbdd2a000}, {0xbdd2c000}, {0xbdd2e000}, - {0xbdd30000}, {0xbdd32000}, {0xbdd34000}, {0xbdd36000}, - {0xbdd38000}, {0xbdd3a000}, {0xbdd3c000}, {0xbdd3e000}, - {0xbdd40000}, {0xbdd42000}, {0xbdd44000}, {0xbdd46000}, - {0xbdd48000}, {0xbdd4a000}, {0xbdd4c000}, {0xbdd4e000}, - {0xbdd50000}, {0xbdd52000}, {0xbdd54000}, {0xbdd56000}, - {0xbdd58000}, {0xbdd5a000}, {0xbdd5c000}, {0xbdd5e000}, - {0xbdd60000}, {0xbdd62000}, {0xbdd64000}, {0xbdd66000}, - {0xbdd68000}, {0xbdd6a000}, {0xbdd6c000}, {0xbdd6e000}, - {0xbdd70000}, {0xbdd72000}, {0xbdd74000}, {0xbdd76000}, - {0xbdd78000}, {0xbdd7a000}, {0xbdd7c000}, {0xbdd7e000}, - {0xbdd80000}, {0xbdd82000}, {0xbdd84000}, {0xbdd86000}, - {0xbdd88000}, {0xbdd8a000}, {0xbdd8c000}, {0xbdd8e000}, - {0xbdd90000}, {0xbdd92000}, {0xbdd94000}, {0xbdd96000}, - {0xbdd98000}, {0xbdd9a000}, {0xbdd9c000}, {0xbdd9e000}, - {0xbdda0000}, {0xbdda2000}, {0xbdda4000}, {0xbdda6000}, - {0xbdda8000}, {0xbddaa000}, {0xbddac000}, {0xbddae000}, - {0xbddb0000}, {0xbddb2000}, {0xbddb4000}, {0xbddb6000}, - {0xbddb8000}, {0xbddba000}, {0xbddbc000}, {0xbddbe000}, - {0xbddc0000}, {0xbddc2000}, {0xbddc4000}, {0xbddc6000}, - {0xbddc8000}, {0xbddca000}, {0xbddcc000}, {0xbddce000}, - {0xbddd0000}, {0xbddd2000}, {0xbddd4000}, {0xbddd6000}, - {0xbddd8000}, {0xbddda000}, {0xbdddc000}, {0xbddde000}, - {0xbdde0000}, {0xbdde2000}, {0xbdde4000}, {0xbdde6000}, - {0xbdde8000}, {0xbddea000}, {0xbddec000}, {0xbddee000}, - {0xbddf0000}, {0xbddf2000}, {0xbddf4000}, {0xbddf6000}, - {0xbddf8000}, {0xbddfa000}, {0xbddfc000}, {0xbddfe000}, - {0xbde00000}, {0xbde02000}, {0xbde04000}, {0xbde06000}, - {0xbde08000}, {0xbde0a000}, {0xbde0c000}, {0xbde0e000}, - {0xbde10000}, {0xbde12000}, {0xbde14000}, {0xbde16000}, - {0xbde18000}, {0xbde1a000}, {0xbde1c000}, {0xbde1e000}, - {0xbde20000}, {0xbde22000}, {0xbde24000}, {0xbde26000}, - {0xbde28000}, {0xbde2a000}, {0xbde2c000}, {0xbde2e000}, - {0xbde30000}, {0xbde32000}, {0xbde34000}, {0xbde36000}, - {0xbde38000}, {0xbde3a000}, {0xbde3c000}, {0xbde3e000}, - {0xbde40000}, {0xbde42000}, {0xbde44000}, {0xbde46000}, - {0xbde48000}, {0xbde4a000}, {0xbde4c000}, {0xbde4e000}, - {0xbde50000}, {0xbde52000}, {0xbde54000}, {0xbde56000}, - {0xbde58000}, {0xbde5a000}, {0xbde5c000}, {0xbde5e000}, - {0xbde60000}, {0xbde62000}, {0xbde64000}, {0xbde66000}, - {0xbde68000}, {0xbde6a000}, {0xbde6c000}, {0xbde6e000}, - {0xbde70000}, {0xbde72000}, {0xbde74000}, {0xbde76000}, - {0xbde78000}, {0xbde7a000}, {0xbde7c000}, {0xbde7e000}, - {0xbde80000}, {0xbde82000}, {0xbde84000}, {0xbde86000}, - {0xbde88000}, {0xbde8a000}, {0xbde8c000}, {0xbde8e000}, - {0xbde90000}, {0xbde92000}, {0xbde94000}, {0xbde96000}, - {0xbde98000}, {0xbde9a000}, {0xbde9c000}, {0xbde9e000}, - {0xbdea0000}, {0xbdea2000}, {0xbdea4000}, {0xbdea6000}, - {0xbdea8000}, {0xbdeaa000}, {0xbdeac000}, {0xbdeae000}, - {0xbdeb0000}, {0xbdeb2000}, {0xbdeb4000}, {0xbdeb6000}, - {0xbdeb8000}, {0xbdeba000}, {0xbdebc000}, {0xbdebe000}, - {0xbdec0000}, {0xbdec2000}, {0xbdec4000}, {0xbdec6000}, - {0xbdec8000}, {0xbdeca000}, {0xbdecc000}, {0xbdece000}, - {0xbded0000}, {0xbded2000}, {0xbded4000}, {0xbded6000}, - {0xbded8000}, {0xbdeda000}, {0xbdedc000}, {0xbdede000}, - {0xbdee0000}, {0xbdee2000}, {0xbdee4000}, {0xbdee6000}, - {0xbdee8000}, {0xbdeea000}, {0xbdeec000}, {0xbdeee000}, - {0xbdef0000}, {0xbdef2000}, {0xbdef4000}, {0xbdef6000}, - {0xbdef8000}, {0xbdefa000}, {0xbdefc000}, {0xbdefe000}, - {0xbdf00000}, {0xbdf02000}, {0xbdf04000}, {0xbdf06000}, - {0xbdf08000}, {0xbdf0a000}, {0xbdf0c000}, {0xbdf0e000}, - {0xbdf10000}, {0xbdf12000}, {0xbdf14000}, {0xbdf16000}, - {0xbdf18000}, {0xbdf1a000}, {0xbdf1c000}, {0xbdf1e000}, - {0xbdf20000}, {0xbdf22000}, {0xbdf24000}, {0xbdf26000}, - {0xbdf28000}, {0xbdf2a000}, {0xbdf2c000}, {0xbdf2e000}, - {0xbdf30000}, {0xbdf32000}, {0xbdf34000}, {0xbdf36000}, - {0xbdf38000}, {0xbdf3a000}, {0xbdf3c000}, {0xbdf3e000}, - {0xbdf40000}, {0xbdf42000}, {0xbdf44000}, {0xbdf46000}, - {0xbdf48000}, {0xbdf4a000}, {0xbdf4c000}, {0xbdf4e000}, - {0xbdf50000}, {0xbdf52000}, {0xbdf54000}, {0xbdf56000}, - {0xbdf58000}, {0xbdf5a000}, {0xbdf5c000}, {0xbdf5e000}, - {0xbdf60000}, {0xbdf62000}, {0xbdf64000}, {0xbdf66000}, - {0xbdf68000}, {0xbdf6a000}, {0xbdf6c000}, {0xbdf6e000}, - {0xbdf70000}, {0xbdf72000}, {0xbdf74000}, {0xbdf76000}, - {0xbdf78000}, {0xbdf7a000}, {0xbdf7c000}, {0xbdf7e000}, - {0xbdf80000}, {0xbdf82000}, {0xbdf84000}, {0xbdf86000}, - {0xbdf88000}, {0xbdf8a000}, {0xbdf8c000}, {0xbdf8e000}, - {0xbdf90000}, {0xbdf92000}, {0xbdf94000}, {0xbdf96000}, - {0xbdf98000}, {0xbdf9a000}, {0xbdf9c000}, {0xbdf9e000}, - {0xbdfa0000}, {0xbdfa2000}, {0xbdfa4000}, {0xbdfa6000}, - {0xbdfa8000}, {0xbdfaa000}, {0xbdfac000}, {0xbdfae000}, - {0xbdfb0000}, {0xbdfb2000}, {0xbdfb4000}, {0xbdfb6000}, - {0xbdfb8000}, {0xbdfba000}, {0xbdfbc000}, {0xbdfbe000}, - {0xbdfc0000}, {0xbdfc2000}, {0xbdfc4000}, {0xbdfc6000}, - {0xbdfc8000}, {0xbdfca000}, {0xbdfcc000}, {0xbdfce000}, - {0xbdfd0000}, {0xbdfd2000}, {0xbdfd4000}, {0xbdfd6000}, - {0xbdfd8000}, {0xbdfda000}, {0xbdfdc000}, {0xbdfde000}, - {0xbdfe0000}, {0xbdfe2000}, {0xbdfe4000}, {0xbdfe6000}, - {0xbdfe8000}, {0xbdfea000}, {0xbdfec000}, {0xbdfee000}, - {0xbdff0000}, {0xbdff2000}, {0xbdff4000}, {0xbdff6000}, - {0xbdff8000}, {0xbdffa000}, {0xbdffc000}, {0xbdffe000}, - {0xbe000000}, {0xbe002000}, {0xbe004000}, {0xbe006000}, - {0xbe008000}, {0xbe00a000}, {0xbe00c000}, {0xbe00e000}, - {0xbe010000}, {0xbe012000}, {0xbe014000}, {0xbe016000}, - {0xbe018000}, {0xbe01a000}, {0xbe01c000}, {0xbe01e000}, - {0xbe020000}, {0xbe022000}, {0xbe024000}, {0xbe026000}, - {0xbe028000}, {0xbe02a000}, {0xbe02c000}, {0xbe02e000}, - {0xbe030000}, {0xbe032000}, {0xbe034000}, {0xbe036000}, - {0xbe038000}, {0xbe03a000}, {0xbe03c000}, {0xbe03e000}, - {0xbe040000}, {0xbe042000}, {0xbe044000}, {0xbe046000}, - {0xbe048000}, {0xbe04a000}, {0xbe04c000}, {0xbe04e000}, - {0xbe050000}, {0xbe052000}, {0xbe054000}, {0xbe056000}, - {0xbe058000}, {0xbe05a000}, {0xbe05c000}, {0xbe05e000}, - {0xbe060000}, {0xbe062000}, {0xbe064000}, {0xbe066000}, - {0xbe068000}, {0xbe06a000}, {0xbe06c000}, {0xbe06e000}, - {0xbe070000}, {0xbe072000}, {0xbe074000}, {0xbe076000}, - {0xbe078000}, {0xbe07a000}, {0xbe07c000}, {0xbe07e000}, - {0xbe080000}, {0xbe082000}, {0xbe084000}, {0xbe086000}, - {0xbe088000}, {0xbe08a000}, {0xbe08c000}, {0xbe08e000}, - {0xbe090000}, {0xbe092000}, {0xbe094000}, {0xbe096000}, - {0xbe098000}, {0xbe09a000}, {0xbe09c000}, {0xbe09e000}, - {0xbe0a0000}, {0xbe0a2000}, {0xbe0a4000}, {0xbe0a6000}, - {0xbe0a8000}, {0xbe0aa000}, {0xbe0ac000}, {0xbe0ae000}, - {0xbe0b0000}, {0xbe0b2000}, {0xbe0b4000}, {0xbe0b6000}, - {0xbe0b8000}, {0xbe0ba000}, {0xbe0bc000}, {0xbe0be000}, - {0xbe0c0000}, {0xbe0c2000}, {0xbe0c4000}, {0xbe0c6000}, - {0xbe0c8000}, {0xbe0ca000}, {0xbe0cc000}, {0xbe0ce000}, - {0xbe0d0000}, {0xbe0d2000}, {0xbe0d4000}, {0xbe0d6000}, - {0xbe0d8000}, {0xbe0da000}, {0xbe0dc000}, {0xbe0de000}, - {0xbe0e0000}, {0xbe0e2000}, {0xbe0e4000}, {0xbe0e6000}, - {0xbe0e8000}, {0xbe0ea000}, {0xbe0ec000}, {0xbe0ee000}, - {0xbe0f0000}, {0xbe0f2000}, {0xbe0f4000}, {0xbe0f6000}, - {0xbe0f8000}, {0xbe0fa000}, {0xbe0fc000}, {0xbe0fe000}, - {0xbe100000}, {0xbe102000}, {0xbe104000}, {0xbe106000}, - {0xbe108000}, {0xbe10a000}, {0xbe10c000}, {0xbe10e000}, - {0xbe110000}, {0xbe112000}, {0xbe114000}, {0xbe116000}, - {0xbe118000}, {0xbe11a000}, {0xbe11c000}, {0xbe11e000}, - {0xbe120000}, {0xbe122000}, {0xbe124000}, {0xbe126000}, - {0xbe128000}, {0xbe12a000}, {0xbe12c000}, {0xbe12e000}, - {0xbe130000}, {0xbe132000}, {0xbe134000}, {0xbe136000}, - {0xbe138000}, {0xbe13a000}, {0xbe13c000}, {0xbe13e000}, - {0xbe140000}, {0xbe142000}, {0xbe144000}, {0xbe146000}, - {0xbe148000}, {0xbe14a000}, {0xbe14c000}, {0xbe14e000}, - {0xbe150000}, {0xbe152000}, {0xbe154000}, {0xbe156000}, - {0xbe158000}, {0xbe15a000}, {0xbe15c000}, {0xbe15e000}, - {0xbe160000}, {0xbe162000}, {0xbe164000}, {0xbe166000}, - {0xbe168000}, {0xbe16a000}, {0xbe16c000}, {0xbe16e000}, - {0xbe170000}, {0xbe172000}, {0xbe174000}, {0xbe176000}, - {0xbe178000}, {0xbe17a000}, {0xbe17c000}, {0xbe17e000}, - {0xbe180000}, {0xbe182000}, {0xbe184000}, {0xbe186000}, - {0xbe188000}, {0xbe18a000}, {0xbe18c000}, {0xbe18e000}, - {0xbe190000}, {0xbe192000}, {0xbe194000}, {0xbe196000}, - {0xbe198000}, {0xbe19a000}, {0xbe19c000}, {0xbe19e000}, - {0xbe1a0000}, {0xbe1a2000}, {0xbe1a4000}, {0xbe1a6000}, - {0xbe1a8000}, {0xbe1aa000}, {0xbe1ac000}, {0xbe1ae000}, - {0xbe1b0000}, {0xbe1b2000}, {0xbe1b4000}, {0xbe1b6000}, - {0xbe1b8000}, {0xbe1ba000}, {0xbe1bc000}, {0xbe1be000}, - {0xbe1c0000}, {0xbe1c2000}, {0xbe1c4000}, {0xbe1c6000}, - {0xbe1c8000}, {0xbe1ca000}, {0xbe1cc000}, {0xbe1ce000}, - {0xbe1d0000}, {0xbe1d2000}, {0xbe1d4000}, {0xbe1d6000}, - {0xbe1d8000}, {0xbe1da000}, {0xbe1dc000}, {0xbe1de000}, - {0xbe1e0000}, {0xbe1e2000}, {0xbe1e4000}, {0xbe1e6000}, - {0xbe1e8000}, {0xbe1ea000}, {0xbe1ec000}, {0xbe1ee000}, - {0xbe1f0000}, {0xbe1f2000}, {0xbe1f4000}, {0xbe1f6000}, - {0xbe1f8000}, {0xbe1fa000}, {0xbe1fc000}, {0xbe1fe000}, - {0xbe200000}, {0xbe202000}, {0xbe204000}, {0xbe206000}, - {0xbe208000}, {0xbe20a000}, {0xbe20c000}, {0xbe20e000}, - {0xbe210000}, {0xbe212000}, {0xbe214000}, {0xbe216000}, - {0xbe218000}, {0xbe21a000}, {0xbe21c000}, {0xbe21e000}, - {0xbe220000}, {0xbe222000}, {0xbe224000}, {0xbe226000}, - {0xbe228000}, {0xbe22a000}, {0xbe22c000}, {0xbe22e000}, - {0xbe230000}, {0xbe232000}, {0xbe234000}, {0xbe236000}, - {0xbe238000}, {0xbe23a000}, {0xbe23c000}, {0xbe23e000}, - {0xbe240000}, {0xbe242000}, {0xbe244000}, {0xbe246000}, - {0xbe248000}, {0xbe24a000}, {0xbe24c000}, {0xbe24e000}, - {0xbe250000}, {0xbe252000}, {0xbe254000}, {0xbe256000}, - {0xbe258000}, {0xbe25a000}, {0xbe25c000}, {0xbe25e000}, - {0xbe260000}, {0xbe262000}, {0xbe264000}, {0xbe266000}, - {0xbe268000}, {0xbe26a000}, {0xbe26c000}, {0xbe26e000}, - {0xbe270000}, {0xbe272000}, {0xbe274000}, {0xbe276000}, - {0xbe278000}, {0xbe27a000}, {0xbe27c000}, {0xbe27e000}, - {0xbe280000}, {0xbe282000}, {0xbe284000}, {0xbe286000}, - {0xbe288000}, {0xbe28a000}, {0xbe28c000}, {0xbe28e000}, - {0xbe290000}, {0xbe292000}, {0xbe294000}, {0xbe296000}, - {0xbe298000}, {0xbe29a000}, {0xbe29c000}, {0xbe29e000}, - {0xbe2a0000}, {0xbe2a2000}, {0xbe2a4000}, {0xbe2a6000}, - {0xbe2a8000}, {0xbe2aa000}, {0xbe2ac000}, {0xbe2ae000}, - {0xbe2b0000}, {0xbe2b2000}, {0xbe2b4000}, {0xbe2b6000}, - {0xbe2b8000}, {0xbe2ba000}, {0xbe2bc000}, {0xbe2be000}, - {0xbe2c0000}, {0xbe2c2000}, {0xbe2c4000}, {0xbe2c6000}, - {0xbe2c8000}, {0xbe2ca000}, {0xbe2cc000}, {0xbe2ce000}, - {0xbe2d0000}, {0xbe2d2000}, {0xbe2d4000}, {0xbe2d6000}, - {0xbe2d8000}, {0xbe2da000}, {0xbe2dc000}, {0xbe2de000}, - {0xbe2e0000}, {0xbe2e2000}, {0xbe2e4000}, {0xbe2e6000}, - {0xbe2e8000}, {0xbe2ea000}, {0xbe2ec000}, {0xbe2ee000}, - {0xbe2f0000}, {0xbe2f2000}, {0xbe2f4000}, {0xbe2f6000}, - {0xbe2f8000}, {0xbe2fa000}, {0xbe2fc000}, {0xbe2fe000}, - {0xbe300000}, {0xbe302000}, {0xbe304000}, {0xbe306000}, - {0xbe308000}, {0xbe30a000}, {0xbe30c000}, {0xbe30e000}, - {0xbe310000}, {0xbe312000}, {0xbe314000}, {0xbe316000}, - {0xbe318000}, {0xbe31a000}, {0xbe31c000}, {0xbe31e000}, - {0xbe320000}, {0xbe322000}, {0xbe324000}, {0xbe326000}, - {0xbe328000}, {0xbe32a000}, {0xbe32c000}, {0xbe32e000}, - {0xbe330000}, {0xbe332000}, {0xbe334000}, {0xbe336000}, - {0xbe338000}, {0xbe33a000}, {0xbe33c000}, {0xbe33e000}, - {0xbe340000}, {0xbe342000}, {0xbe344000}, {0xbe346000}, - {0xbe348000}, {0xbe34a000}, {0xbe34c000}, {0xbe34e000}, - {0xbe350000}, {0xbe352000}, {0xbe354000}, {0xbe356000}, - {0xbe358000}, {0xbe35a000}, {0xbe35c000}, {0xbe35e000}, - {0xbe360000}, {0xbe362000}, {0xbe364000}, {0xbe366000}, - {0xbe368000}, {0xbe36a000}, {0xbe36c000}, {0xbe36e000}, - {0xbe370000}, {0xbe372000}, {0xbe374000}, {0xbe376000}, - {0xbe378000}, {0xbe37a000}, {0xbe37c000}, {0xbe37e000}, - {0xbe380000}, {0xbe382000}, {0xbe384000}, {0xbe386000}, - {0xbe388000}, {0xbe38a000}, {0xbe38c000}, {0xbe38e000}, - {0xbe390000}, {0xbe392000}, {0xbe394000}, {0xbe396000}, - {0xbe398000}, {0xbe39a000}, {0xbe39c000}, {0xbe39e000}, - {0xbe3a0000}, {0xbe3a2000}, {0xbe3a4000}, {0xbe3a6000}, - {0xbe3a8000}, {0xbe3aa000}, {0xbe3ac000}, {0xbe3ae000}, - {0xbe3b0000}, {0xbe3b2000}, {0xbe3b4000}, {0xbe3b6000}, - {0xbe3b8000}, {0xbe3ba000}, {0xbe3bc000}, {0xbe3be000}, - {0xbe3c0000}, {0xbe3c2000}, {0xbe3c4000}, {0xbe3c6000}, - {0xbe3c8000}, {0xbe3ca000}, {0xbe3cc000}, {0xbe3ce000}, - {0xbe3d0000}, {0xbe3d2000}, {0xbe3d4000}, {0xbe3d6000}, - {0xbe3d8000}, {0xbe3da000}, {0xbe3dc000}, {0xbe3de000}, - {0xbe3e0000}, {0xbe3e2000}, {0xbe3e4000}, {0xbe3e6000}, - {0xbe3e8000}, {0xbe3ea000}, {0xbe3ec000}, {0xbe3ee000}, - {0xbe3f0000}, {0xbe3f2000}, {0xbe3f4000}, {0xbe3f6000}, - {0xbe3f8000}, {0xbe3fa000}, {0xbe3fc000}, {0xbe3fe000}, - {0xbe400000}, {0xbe402000}, {0xbe404000}, {0xbe406000}, - {0xbe408000}, {0xbe40a000}, {0xbe40c000}, {0xbe40e000}, - {0xbe410000}, {0xbe412000}, {0xbe414000}, {0xbe416000}, - {0xbe418000}, {0xbe41a000}, {0xbe41c000}, {0xbe41e000}, - {0xbe420000}, {0xbe422000}, {0xbe424000}, {0xbe426000}, - {0xbe428000}, {0xbe42a000}, {0xbe42c000}, {0xbe42e000}, - {0xbe430000}, {0xbe432000}, {0xbe434000}, {0xbe436000}, - {0xbe438000}, {0xbe43a000}, {0xbe43c000}, {0xbe43e000}, - {0xbe440000}, {0xbe442000}, {0xbe444000}, {0xbe446000}, - {0xbe448000}, {0xbe44a000}, {0xbe44c000}, {0xbe44e000}, - {0xbe450000}, {0xbe452000}, {0xbe454000}, {0xbe456000}, - {0xbe458000}, {0xbe45a000}, {0xbe45c000}, {0xbe45e000}, - {0xbe460000}, {0xbe462000}, {0xbe464000}, {0xbe466000}, - {0xbe468000}, {0xbe46a000}, {0xbe46c000}, {0xbe46e000}, - {0xbe470000}, {0xbe472000}, {0xbe474000}, {0xbe476000}, - {0xbe478000}, {0xbe47a000}, {0xbe47c000}, {0xbe47e000}, - {0xbe480000}, {0xbe482000}, {0xbe484000}, {0xbe486000}, - {0xbe488000}, {0xbe48a000}, {0xbe48c000}, {0xbe48e000}, - {0xbe490000}, {0xbe492000}, {0xbe494000}, {0xbe496000}, - {0xbe498000}, {0xbe49a000}, {0xbe49c000}, {0xbe49e000}, - {0xbe4a0000}, {0xbe4a2000}, {0xbe4a4000}, {0xbe4a6000}, - {0xbe4a8000}, {0xbe4aa000}, {0xbe4ac000}, {0xbe4ae000}, - {0xbe4b0000}, {0xbe4b2000}, {0xbe4b4000}, {0xbe4b6000}, - {0xbe4b8000}, {0xbe4ba000}, {0xbe4bc000}, {0xbe4be000}, - {0xbe4c0000}, {0xbe4c2000}, {0xbe4c4000}, {0xbe4c6000}, - {0xbe4c8000}, {0xbe4ca000}, {0xbe4cc000}, {0xbe4ce000}, - {0xbe4d0000}, {0xbe4d2000}, {0xbe4d4000}, {0xbe4d6000}, - {0xbe4d8000}, {0xbe4da000}, {0xbe4dc000}, {0xbe4de000}, - {0xbe4e0000}, {0xbe4e2000}, {0xbe4e4000}, {0xbe4e6000}, - {0xbe4e8000}, {0xbe4ea000}, {0xbe4ec000}, {0xbe4ee000}, - {0xbe4f0000}, {0xbe4f2000}, {0xbe4f4000}, {0xbe4f6000}, - {0xbe4f8000}, {0xbe4fa000}, {0xbe4fc000}, {0xbe4fe000}, - {0xbe500000}, {0xbe502000}, {0xbe504000}, {0xbe506000}, - {0xbe508000}, {0xbe50a000}, {0xbe50c000}, {0xbe50e000}, - {0xbe510000}, {0xbe512000}, {0xbe514000}, {0xbe516000}, - {0xbe518000}, {0xbe51a000}, {0xbe51c000}, {0xbe51e000}, - {0xbe520000}, {0xbe522000}, {0xbe524000}, {0xbe526000}, - {0xbe528000}, {0xbe52a000}, {0xbe52c000}, {0xbe52e000}, - {0xbe530000}, {0xbe532000}, {0xbe534000}, {0xbe536000}, - {0xbe538000}, {0xbe53a000}, {0xbe53c000}, {0xbe53e000}, - {0xbe540000}, {0xbe542000}, {0xbe544000}, {0xbe546000}, - {0xbe548000}, {0xbe54a000}, {0xbe54c000}, {0xbe54e000}, - {0xbe550000}, {0xbe552000}, {0xbe554000}, {0xbe556000}, - {0xbe558000}, {0xbe55a000}, {0xbe55c000}, {0xbe55e000}, - {0xbe560000}, {0xbe562000}, {0xbe564000}, {0xbe566000}, - {0xbe568000}, {0xbe56a000}, {0xbe56c000}, {0xbe56e000}, - {0xbe570000}, {0xbe572000}, {0xbe574000}, {0xbe576000}, - {0xbe578000}, {0xbe57a000}, {0xbe57c000}, {0xbe57e000}, - {0xbe580000}, {0xbe582000}, {0xbe584000}, {0xbe586000}, - {0xbe588000}, {0xbe58a000}, {0xbe58c000}, {0xbe58e000}, - {0xbe590000}, {0xbe592000}, {0xbe594000}, {0xbe596000}, - {0xbe598000}, {0xbe59a000}, {0xbe59c000}, {0xbe59e000}, - {0xbe5a0000}, {0xbe5a2000}, {0xbe5a4000}, {0xbe5a6000}, - {0xbe5a8000}, {0xbe5aa000}, {0xbe5ac000}, {0xbe5ae000}, - {0xbe5b0000}, {0xbe5b2000}, {0xbe5b4000}, {0xbe5b6000}, - {0xbe5b8000}, {0xbe5ba000}, {0xbe5bc000}, {0xbe5be000}, - {0xbe5c0000}, {0xbe5c2000}, {0xbe5c4000}, {0xbe5c6000}, - {0xbe5c8000}, {0xbe5ca000}, {0xbe5cc000}, {0xbe5ce000}, - {0xbe5d0000}, {0xbe5d2000}, {0xbe5d4000}, {0xbe5d6000}, - {0xbe5d8000}, {0xbe5da000}, {0xbe5dc000}, {0xbe5de000}, - {0xbe5e0000}, {0xbe5e2000}, {0xbe5e4000}, {0xbe5e6000}, - {0xbe5e8000}, {0xbe5ea000}, {0xbe5ec000}, {0xbe5ee000}, - {0xbe5f0000}, {0xbe5f2000}, {0xbe5f4000}, {0xbe5f6000}, - {0xbe5f8000}, {0xbe5fa000}, {0xbe5fc000}, {0xbe5fe000}, - {0xbe600000}, {0xbe602000}, {0xbe604000}, {0xbe606000}, - {0xbe608000}, {0xbe60a000}, {0xbe60c000}, {0xbe60e000}, - {0xbe610000}, {0xbe612000}, {0xbe614000}, {0xbe616000}, - {0xbe618000}, {0xbe61a000}, {0xbe61c000}, {0xbe61e000}, - {0xbe620000}, {0xbe622000}, {0xbe624000}, {0xbe626000}, - {0xbe628000}, {0xbe62a000}, {0xbe62c000}, {0xbe62e000}, - {0xbe630000}, {0xbe632000}, {0xbe634000}, {0xbe636000}, - {0xbe638000}, {0xbe63a000}, {0xbe63c000}, {0xbe63e000}, - {0xbe640000}, {0xbe642000}, {0xbe644000}, {0xbe646000}, - {0xbe648000}, {0xbe64a000}, {0xbe64c000}, {0xbe64e000}, - {0xbe650000}, {0xbe652000}, {0xbe654000}, {0xbe656000}, - {0xbe658000}, {0xbe65a000}, {0xbe65c000}, {0xbe65e000}, - {0xbe660000}, {0xbe662000}, {0xbe664000}, {0xbe666000}, - {0xbe668000}, {0xbe66a000}, {0xbe66c000}, {0xbe66e000}, - {0xbe670000}, {0xbe672000}, {0xbe674000}, {0xbe676000}, - {0xbe678000}, {0xbe67a000}, {0xbe67c000}, {0xbe67e000}, - {0xbe680000}, {0xbe682000}, {0xbe684000}, {0xbe686000}, - {0xbe688000}, {0xbe68a000}, {0xbe68c000}, {0xbe68e000}, - {0xbe690000}, {0xbe692000}, {0xbe694000}, {0xbe696000}, - {0xbe698000}, {0xbe69a000}, {0xbe69c000}, {0xbe69e000}, - {0xbe6a0000}, {0xbe6a2000}, {0xbe6a4000}, {0xbe6a6000}, - {0xbe6a8000}, {0xbe6aa000}, {0xbe6ac000}, {0xbe6ae000}, - {0xbe6b0000}, {0xbe6b2000}, {0xbe6b4000}, {0xbe6b6000}, - {0xbe6b8000}, {0xbe6ba000}, {0xbe6bc000}, {0xbe6be000}, - {0xbe6c0000}, {0xbe6c2000}, {0xbe6c4000}, {0xbe6c6000}, - {0xbe6c8000}, {0xbe6ca000}, {0xbe6cc000}, {0xbe6ce000}, - {0xbe6d0000}, {0xbe6d2000}, {0xbe6d4000}, {0xbe6d6000}, - {0xbe6d8000}, {0xbe6da000}, {0xbe6dc000}, {0xbe6de000}, - {0xbe6e0000}, {0xbe6e2000}, {0xbe6e4000}, {0xbe6e6000}, - {0xbe6e8000}, {0xbe6ea000}, {0xbe6ec000}, {0xbe6ee000}, - {0xbe6f0000}, {0xbe6f2000}, {0xbe6f4000}, {0xbe6f6000}, - {0xbe6f8000}, {0xbe6fa000}, {0xbe6fc000}, {0xbe6fe000}, - {0xbe700000}, {0xbe702000}, {0xbe704000}, {0xbe706000}, - {0xbe708000}, {0xbe70a000}, {0xbe70c000}, {0xbe70e000}, - {0xbe710000}, {0xbe712000}, {0xbe714000}, {0xbe716000}, - {0xbe718000}, {0xbe71a000}, {0xbe71c000}, {0xbe71e000}, - {0xbe720000}, {0xbe722000}, {0xbe724000}, {0xbe726000}, - {0xbe728000}, {0xbe72a000}, {0xbe72c000}, {0xbe72e000}, - {0xbe730000}, {0xbe732000}, {0xbe734000}, {0xbe736000}, - {0xbe738000}, {0xbe73a000}, {0xbe73c000}, {0xbe73e000}, - {0xbe740000}, {0xbe742000}, {0xbe744000}, {0xbe746000}, - {0xbe748000}, {0xbe74a000}, {0xbe74c000}, {0xbe74e000}, - {0xbe750000}, {0xbe752000}, {0xbe754000}, {0xbe756000}, - {0xbe758000}, {0xbe75a000}, {0xbe75c000}, {0xbe75e000}, - {0xbe760000}, {0xbe762000}, {0xbe764000}, {0xbe766000}, - {0xbe768000}, {0xbe76a000}, {0xbe76c000}, {0xbe76e000}, - {0xbe770000}, {0xbe772000}, {0xbe774000}, {0xbe776000}, - {0xbe778000}, {0xbe77a000}, {0xbe77c000}, {0xbe77e000}, - {0xbe780000}, {0xbe782000}, {0xbe784000}, {0xbe786000}, - {0xbe788000}, {0xbe78a000}, {0xbe78c000}, {0xbe78e000}, - {0xbe790000}, {0xbe792000}, {0xbe794000}, {0xbe796000}, - {0xbe798000}, {0xbe79a000}, {0xbe79c000}, {0xbe79e000}, - {0xbe7a0000}, {0xbe7a2000}, {0xbe7a4000}, {0xbe7a6000}, - {0xbe7a8000}, {0xbe7aa000}, {0xbe7ac000}, {0xbe7ae000}, - {0xbe7b0000}, {0xbe7b2000}, {0xbe7b4000}, {0xbe7b6000}, - {0xbe7b8000}, {0xbe7ba000}, {0xbe7bc000}, {0xbe7be000}, - {0xbe7c0000}, {0xbe7c2000}, {0xbe7c4000}, {0xbe7c6000}, - {0xbe7c8000}, {0xbe7ca000}, {0xbe7cc000}, {0xbe7ce000}, - {0xbe7d0000}, {0xbe7d2000}, {0xbe7d4000}, {0xbe7d6000}, - {0xbe7d8000}, {0xbe7da000}, {0xbe7dc000}, {0xbe7de000}, - {0xbe7e0000}, {0xbe7e2000}, {0xbe7e4000}, {0xbe7e6000}, - {0xbe7e8000}, {0xbe7ea000}, {0xbe7ec000}, {0xbe7ee000}, - {0xbe7f0000}, {0xbe7f2000}, {0xbe7f4000}, {0xbe7f6000}, - {0xbe7f8000}, {0xbe7fa000}, {0xbe7fc000}, {0xbe7fe000}, - {0xbe800000}, {0xbe802000}, {0xbe804000}, {0xbe806000}, - {0xbe808000}, {0xbe80a000}, {0xbe80c000}, {0xbe80e000}, - {0xbe810000}, {0xbe812000}, {0xbe814000}, {0xbe816000}, - {0xbe818000}, {0xbe81a000}, {0xbe81c000}, {0xbe81e000}, - {0xbe820000}, {0xbe822000}, {0xbe824000}, {0xbe826000}, - {0xbe828000}, {0xbe82a000}, {0xbe82c000}, {0xbe82e000}, - {0xbe830000}, {0xbe832000}, {0xbe834000}, {0xbe836000}, - {0xbe838000}, {0xbe83a000}, {0xbe83c000}, {0xbe83e000}, - {0xbe840000}, {0xbe842000}, {0xbe844000}, {0xbe846000}, - {0xbe848000}, {0xbe84a000}, {0xbe84c000}, {0xbe84e000}, - {0xbe850000}, {0xbe852000}, {0xbe854000}, {0xbe856000}, - {0xbe858000}, {0xbe85a000}, {0xbe85c000}, {0xbe85e000}, - {0xbe860000}, {0xbe862000}, {0xbe864000}, {0xbe866000}, - {0xbe868000}, {0xbe86a000}, {0xbe86c000}, {0xbe86e000}, - {0xbe870000}, {0xbe872000}, {0xbe874000}, {0xbe876000}, - {0xbe878000}, {0xbe87a000}, {0xbe87c000}, {0xbe87e000}, - {0xbe880000}, {0xbe882000}, {0xbe884000}, {0xbe886000}, - {0xbe888000}, {0xbe88a000}, {0xbe88c000}, {0xbe88e000}, - {0xbe890000}, {0xbe892000}, {0xbe894000}, {0xbe896000}, - {0xbe898000}, {0xbe89a000}, {0xbe89c000}, {0xbe89e000}, - {0xbe8a0000}, {0xbe8a2000}, {0xbe8a4000}, {0xbe8a6000}, - {0xbe8a8000}, {0xbe8aa000}, {0xbe8ac000}, {0xbe8ae000}, - {0xbe8b0000}, {0xbe8b2000}, {0xbe8b4000}, {0xbe8b6000}, - {0xbe8b8000}, {0xbe8ba000}, {0xbe8bc000}, {0xbe8be000}, - {0xbe8c0000}, {0xbe8c2000}, {0xbe8c4000}, {0xbe8c6000}, - {0xbe8c8000}, {0xbe8ca000}, {0xbe8cc000}, {0xbe8ce000}, - {0xbe8d0000}, {0xbe8d2000}, {0xbe8d4000}, {0xbe8d6000}, - {0xbe8d8000}, {0xbe8da000}, {0xbe8dc000}, {0xbe8de000}, - {0xbe8e0000}, {0xbe8e2000}, {0xbe8e4000}, {0xbe8e6000}, - {0xbe8e8000}, {0xbe8ea000}, {0xbe8ec000}, {0xbe8ee000}, - {0xbe8f0000}, {0xbe8f2000}, {0xbe8f4000}, {0xbe8f6000}, - {0xbe8f8000}, {0xbe8fa000}, {0xbe8fc000}, {0xbe8fe000}, - {0xbe900000}, {0xbe902000}, {0xbe904000}, {0xbe906000}, - {0xbe908000}, {0xbe90a000}, {0xbe90c000}, {0xbe90e000}, - {0xbe910000}, {0xbe912000}, {0xbe914000}, {0xbe916000}, - {0xbe918000}, {0xbe91a000}, {0xbe91c000}, {0xbe91e000}, - {0xbe920000}, {0xbe922000}, {0xbe924000}, {0xbe926000}, - {0xbe928000}, {0xbe92a000}, {0xbe92c000}, {0xbe92e000}, - {0xbe930000}, {0xbe932000}, {0xbe934000}, {0xbe936000}, - {0xbe938000}, {0xbe93a000}, {0xbe93c000}, {0xbe93e000}, - {0xbe940000}, {0xbe942000}, {0xbe944000}, {0xbe946000}, - {0xbe948000}, {0xbe94a000}, {0xbe94c000}, {0xbe94e000}, - {0xbe950000}, {0xbe952000}, {0xbe954000}, {0xbe956000}, - {0xbe958000}, {0xbe95a000}, {0xbe95c000}, {0xbe95e000}, - {0xbe960000}, {0xbe962000}, {0xbe964000}, {0xbe966000}, - {0xbe968000}, {0xbe96a000}, {0xbe96c000}, {0xbe96e000}, - {0xbe970000}, {0xbe972000}, {0xbe974000}, {0xbe976000}, - {0xbe978000}, {0xbe97a000}, {0xbe97c000}, {0xbe97e000}, - {0xbe980000}, {0xbe982000}, {0xbe984000}, {0xbe986000}, - {0xbe988000}, {0xbe98a000}, {0xbe98c000}, {0xbe98e000}, - {0xbe990000}, {0xbe992000}, {0xbe994000}, {0xbe996000}, - {0xbe998000}, {0xbe99a000}, {0xbe99c000}, {0xbe99e000}, - {0xbe9a0000}, {0xbe9a2000}, {0xbe9a4000}, {0xbe9a6000}, - {0xbe9a8000}, {0xbe9aa000}, {0xbe9ac000}, {0xbe9ae000}, - {0xbe9b0000}, {0xbe9b2000}, {0xbe9b4000}, {0xbe9b6000}, - {0xbe9b8000}, {0xbe9ba000}, {0xbe9bc000}, {0xbe9be000}, - {0xbe9c0000}, {0xbe9c2000}, {0xbe9c4000}, {0xbe9c6000}, - {0xbe9c8000}, {0xbe9ca000}, {0xbe9cc000}, {0xbe9ce000}, - {0xbe9d0000}, {0xbe9d2000}, {0xbe9d4000}, {0xbe9d6000}, - {0xbe9d8000}, {0xbe9da000}, {0xbe9dc000}, {0xbe9de000}, - {0xbe9e0000}, {0xbe9e2000}, {0xbe9e4000}, {0xbe9e6000}, - {0xbe9e8000}, {0xbe9ea000}, {0xbe9ec000}, {0xbe9ee000}, - {0xbe9f0000}, {0xbe9f2000}, {0xbe9f4000}, {0xbe9f6000}, - {0xbe9f8000}, {0xbe9fa000}, {0xbe9fc000}, {0xbe9fe000}, - {0xbea00000}, {0xbea02000}, {0xbea04000}, {0xbea06000}, - {0xbea08000}, {0xbea0a000}, {0xbea0c000}, {0xbea0e000}, - {0xbea10000}, {0xbea12000}, {0xbea14000}, {0xbea16000}, - {0xbea18000}, {0xbea1a000}, {0xbea1c000}, {0xbea1e000}, - {0xbea20000}, {0xbea22000}, {0xbea24000}, {0xbea26000}, - {0xbea28000}, {0xbea2a000}, {0xbea2c000}, {0xbea2e000}, - {0xbea30000}, {0xbea32000}, {0xbea34000}, {0xbea36000}, - {0xbea38000}, {0xbea3a000}, {0xbea3c000}, {0xbea3e000}, - {0xbea40000}, {0xbea42000}, {0xbea44000}, {0xbea46000}, - {0xbea48000}, {0xbea4a000}, {0xbea4c000}, {0xbea4e000}, - {0xbea50000}, {0xbea52000}, {0xbea54000}, {0xbea56000}, - {0xbea58000}, {0xbea5a000}, {0xbea5c000}, {0xbea5e000}, - {0xbea60000}, {0xbea62000}, {0xbea64000}, {0xbea66000}, - {0xbea68000}, {0xbea6a000}, {0xbea6c000}, {0xbea6e000}, - {0xbea70000}, {0xbea72000}, {0xbea74000}, {0xbea76000}, - {0xbea78000}, {0xbea7a000}, {0xbea7c000}, {0xbea7e000}, - {0xbea80000}, {0xbea82000}, {0xbea84000}, {0xbea86000}, - {0xbea88000}, {0xbea8a000}, {0xbea8c000}, {0xbea8e000}, - {0xbea90000}, {0xbea92000}, {0xbea94000}, {0xbea96000}, - {0xbea98000}, {0xbea9a000}, {0xbea9c000}, {0xbea9e000}, - {0xbeaa0000}, {0xbeaa2000}, {0xbeaa4000}, {0xbeaa6000}, - {0xbeaa8000}, {0xbeaaa000}, {0xbeaac000}, {0xbeaae000}, - {0xbeab0000}, {0xbeab2000}, {0xbeab4000}, {0xbeab6000}, - {0xbeab8000}, {0xbeaba000}, {0xbeabc000}, {0xbeabe000}, - {0xbeac0000}, {0xbeac2000}, {0xbeac4000}, {0xbeac6000}, - {0xbeac8000}, {0xbeaca000}, {0xbeacc000}, {0xbeace000}, - {0xbead0000}, {0xbead2000}, {0xbead4000}, {0xbead6000}, - {0xbead8000}, {0xbeada000}, {0xbeadc000}, {0xbeade000}, - {0xbeae0000}, {0xbeae2000}, {0xbeae4000}, {0xbeae6000}, - {0xbeae8000}, {0xbeaea000}, {0xbeaec000}, {0xbeaee000}, - {0xbeaf0000}, {0xbeaf2000}, {0xbeaf4000}, {0xbeaf6000}, - {0xbeaf8000}, {0xbeafa000}, {0xbeafc000}, {0xbeafe000}, - {0xbeb00000}, {0xbeb02000}, {0xbeb04000}, {0xbeb06000}, - {0xbeb08000}, {0xbeb0a000}, {0xbeb0c000}, {0xbeb0e000}, - {0xbeb10000}, {0xbeb12000}, {0xbeb14000}, {0xbeb16000}, - {0xbeb18000}, {0xbeb1a000}, {0xbeb1c000}, {0xbeb1e000}, - {0xbeb20000}, {0xbeb22000}, {0xbeb24000}, {0xbeb26000}, - {0xbeb28000}, {0xbeb2a000}, {0xbeb2c000}, {0xbeb2e000}, - {0xbeb30000}, {0xbeb32000}, {0xbeb34000}, {0xbeb36000}, - {0xbeb38000}, {0xbeb3a000}, {0xbeb3c000}, {0xbeb3e000}, - {0xbeb40000}, {0xbeb42000}, {0xbeb44000}, {0xbeb46000}, - {0xbeb48000}, {0xbeb4a000}, {0xbeb4c000}, {0xbeb4e000}, - {0xbeb50000}, {0xbeb52000}, {0xbeb54000}, {0xbeb56000}, - {0xbeb58000}, {0xbeb5a000}, {0xbeb5c000}, {0xbeb5e000}, - {0xbeb60000}, {0xbeb62000}, {0xbeb64000}, {0xbeb66000}, - {0xbeb68000}, {0xbeb6a000}, {0xbeb6c000}, {0xbeb6e000}, - {0xbeb70000}, {0xbeb72000}, {0xbeb74000}, {0xbeb76000}, - {0xbeb78000}, {0xbeb7a000}, {0xbeb7c000}, {0xbeb7e000}, - {0xbeb80000}, {0xbeb82000}, {0xbeb84000}, {0xbeb86000}, - {0xbeb88000}, {0xbeb8a000}, {0xbeb8c000}, {0xbeb8e000}, - {0xbeb90000}, {0xbeb92000}, {0xbeb94000}, {0xbeb96000}, - {0xbeb98000}, {0xbeb9a000}, {0xbeb9c000}, {0xbeb9e000}, - {0xbeba0000}, {0xbeba2000}, {0xbeba4000}, {0xbeba6000}, - {0xbeba8000}, {0xbebaa000}, {0xbebac000}, {0xbebae000}, - {0xbebb0000}, {0xbebb2000}, {0xbebb4000}, {0xbebb6000}, - {0xbebb8000}, {0xbebba000}, {0xbebbc000}, {0xbebbe000}, - {0xbebc0000}, {0xbebc2000}, {0xbebc4000}, {0xbebc6000}, - {0xbebc8000}, {0xbebca000}, {0xbebcc000}, {0xbebce000}, - {0xbebd0000}, {0xbebd2000}, {0xbebd4000}, {0xbebd6000}, - {0xbebd8000}, {0xbebda000}, {0xbebdc000}, {0xbebde000}, - {0xbebe0000}, {0xbebe2000}, {0xbebe4000}, {0xbebe6000}, - {0xbebe8000}, {0xbebea000}, {0xbebec000}, {0xbebee000}, - {0xbebf0000}, {0xbebf2000}, {0xbebf4000}, {0xbebf6000}, - {0xbebf8000}, {0xbebfa000}, {0xbebfc000}, {0xbebfe000}, - {0xbec00000}, {0xbec02000}, {0xbec04000}, {0xbec06000}, - {0xbec08000}, {0xbec0a000}, {0xbec0c000}, {0xbec0e000}, - {0xbec10000}, {0xbec12000}, {0xbec14000}, {0xbec16000}, - {0xbec18000}, {0xbec1a000}, {0xbec1c000}, {0xbec1e000}, - {0xbec20000}, {0xbec22000}, {0xbec24000}, {0xbec26000}, - {0xbec28000}, {0xbec2a000}, {0xbec2c000}, {0xbec2e000}, - {0xbec30000}, {0xbec32000}, {0xbec34000}, {0xbec36000}, - {0xbec38000}, {0xbec3a000}, {0xbec3c000}, {0xbec3e000}, - {0xbec40000}, {0xbec42000}, {0xbec44000}, {0xbec46000}, - {0xbec48000}, {0xbec4a000}, {0xbec4c000}, {0xbec4e000}, - {0xbec50000}, {0xbec52000}, {0xbec54000}, {0xbec56000}, - {0xbec58000}, {0xbec5a000}, {0xbec5c000}, {0xbec5e000}, - {0xbec60000}, {0xbec62000}, {0xbec64000}, {0xbec66000}, - {0xbec68000}, {0xbec6a000}, {0xbec6c000}, {0xbec6e000}, - {0xbec70000}, {0xbec72000}, {0xbec74000}, {0xbec76000}, - {0xbec78000}, {0xbec7a000}, {0xbec7c000}, {0xbec7e000}, - {0xbec80000}, {0xbec82000}, {0xbec84000}, {0xbec86000}, - {0xbec88000}, {0xbec8a000}, {0xbec8c000}, {0xbec8e000}, - {0xbec90000}, {0xbec92000}, {0xbec94000}, {0xbec96000}, - {0xbec98000}, {0xbec9a000}, {0xbec9c000}, {0xbec9e000}, - {0xbeca0000}, {0xbeca2000}, {0xbeca4000}, {0xbeca6000}, - {0xbeca8000}, {0xbecaa000}, {0xbecac000}, {0xbecae000}, - {0xbecb0000}, {0xbecb2000}, {0xbecb4000}, {0xbecb6000}, - {0xbecb8000}, {0xbecba000}, {0xbecbc000}, {0xbecbe000}, - {0xbecc0000}, {0xbecc2000}, {0xbecc4000}, {0xbecc6000}, - {0xbecc8000}, {0xbecca000}, {0xbeccc000}, {0xbecce000}, - {0xbecd0000}, {0xbecd2000}, {0xbecd4000}, {0xbecd6000}, - {0xbecd8000}, {0xbecda000}, {0xbecdc000}, {0xbecde000}, - {0xbece0000}, {0xbece2000}, {0xbece4000}, {0xbece6000}, - {0xbece8000}, {0xbecea000}, {0xbecec000}, {0xbecee000}, - {0xbecf0000}, {0xbecf2000}, {0xbecf4000}, {0xbecf6000}, - {0xbecf8000}, {0xbecfa000}, {0xbecfc000}, {0xbecfe000}, - {0xbed00000}, {0xbed02000}, {0xbed04000}, {0xbed06000}, - {0xbed08000}, {0xbed0a000}, {0xbed0c000}, {0xbed0e000}, - {0xbed10000}, {0xbed12000}, {0xbed14000}, {0xbed16000}, - {0xbed18000}, {0xbed1a000}, {0xbed1c000}, {0xbed1e000}, - {0xbed20000}, {0xbed22000}, {0xbed24000}, {0xbed26000}, - {0xbed28000}, {0xbed2a000}, {0xbed2c000}, {0xbed2e000}, - {0xbed30000}, {0xbed32000}, {0xbed34000}, {0xbed36000}, - {0xbed38000}, {0xbed3a000}, {0xbed3c000}, {0xbed3e000}, - {0xbed40000}, {0xbed42000}, {0xbed44000}, {0xbed46000}, - {0xbed48000}, {0xbed4a000}, {0xbed4c000}, {0xbed4e000}, - {0xbed50000}, {0xbed52000}, {0xbed54000}, {0xbed56000}, - {0xbed58000}, {0xbed5a000}, {0xbed5c000}, {0xbed5e000}, - {0xbed60000}, {0xbed62000}, {0xbed64000}, {0xbed66000}, - {0xbed68000}, {0xbed6a000}, {0xbed6c000}, {0xbed6e000}, - {0xbed70000}, {0xbed72000}, {0xbed74000}, {0xbed76000}, - {0xbed78000}, {0xbed7a000}, {0xbed7c000}, {0xbed7e000}, - {0xbed80000}, {0xbed82000}, {0xbed84000}, {0xbed86000}, - {0xbed88000}, {0xbed8a000}, {0xbed8c000}, {0xbed8e000}, - {0xbed90000}, {0xbed92000}, {0xbed94000}, {0xbed96000}, - {0xbed98000}, {0xbed9a000}, {0xbed9c000}, {0xbed9e000}, - {0xbeda0000}, {0xbeda2000}, {0xbeda4000}, {0xbeda6000}, - {0xbeda8000}, {0xbedaa000}, {0xbedac000}, {0xbedae000}, - {0xbedb0000}, {0xbedb2000}, {0xbedb4000}, {0xbedb6000}, - {0xbedb8000}, {0xbedba000}, {0xbedbc000}, {0xbedbe000}, - {0xbedc0000}, {0xbedc2000}, {0xbedc4000}, {0xbedc6000}, - {0xbedc8000}, {0xbedca000}, {0xbedcc000}, {0xbedce000}, - {0xbedd0000}, {0xbedd2000}, {0xbedd4000}, {0xbedd6000}, - {0xbedd8000}, {0xbedda000}, {0xbeddc000}, {0xbedde000}, - {0xbede0000}, {0xbede2000}, {0xbede4000}, {0xbede6000}, - {0xbede8000}, {0xbedea000}, {0xbedec000}, {0xbedee000}, - {0xbedf0000}, {0xbedf2000}, {0xbedf4000}, {0xbedf6000}, - {0xbedf8000}, {0xbedfa000}, {0xbedfc000}, {0xbedfe000}, - {0xbee00000}, {0xbee02000}, {0xbee04000}, {0xbee06000}, - {0xbee08000}, {0xbee0a000}, {0xbee0c000}, {0xbee0e000}, - {0xbee10000}, {0xbee12000}, {0xbee14000}, {0xbee16000}, - {0xbee18000}, {0xbee1a000}, {0xbee1c000}, {0xbee1e000}, - {0xbee20000}, {0xbee22000}, {0xbee24000}, {0xbee26000}, - {0xbee28000}, {0xbee2a000}, {0xbee2c000}, {0xbee2e000}, - {0xbee30000}, {0xbee32000}, {0xbee34000}, {0xbee36000}, - {0xbee38000}, {0xbee3a000}, {0xbee3c000}, {0xbee3e000}, - {0xbee40000}, {0xbee42000}, {0xbee44000}, {0xbee46000}, - {0xbee48000}, {0xbee4a000}, {0xbee4c000}, {0xbee4e000}, - {0xbee50000}, {0xbee52000}, {0xbee54000}, {0xbee56000}, - {0xbee58000}, {0xbee5a000}, {0xbee5c000}, {0xbee5e000}, - {0xbee60000}, {0xbee62000}, {0xbee64000}, {0xbee66000}, - {0xbee68000}, {0xbee6a000}, {0xbee6c000}, {0xbee6e000}, - {0xbee70000}, {0xbee72000}, {0xbee74000}, {0xbee76000}, - {0xbee78000}, {0xbee7a000}, {0xbee7c000}, {0xbee7e000}, - {0xbee80000}, {0xbee82000}, {0xbee84000}, {0xbee86000}, - {0xbee88000}, {0xbee8a000}, {0xbee8c000}, {0xbee8e000}, - {0xbee90000}, {0xbee92000}, {0xbee94000}, {0xbee96000}, - {0xbee98000}, {0xbee9a000}, {0xbee9c000}, {0xbee9e000}, - {0xbeea0000}, {0xbeea2000}, {0xbeea4000}, {0xbeea6000}, - {0xbeea8000}, {0xbeeaa000}, {0xbeeac000}, {0xbeeae000}, - {0xbeeb0000}, {0xbeeb2000}, {0xbeeb4000}, {0xbeeb6000}, - {0xbeeb8000}, {0xbeeba000}, {0xbeebc000}, {0xbeebe000}, - {0xbeec0000}, {0xbeec2000}, {0xbeec4000}, {0xbeec6000}, - {0xbeec8000}, {0xbeeca000}, {0xbeecc000}, {0xbeece000}, - {0xbeed0000}, {0xbeed2000}, {0xbeed4000}, {0xbeed6000}, - {0xbeed8000}, {0xbeeda000}, {0xbeedc000}, {0xbeede000}, - {0xbeee0000}, {0xbeee2000}, {0xbeee4000}, {0xbeee6000}, - {0xbeee8000}, {0xbeeea000}, {0xbeeec000}, {0xbeeee000}, - {0xbeef0000}, {0xbeef2000}, {0xbeef4000}, {0xbeef6000}, - {0xbeef8000}, {0xbeefa000}, {0xbeefc000}, {0xbeefe000}, - {0xbef00000}, {0xbef02000}, {0xbef04000}, {0xbef06000}, - {0xbef08000}, {0xbef0a000}, {0xbef0c000}, {0xbef0e000}, - {0xbef10000}, {0xbef12000}, {0xbef14000}, {0xbef16000}, - {0xbef18000}, {0xbef1a000}, {0xbef1c000}, {0xbef1e000}, - {0xbef20000}, {0xbef22000}, {0xbef24000}, {0xbef26000}, - {0xbef28000}, {0xbef2a000}, {0xbef2c000}, {0xbef2e000}, - {0xbef30000}, {0xbef32000}, {0xbef34000}, {0xbef36000}, - {0xbef38000}, {0xbef3a000}, {0xbef3c000}, {0xbef3e000}, - {0xbef40000}, {0xbef42000}, {0xbef44000}, {0xbef46000}, - {0xbef48000}, {0xbef4a000}, {0xbef4c000}, {0xbef4e000}, - {0xbef50000}, {0xbef52000}, {0xbef54000}, {0xbef56000}, - {0xbef58000}, {0xbef5a000}, {0xbef5c000}, {0xbef5e000}, - {0xbef60000}, {0xbef62000}, {0xbef64000}, {0xbef66000}, - {0xbef68000}, {0xbef6a000}, {0xbef6c000}, {0xbef6e000}, - {0xbef70000}, {0xbef72000}, {0xbef74000}, {0xbef76000}, - {0xbef78000}, {0xbef7a000}, {0xbef7c000}, {0xbef7e000}, - {0xbef80000}, {0xbef82000}, {0xbef84000}, {0xbef86000}, - {0xbef88000}, {0xbef8a000}, {0xbef8c000}, {0xbef8e000}, - {0xbef90000}, {0xbef92000}, {0xbef94000}, {0xbef96000}, - {0xbef98000}, {0xbef9a000}, {0xbef9c000}, {0xbef9e000}, - {0xbefa0000}, {0xbefa2000}, {0xbefa4000}, {0xbefa6000}, - {0xbefa8000}, {0xbefaa000}, {0xbefac000}, {0xbefae000}, - {0xbefb0000}, {0xbefb2000}, {0xbefb4000}, {0xbefb6000}, - {0xbefb8000}, {0xbefba000}, {0xbefbc000}, {0xbefbe000}, - {0xbefc0000}, {0xbefc2000}, {0xbefc4000}, {0xbefc6000}, - {0xbefc8000}, {0xbefca000}, {0xbefcc000}, {0xbefce000}, - {0xbefd0000}, {0xbefd2000}, {0xbefd4000}, {0xbefd6000}, - {0xbefd8000}, {0xbefda000}, {0xbefdc000}, {0xbefde000}, - {0xbefe0000}, {0xbefe2000}, {0xbefe4000}, {0xbefe6000}, - {0xbefe8000}, {0xbefea000}, {0xbefec000}, {0xbefee000}, - {0xbeff0000}, {0xbeff2000}, {0xbeff4000}, {0xbeff6000}, - {0xbeff8000}, {0xbeffa000}, {0xbeffc000}, {0xbeffe000}, - {0xbf000000}, {0xbf002000}, {0xbf004000}, {0xbf006000}, - {0xbf008000}, {0xbf00a000}, {0xbf00c000}, {0xbf00e000}, - {0xbf010000}, {0xbf012000}, {0xbf014000}, {0xbf016000}, - {0xbf018000}, {0xbf01a000}, {0xbf01c000}, {0xbf01e000}, - {0xbf020000}, {0xbf022000}, {0xbf024000}, {0xbf026000}, - {0xbf028000}, {0xbf02a000}, {0xbf02c000}, {0xbf02e000}, - {0xbf030000}, {0xbf032000}, {0xbf034000}, {0xbf036000}, - {0xbf038000}, {0xbf03a000}, {0xbf03c000}, {0xbf03e000}, - {0xbf040000}, {0xbf042000}, {0xbf044000}, {0xbf046000}, - {0xbf048000}, {0xbf04a000}, {0xbf04c000}, {0xbf04e000}, - {0xbf050000}, {0xbf052000}, {0xbf054000}, {0xbf056000}, - {0xbf058000}, {0xbf05a000}, {0xbf05c000}, {0xbf05e000}, - {0xbf060000}, {0xbf062000}, {0xbf064000}, {0xbf066000}, - {0xbf068000}, {0xbf06a000}, {0xbf06c000}, {0xbf06e000}, - {0xbf070000}, {0xbf072000}, {0xbf074000}, {0xbf076000}, - {0xbf078000}, {0xbf07a000}, {0xbf07c000}, {0xbf07e000}, - {0xbf080000}, {0xbf082000}, {0xbf084000}, {0xbf086000}, - {0xbf088000}, {0xbf08a000}, {0xbf08c000}, {0xbf08e000}, - {0xbf090000}, {0xbf092000}, {0xbf094000}, {0xbf096000}, - {0xbf098000}, {0xbf09a000}, {0xbf09c000}, {0xbf09e000}, - {0xbf0a0000}, {0xbf0a2000}, {0xbf0a4000}, {0xbf0a6000}, - {0xbf0a8000}, {0xbf0aa000}, {0xbf0ac000}, {0xbf0ae000}, - {0xbf0b0000}, {0xbf0b2000}, {0xbf0b4000}, {0xbf0b6000}, - {0xbf0b8000}, {0xbf0ba000}, {0xbf0bc000}, {0xbf0be000}, - {0xbf0c0000}, {0xbf0c2000}, {0xbf0c4000}, {0xbf0c6000}, - {0xbf0c8000}, {0xbf0ca000}, {0xbf0cc000}, {0xbf0ce000}, - {0xbf0d0000}, {0xbf0d2000}, {0xbf0d4000}, {0xbf0d6000}, - {0xbf0d8000}, {0xbf0da000}, {0xbf0dc000}, {0xbf0de000}, - {0xbf0e0000}, {0xbf0e2000}, {0xbf0e4000}, {0xbf0e6000}, - {0xbf0e8000}, {0xbf0ea000}, {0xbf0ec000}, {0xbf0ee000}, - {0xbf0f0000}, {0xbf0f2000}, {0xbf0f4000}, {0xbf0f6000}, - {0xbf0f8000}, {0xbf0fa000}, {0xbf0fc000}, {0xbf0fe000}, - {0xbf100000}, {0xbf102000}, {0xbf104000}, {0xbf106000}, - {0xbf108000}, {0xbf10a000}, {0xbf10c000}, {0xbf10e000}, - {0xbf110000}, {0xbf112000}, {0xbf114000}, {0xbf116000}, - {0xbf118000}, {0xbf11a000}, {0xbf11c000}, {0xbf11e000}, - {0xbf120000}, {0xbf122000}, {0xbf124000}, {0xbf126000}, - {0xbf128000}, {0xbf12a000}, {0xbf12c000}, {0xbf12e000}, - {0xbf130000}, {0xbf132000}, {0xbf134000}, {0xbf136000}, - {0xbf138000}, {0xbf13a000}, {0xbf13c000}, {0xbf13e000}, - {0xbf140000}, {0xbf142000}, {0xbf144000}, {0xbf146000}, - {0xbf148000}, {0xbf14a000}, {0xbf14c000}, {0xbf14e000}, - {0xbf150000}, {0xbf152000}, {0xbf154000}, {0xbf156000}, - {0xbf158000}, {0xbf15a000}, {0xbf15c000}, {0xbf15e000}, - {0xbf160000}, {0xbf162000}, {0xbf164000}, {0xbf166000}, - {0xbf168000}, {0xbf16a000}, {0xbf16c000}, {0xbf16e000}, - {0xbf170000}, {0xbf172000}, {0xbf174000}, {0xbf176000}, - {0xbf178000}, {0xbf17a000}, {0xbf17c000}, {0xbf17e000}, - {0xbf180000}, {0xbf182000}, {0xbf184000}, {0xbf186000}, - {0xbf188000}, {0xbf18a000}, {0xbf18c000}, {0xbf18e000}, - {0xbf190000}, {0xbf192000}, {0xbf194000}, {0xbf196000}, - {0xbf198000}, {0xbf19a000}, {0xbf19c000}, {0xbf19e000}, - {0xbf1a0000}, {0xbf1a2000}, {0xbf1a4000}, {0xbf1a6000}, - {0xbf1a8000}, {0xbf1aa000}, {0xbf1ac000}, {0xbf1ae000}, - {0xbf1b0000}, {0xbf1b2000}, {0xbf1b4000}, {0xbf1b6000}, - {0xbf1b8000}, {0xbf1ba000}, {0xbf1bc000}, {0xbf1be000}, - {0xbf1c0000}, {0xbf1c2000}, {0xbf1c4000}, {0xbf1c6000}, - {0xbf1c8000}, {0xbf1ca000}, {0xbf1cc000}, {0xbf1ce000}, - {0xbf1d0000}, {0xbf1d2000}, {0xbf1d4000}, {0xbf1d6000}, - {0xbf1d8000}, {0xbf1da000}, {0xbf1dc000}, {0xbf1de000}, - {0xbf1e0000}, {0xbf1e2000}, {0xbf1e4000}, {0xbf1e6000}, - {0xbf1e8000}, {0xbf1ea000}, {0xbf1ec000}, {0xbf1ee000}, - {0xbf1f0000}, {0xbf1f2000}, {0xbf1f4000}, {0xbf1f6000}, - {0xbf1f8000}, {0xbf1fa000}, {0xbf1fc000}, {0xbf1fe000}, - {0xbf200000}, {0xbf202000}, {0xbf204000}, {0xbf206000}, - {0xbf208000}, {0xbf20a000}, {0xbf20c000}, {0xbf20e000}, - {0xbf210000}, {0xbf212000}, {0xbf214000}, {0xbf216000}, - {0xbf218000}, {0xbf21a000}, {0xbf21c000}, {0xbf21e000}, - {0xbf220000}, {0xbf222000}, {0xbf224000}, {0xbf226000}, - {0xbf228000}, {0xbf22a000}, {0xbf22c000}, {0xbf22e000}, - {0xbf230000}, {0xbf232000}, {0xbf234000}, {0xbf236000}, - {0xbf238000}, {0xbf23a000}, {0xbf23c000}, {0xbf23e000}, - {0xbf240000}, {0xbf242000}, {0xbf244000}, {0xbf246000}, - {0xbf248000}, {0xbf24a000}, {0xbf24c000}, {0xbf24e000}, - {0xbf250000}, {0xbf252000}, {0xbf254000}, {0xbf256000}, - {0xbf258000}, {0xbf25a000}, {0xbf25c000}, {0xbf25e000}, - {0xbf260000}, {0xbf262000}, {0xbf264000}, {0xbf266000}, - {0xbf268000}, {0xbf26a000}, {0xbf26c000}, {0xbf26e000}, - {0xbf270000}, {0xbf272000}, {0xbf274000}, {0xbf276000}, - {0xbf278000}, {0xbf27a000}, {0xbf27c000}, {0xbf27e000}, - {0xbf280000}, {0xbf282000}, {0xbf284000}, {0xbf286000}, - {0xbf288000}, {0xbf28a000}, {0xbf28c000}, {0xbf28e000}, - {0xbf290000}, {0xbf292000}, {0xbf294000}, {0xbf296000}, - {0xbf298000}, {0xbf29a000}, {0xbf29c000}, {0xbf29e000}, - {0xbf2a0000}, {0xbf2a2000}, {0xbf2a4000}, {0xbf2a6000}, - {0xbf2a8000}, {0xbf2aa000}, {0xbf2ac000}, {0xbf2ae000}, - {0xbf2b0000}, {0xbf2b2000}, {0xbf2b4000}, {0xbf2b6000}, - {0xbf2b8000}, {0xbf2ba000}, {0xbf2bc000}, {0xbf2be000}, - {0xbf2c0000}, {0xbf2c2000}, {0xbf2c4000}, {0xbf2c6000}, - {0xbf2c8000}, {0xbf2ca000}, {0xbf2cc000}, {0xbf2ce000}, - {0xbf2d0000}, {0xbf2d2000}, {0xbf2d4000}, {0xbf2d6000}, - {0xbf2d8000}, {0xbf2da000}, {0xbf2dc000}, {0xbf2de000}, - {0xbf2e0000}, {0xbf2e2000}, {0xbf2e4000}, {0xbf2e6000}, - {0xbf2e8000}, {0xbf2ea000}, {0xbf2ec000}, {0xbf2ee000}, - {0xbf2f0000}, {0xbf2f2000}, {0xbf2f4000}, {0xbf2f6000}, - {0xbf2f8000}, {0xbf2fa000}, {0xbf2fc000}, {0xbf2fe000}, - {0xbf300000}, {0xbf302000}, {0xbf304000}, {0xbf306000}, - {0xbf308000}, {0xbf30a000}, {0xbf30c000}, {0xbf30e000}, - {0xbf310000}, {0xbf312000}, {0xbf314000}, {0xbf316000}, - {0xbf318000}, {0xbf31a000}, {0xbf31c000}, {0xbf31e000}, - {0xbf320000}, {0xbf322000}, {0xbf324000}, {0xbf326000}, - {0xbf328000}, {0xbf32a000}, {0xbf32c000}, {0xbf32e000}, - {0xbf330000}, {0xbf332000}, {0xbf334000}, {0xbf336000}, - {0xbf338000}, {0xbf33a000}, {0xbf33c000}, {0xbf33e000}, - {0xbf340000}, {0xbf342000}, {0xbf344000}, {0xbf346000}, - {0xbf348000}, {0xbf34a000}, {0xbf34c000}, {0xbf34e000}, - {0xbf350000}, {0xbf352000}, {0xbf354000}, {0xbf356000}, - {0xbf358000}, {0xbf35a000}, {0xbf35c000}, {0xbf35e000}, - {0xbf360000}, {0xbf362000}, {0xbf364000}, {0xbf366000}, - {0xbf368000}, {0xbf36a000}, {0xbf36c000}, {0xbf36e000}, - {0xbf370000}, {0xbf372000}, {0xbf374000}, {0xbf376000}, - {0xbf378000}, {0xbf37a000}, {0xbf37c000}, {0xbf37e000}, - {0xbf380000}, {0xbf382000}, {0xbf384000}, {0xbf386000}, - {0xbf388000}, {0xbf38a000}, {0xbf38c000}, {0xbf38e000}, - {0xbf390000}, {0xbf392000}, {0xbf394000}, {0xbf396000}, - {0xbf398000}, {0xbf39a000}, {0xbf39c000}, {0xbf39e000}, - {0xbf3a0000}, {0xbf3a2000}, {0xbf3a4000}, {0xbf3a6000}, - {0xbf3a8000}, {0xbf3aa000}, {0xbf3ac000}, {0xbf3ae000}, - {0xbf3b0000}, {0xbf3b2000}, {0xbf3b4000}, {0xbf3b6000}, - {0xbf3b8000}, {0xbf3ba000}, {0xbf3bc000}, {0xbf3be000}, - {0xbf3c0000}, {0xbf3c2000}, {0xbf3c4000}, {0xbf3c6000}, - {0xbf3c8000}, {0xbf3ca000}, {0xbf3cc000}, {0xbf3ce000}, - {0xbf3d0000}, {0xbf3d2000}, {0xbf3d4000}, {0xbf3d6000}, - {0xbf3d8000}, {0xbf3da000}, {0xbf3dc000}, {0xbf3de000}, - {0xbf3e0000}, {0xbf3e2000}, {0xbf3e4000}, {0xbf3e6000}, - {0xbf3e8000}, {0xbf3ea000}, {0xbf3ec000}, {0xbf3ee000}, - {0xbf3f0000}, {0xbf3f2000}, {0xbf3f4000}, {0xbf3f6000}, - {0xbf3f8000}, {0xbf3fa000}, {0xbf3fc000}, {0xbf3fe000}, - {0xbf400000}, {0xbf402000}, {0xbf404000}, {0xbf406000}, - {0xbf408000}, {0xbf40a000}, {0xbf40c000}, {0xbf40e000}, - {0xbf410000}, {0xbf412000}, {0xbf414000}, {0xbf416000}, - {0xbf418000}, {0xbf41a000}, {0xbf41c000}, {0xbf41e000}, - {0xbf420000}, {0xbf422000}, {0xbf424000}, {0xbf426000}, - {0xbf428000}, {0xbf42a000}, {0xbf42c000}, {0xbf42e000}, - {0xbf430000}, {0xbf432000}, {0xbf434000}, {0xbf436000}, - {0xbf438000}, {0xbf43a000}, {0xbf43c000}, {0xbf43e000}, - {0xbf440000}, {0xbf442000}, {0xbf444000}, {0xbf446000}, - {0xbf448000}, {0xbf44a000}, {0xbf44c000}, {0xbf44e000}, - {0xbf450000}, {0xbf452000}, {0xbf454000}, {0xbf456000}, - {0xbf458000}, {0xbf45a000}, {0xbf45c000}, {0xbf45e000}, - {0xbf460000}, {0xbf462000}, {0xbf464000}, {0xbf466000}, - {0xbf468000}, {0xbf46a000}, {0xbf46c000}, {0xbf46e000}, - {0xbf470000}, {0xbf472000}, {0xbf474000}, {0xbf476000}, - {0xbf478000}, {0xbf47a000}, {0xbf47c000}, {0xbf47e000}, - {0xbf480000}, {0xbf482000}, {0xbf484000}, {0xbf486000}, - {0xbf488000}, {0xbf48a000}, {0xbf48c000}, {0xbf48e000}, - {0xbf490000}, {0xbf492000}, {0xbf494000}, {0xbf496000}, - {0xbf498000}, {0xbf49a000}, {0xbf49c000}, {0xbf49e000}, - {0xbf4a0000}, {0xbf4a2000}, {0xbf4a4000}, {0xbf4a6000}, - {0xbf4a8000}, {0xbf4aa000}, {0xbf4ac000}, {0xbf4ae000}, - {0xbf4b0000}, {0xbf4b2000}, {0xbf4b4000}, {0xbf4b6000}, - {0xbf4b8000}, {0xbf4ba000}, {0xbf4bc000}, {0xbf4be000}, - {0xbf4c0000}, {0xbf4c2000}, {0xbf4c4000}, {0xbf4c6000}, - {0xbf4c8000}, {0xbf4ca000}, {0xbf4cc000}, {0xbf4ce000}, - {0xbf4d0000}, {0xbf4d2000}, {0xbf4d4000}, {0xbf4d6000}, - {0xbf4d8000}, {0xbf4da000}, {0xbf4dc000}, {0xbf4de000}, - {0xbf4e0000}, {0xbf4e2000}, {0xbf4e4000}, {0xbf4e6000}, - {0xbf4e8000}, {0xbf4ea000}, {0xbf4ec000}, {0xbf4ee000}, - {0xbf4f0000}, {0xbf4f2000}, {0xbf4f4000}, {0xbf4f6000}, - {0xbf4f8000}, {0xbf4fa000}, {0xbf4fc000}, {0xbf4fe000}, - {0xbf500000}, {0xbf502000}, {0xbf504000}, {0xbf506000}, - {0xbf508000}, {0xbf50a000}, {0xbf50c000}, {0xbf50e000}, - {0xbf510000}, {0xbf512000}, {0xbf514000}, {0xbf516000}, - {0xbf518000}, {0xbf51a000}, {0xbf51c000}, {0xbf51e000}, - {0xbf520000}, {0xbf522000}, {0xbf524000}, {0xbf526000}, - {0xbf528000}, {0xbf52a000}, {0xbf52c000}, {0xbf52e000}, - {0xbf530000}, {0xbf532000}, {0xbf534000}, {0xbf536000}, - {0xbf538000}, {0xbf53a000}, {0xbf53c000}, {0xbf53e000}, - {0xbf540000}, {0xbf542000}, {0xbf544000}, {0xbf546000}, - {0xbf548000}, {0xbf54a000}, {0xbf54c000}, {0xbf54e000}, - {0xbf550000}, {0xbf552000}, {0xbf554000}, {0xbf556000}, - {0xbf558000}, {0xbf55a000}, {0xbf55c000}, {0xbf55e000}, - {0xbf560000}, {0xbf562000}, {0xbf564000}, {0xbf566000}, - {0xbf568000}, {0xbf56a000}, {0xbf56c000}, {0xbf56e000}, - {0xbf570000}, {0xbf572000}, {0xbf574000}, {0xbf576000}, - {0xbf578000}, {0xbf57a000}, {0xbf57c000}, {0xbf57e000}, - {0xbf580000}, {0xbf582000}, {0xbf584000}, {0xbf586000}, - {0xbf588000}, {0xbf58a000}, {0xbf58c000}, {0xbf58e000}, - {0xbf590000}, {0xbf592000}, {0xbf594000}, {0xbf596000}, - {0xbf598000}, {0xbf59a000}, {0xbf59c000}, {0xbf59e000}, - {0xbf5a0000}, {0xbf5a2000}, {0xbf5a4000}, {0xbf5a6000}, - {0xbf5a8000}, {0xbf5aa000}, {0xbf5ac000}, {0xbf5ae000}, - {0xbf5b0000}, {0xbf5b2000}, {0xbf5b4000}, {0xbf5b6000}, - {0xbf5b8000}, {0xbf5ba000}, {0xbf5bc000}, {0xbf5be000}, - {0xbf5c0000}, {0xbf5c2000}, {0xbf5c4000}, {0xbf5c6000}, - {0xbf5c8000}, {0xbf5ca000}, {0xbf5cc000}, {0xbf5ce000}, - {0xbf5d0000}, {0xbf5d2000}, {0xbf5d4000}, {0xbf5d6000}, - {0xbf5d8000}, {0xbf5da000}, {0xbf5dc000}, {0xbf5de000}, - {0xbf5e0000}, {0xbf5e2000}, {0xbf5e4000}, {0xbf5e6000}, - {0xbf5e8000}, {0xbf5ea000}, {0xbf5ec000}, {0xbf5ee000}, - {0xbf5f0000}, {0xbf5f2000}, {0xbf5f4000}, {0xbf5f6000}, - {0xbf5f8000}, {0xbf5fa000}, {0xbf5fc000}, {0xbf5fe000}, - {0xbf600000}, {0xbf602000}, {0xbf604000}, {0xbf606000}, - {0xbf608000}, {0xbf60a000}, {0xbf60c000}, {0xbf60e000}, - {0xbf610000}, {0xbf612000}, {0xbf614000}, {0xbf616000}, - {0xbf618000}, {0xbf61a000}, {0xbf61c000}, {0xbf61e000}, - {0xbf620000}, {0xbf622000}, {0xbf624000}, {0xbf626000}, - {0xbf628000}, {0xbf62a000}, {0xbf62c000}, {0xbf62e000}, - {0xbf630000}, {0xbf632000}, {0xbf634000}, {0xbf636000}, - {0xbf638000}, {0xbf63a000}, {0xbf63c000}, {0xbf63e000}, - {0xbf640000}, {0xbf642000}, {0xbf644000}, {0xbf646000}, - {0xbf648000}, {0xbf64a000}, {0xbf64c000}, {0xbf64e000}, - {0xbf650000}, {0xbf652000}, {0xbf654000}, {0xbf656000}, - {0xbf658000}, {0xbf65a000}, {0xbf65c000}, {0xbf65e000}, - {0xbf660000}, {0xbf662000}, {0xbf664000}, {0xbf666000}, - {0xbf668000}, {0xbf66a000}, {0xbf66c000}, {0xbf66e000}, - {0xbf670000}, {0xbf672000}, {0xbf674000}, {0xbf676000}, - {0xbf678000}, {0xbf67a000}, {0xbf67c000}, {0xbf67e000}, - {0xbf680000}, {0xbf682000}, {0xbf684000}, {0xbf686000}, - {0xbf688000}, {0xbf68a000}, {0xbf68c000}, {0xbf68e000}, - {0xbf690000}, {0xbf692000}, {0xbf694000}, {0xbf696000}, - {0xbf698000}, {0xbf69a000}, {0xbf69c000}, {0xbf69e000}, - {0xbf6a0000}, {0xbf6a2000}, {0xbf6a4000}, {0xbf6a6000}, - {0xbf6a8000}, {0xbf6aa000}, {0xbf6ac000}, {0xbf6ae000}, - {0xbf6b0000}, {0xbf6b2000}, {0xbf6b4000}, {0xbf6b6000}, - {0xbf6b8000}, {0xbf6ba000}, {0xbf6bc000}, {0xbf6be000}, - {0xbf6c0000}, {0xbf6c2000}, {0xbf6c4000}, {0xbf6c6000}, - {0xbf6c8000}, {0xbf6ca000}, {0xbf6cc000}, {0xbf6ce000}, - {0xbf6d0000}, {0xbf6d2000}, {0xbf6d4000}, {0xbf6d6000}, - {0xbf6d8000}, {0xbf6da000}, {0xbf6dc000}, {0xbf6de000}, - {0xbf6e0000}, {0xbf6e2000}, {0xbf6e4000}, {0xbf6e6000}, - {0xbf6e8000}, {0xbf6ea000}, {0xbf6ec000}, {0xbf6ee000}, - {0xbf6f0000}, {0xbf6f2000}, {0xbf6f4000}, {0xbf6f6000}, - {0xbf6f8000}, {0xbf6fa000}, {0xbf6fc000}, {0xbf6fe000}, - {0xbf700000}, {0xbf702000}, {0xbf704000}, {0xbf706000}, - {0xbf708000}, {0xbf70a000}, {0xbf70c000}, {0xbf70e000}, - {0xbf710000}, {0xbf712000}, {0xbf714000}, {0xbf716000}, - {0xbf718000}, {0xbf71a000}, {0xbf71c000}, {0xbf71e000}, - {0xbf720000}, {0xbf722000}, {0xbf724000}, {0xbf726000}, - {0xbf728000}, {0xbf72a000}, {0xbf72c000}, {0xbf72e000}, - {0xbf730000}, {0xbf732000}, {0xbf734000}, {0xbf736000}, - {0xbf738000}, {0xbf73a000}, {0xbf73c000}, {0xbf73e000}, - {0xbf740000}, {0xbf742000}, {0xbf744000}, {0xbf746000}, - {0xbf748000}, {0xbf74a000}, {0xbf74c000}, {0xbf74e000}, - {0xbf750000}, {0xbf752000}, {0xbf754000}, {0xbf756000}, - {0xbf758000}, {0xbf75a000}, {0xbf75c000}, {0xbf75e000}, - {0xbf760000}, {0xbf762000}, {0xbf764000}, {0xbf766000}, - {0xbf768000}, {0xbf76a000}, {0xbf76c000}, {0xbf76e000}, - {0xbf770000}, {0xbf772000}, {0xbf774000}, {0xbf776000}, - {0xbf778000}, {0xbf77a000}, {0xbf77c000}, {0xbf77e000}, - {0xbf780000}, {0xbf782000}, {0xbf784000}, {0xbf786000}, - {0xbf788000}, {0xbf78a000}, {0xbf78c000}, {0xbf78e000}, - {0xbf790000}, {0xbf792000}, {0xbf794000}, {0xbf796000}, - {0xbf798000}, {0xbf79a000}, {0xbf79c000}, {0xbf79e000}, - {0xbf7a0000}, {0xbf7a2000}, {0xbf7a4000}, {0xbf7a6000}, - {0xbf7a8000}, {0xbf7aa000}, {0xbf7ac000}, {0xbf7ae000}, - {0xbf7b0000}, {0xbf7b2000}, {0xbf7b4000}, {0xbf7b6000}, - {0xbf7b8000}, {0xbf7ba000}, {0xbf7bc000}, {0xbf7be000}, - {0xbf7c0000}, {0xbf7c2000}, {0xbf7c4000}, {0xbf7c6000}, - {0xbf7c8000}, {0xbf7ca000}, {0xbf7cc000}, {0xbf7ce000}, - {0xbf7d0000}, {0xbf7d2000}, {0xbf7d4000}, {0xbf7d6000}, - {0xbf7d8000}, {0xbf7da000}, {0xbf7dc000}, {0xbf7de000}, - {0xbf7e0000}, {0xbf7e2000}, {0xbf7e4000}, {0xbf7e6000}, - {0xbf7e8000}, {0xbf7ea000}, {0xbf7ec000}, {0xbf7ee000}, - {0xbf7f0000}, {0xbf7f2000}, {0xbf7f4000}, {0xbf7f6000}, - {0xbf7f8000}, {0xbf7fa000}, {0xbf7fc000}, {0xbf7fe000}, - {0xbf800000}, {0xbf802000}, {0xbf804000}, {0xbf806000}, - {0xbf808000}, {0xbf80a000}, {0xbf80c000}, {0xbf80e000}, - {0xbf810000}, {0xbf812000}, {0xbf814000}, {0xbf816000}, - {0xbf818000}, {0xbf81a000}, {0xbf81c000}, {0xbf81e000}, - {0xbf820000}, {0xbf822000}, {0xbf824000}, {0xbf826000}, - {0xbf828000}, {0xbf82a000}, {0xbf82c000}, {0xbf82e000}, - {0xbf830000}, {0xbf832000}, {0xbf834000}, {0xbf836000}, - {0xbf838000}, {0xbf83a000}, {0xbf83c000}, {0xbf83e000}, - {0xbf840000}, {0xbf842000}, {0xbf844000}, {0xbf846000}, - {0xbf848000}, {0xbf84a000}, {0xbf84c000}, {0xbf84e000}, - {0xbf850000}, {0xbf852000}, {0xbf854000}, {0xbf856000}, - {0xbf858000}, {0xbf85a000}, {0xbf85c000}, {0xbf85e000}, - {0xbf860000}, {0xbf862000}, {0xbf864000}, {0xbf866000}, - {0xbf868000}, {0xbf86a000}, {0xbf86c000}, {0xbf86e000}, - {0xbf870000}, {0xbf872000}, {0xbf874000}, {0xbf876000}, - {0xbf878000}, {0xbf87a000}, {0xbf87c000}, {0xbf87e000}, - {0xbf880000}, {0xbf882000}, {0xbf884000}, {0xbf886000}, - {0xbf888000}, {0xbf88a000}, {0xbf88c000}, {0xbf88e000}, - {0xbf890000}, {0xbf892000}, {0xbf894000}, {0xbf896000}, - {0xbf898000}, {0xbf89a000}, {0xbf89c000}, {0xbf89e000}, - {0xbf8a0000}, {0xbf8a2000}, {0xbf8a4000}, {0xbf8a6000}, - {0xbf8a8000}, {0xbf8aa000}, {0xbf8ac000}, {0xbf8ae000}, - {0xbf8b0000}, {0xbf8b2000}, {0xbf8b4000}, {0xbf8b6000}, - {0xbf8b8000}, {0xbf8ba000}, {0xbf8bc000}, {0xbf8be000}, - {0xbf8c0000}, {0xbf8c2000}, {0xbf8c4000}, {0xbf8c6000}, - {0xbf8c8000}, {0xbf8ca000}, {0xbf8cc000}, {0xbf8ce000}, - {0xbf8d0000}, {0xbf8d2000}, {0xbf8d4000}, {0xbf8d6000}, - {0xbf8d8000}, {0xbf8da000}, {0xbf8dc000}, {0xbf8de000}, - {0xbf8e0000}, {0xbf8e2000}, {0xbf8e4000}, {0xbf8e6000}, - {0xbf8e8000}, {0xbf8ea000}, {0xbf8ec000}, {0xbf8ee000}, - {0xbf8f0000}, {0xbf8f2000}, {0xbf8f4000}, {0xbf8f6000}, - {0xbf8f8000}, {0xbf8fa000}, {0xbf8fc000}, {0xbf8fe000}, - {0xbf900000}, {0xbf902000}, {0xbf904000}, {0xbf906000}, - {0xbf908000}, {0xbf90a000}, {0xbf90c000}, {0xbf90e000}, - {0xbf910000}, {0xbf912000}, {0xbf914000}, {0xbf916000}, - {0xbf918000}, {0xbf91a000}, {0xbf91c000}, {0xbf91e000}, - {0xbf920000}, {0xbf922000}, {0xbf924000}, {0xbf926000}, - {0xbf928000}, {0xbf92a000}, {0xbf92c000}, {0xbf92e000}, - {0xbf930000}, {0xbf932000}, {0xbf934000}, {0xbf936000}, - {0xbf938000}, {0xbf93a000}, {0xbf93c000}, {0xbf93e000}, - {0xbf940000}, {0xbf942000}, {0xbf944000}, {0xbf946000}, - {0xbf948000}, {0xbf94a000}, {0xbf94c000}, {0xbf94e000}, - {0xbf950000}, {0xbf952000}, {0xbf954000}, {0xbf956000}, - {0xbf958000}, {0xbf95a000}, {0xbf95c000}, {0xbf95e000}, - {0xbf960000}, {0xbf962000}, {0xbf964000}, {0xbf966000}, - {0xbf968000}, {0xbf96a000}, {0xbf96c000}, {0xbf96e000}, - {0xbf970000}, {0xbf972000}, {0xbf974000}, {0xbf976000}, - {0xbf978000}, {0xbf97a000}, {0xbf97c000}, {0xbf97e000}, - {0xbf980000}, {0xbf982000}, {0xbf984000}, {0xbf986000}, - {0xbf988000}, {0xbf98a000}, {0xbf98c000}, {0xbf98e000}, - {0xbf990000}, {0xbf992000}, {0xbf994000}, {0xbf996000}, - {0xbf998000}, {0xbf99a000}, {0xbf99c000}, {0xbf99e000}, - {0xbf9a0000}, {0xbf9a2000}, {0xbf9a4000}, {0xbf9a6000}, - {0xbf9a8000}, {0xbf9aa000}, {0xbf9ac000}, {0xbf9ae000}, - {0xbf9b0000}, {0xbf9b2000}, {0xbf9b4000}, {0xbf9b6000}, - {0xbf9b8000}, {0xbf9ba000}, {0xbf9bc000}, {0xbf9be000}, - {0xbf9c0000}, {0xbf9c2000}, {0xbf9c4000}, {0xbf9c6000}, - {0xbf9c8000}, {0xbf9ca000}, {0xbf9cc000}, {0xbf9ce000}, - {0xbf9d0000}, {0xbf9d2000}, {0xbf9d4000}, {0xbf9d6000}, - {0xbf9d8000}, {0xbf9da000}, {0xbf9dc000}, {0xbf9de000}, - {0xbf9e0000}, {0xbf9e2000}, {0xbf9e4000}, {0xbf9e6000}, - {0xbf9e8000}, {0xbf9ea000}, {0xbf9ec000}, {0xbf9ee000}, - {0xbf9f0000}, {0xbf9f2000}, {0xbf9f4000}, {0xbf9f6000}, - {0xbf9f8000}, {0xbf9fa000}, {0xbf9fc000}, {0xbf9fe000}, - {0xbfa00000}, {0xbfa02000}, {0xbfa04000}, {0xbfa06000}, - {0xbfa08000}, {0xbfa0a000}, {0xbfa0c000}, {0xbfa0e000}, - {0xbfa10000}, {0xbfa12000}, {0xbfa14000}, {0xbfa16000}, - {0xbfa18000}, {0xbfa1a000}, {0xbfa1c000}, {0xbfa1e000}, - {0xbfa20000}, {0xbfa22000}, {0xbfa24000}, {0xbfa26000}, - {0xbfa28000}, {0xbfa2a000}, {0xbfa2c000}, {0xbfa2e000}, - {0xbfa30000}, {0xbfa32000}, {0xbfa34000}, {0xbfa36000}, - {0xbfa38000}, {0xbfa3a000}, {0xbfa3c000}, {0xbfa3e000}, - {0xbfa40000}, {0xbfa42000}, {0xbfa44000}, {0xbfa46000}, - {0xbfa48000}, {0xbfa4a000}, {0xbfa4c000}, {0xbfa4e000}, - {0xbfa50000}, {0xbfa52000}, {0xbfa54000}, {0xbfa56000}, - {0xbfa58000}, {0xbfa5a000}, {0xbfa5c000}, {0xbfa5e000}, - {0xbfa60000}, {0xbfa62000}, {0xbfa64000}, {0xbfa66000}, - {0xbfa68000}, {0xbfa6a000}, {0xbfa6c000}, {0xbfa6e000}, - {0xbfa70000}, {0xbfa72000}, {0xbfa74000}, {0xbfa76000}, - {0xbfa78000}, {0xbfa7a000}, {0xbfa7c000}, {0xbfa7e000}, - {0xbfa80000}, {0xbfa82000}, {0xbfa84000}, {0xbfa86000}, - {0xbfa88000}, {0xbfa8a000}, {0xbfa8c000}, {0xbfa8e000}, - {0xbfa90000}, {0xbfa92000}, {0xbfa94000}, {0xbfa96000}, - {0xbfa98000}, {0xbfa9a000}, {0xbfa9c000}, {0xbfa9e000}, - {0xbfaa0000}, {0xbfaa2000}, {0xbfaa4000}, {0xbfaa6000}, - {0xbfaa8000}, {0xbfaaa000}, {0xbfaac000}, {0xbfaae000}, - {0xbfab0000}, {0xbfab2000}, {0xbfab4000}, {0xbfab6000}, - {0xbfab8000}, {0xbfaba000}, {0xbfabc000}, {0xbfabe000}, - {0xbfac0000}, {0xbfac2000}, {0xbfac4000}, {0xbfac6000}, - {0xbfac8000}, {0xbfaca000}, {0xbfacc000}, {0xbface000}, - {0xbfad0000}, {0xbfad2000}, {0xbfad4000}, {0xbfad6000}, - {0xbfad8000}, {0xbfada000}, {0xbfadc000}, {0xbfade000}, - {0xbfae0000}, {0xbfae2000}, {0xbfae4000}, {0xbfae6000}, - {0xbfae8000}, {0xbfaea000}, {0xbfaec000}, {0xbfaee000}, - {0xbfaf0000}, {0xbfaf2000}, {0xbfaf4000}, {0xbfaf6000}, - {0xbfaf8000}, {0xbfafa000}, {0xbfafc000}, {0xbfafe000}, - {0xbfb00000}, {0xbfb02000}, {0xbfb04000}, {0xbfb06000}, - {0xbfb08000}, {0xbfb0a000}, {0xbfb0c000}, {0xbfb0e000}, - {0xbfb10000}, {0xbfb12000}, {0xbfb14000}, {0xbfb16000}, - {0xbfb18000}, {0xbfb1a000}, {0xbfb1c000}, {0xbfb1e000}, - {0xbfb20000}, {0xbfb22000}, {0xbfb24000}, {0xbfb26000}, - {0xbfb28000}, {0xbfb2a000}, {0xbfb2c000}, {0xbfb2e000}, - {0xbfb30000}, {0xbfb32000}, {0xbfb34000}, {0xbfb36000}, - {0xbfb38000}, {0xbfb3a000}, {0xbfb3c000}, {0xbfb3e000}, - {0xbfb40000}, {0xbfb42000}, {0xbfb44000}, {0xbfb46000}, - {0xbfb48000}, {0xbfb4a000}, {0xbfb4c000}, {0xbfb4e000}, - {0xbfb50000}, {0xbfb52000}, {0xbfb54000}, {0xbfb56000}, - {0xbfb58000}, {0xbfb5a000}, {0xbfb5c000}, {0xbfb5e000}, - {0xbfb60000}, {0xbfb62000}, {0xbfb64000}, {0xbfb66000}, - {0xbfb68000}, {0xbfb6a000}, {0xbfb6c000}, {0xbfb6e000}, - {0xbfb70000}, {0xbfb72000}, {0xbfb74000}, {0xbfb76000}, - {0xbfb78000}, {0xbfb7a000}, {0xbfb7c000}, {0xbfb7e000}, - {0xbfb80000}, {0xbfb82000}, {0xbfb84000}, {0xbfb86000}, - {0xbfb88000}, {0xbfb8a000}, {0xbfb8c000}, {0xbfb8e000}, - {0xbfb90000}, {0xbfb92000}, {0xbfb94000}, {0xbfb96000}, - {0xbfb98000}, {0xbfb9a000}, {0xbfb9c000}, {0xbfb9e000}, - {0xbfba0000}, {0xbfba2000}, {0xbfba4000}, {0xbfba6000}, - {0xbfba8000}, {0xbfbaa000}, {0xbfbac000}, {0xbfbae000}, - {0xbfbb0000}, {0xbfbb2000}, {0xbfbb4000}, {0xbfbb6000}, - {0xbfbb8000}, {0xbfbba000}, {0xbfbbc000}, {0xbfbbe000}, - {0xbfbc0000}, {0xbfbc2000}, {0xbfbc4000}, {0xbfbc6000}, - {0xbfbc8000}, {0xbfbca000}, {0xbfbcc000}, {0xbfbce000}, - {0xbfbd0000}, {0xbfbd2000}, {0xbfbd4000}, {0xbfbd6000}, - {0xbfbd8000}, {0xbfbda000}, {0xbfbdc000}, {0xbfbde000}, - {0xbfbe0000}, {0xbfbe2000}, {0xbfbe4000}, {0xbfbe6000}, - {0xbfbe8000}, {0xbfbea000}, {0xbfbec000}, {0xbfbee000}, - {0xbfbf0000}, {0xbfbf2000}, {0xbfbf4000}, {0xbfbf6000}, - {0xbfbf8000}, {0xbfbfa000}, {0xbfbfc000}, {0xbfbfe000}, - {0xbfc00000}, {0xbfc02000}, {0xbfc04000}, {0xbfc06000}, - {0xbfc08000}, {0xbfc0a000}, {0xbfc0c000}, {0xbfc0e000}, - {0xbfc10000}, {0xbfc12000}, {0xbfc14000}, {0xbfc16000}, - {0xbfc18000}, {0xbfc1a000}, {0xbfc1c000}, {0xbfc1e000}, - {0xbfc20000}, {0xbfc22000}, {0xbfc24000}, {0xbfc26000}, - {0xbfc28000}, {0xbfc2a000}, {0xbfc2c000}, {0xbfc2e000}, - {0xbfc30000}, {0xbfc32000}, {0xbfc34000}, {0xbfc36000}, - {0xbfc38000}, {0xbfc3a000}, {0xbfc3c000}, {0xbfc3e000}, - {0xbfc40000}, {0xbfc42000}, {0xbfc44000}, {0xbfc46000}, - {0xbfc48000}, {0xbfc4a000}, {0xbfc4c000}, {0xbfc4e000}, - {0xbfc50000}, {0xbfc52000}, {0xbfc54000}, {0xbfc56000}, - {0xbfc58000}, {0xbfc5a000}, {0xbfc5c000}, {0xbfc5e000}, - {0xbfc60000}, {0xbfc62000}, {0xbfc64000}, {0xbfc66000}, - {0xbfc68000}, {0xbfc6a000}, {0xbfc6c000}, {0xbfc6e000}, - {0xbfc70000}, {0xbfc72000}, {0xbfc74000}, {0xbfc76000}, - {0xbfc78000}, {0xbfc7a000}, {0xbfc7c000}, {0xbfc7e000}, - {0xbfc80000}, {0xbfc82000}, {0xbfc84000}, {0xbfc86000}, - {0xbfc88000}, {0xbfc8a000}, {0xbfc8c000}, {0xbfc8e000}, - {0xbfc90000}, {0xbfc92000}, {0xbfc94000}, {0xbfc96000}, - {0xbfc98000}, {0xbfc9a000}, {0xbfc9c000}, {0xbfc9e000}, - {0xbfca0000}, {0xbfca2000}, {0xbfca4000}, {0xbfca6000}, - {0xbfca8000}, {0xbfcaa000}, {0xbfcac000}, {0xbfcae000}, - {0xbfcb0000}, {0xbfcb2000}, {0xbfcb4000}, {0xbfcb6000}, - {0xbfcb8000}, {0xbfcba000}, {0xbfcbc000}, {0xbfcbe000}, - {0xbfcc0000}, {0xbfcc2000}, {0xbfcc4000}, {0xbfcc6000}, - {0xbfcc8000}, {0xbfcca000}, {0xbfccc000}, {0xbfcce000}, - {0xbfcd0000}, {0xbfcd2000}, {0xbfcd4000}, {0xbfcd6000}, - {0xbfcd8000}, {0xbfcda000}, {0xbfcdc000}, {0xbfcde000}, - {0xbfce0000}, {0xbfce2000}, {0xbfce4000}, {0xbfce6000}, - {0xbfce8000}, {0xbfcea000}, {0xbfcec000}, {0xbfcee000}, - {0xbfcf0000}, {0xbfcf2000}, {0xbfcf4000}, {0xbfcf6000}, - {0xbfcf8000}, {0xbfcfa000}, {0xbfcfc000}, {0xbfcfe000}, - {0xbfd00000}, {0xbfd02000}, {0xbfd04000}, {0xbfd06000}, - {0xbfd08000}, {0xbfd0a000}, {0xbfd0c000}, {0xbfd0e000}, - {0xbfd10000}, {0xbfd12000}, {0xbfd14000}, {0xbfd16000}, - {0xbfd18000}, {0xbfd1a000}, {0xbfd1c000}, {0xbfd1e000}, - {0xbfd20000}, {0xbfd22000}, {0xbfd24000}, {0xbfd26000}, - {0xbfd28000}, {0xbfd2a000}, {0xbfd2c000}, {0xbfd2e000}, - {0xbfd30000}, {0xbfd32000}, {0xbfd34000}, {0xbfd36000}, - {0xbfd38000}, {0xbfd3a000}, {0xbfd3c000}, {0xbfd3e000}, - {0xbfd40000}, {0xbfd42000}, {0xbfd44000}, {0xbfd46000}, - {0xbfd48000}, {0xbfd4a000}, {0xbfd4c000}, {0xbfd4e000}, - {0xbfd50000}, {0xbfd52000}, {0xbfd54000}, {0xbfd56000}, - {0xbfd58000}, {0xbfd5a000}, {0xbfd5c000}, {0xbfd5e000}, - {0xbfd60000}, {0xbfd62000}, {0xbfd64000}, {0xbfd66000}, - {0xbfd68000}, {0xbfd6a000}, {0xbfd6c000}, {0xbfd6e000}, - {0xbfd70000}, {0xbfd72000}, {0xbfd74000}, {0xbfd76000}, - {0xbfd78000}, {0xbfd7a000}, {0xbfd7c000}, {0xbfd7e000}, - {0xbfd80000}, {0xbfd82000}, {0xbfd84000}, {0xbfd86000}, - {0xbfd88000}, {0xbfd8a000}, {0xbfd8c000}, {0xbfd8e000}, - {0xbfd90000}, {0xbfd92000}, {0xbfd94000}, {0xbfd96000}, - {0xbfd98000}, {0xbfd9a000}, {0xbfd9c000}, {0xbfd9e000}, - {0xbfda0000}, {0xbfda2000}, {0xbfda4000}, {0xbfda6000}, - {0xbfda8000}, {0xbfdaa000}, {0xbfdac000}, {0xbfdae000}, - {0xbfdb0000}, {0xbfdb2000}, {0xbfdb4000}, {0xbfdb6000}, - {0xbfdb8000}, {0xbfdba000}, {0xbfdbc000}, {0xbfdbe000}, - {0xbfdc0000}, {0xbfdc2000}, {0xbfdc4000}, {0xbfdc6000}, - {0xbfdc8000}, {0xbfdca000}, {0xbfdcc000}, {0xbfdce000}, - {0xbfdd0000}, {0xbfdd2000}, {0xbfdd4000}, {0xbfdd6000}, - {0xbfdd8000}, {0xbfdda000}, {0xbfddc000}, {0xbfdde000}, - {0xbfde0000}, {0xbfde2000}, {0xbfde4000}, {0xbfde6000}, - {0xbfde8000}, {0xbfdea000}, {0xbfdec000}, {0xbfdee000}, - {0xbfdf0000}, {0xbfdf2000}, {0xbfdf4000}, {0xbfdf6000}, - {0xbfdf8000}, {0xbfdfa000}, {0xbfdfc000}, {0xbfdfe000}, - {0xbfe00000}, {0xbfe02000}, {0xbfe04000}, {0xbfe06000}, - {0xbfe08000}, {0xbfe0a000}, {0xbfe0c000}, {0xbfe0e000}, - {0xbfe10000}, {0xbfe12000}, {0xbfe14000}, {0xbfe16000}, - {0xbfe18000}, {0xbfe1a000}, {0xbfe1c000}, {0xbfe1e000}, - {0xbfe20000}, {0xbfe22000}, {0xbfe24000}, {0xbfe26000}, - {0xbfe28000}, {0xbfe2a000}, {0xbfe2c000}, {0xbfe2e000}, - {0xbfe30000}, {0xbfe32000}, {0xbfe34000}, {0xbfe36000}, - {0xbfe38000}, {0xbfe3a000}, {0xbfe3c000}, {0xbfe3e000}, - {0xbfe40000}, {0xbfe42000}, {0xbfe44000}, {0xbfe46000}, - {0xbfe48000}, {0xbfe4a000}, {0xbfe4c000}, {0xbfe4e000}, - {0xbfe50000}, {0xbfe52000}, {0xbfe54000}, {0xbfe56000}, - {0xbfe58000}, {0xbfe5a000}, {0xbfe5c000}, {0xbfe5e000}, - {0xbfe60000}, {0xbfe62000}, {0xbfe64000}, {0xbfe66000}, - {0xbfe68000}, {0xbfe6a000}, {0xbfe6c000}, {0xbfe6e000}, - {0xbfe70000}, {0xbfe72000}, {0xbfe74000}, {0xbfe76000}, - {0xbfe78000}, {0xbfe7a000}, {0xbfe7c000}, {0xbfe7e000}, - {0xbfe80000}, {0xbfe82000}, {0xbfe84000}, {0xbfe86000}, - {0xbfe88000}, {0xbfe8a000}, {0xbfe8c000}, {0xbfe8e000}, - {0xbfe90000}, {0xbfe92000}, {0xbfe94000}, {0xbfe96000}, - {0xbfe98000}, {0xbfe9a000}, {0xbfe9c000}, {0xbfe9e000}, - {0xbfea0000}, {0xbfea2000}, {0xbfea4000}, {0xbfea6000}, - {0xbfea8000}, {0xbfeaa000}, {0xbfeac000}, {0xbfeae000}, - {0xbfeb0000}, {0xbfeb2000}, {0xbfeb4000}, {0xbfeb6000}, - {0xbfeb8000}, {0xbfeba000}, {0xbfebc000}, {0xbfebe000}, - {0xbfec0000}, {0xbfec2000}, {0xbfec4000}, {0xbfec6000}, - {0xbfec8000}, {0xbfeca000}, {0xbfecc000}, {0xbfece000}, - {0xbfed0000}, {0xbfed2000}, {0xbfed4000}, {0xbfed6000}, - {0xbfed8000}, {0xbfeda000}, {0xbfedc000}, {0xbfede000}, - {0xbfee0000}, {0xbfee2000}, {0xbfee4000}, {0xbfee6000}, - {0xbfee8000}, {0xbfeea000}, {0xbfeec000}, {0xbfeee000}, - {0xbfef0000}, {0xbfef2000}, {0xbfef4000}, {0xbfef6000}, - {0xbfef8000}, {0xbfefa000}, {0xbfefc000}, {0xbfefe000}, - {0xbff00000}, {0xbff02000}, {0xbff04000}, {0xbff06000}, - {0xbff08000}, {0xbff0a000}, {0xbff0c000}, {0xbff0e000}, - {0xbff10000}, {0xbff12000}, {0xbff14000}, {0xbff16000}, - {0xbff18000}, {0xbff1a000}, {0xbff1c000}, {0xbff1e000}, - {0xbff20000}, {0xbff22000}, {0xbff24000}, {0xbff26000}, - {0xbff28000}, {0xbff2a000}, {0xbff2c000}, {0xbff2e000}, - {0xbff30000}, {0xbff32000}, {0xbff34000}, {0xbff36000}, - {0xbff38000}, {0xbff3a000}, {0xbff3c000}, {0xbff3e000}, - {0xbff40000}, {0xbff42000}, {0xbff44000}, {0xbff46000}, - {0xbff48000}, {0xbff4a000}, {0xbff4c000}, {0xbff4e000}, - {0xbff50000}, {0xbff52000}, {0xbff54000}, {0xbff56000}, - {0xbff58000}, {0xbff5a000}, {0xbff5c000}, {0xbff5e000}, - {0xbff60000}, {0xbff62000}, {0xbff64000}, {0xbff66000}, - {0xbff68000}, {0xbff6a000}, {0xbff6c000}, {0xbff6e000}, - {0xbff70000}, {0xbff72000}, {0xbff74000}, {0xbff76000}, - {0xbff78000}, {0xbff7a000}, {0xbff7c000}, {0xbff7e000}, - {0xbff80000}, {0xbff82000}, {0xbff84000}, {0xbff86000}, - {0xbff88000}, {0xbff8a000}, {0xbff8c000}, {0xbff8e000}, - {0xbff90000}, {0xbff92000}, {0xbff94000}, {0xbff96000}, - {0xbff98000}, {0xbff9a000}, {0xbff9c000}, {0xbff9e000}, - {0xbffa0000}, {0xbffa2000}, {0xbffa4000}, {0xbffa6000}, - {0xbffa8000}, {0xbffaa000}, {0xbffac000}, {0xbffae000}, - {0xbffb0000}, {0xbffb2000}, {0xbffb4000}, {0xbffb6000}, - {0xbffb8000}, {0xbffba000}, {0xbffbc000}, {0xbffbe000}, - {0xbffc0000}, {0xbffc2000}, {0xbffc4000}, {0xbffc6000}, - {0xbffc8000}, {0xbffca000}, {0xbffcc000}, {0xbffce000}, - {0xbffd0000}, {0xbffd2000}, {0xbffd4000}, {0xbffd6000}, - {0xbffd8000}, {0xbffda000}, {0xbffdc000}, {0xbffde000}, - {0xbffe0000}, {0xbffe2000}, {0xbffe4000}, {0xbffe6000}, - {0xbffe8000}, {0xbffea000}, {0xbffec000}, {0xbffee000}, - {0xbfff0000}, {0xbfff2000}, {0xbfff4000}, {0xbfff6000}, - {0xbfff8000}, {0xbfffa000}, {0xbfffc000}, {0xbfffe000}, - {0xc0000000}, {0xc0002000}, {0xc0004000}, {0xc0006000}, - {0xc0008000}, {0xc000a000}, {0xc000c000}, {0xc000e000}, - {0xc0010000}, {0xc0012000}, {0xc0014000}, {0xc0016000}, - {0xc0018000}, {0xc001a000}, {0xc001c000}, {0xc001e000}, - {0xc0020000}, {0xc0022000}, {0xc0024000}, {0xc0026000}, - {0xc0028000}, {0xc002a000}, {0xc002c000}, {0xc002e000}, - {0xc0030000}, {0xc0032000}, {0xc0034000}, {0xc0036000}, - {0xc0038000}, {0xc003a000}, {0xc003c000}, {0xc003e000}, - {0xc0040000}, {0xc0042000}, {0xc0044000}, {0xc0046000}, - {0xc0048000}, {0xc004a000}, {0xc004c000}, {0xc004e000}, - {0xc0050000}, {0xc0052000}, {0xc0054000}, {0xc0056000}, - {0xc0058000}, {0xc005a000}, {0xc005c000}, {0xc005e000}, - {0xc0060000}, {0xc0062000}, {0xc0064000}, {0xc0066000}, - {0xc0068000}, {0xc006a000}, {0xc006c000}, {0xc006e000}, - {0xc0070000}, {0xc0072000}, {0xc0074000}, {0xc0076000}, - {0xc0078000}, {0xc007a000}, {0xc007c000}, {0xc007e000}, - {0xc0080000}, {0xc0082000}, {0xc0084000}, {0xc0086000}, - {0xc0088000}, {0xc008a000}, {0xc008c000}, {0xc008e000}, - {0xc0090000}, {0xc0092000}, {0xc0094000}, {0xc0096000}, - {0xc0098000}, {0xc009a000}, {0xc009c000}, {0xc009e000}, - {0xc00a0000}, {0xc00a2000}, {0xc00a4000}, {0xc00a6000}, - {0xc00a8000}, {0xc00aa000}, {0xc00ac000}, {0xc00ae000}, - {0xc00b0000}, {0xc00b2000}, {0xc00b4000}, {0xc00b6000}, - {0xc00b8000}, {0xc00ba000}, {0xc00bc000}, {0xc00be000}, - {0xc00c0000}, {0xc00c2000}, {0xc00c4000}, {0xc00c6000}, - {0xc00c8000}, {0xc00ca000}, {0xc00cc000}, {0xc00ce000}, - {0xc00d0000}, {0xc00d2000}, {0xc00d4000}, {0xc00d6000}, - {0xc00d8000}, {0xc00da000}, {0xc00dc000}, {0xc00de000}, - {0xc00e0000}, {0xc00e2000}, {0xc00e4000}, {0xc00e6000}, - {0xc00e8000}, {0xc00ea000}, {0xc00ec000}, {0xc00ee000}, - {0xc00f0000}, {0xc00f2000}, {0xc00f4000}, {0xc00f6000}, - {0xc00f8000}, {0xc00fa000}, {0xc00fc000}, {0xc00fe000}, - {0xc0100000}, {0xc0102000}, {0xc0104000}, {0xc0106000}, - {0xc0108000}, {0xc010a000}, {0xc010c000}, {0xc010e000}, - {0xc0110000}, {0xc0112000}, {0xc0114000}, {0xc0116000}, - {0xc0118000}, {0xc011a000}, {0xc011c000}, {0xc011e000}, - {0xc0120000}, {0xc0122000}, {0xc0124000}, {0xc0126000}, - {0xc0128000}, {0xc012a000}, {0xc012c000}, {0xc012e000}, - {0xc0130000}, {0xc0132000}, {0xc0134000}, {0xc0136000}, - {0xc0138000}, {0xc013a000}, {0xc013c000}, {0xc013e000}, - {0xc0140000}, {0xc0142000}, {0xc0144000}, {0xc0146000}, - {0xc0148000}, {0xc014a000}, {0xc014c000}, {0xc014e000}, - {0xc0150000}, {0xc0152000}, {0xc0154000}, {0xc0156000}, - {0xc0158000}, {0xc015a000}, {0xc015c000}, {0xc015e000}, - {0xc0160000}, {0xc0162000}, {0xc0164000}, {0xc0166000}, - {0xc0168000}, {0xc016a000}, {0xc016c000}, {0xc016e000}, - {0xc0170000}, {0xc0172000}, {0xc0174000}, {0xc0176000}, - {0xc0178000}, {0xc017a000}, {0xc017c000}, {0xc017e000}, - {0xc0180000}, {0xc0182000}, {0xc0184000}, {0xc0186000}, - {0xc0188000}, {0xc018a000}, {0xc018c000}, {0xc018e000}, - {0xc0190000}, {0xc0192000}, {0xc0194000}, {0xc0196000}, - {0xc0198000}, {0xc019a000}, {0xc019c000}, {0xc019e000}, - {0xc01a0000}, {0xc01a2000}, {0xc01a4000}, {0xc01a6000}, - {0xc01a8000}, {0xc01aa000}, {0xc01ac000}, {0xc01ae000}, - {0xc01b0000}, {0xc01b2000}, {0xc01b4000}, {0xc01b6000}, - {0xc01b8000}, {0xc01ba000}, {0xc01bc000}, {0xc01be000}, - {0xc01c0000}, {0xc01c2000}, {0xc01c4000}, {0xc01c6000}, - {0xc01c8000}, {0xc01ca000}, {0xc01cc000}, {0xc01ce000}, - {0xc01d0000}, {0xc01d2000}, {0xc01d4000}, {0xc01d6000}, - {0xc01d8000}, {0xc01da000}, {0xc01dc000}, {0xc01de000}, - {0xc01e0000}, {0xc01e2000}, {0xc01e4000}, {0xc01e6000}, - {0xc01e8000}, {0xc01ea000}, {0xc01ec000}, {0xc01ee000}, - {0xc01f0000}, {0xc01f2000}, {0xc01f4000}, {0xc01f6000}, - {0xc01f8000}, {0xc01fa000}, {0xc01fc000}, {0xc01fe000}, - {0xc0200000}, {0xc0202000}, {0xc0204000}, {0xc0206000}, - {0xc0208000}, {0xc020a000}, {0xc020c000}, {0xc020e000}, - {0xc0210000}, {0xc0212000}, {0xc0214000}, {0xc0216000}, - {0xc0218000}, {0xc021a000}, {0xc021c000}, {0xc021e000}, - {0xc0220000}, {0xc0222000}, {0xc0224000}, {0xc0226000}, - {0xc0228000}, {0xc022a000}, {0xc022c000}, {0xc022e000}, - {0xc0230000}, {0xc0232000}, {0xc0234000}, {0xc0236000}, - {0xc0238000}, {0xc023a000}, {0xc023c000}, {0xc023e000}, - {0xc0240000}, {0xc0242000}, {0xc0244000}, {0xc0246000}, - {0xc0248000}, {0xc024a000}, {0xc024c000}, {0xc024e000}, - {0xc0250000}, {0xc0252000}, {0xc0254000}, {0xc0256000}, - {0xc0258000}, {0xc025a000}, {0xc025c000}, {0xc025e000}, - {0xc0260000}, {0xc0262000}, {0xc0264000}, {0xc0266000}, - {0xc0268000}, {0xc026a000}, {0xc026c000}, {0xc026e000}, - {0xc0270000}, {0xc0272000}, {0xc0274000}, {0xc0276000}, - {0xc0278000}, {0xc027a000}, {0xc027c000}, {0xc027e000}, - {0xc0280000}, {0xc0282000}, {0xc0284000}, {0xc0286000}, - {0xc0288000}, {0xc028a000}, {0xc028c000}, {0xc028e000}, - {0xc0290000}, {0xc0292000}, {0xc0294000}, {0xc0296000}, - {0xc0298000}, {0xc029a000}, {0xc029c000}, {0xc029e000}, - {0xc02a0000}, {0xc02a2000}, {0xc02a4000}, {0xc02a6000}, - {0xc02a8000}, {0xc02aa000}, {0xc02ac000}, {0xc02ae000}, - {0xc02b0000}, {0xc02b2000}, {0xc02b4000}, {0xc02b6000}, - {0xc02b8000}, {0xc02ba000}, {0xc02bc000}, {0xc02be000}, - {0xc02c0000}, {0xc02c2000}, {0xc02c4000}, {0xc02c6000}, - {0xc02c8000}, {0xc02ca000}, {0xc02cc000}, {0xc02ce000}, - {0xc02d0000}, {0xc02d2000}, {0xc02d4000}, {0xc02d6000}, - {0xc02d8000}, {0xc02da000}, {0xc02dc000}, {0xc02de000}, - {0xc02e0000}, {0xc02e2000}, {0xc02e4000}, {0xc02e6000}, - {0xc02e8000}, {0xc02ea000}, {0xc02ec000}, {0xc02ee000}, - {0xc02f0000}, {0xc02f2000}, {0xc02f4000}, {0xc02f6000}, - {0xc02f8000}, {0xc02fa000}, {0xc02fc000}, {0xc02fe000}, - {0xc0300000}, {0xc0302000}, {0xc0304000}, {0xc0306000}, - {0xc0308000}, {0xc030a000}, {0xc030c000}, {0xc030e000}, - {0xc0310000}, {0xc0312000}, {0xc0314000}, {0xc0316000}, - {0xc0318000}, {0xc031a000}, {0xc031c000}, {0xc031e000}, - {0xc0320000}, {0xc0322000}, {0xc0324000}, {0xc0326000}, - {0xc0328000}, {0xc032a000}, {0xc032c000}, {0xc032e000}, - {0xc0330000}, {0xc0332000}, {0xc0334000}, {0xc0336000}, - {0xc0338000}, {0xc033a000}, {0xc033c000}, {0xc033e000}, - {0xc0340000}, {0xc0342000}, {0xc0344000}, {0xc0346000}, - {0xc0348000}, {0xc034a000}, {0xc034c000}, {0xc034e000}, - {0xc0350000}, {0xc0352000}, {0xc0354000}, {0xc0356000}, - {0xc0358000}, {0xc035a000}, {0xc035c000}, {0xc035e000}, - {0xc0360000}, {0xc0362000}, {0xc0364000}, {0xc0366000}, - {0xc0368000}, {0xc036a000}, {0xc036c000}, {0xc036e000}, - {0xc0370000}, {0xc0372000}, {0xc0374000}, {0xc0376000}, - {0xc0378000}, {0xc037a000}, {0xc037c000}, {0xc037e000}, - {0xc0380000}, {0xc0382000}, {0xc0384000}, {0xc0386000}, - {0xc0388000}, {0xc038a000}, {0xc038c000}, {0xc038e000}, - {0xc0390000}, {0xc0392000}, {0xc0394000}, {0xc0396000}, - {0xc0398000}, {0xc039a000}, {0xc039c000}, {0xc039e000}, - {0xc03a0000}, {0xc03a2000}, {0xc03a4000}, {0xc03a6000}, - {0xc03a8000}, {0xc03aa000}, {0xc03ac000}, {0xc03ae000}, - {0xc03b0000}, {0xc03b2000}, {0xc03b4000}, {0xc03b6000}, - {0xc03b8000}, {0xc03ba000}, {0xc03bc000}, {0xc03be000}, - {0xc03c0000}, {0xc03c2000}, {0xc03c4000}, {0xc03c6000}, - {0xc03c8000}, {0xc03ca000}, {0xc03cc000}, {0xc03ce000}, - {0xc03d0000}, {0xc03d2000}, {0xc03d4000}, {0xc03d6000}, - {0xc03d8000}, {0xc03da000}, {0xc03dc000}, {0xc03de000}, - {0xc03e0000}, {0xc03e2000}, {0xc03e4000}, {0xc03e6000}, - {0xc03e8000}, {0xc03ea000}, {0xc03ec000}, {0xc03ee000}, - {0xc03f0000}, {0xc03f2000}, {0xc03f4000}, {0xc03f6000}, - {0xc03f8000}, {0xc03fa000}, {0xc03fc000}, {0xc03fe000}, - {0xc0400000}, {0xc0402000}, {0xc0404000}, {0xc0406000}, - {0xc0408000}, {0xc040a000}, {0xc040c000}, {0xc040e000}, - {0xc0410000}, {0xc0412000}, {0xc0414000}, {0xc0416000}, - {0xc0418000}, {0xc041a000}, {0xc041c000}, {0xc041e000}, - {0xc0420000}, {0xc0422000}, {0xc0424000}, {0xc0426000}, - {0xc0428000}, {0xc042a000}, {0xc042c000}, {0xc042e000}, - {0xc0430000}, {0xc0432000}, {0xc0434000}, {0xc0436000}, - {0xc0438000}, {0xc043a000}, {0xc043c000}, {0xc043e000}, - {0xc0440000}, {0xc0442000}, {0xc0444000}, {0xc0446000}, - {0xc0448000}, {0xc044a000}, {0xc044c000}, {0xc044e000}, - {0xc0450000}, {0xc0452000}, {0xc0454000}, {0xc0456000}, - {0xc0458000}, {0xc045a000}, {0xc045c000}, {0xc045e000}, - {0xc0460000}, {0xc0462000}, {0xc0464000}, {0xc0466000}, - {0xc0468000}, {0xc046a000}, {0xc046c000}, {0xc046e000}, - {0xc0470000}, {0xc0472000}, {0xc0474000}, {0xc0476000}, - {0xc0478000}, {0xc047a000}, {0xc047c000}, {0xc047e000}, - {0xc0480000}, {0xc0482000}, {0xc0484000}, {0xc0486000}, - {0xc0488000}, {0xc048a000}, {0xc048c000}, {0xc048e000}, - {0xc0490000}, {0xc0492000}, {0xc0494000}, {0xc0496000}, - {0xc0498000}, {0xc049a000}, {0xc049c000}, {0xc049e000}, - {0xc04a0000}, {0xc04a2000}, {0xc04a4000}, {0xc04a6000}, - {0xc04a8000}, {0xc04aa000}, {0xc04ac000}, {0xc04ae000}, - {0xc04b0000}, {0xc04b2000}, {0xc04b4000}, {0xc04b6000}, - {0xc04b8000}, {0xc04ba000}, {0xc04bc000}, {0xc04be000}, - {0xc04c0000}, {0xc04c2000}, {0xc04c4000}, {0xc04c6000}, - {0xc04c8000}, {0xc04ca000}, {0xc04cc000}, {0xc04ce000}, - {0xc04d0000}, {0xc04d2000}, {0xc04d4000}, {0xc04d6000}, - {0xc04d8000}, {0xc04da000}, {0xc04dc000}, {0xc04de000}, - {0xc04e0000}, {0xc04e2000}, {0xc04e4000}, {0xc04e6000}, - {0xc04e8000}, {0xc04ea000}, {0xc04ec000}, {0xc04ee000}, - {0xc04f0000}, {0xc04f2000}, {0xc04f4000}, {0xc04f6000}, - {0xc04f8000}, {0xc04fa000}, {0xc04fc000}, {0xc04fe000}, - {0xc0500000}, {0xc0502000}, {0xc0504000}, {0xc0506000}, - {0xc0508000}, {0xc050a000}, {0xc050c000}, {0xc050e000}, - {0xc0510000}, {0xc0512000}, {0xc0514000}, {0xc0516000}, - {0xc0518000}, {0xc051a000}, {0xc051c000}, {0xc051e000}, - {0xc0520000}, {0xc0522000}, {0xc0524000}, {0xc0526000}, - {0xc0528000}, {0xc052a000}, {0xc052c000}, {0xc052e000}, - {0xc0530000}, {0xc0532000}, {0xc0534000}, {0xc0536000}, - {0xc0538000}, {0xc053a000}, {0xc053c000}, {0xc053e000}, - {0xc0540000}, {0xc0542000}, {0xc0544000}, {0xc0546000}, - {0xc0548000}, {0xc054a000}, {0xc054c000}, {0xc054e000}, - {0xc0550000}, {0xc0552000}, {0xc0554000}, {0xc0556000}, - {0xc0558000}, {0xc055a000}, {0xc055c000}, {0xc055e000}, - {0xc0560000}, {0xc0562000}, {0xc0564000}, {0xc0566000}, - {0xc0568000}, {0xc056a000}, {0xc056c000}, {0xc056e000}, - {0xc0570000}, {0xc0572000}, {0xc0574000}, {0xc0576000}, - {0xc0578000}, {0xc057a000}, {0xc057c000}, {0xc057e000}, - {0xc0580000}, {0xc0582000}, {0xc0584000}, {0xc0586000}, - {0xc0588000}, {0xc058a000}, {0xc058c000}, {0xc058e000}, - {0xc0590000}, {0xc0592000}, {0xc0594000}, {0xc0596000}, - {0xc0598000}, {0xc059a000}, {0xc059c000}, {0xc059e000}, - {0xc05a0000}, {0xc05a2000}, {0xc05a4000}, {0xc05a6000}, - {0xc05a8000}, {0xc05aa000}, {0xc05ac000}, {0xc05ae000}, - {0xc05b0000}, {0xc05b2000}, {0xc05b4000}, {0xc05b6000}, - {0xc05b8000}, {0xc05ba000}, {0xc05bc000}, {0xc05be000}, - {0xc05c0000}, {0xc05c2000}, {0xc05c4000}, {0xc05c6000}, - {0xc05c8000}, {0xc05ca000}, {0xc05cc000}, {0xc05ce000}, - {0xc05d0000}, {0xc05d2000}, {0xc05d4000}, {0xc05d6000}, - {0xc05d8000}, {0xc05da000}, {0xc05dc000}, {0xc05de000}, - {0xc05e0000}, {0xc05e2000}, {0xc05e4000}, {0xc05e6000}, - {0xc05e8000}, {0xc05ea000}, {0xc05ec000}, {0xc05ee000}, - {0xc05f0000}, {0xc05f2000}, {0xc05f4000}, {0xc05f6000}, - {0xc05f8000}, {0xc05fa000}, {0xc05fc000}, {0xc05fe000}, - {0xc0600000}, {0xc0602000}, {0xc0604000}, {0xc0606000}, - {0xc0608000}, {0xc060a000}, {0xc060c000}, {0xc060e000}, - {0xc0610000}, {0xc0612000}, {0xc0614000}, {0xc0616000}, - {0xc0618000}, {0xc061a000}, {0xc061c000}, {0xc061e000}, - {0xc0620000}, {0xc0622000}, {0xc0624000}, {0xc0626000}, - {0xc0628000}, {0xc062a000}, {0xc062c000}, {0xc062e000}, - {0xc0630000}, {0xc0632000}, {0xc0634000}, {0xc0636000}, - {0xc0638000}, {0xc063a000}, {0xc063c000}, {0xc063e000}, - {0xc0640000}, {0xc0642000}, {0xc0644000}, {0xc0646000}, - {0xc0648000}, {0xc064a000}, {0xc064c000}, {0xc064e000}, - {0xc0650000}, {0xc0652000}, {0xc0654000}, {0xc0656000}, - {0xc0658000}, {0xc065a000}, {0xc065c000}, {0xc065e000}, - {0xc0660000}, {0xc0662000}, {0xc0664000}, {0xc0666000}, - {0xc0668000}, {0xc066a000}, {0xc066c000}, {0xc066e000}, - {0xc0670000}, {0xc0672000}, {0xc0674000}, {0xc0676000}, - {0xc0678000}, {0xc067a000}, {0xc067c000}, {0xc067e000}, - {0xc0680000}, {0xc0682000}, {0xc0684000}, {0xc0686000}, - {0xc0688000}, {0xc068a000}, {0xc068c000}, {0xc068e000}, - {0xc0690000}, {0xc0692000}, {0xc0694000}, {0xc0696000}, - {0xc0698000}, {0xc069a000}, {0xc069c000}, {0xc069e000}, - {0xc06a0000}, {0xc06a2000}, {0xc06a4000}, {0xc06a6000}, - {0xc06a8000}, {0xc06aa000}, {0xc06ac000}, {0xc06ae000}, - {0xc06b0000}, {0xc06b2000}, {0xc06b4000}, {0xc06b6000}, - {0xc06b8000}, {0xc06ba000}, {0xc06bc000}, {0xc06be000}, - {0xc06c0000}, {0xc06c2000}, {0xc06c4000}, {0xc06c6000}, - {0xc06c8000}, {0xc06ca000}, {0xc06cc000}, {0xc06ce000}, - {0xc06d0000}, {0xc06d2000}, {0xc06d4000}, {0xc06d6000}, - {0xc06d8000}, {0xc06da000}, {0xc06dc000}, {0xc06de000}, - {0xc06e0000}, {0xc06e2000}, {0xc06e4000}, {0xc06e6000}, - {0xc06e8000}, {0xc06ea000}, {0xc06ec000}, {0xc06ee000}, - {0xc06f0000}, {0xc06f2000}, {0xc06f4000}, {0xc06f6000}, - {0xc06f8000}, {0xc06fa000}, {0xc06fc000}, {0xc06fe000}, - {0xc0700000}, {0xc0702000}, {0xc0704000}, {0xc0706000}, - {0xc0708000}, {0xc070a000}, {0xc070c000}, {0xc070e000}, - {0xc0710000}, {0xc0712000}, {0xc0714000}, {0xc0716000}, - {0xc0718000}, {0xc071a000}, {0xc071c000}, {0xc071e000}, - {0xc0720000}, {0xc0722000}, {0xc0724000}, {0xc0726000}, - {0xc0728000}, {0xc072a000}, {0xc072c000}, {0xc072e000}, - {0xc0730000}, {0xc0732000}, {0xc0734000}, {0xc0736000}, - {0xc0738000}, {0xc073a000}, {0xc073c000}, {0xc073e000}, - {0xc0740000}, {0xc0742000}, {0xc0744000}, {0xc0746000}, - {0xc0748000}, {0xc074a000}, {0xc074c000}, {0xc074e000}, - {0xc0750000}, {0xc0752000}, {0xc0754000}, {0xc0756000}, - {0xc0758000}, {0xc075a000}, {0xc075c000}, {0xc075e000}, - {0xc0760000}, {0xc0762000}, {0xc0764000}, {0xc0766000}, - {0xc0768000}, {0xc076a000}, {0xc076c000}, {0xc076e000}, - {0xc0770000}, {0xc0772000}, {0xc0774000}, {0xc0776000}, - {0xc0778000}, {0xc077a000}, {0xc077c000}, {0xc077e000}, - {0xc0780000}, {0xc0782000}, {0xc0784000}, {0xc0786000}, - {0xc0788000}, {0xc078a000}, {0xc078c000}, {0xc078e000}, - {0xc0790000}, {0xc0792000}, {0xc0794000}, {0xc0796000}, - {0xc0798000}, {0xc079a000}, {0xc079c000}, {0xc079e000}, - {0xc07a0000}, {0xc07a2000}, {0xc07a4000}, {0xc07a6000}, - {0xc07a8000}, {0xc07aa000}, {0xc07ac000}, {0xc07ae000}, - {0xc07b0000}, {0xc07b2000}, {0xc07b4000}, {0xc07b6000}, - {0xc07b8000}, {0xc07ba000}, {0xc07bc000}, {0xc07be000}, - {0xc07c0000}, {0xc07c2000}, {0xc07c4000}, {0xc07c6000}, - {0xc07c8000}, {0xc07ca000}, {0xc07cc000}, {0xc07ce000}, - {0xc07d0000}, {0xc07d2000}, {0xc07d4000}, {0xc07d6000}, - {0xc07d8000}, {0xc07da000}, {0xc07dc000}, {0xc07de000}, - {0xc07e0000}, {0xc07e2000}, {0xc07e4000}, {0xc07e6000}, - {0xc07e8000}, {0xc07ea000}, {0xc07ec000}, {0xc07ee000}, - {0xc07f0000}, {0xc07f2000}, {0xc07f4000}, {0xc07f6000}, - {0xc07f8000}, {0xc07fa000}, {0xc07fc000}, {0xc07fe000}, - {0xc0800000}, {0xc0802000}, {0xc0804000}, {0xc0806000}, - {0xc0808000}, {0xc080a000}, {0xc080c000}, {0xc080e000}, - {0xc0810000}, {0xc0812000}, {0xc0814000}, {0xc0816000}, - {0xc0818000}, {0xc081a000}, {0xc081c000}, {0xc081e000}, - {0xc0820000}, {0xc0822000}, {0xc0824000}, {0xc0826000}, - {0xc0828000}, {0xc082a000}, {0xc082c000}, {0xc082e000}, - {0xc0830000}, {0xc0832000}, {0xc0834000}, {0xc0836000}, - {0xc0838000}, {0xc083a000}, {0xc083c000}, {0xc083e000}, - {0xc0840000}, {0xc0842000}, {0xc0844000}, {0xc0846000}, - {0xc0848000}, {0xc084a000}, {0xc084c000}, {0xc084e000}, - {0xc0850000}, {0xc0852000}, {0xc0854000}, {0xc0856000}, - {0xc0858000}, {0xc085a000}, {0xc085c000}, {0xc085e000}, - {0xc0860000}, {0xc0862000}, {0xc0864000}, {0xc0866000}, - {0xc0868000}, {0xc086a000}, {0xc086c000}, {0xc086e000}, - {0xc0870000}, {0xc0872000}, {0xc0874000}, {0xc0876000}, - {0xc0878000}, {0xc087a000}, {0xc087c000}, {0xc087e000}, - {0xc0880000}, {0xc0882000}, {0xc0884000}, {0xc0886000}, - {0xc0888000}, {0xc088a000}, {0xc088c000}, {0xc088e000}, - {0xc0890000}, {0xc0892000}, {0xc0894000}, {0xc0896000}, - {0xc0898000}, {0xc089a000}, {0xc089c000}, {0xc089e000}, - {0xc08a0000}, {0xc08a2000}, {0xc08a4000}, {0xc08a6000}, - {0xc08a8000}, {0xc08aa000}, {0xc08ac000}, {0xc08ae000}, - {0xc08b0000}, {0xc08b2000}, {0xc08b4000}, {0xc08b6000}, - {0xc08b8000}, {0xc08ba000}, {0xc08bc000}, {0xc08be000}, - {0xc08c0000}, {0xc08c2000}, {0xc08c4000}, {0xc08c6000}, - {0xc08c8000}, {0xc08ca000}, {0xc08cc000}, {0xc08ce000}, - {0xc08d0000}, {0xc08d2000}, {0xc08d4000}, {0xc08d6000}, - {0xc08d8000}, {0xc08da000}, {0xc08dc000}, {0xc08de000}, - {0xc08e0000}, {0xc08e2000}, {0xc08e4000}, {0xc08e6000}, - {0xc08e8000}, {0xc08ea000}, {0xc08ec000}, {0xc08ee000}, - {0xc08f0000}, {0xc08f2000}, {0xc08f4000}, {0xc08f6000}, - {0xc08f8000}, {0xc08fa000}, {0xc08fc000}, {0xc08fe000}, - {0xc0900000}, {0xc0902000}, {0xc0904000}, {0xc0906000}, - {0xc0908000}, {0xc090a000}, {0xc090c000}, {0xc090e000}, - {0xc0910000}, {0xc0912000}, {0xc0914000}, {0xc0916000}, - {0xc0918000}, {0xc091a000}, {0xc091c000}, {0xc091e000}, - {0xc0920000}, {0xc0922000}, {0xc0924000}, {0xc0926000}, - {0xc0928000}, {0xc092a000}, {0xc092c000}, {0xc092e000}, - {0xc0930000}, {0xc0932000}, {0xc0934000}, {0xc0936000}, - {0xc0938000}, {0xc093a000}, {0xc093c000}, {0xc093e000}, - {0xc0940000}, {0xc0942000}, {0xc0944000}, {0xc0946000}, - {0xc0948000}, {0xc094a000}, {0xc094c000}, {0xc094e000}, - {0xc0950000}, {0xc0952000}, {0xc0954000}, {0xc0956000}, - {0xc0958000}, {0xc095a000}, {0xc095c000}, {0xc095e000}, - {0xc0960000}, {0xc0962000}, {0xc0964000}, {0xc0966000}, - {0xc0968000}, {0xc096a000}, {0xc096c000}, {0xc096e000}, - {0xc0970000}, {0xc0972000}, {0xc0974000}, {0xc0976000}, - {0xc0978000}, {0xc097a000}, {0xc097c000}, {0xc097e000}, - {0xc0980000}, {0xc0982000}, {0xc0984000}, {0xc0986000}, - {0xc0988000}, {0xc098a000}, {0xc098c000}, {0xc098e000}, - {0xc0990000}, {0xc0992000}, {0xc0994000}, {0xc0996000}, - {0xc0998000}, {0xc099a000}, {0xc099c000}, {0xc099e000}, - {0xc09a0000}, {0xc09a2000}, {0xc09a4000}, {0xc09a6000}, - {0xc09a8000}, {0xc09aa000}, {0xc09ac000}, {0xc09ae000}, - {0xc09b0000}, {0xc09b2000}, {0xc09b4000}, {0xc09b6000}, - {0xc09b8000}, {0xc09ba000}, {0xc09bc000}, {0xc09be000}, - {0xc09c0000}, {0xc09c2000}, {0xc09c4000}, {0xc09c6000}, - {0xc09c8000}, {0xc09ca000}, {0xc09cc000}, {0xc09ce000}, - {0xc09d0000}, {0xc09d2000}, {0xc09d4000}, {0xc09d6000}, - {0xc09d8000}, {0xc09da000}, {0xc09dc000}, {0xc09de000}, - {0xc09e0000}, {0xc09e2000}, {0xc09e4000}, {0xc09e6000}, - {0xc09e8000}, {0xc09ea000}, {0xc09ec000}, {0xc09ee000}, - {0xc09f0000}, {0xc09f2000}, {0xc09f4000}, {0xc09f6000}, - {0xc09f8000}, {0xc09fa000}, {0xc09fc000}, {0xc09fe000}, - {0xc0a00000}, {0xc0a02000}, {0xc0a04000}, {0xc0a06000}, - {0xc0a08000}, {0xc0a0a000}, {0xc0a0c000}, {0xc0a0e000}, - {0xc0a10000}, {0xc0a12000}, {0xc0a14000}, {0xc0a16000}, - {0xc0a18000}, {0xc0a1a000}, {0xc0a1c000}, {0xc0a1e000}, - {0xc0a20000}, {0xc0a22000}, {0xc0a24000}, {0xc0a26000}, - {0xc0a28000}, {0xc0a2a000}, {0xc0a2c000}, {0xc0a2e000}, - {0xc0a30000}, {0xc0a32000}, {0xc0a34000}, {0xc0a36000}, - {0xc0a38000}, {0xc0a3a000}, {0xc0a3c000}, {0xc0a3e000}, - {0xc0a40000}, {0xc0a42000}, {0xc0a44000}, {0xc0a46000}, - {0xc0a48000}, {0xc0a4a000}, {0xc0a4c000}, {0xc0a4e000}, - {0xc0a50000}, {0xc0a52000}, {0xc0a54000}, {0xc0a56000}, - {0xc0a58000}, {0xc0a5a000}, {0xc0a5c000}, {0xc0a5e000}, - {0xc0a60000}, {0xc0a62000}, {0xc0a64000}, {0xc0a66000}, - {0xc0a68000}, {0xc0a6a000}, {0xc0a6c000}, {0xc0a6e000}, - {0xc0a70000}, {0xc0a72000}, {0xc0a74000}, {0xc0a76000}, - {0xc0a78000}, {0xc0a7a000}, {0xc0a7c000}, {0xc0a7e000}, - {0xc0a80000}, {0xc0a82000}, {0xc0a84000}, {0xc0a86000}, - {0xc0a88000}, {0xc0a8a000}, {0xc0a8c000}, {0xc0a8e000}, - {0xc0a90000}, {0xc0a92000}, {0xc0a94000}, {0xc0a96000}, - {0xc0a98000}, {0xc0a9a000}, {0xc0a9c000}, {0xc0a9e000}, - {0xc0aa0000}, {0xc0aa2000}, {0xc0aa4000}, {0xc0aa6000}, - {0xc0aa8000}, {0xc0aaa000}, {0xc0aac000}, {0xc0aae000}, - {0xc0ab0000}, {0xc0ab2000}, {0xc0ab4000}, {0xc0ab6000}, - {0xc0ab8000}, {0xc0aba000}, {0xc0abc000}, {0xc0abe000}, - {0xc0ac0000}, {0xc0ac2000}, {0xc0ac4000}, {0xc0ac6000}, - {0xc0ac8000}, {0xc0aca000}, {0xc0acc000}, {0xc0ace000}, - {0xc0ad0000}, {0xc0ad2000}, {0xc0ad4000}, {0xc0ad6000}, - {0xc0ad8000}, {0xc0ada000}, {0xc0adc000}, {0xc0ade000}, - {0xc0ae0000}, {0xc0ae2000}, {0xc0ae4000}, {0xc0ae6000}, - {0xc0ae8000}, {0xc0aea000}, {0xc0aec000}, {0xc0aee000}, - {0xc0af0000}, {0xc0af2000}, {0xc0af4000}, {0xc0af6000}, - {0xc0af8000}, {0xc0afa000}, {0xc0afc000}, {0xc0afe000}, - {0xc0b00000}, {0xc0b02000}, {0xc0b04000}, {0xc0b06000}, - {0xc0b08000}, {0xc0b0a000}, {0xc0b0c000}, {0xc0b0e000}, - {0xc0b10000}, {0xc0b12000}, {0xc0b14000}, {0xc0b16000}, - {0xc0b18000}, {0xc0b1a000}, {0xc0b1c000}, {0xc0b1e000}, - {0xc0b20000}, {0xc0b22000}, {0xc0b24000}, {0xc0b26000}, - {0xc0b28000}, {0xc0b2a000}, {0xc0b2c000}, {0xc0b2e000}, - {0xc0b30000}, {0xc0b32000}, {0xc0b34000}, {0xc0b36000}, - {0xc0b38000}, {0xc0b3a000}, {0xc0b3c000}, {0xc0b3e000}, - {0xc0b40000}, {0xc0b42000}, {0xc0b44000}, {0xc0b46000}, - {0xc0b48000}, {0xc0b4a000}, {0xc0b4c000}, {0xc0b4e000}, - {0xc0b50000}, {0xc0b52000}, {0xc0b54000}, {0xc0b56000}, - {0xc0b58000}, {0xc0b5a000}, {0xc0b5c000}, {0xc0b5e000}, - {0xc0b60000}, {0xc0b62000}, {0xc0b64000}, {0xc0b66000}, - {0xc0b68000}, {0xc0b6a000}, {0xc0b6c000}, {0xc0b6e000}, - {0xc0b70000}, {0xc0b72000}, {0xc0b74000}, {0xc0b76000}, - {0xc0b78000}, {0xc0b7a000}, {0xc0b7c000}, {0xc0b7e000}, - {0xc0b80000}, {0xc0b82000}, {0xc0b84000}, {0xc0b86000}, - {0xc0b88000}, {0xc0b8a000}, {0xc0b8c000}, {0xc0b8e000}, - {0xc0b90000}, {0xc0b92000}, {0xc0b94000}, {0xc0b96000}, - {0xc0b98000}, {0xc0b9a000}, {0xc0b9c000}, {0xc0b9e000}, - {0xc0ba0000}, {0xc0ba2000}, {0xc0ba4000}, {0xc0ba6000}, - {0xc0ba8000}, {0xc0baa000}, {0xc0bac000}, {0xc0bae000}, - {0xc0bb0000}, {0xc0bb2000}, {0xc0bb4000}, {0xc0bb6000}, - {0xc0bb8000}, {0xc0bba000}, {0xc0bbc000}, {0xc0bbe000}, - {0xc0bc0000}, {0xc0bc2000}, {0xc0bc4000}, {0xc0bc6000}, - {0xc0bc8000}, {0xc0bca000}, {0xc0bcc000}, {0xc0bce000}, - {0xc0bd0000}, {0xc0bd2000}, {0xc0bd4000}, {0xc0bd6000}, - {0xc0bd8000}, {0xc0bda000}, {0xc0bdc000}, {0xc0bde000}, - {0xc0be0000}, {0xc0be2000}, {0xc0be4000}, {0xc0be6000}, - {0xc0be8000}, {0xc0bea000}, {0xc0bec000}, {0xc0bee000}, - {0xc0bf0000}, {0xc0bf2000}, {0xc0bf4000}, {0xc0bf6000}, - {0xc0bf8000}, {0xc0bfa000}, {0xc0bfc000}, {0xc0bfe000}, - {0xc0c00000}, {0xc0c02000}, {0xc0c04000}, {0xc0c06000}, - {0xc0c08000}, {0xc0c0a000}, {0xc0c0c000}, {0xc0c0e000}, - {0xc0c10000}, {0xc0c12000}, {0xc0c14000}, {0xc0c16000}, - {0xc0c18000}, {0xc0c1a000}, {0xc0c1c000}, {0xc0c1e000}, - {0xc0c20000}, {0xc0c22000}, {0xc0c24000}, {0xc0c26000}, - {0xc0c28000}, {0xc0c2a000}, {0xc0c2c000}, {0xc0c2e000}, - {0xc0c30000}, {0xc0c32000}, {0xc0c34000}, {0xc0c36000}, - {0xc0c38000}, {0xc0c3a000}, {0xc0c3c000}, {0xc0c3e000}, - {0xc0c40000}, {0xc0c42000}, {0xc0c44000}, {0xc0c46000}, - {0xc0c48000}, {0xc0c4a000}, {0xc0c4c000}, {0xc0c4e000}, - {0xc0c50000}, {0xc0c52000}, {0xc0c54000}, {0xc0c56000}, - {0xc0c58000}, {0xc0c5a000}, {0xc0c5c000}, {0xc0c5e000}, - {0xc0c60000}, {0xc0c62000}, {0xc0c64000}, {0xc0c66000}, - {0xc0c68000}, {0xc0c6a000}, {0xc0c6c000}, {0xc0c6e000}, - {0xc0c70000}, {0xc0c72000}, {0xc0c74000}, {0xc0c76000}, - {0xc0c78000}, {0xc0c7a000}, {0xc0c7c000}, {0xc0c7e000}, - {0xc0c80000}, {0xc0c82000}, {0xc0c84000}, {0xc0c86000}, - {0xc0c88000}, {0xc0c8a000}, {0xc0c8c000}, {0xc0c8e000}, - {0xc0c90000}, {0xc0c92000}, {0xc0c94000}, {0xc0c96000}, - {0xc0c98000}, {0xc0c9a000}, {0xc0c9c000}, {0xc0c9e000}, - {0xc0ca0000}, {0xc0ca2000}, {0xc0ca4000}, {0xc0ca6000}, - {0xc0ca8000}, {0xc0caa000}, {0xc0cac000}, {0xc0cae000}, - {0xc0cb0000}, {0xc0cb2000}, {0xc0cb4000}, {0xc0cb6000}, - {0xc0cb8000}, {0xc0cba000}, {0xc0cbc000}, {0xc0cbe000}, - {0xc0cc0000}, {0xc0cc2000}, {0xc0cc4000}, {0xc0cc6000}, - {0xc0cc8000}, {0xc0cca000}, {0xc0ccc000}, {0xc0cce000}, - {0xc0cd0000}, {0xc0cd2000}, {0xc0cd4000}, {0xc0cd6000}, - {0xc0cd8000}, {0xc0cda000}, {0xc0cdc000}, {0xc0cde000}, - {0xc0ce0000}, {0xc0ce2000}, {0xc0ce4000}, {0xc0ce6000}, - {0xc0ce8000}, {0xc0cea000}, {0xc0cec000}, {0xc0cee000}, - {0xc0cf0000}, {0xc0cf2000}, {0xc0cf4000}, {0xc0cf6000}, - {0xc0cf8000}, {0xc0cfa000}, {0xc0cfc000}, {0xc0cfe000}, - {0xc0d00000}, {0xc0d02000}, {0xc0d04000}, {0xc0d06000}, - {0xc0d08000}, {0xc0d0a000}, {0xc0d0c000}, {0xc0d0e000}, - {0xc0d10000}, {0xc0d12000}, {0xc0d14000}, {0xc0d16000}, - {0xc0d18000}, {0xc0d1a000}, {0xc0d1c000}, {0xc0d1e000}, - {0xc0d20000}, {0xc0d22000}, {0xc0d24000}, {0xc0d26000}, - {0xc0d28000}, {0xc0d2a000}, {0xc0d2c000}, {0xc0d2e000}, - {0xc0d30000}, {0xc0d32000}, {0xc0d34000}, {0xc0d36000}, - {0xc0d38000}, {0xc0d3a000}, {0xc0d3c000}, {0xc0d3e000}, - {0xc0d40000}, {0xc0d42000}, {0xc0d44000}, {0xc0d46000}, - {0xc0d48000}, {0xc0d4a000}, {0xc0d4c000}, {0xc0d4e000}, - {0xc0d50000}, {0xc0d52000}, {0xc0d54000}, {0xc0d56000}, - {0xc0d58000}, {0xc0d5a000}, {0xc0d5c000}, {0xc0d5e000}, - {0xc0d60000}, {0xc0d62000}, {0xc0d64000}, {0xc0d66000}, - {0xc0d68000}, {0xc0d6a000}, {0xc0d6c000}, {0xc0d6e000}, - {0xc0d70000}, {0xc0d72000}, {0xc0d74000}, {0xc0d76000}, - {0xc0d78000}, {0xc0d7a000}, {0xc0d7c000}, {0xc0d7e000}, - {0xc0d80000}, {0xc0d82000}, {0xc0d84000}, {0xc0d86000}, - {0xc0d88000}, {0xc0d8a000}, {0xc0d8c000}, {0xc0d8e000}, - {0xc0d90000}, {0xc0d92000}, {0xc0d94000}, {0xc0d96000}, - {0xc0d98000}, {0xc0d9a000}, {0xc0d9c000}, {0xc0d9e000}, - {0xc0da0000}, {0xc0da2000}, {0xc0da4000}, {0xc0da6000}, - {0xc0da8000}, {0xc0daa000}, {0xc0dac000}, {0xc0dae000}, - {0xc0db0000}, {0xc0db2000}, {0xc0db4000}, {0xc0db6000}, - {0xc0db8000}, {0xc0dba000}, {0xc0dbc000}, {0xc0dbe000}, - {0xc0dc0000}, {0xc0dc2000}, {0xc0dc4000}, {0xc0dc6000}, - {0xc0dc8000}, {0xc0dca000}, {0xc0dcc000}, {0xc0dce000}, - {0xc0dd0000}, {0xc0dd2000}, {0xc0dd4000}, {0xc0dd6000}, - {0xc0dd8000}, {0xc0dda000}, {0xc0ddc000}, {0xc0dde000}, - {0xc0de0000}, {0xc0de2000}, {0xc0de4000}, {0xc0de6000}, - {0xc0de8000}, {0xc0dea000}, {0xc0dec000}, {0xc0dee000}, - {0xc0df0000}, {0xc0df2000}, {0xc0df4000}, {0xc0df6000}, - {0xc0df8000}, {0xc0dfa000}, {0xc0dfc000}, {0xc0dfe000}, - {0xc0e00000}, {0xc0e02000}, {0xc0e04000}, {0xc0e06000}, - {0xc0e08000}, {0xc0e0a000}, {0xc0e0c000}, {0xc0e0e000}, - {0xc0e10000}, {0xc0e12000}, {0xc0e14000}, {0xc0e16000}, - {0xc0e18000}, {0xc0e1a000}, {0xc0e1c000}, {0xc0e1e000}, - {0xc0e20000}, {0xc0e22000}, {0xc0e24000}, {0xc0e26000}, - {0xc0e28000}, {0xc0e2a000}, {0xc0e2c000}, {0xc0e2e000}, - {0xc0e30000}, {0xc0e32000}, {0xc0e34000}, {0xc0e36000}, - {0xc0e38000}, {0xc0e3a000}, {0xc0e3c000}, {0xc0e3e000}, - {0xc0e40000}, {0xc0e42000}, {0xc0e44000}, {0xc0e46000}, - {0xc0e48000}, {0xc0e4a000}, {0xc0e4c000}, {0xc0e4e000}, - {0xc0e50000}, {0xc0e52000}, {0xc0e54000}, {0xc0e56000}, - {0xc0e58000}, {0xc0e5a000}, {0xc0e5c000}, {0xc0e5e000}, - {0xc0e60000}, {0xc0e62000}, {0xc0e64000}, {0xc0e66000}, - {0xc0e68000}, {0xc0e6a000}, {0xc0e6c000}, {0xc0e6e000}, - {0xc0e70000}, {0xc0e72000}, {0xc0e74000}, {0xc0e76000}, - {0xc0e78000}, {0xc0e7a000}, {0xc0e7c000}, {0xc0e7e000}, - {0xc0e80000}, {0xc0e82000}, {0xc0e84000}, {0xc0e86000}, - {0xc0e88000}, {0xc0e8a000}, {0xc0e8c000}, {0xc0e8e000}, - {0xc0e90000}, {0xc0e92000}, {0xc0e94000}, {0xc0e96000}, - {0xc0e98000}, {0xc0e9a000}, {0xc0e9c000}, {0xc0e9e000}, - {0xc0ea0000}, {0xc0ea2000}, {0xc0ea4000}, {0xc0ea6000}, - {0xc0ea8000}, {0xc0eaa000}, {0xc0eac000}, {0xc0eae000}, - {0xc0eb0000}, {0xc0eb2000}, {0xc0eb4000}, {0xc0eb6000}, - {0xc0eb8000}, {0xc0eba000}, {0xc0ebc000}, {0xc0ebe000}, - {0xc0ec0000}, {0xc0ec2000}, {0xc0ec4000}, {0xc0ec6000}, - {0xc0ec8000}, {0xc0eca000}, {0xc0ecc000}, {0xc0ece000}, - {0xc0ed0000}, {0xc0ed2000}, {0xc0ed4000}, {0xc0ed6000}, - {0xc0ed8000}, {0xc0eda000}, {0xc0edc000}, {0xc0ede000}, - {0xc0ee0000}, {0xc0ee2000}, {0xc0ee4000}, {0xc0ee6000}, - {0xc0ee8000}, {0xc0eea000}, {0xc0eec000}, {0xc0eee000}, - {0xc0ef0000}, {0xc0ef2000}, {0xc0ef4000}, {0xc0ef6000}, - {0xc0ef8000}, {0xc0efa000}, {0xc0efc000}, {0xc0efe000}, - {0xc0f00000}, {0xc0f02000}, {0xc0f04000}, {0xc0f06000}, - {0xc0f08000}, {0xc0f0a000}, {0xc0f0c000}, {0xc0f0e000}, - {0xc0f10000}, {0xc0f12000}, {0xc0f14000}, {0xc0f16000}, - {0xc0f18000}, {0xc0f1a000}, {0xc0f1c000}, {0xc0f1e000}, - {0xc0f20000}, {0xc0f22000}, {0xc0f24000}, {0xc0f26000}, - {0xc0f28000}, {0xc0f2a000}, {0xc0f2c000}, {0xc0f2e000}, - {0xc0f30000}, {0xc0f32000}, {0xc0f34000}, {0xc0f36000}, - {0xc0f38000}, {0xc0f3a000}, {0xc0f3c000}, {0xc0f3e000}, - {0xc0f40000}, {0xc0f42000}, {0xc0f44000}, {0xc0f46000}, - {0xc0f48000}, {0xc0f4a000}, {0xc0f4c000}, {0xc0f4e000}, - {0xc0f50000}, {0xc0f52000}, {0xc0f54000}, {0xc0f56000}, - {0xc0f58000}, {0xc0f5a000}, {0xc0f5c000}, {0xc0f5e000}, - {0xc0f60000}, {0xc0f62000}, {0xc0f64000}, {0xc0f66000}, - {0xc0f68000}, {0xc0f6a000}, {0xc0f6c000}, {0xc0f6e000}, - {0xc0f70000}, {0xc0f72000}, {0xc0f74000}, {0xc0f76000}, - {0xc0f78000}, {0xc0f7a000}, {0xc0f7c000}, {0xc0f7e000}, - {0xc0f80000}, {0xc0f82000}, {0xc0f84000}, {0xc0f86000}, - {0xc0f88000}, {0xc0f8a000}, {0xc0f8c000}, {0xc0f8e000}, - {0xc0f90000}, {0xc0f92000}, {0xc0f94000}, {0xc0f96000}, - {0xc0f98000}, {0xc0f9a000}, {0xc0f9c000}, {0xc0f9e000}, - {0xc0fa0000}, {0xc0fa2000}, {0xc0fa4000}, {0xc0fa6000}, - {0xc0fa8000}, {0xc0faa000}, {0xc0fac000}, {0xc0fae000}, - {0xc0fb0000}, {0xc0fb2000}, {0xc0fb4000}, {0xc0fb6000}, - {0xc0fb8000}, {0xc0fba000}, {0xc0fbc000}, {0xc0fbe000}, - {0xc0fc0000}, {0xc0fc2000}, {0xc0fc4000}, {0xc0fc6000}, - {0xc0fc8000}, {0xc0fca000}, {0xc0fcc000}, {0xc0fce000}, - {0xc0fd0000}, {0xc0fd2000}, {0xc0fd4000}, {0xc0fd6000}, - {0xc0fd8000}, {0xc0fda000}, {0xc0fdc000}, {0xc0fde000}, - {0xc0fe0000}, {0xc0fe2000}, {0xc0fe4000}, {0xc0fe6000}, - {0xc0fe8000}, {0xc0fea000}, {0xc0fec000}, {0xc0fee000}, - {0xc0ff0000}, {0xc0ff2000}, {0xc0ff4000}, {0xc0ff6000}, - {0xc0ff8000}, {0xc0ffa000}, {0xc0ffc000}, {0xc0ffe000}, - {0xc1000000}, {0xc1002000}, {0xc1004000}, {0xc1006000}, - {0xc1008000}, {0xc100a000}, {0xc100c000}, {0xc100e000}, - {0xc1010000}, {0xc1012000}, {0xc1014000}, {0xc1016000}, - {0xc1018000}, {0xc101a000}, {0xc101c000}, {0xc101e000}, - {0xc1020000}, {0xc1022000}, {0xc1024000}, {0xc1026000}, - {0xc1028000}, {0xc102a000}, {0xc102c000}, {0xc102e000}, - {0xc1030000}, {0xc1032000}, {0xc1034000}, {0xc1036000}, - {0xc1038000}, {0xc103a000}, {0xc103c000}, {0xc103e000}, - {0xc1040000}, {0xc1042000}, {0xc1044000}, {0xc1046000}, - {0xc1048000}, {0xc104a000}, {0xc104c000}, {0xc104e000}, - {0xc1050000}, {0xc1052000}, {0xc1054000}, {0xc1056000}, - {0xc1058000}, {0xc105a000}, {0xc105c000}, {0xc105e000}, - {0xc1060000}, {0xc1062000}, {0xc1064000}, {0xc1066000}, - {0xc1068000}, {0xc106a000}, {0xc106c000}, {0xc106e000}, - {0xc1070000}, {0xc1072000}, {0xc1074000}, {0xc1076000}, - {0xc1078000}, {0xc107a000}, {0xc107c000}, {0xc107e000}, - {0xc1080000}, {0xc1082000}, {0xc1084000}, {0xc1086000}, - {0xc1088000}, {0xc108a000}, {0xc108c000}, {0xc108e000}, - {0xc1090000}, {0xc1092000}, {0xc1094000}, {0xc1096000}, - {0xc1098000}, {0xc109a000}, {0xc109c000}, {0xc109e000}, - {0xc10a0000}, {0xc10a2000}, {0xc10a4000}, {0xc10a6000}, - {0xc10a8000}, {0xc10aa000}, {0xc10ac000}, {0xc10ae000}, - {0xc10b0000}, {0xc10b2000}, {0xc10b4000}, {0xc10b6000}, - {0xc10b8000}, {0xc10ba000}, {0xc10bc000}, {0xc10be000}, - {0xc10c0000}, {0xc10c2000}, {0xc10c4000}, {0xc10c6000}, - {0xc10c8000}, {0xc10ca000}, {0xc10cc000}, {0xc10ce000}, - {0xc10d0000}, {0xc10d2000}, {0xc10d4000}, {0xc10d6000}, - {0xc10d8000}, {0xc10da000}, {0xc10dc000}, {0xc10de000}, - {0xc10e0000}, {0xc10e2000}, {0xc10e4000}, {0xc10e6000}, - {0xc10e8000}, {0xc10ea000}, {0xc10ec000}, {0xc10ee000}, - {0xc10f0000}, {0xc10f2000}, {0xc10f4000}, {0xc10f6000}, - {0xc10f8000}, {0xc10fa000}, {0xc10fc000}, {0xc10fe000}, - {0xc1100000}, {0xc1102000}, {0xc1104000}, {0xc1106000}, - {0xc1108000}, {0xc110a000}, {0xc110c000}, {0xc110e000}, - {0xc1110000}, {0xc1112000}, {0xc1114000}, {0xc1116000}, - {0xc1118000}, {0xc111a000}, {0xc111c000}, {0xc111e000}, - {0xc1120000}, {0xc1122000}, {0xc1124000}, {0xc1126000}, - {0xc1128000}, {0xc112a000}, {0xc112c000}, {0xc112e000}, - {0xc1130000}, {0xc1132000}, {0xc1134000}, {0xc1136000}, - {0xc1138000}, {0xc113a000}, {0xc113c000}, {0xc113e000}, - {0xc1140000}, {0xc1142000}, {0xc1144000}, {0xc1146000}, - {0xc1148000}, {0xc114a000}, {0xc114c000}, {0xc114e000}, - {0xc1150000}, {0xc1152000}, {0xc1154000}, {0xc1156000}, - {0xc1158000}, {0xc115a000}, {0xc115c000}, {0xc115e000}, - {0xc1160000}, {0xc1162000}, {0xc1164000}, {0xc1166000}, - {0xc1168000}, {0xc116a000}, {0xc116c000}, {0xc116e000}, - {0xc1170000}, {0xc1172000}, {0xc1174000}, {0xc1176000}, - {0xc1178000}, {0xc117a000}, {0xc117c000}, {0xc117e000}, - {0xc1180000}, {0xc1182000}, {0xc1184000}, {0xc1186000}, - {0xc1188000}, {0xc118a000}, {0xc118c000}, {0xc118e000}, - {0xc1190000}, {0xc1192000}, {0xc1194000}, {0xc1196000}, - {0xc1198000}, {0xc119a000}, {0xc119c000}, {0xc119e000}, - {0xc11a0000}, {0xc11a2000}, {0xc11a4000}, {0xc11a6000}, - {0xc11a8000}, {0xc11aa000}, {0xc11ac000}, {0xc11ae000}, - {0xc11b0000}, {0xc11b2000}, {0xc11b4000}, {0xc11b6000}, - {0xc11b8000}, {0xc11ba000}, {0xc11bc000}, {0xc11be000}, - {0xc11c0000}, {0xc11c2000}, {0xc11c4000}, {0xc11c6000}, - {0xc11c8000}, {0xc11ca000}, {0xc11cc000}, {0xc11ce000}, - {0xc11d0000}, {0xc11d2000}, {0xc11d4000}, {0xc11d6000}, - {0xc11d8000}, {0xc11da000}, {0xc11dc000}, {0xc11de000}, - {0xc11e0000}, {0xc11e2000}, {0xc11e4000}, {0xc11e6000}, - {0xc11e8000}, {0xc11ea000}, {0xc11ec000}, {0xc11ee000}, - {0xc11f0000}, {0xc11f2000}, {0xc11f4000}, {0xc11f6000}, - {0xc11f8000}, {0xc11fa000}, {0xc11fc000}, {0xc11fe000}, - {0xc1200000}, {0xc1202000}, {0xc1204000}, {0xc1206000}, - {0xc1208000}, {0xc120a000}, {0xc120c000}, {0xc120e000}, - {0xc1210000}, {0xc1212000}, {0xc1214000}, {0xc1216000}, - {0xc1218000}, {0xc121a000}, {0xc121c000}, {0xc121e000}, - {0xc1220000}, {0xc1222000}, {0xc1224000}, {0xc1226000}, - {0xc1228000}, {0xc122a000}, {0xc122c000}, {0xc122e000}, - {0xc1230000}, {0xc1232000}, {0xc1234000}, {0xc1236000}, - {0xc1238000}, {0xc123a000}, {0xc123c000}, {0xc123e000}, - {0xc1240000}, {0xc1242000}, {0xc1244000}, {0xc1246000}, - {0xc1248000}, {0xc124a000}, {0xc124c000}, {0xc124e000}, - {0xc1250000}, {0xc1252000}, {0xc1254000}, {0xc1256000}, - {0xc1258000}, {0xc125a000}, {0xc125c000}, {0xc125e000}, - {0xc1260000}, {0xc1262000}, {0xc1264000}, {0xc1266000}, - {0xc1268000}, {0xc126a000}, {0xc126c000}, {0xc126e000}, - {0xc1270000}, {0xc1272000}, {0xc1274000}, {0xc1276000}, - {0xc1278000}, {0xc127a000}, {0xc127c000}, {0xc127e000}, - {0xc1280000}, {0xc1282000}, {0xc1284000}, {0xc1286000}, - {0xc1288000}, {0xc128a000}, {0xc128c000}, {0xc128e000}, - {0xc1290000}, {0xc1292000}, {0xc1294000}, {0xc1296000}, - {0xc1298000}, {0xc129a000}, {0xc129c000}, {0xc129e000}, - {0xc12a0000}, {0xc12a2000}, {0xc12a4000}, {0xc12a6000}, - {0xc12a8000}, {0xc12aa000}, {0xc12ac000}, {0xc12ae000}, - {0xc12b0000}, {0xc12b2000}, {0xc12b4000}, {0xc12b6000}, - {0xc12b8000}, {0xc12ba000}, {0xc12bc000}, {0xc12be000}, - {0xc12c0000}, {0xc12c2000}, {0xc12c4000}, {0xc12c6000}, - {0xc12c8000}, {0xc12ca000}, {0xc12cc000}, {0xc12ce000}, - {0xc12d0000}, {0xc12d2000}, {0xc12d4000}, {0xc12d6000}, - {0xc12d8000}, {0xc12da000}, {0xc12dc000}, {0xc12de000}, - {0xc12e0000}, {0xc12e2000}, {0xc12e4000}, {0xc12e6000}, - {0xc12e8000}, {0xc12ea000}, {0xc12ec000}, {0xc12ee000}, - {0xc12f0000}, {0xc12f2000}, {0xc12f4000}, {0xc12f6000}, - {0xc12f8000}, {0xc12fa000}, {0xc12fc000}, {0xc12fe000}, - {0xc1300000}, {0xc1302000}, {0xc1304000}, {0xc1306000}, - {0xc1308000}, {0xc130a000}, {0xc130c000}, {0xc130e000}, - {0xc1310000}, {0xc1312000}, {0xc1314000}, {0xc1316000}, - {0xc1318000}, {0xc131a000}, {0xc131c000}, {0xc131e000}, - {0xc1320000}, {0xc1322000}, {0xc1324000}, {0xc1326000}, - {0xc1328000}, {0xc132a000}, {0xc132c000}, {0xc132e000}, - {0xc1330000}, {0xc1332000}, {0xc1334000}, {0xc1336000}, - {0xc1338000}, {0xc133a000}, {0xc133c000}, {0xc133e000}, - {0xc1340000}, {0xc1342000}, {0xc1344000}, {0xc1346000}, - {0xc1348000}, {0xc134a000}, {0xc134c000}, {0xc134e000}, - {0xc1350000}, {0xc1352000}, {0xc1354000}, {0xc1356000}, - {0xc1358000}, {0xc135a000}, {0xc135c000}, {0xc135e000}, - {0xc1360000}, {0xc1362000}, {0xc1364000}, {0xc1366000}, - {0xc1368000}, {0xc136a000}, {0xc136c000}, {0xc136e000}, - {0xc1370000}, {0xc1372000}, {0xc1374000}, {0xc1376000}, - {0xc1378000}, {0xc137a000}, {0xc137c000}, {0xc137e000}, - {0xc1380000}, {0xc1382000}, {0xc1384000}, {0xc1386000}, - {0xc1388000}, {0xc138a000}, {0xc138c000}, {0xc138e000}, - {0xc1390000}, {0xc1392000}, {0xc1394000}, {0xc1396000}, - {0xc1398000}, {0xc139a000}, {0xc139c000}, {0xc139e000}, - {0xc13a0000}, {0xc13a2000}, {0xc13a4000}, {0xc13a6000}, - {0xc13a8000}, {0xc13aa000}, {0xc13ac000}, {0xc13ae000}, - {0xc13b0000}, {0xc13b2000}, {0xc13b4000}, {0xc13b6000}, - {0xc13b8000}, {0xc13ba000}, {0xc13bc000}, {0xc13be000}, - {0xc13c0000}, {0xc13c2000}, {0xc13c4000}, {0xc13c6000}, - {0xc13c8000}, {0xc13ca000}, {0xc13cc000}, {0xc13ce000}, - {0xc13d0000}, {0xc13d2000}, {0xc13d4000}, {0xc13d6000}, - {0xc13d8000}, {0xc13da000}, {0xc13dc000}, {0xc13de000}, - {0xc13e0000}, {0xc13e2000}, {0xc13e4000}, {0xc13e6000}, - {0xc13e8000}, {0xc13ea000}, {0xc13ec000}, {0xc13ee000}, - {0xc13f0000}, {0xc13f2000}, {0xc13f4000}, {0xc13f6000}, - {0xc13f8000}, {0xc13fa000}, {0xc13fc000}, {0xc13fe000}, - {0xc1400000}, {0xc1402000}, {0xc1404000}, {0xc1406000}, - {0xc1408000}, {0xc140a000}, {0xc140c000}, {0xc140e000}, - {0xc1410000}, {0xc1412000}, {0xc1414000}, {0xc1416000}, - {0xc1418000}, {0xc141a000}, {0xc141c000}, {0xc141e000}, - {0xc1420000}, {0xc1422000}, {0xc1424000}, {0xc1426000}, - {0xc1428000}, {0xc142a000}, {0xc142c000}, {0xc142e000}, - {0xc1430000}, {0xc1432000}, {0xc1434000}, {0xc1436000}, - {0xc1438000}, {0xc143a000}, {0xc143c000}, {0xc143e000}, - {0xc1440000}, {0xc1442000}, {0xc1444000}, {0xc1446000}, - {0xc1448000}, {0xc144a000}, {0xc144c000}, {0xc144e000}, - {0xc1450000}, {0xc1452000}, {0xc1454000}, {0xc1456000}, - {0xc1458000}, {0xc145a000}, {0xc145c000}, {0xc145e000}, - {0xc1460000}, {0xc1462000}, {0xc1464000}, {0xc1466000}, - {0xc1468000}, {0xc146a000}, {0xc146c000}, {0xc146e000}, - {0xc1470000}, {0xc1472000}, {0xc1474000}, {0xc1476000}, - {0xc1478000}, {0xc147a000}, {0xc147c000}, {0xc147e000}, - {0xc1480000}, {0xc1482000}, {0xc1484000}, {0xc1486000}, - {0xc1488000}, {0xc148a000}, {0xc148c000}, {0xc148e000}, - {0xc1490000}, {0xc1492000}, {0xc1494000}, {0xc1496000}, - {0xc1498000}, {0xc149a000}, {0xc149c000}, {0xc149e000}, - {0xc14a0000}, {0xc14a2000}, {0xc14a4000}, {0xc14a6000}, - {0xc14a8000}, {0xc14aa000}, {0xc14ac000}, {0xc14ae000}, - {0xc14b0000}, {0xc14b2000}, {0xc14b4000}, {0xc14b6000}, - {0xc14b8000}, {0xc14ba000}, {0xc14bc000}, {0xc14be000}, - {0xc14c0000}, {0xc14c2000}, {0xc14c4000}, {0xc14c6000}, - {0xc14c8000}, {0xc14ca000}, {0xc14cc000}, {0xc14ce000}, - {0xc14d0000}, {0xc14d2000}, {0xc14d4000}, {0xc14d6000}, - {0xc14d8000}, {0xc14da000}, {0xc14dc000}, {0xc14de000}, - {0xc14e0000}, {0xc14e2000}, {0xc14e4000}, {0xc14e6000}, - {0xc14e8000}, {0xc14ea000}, {0xc14ec000}, {0xc14ee000}, - {0xc14f0000}, {0xc14f2000}, {0xc14f4000}, {0xc14f6000}, - {0xc14f8000}, {0xc14fa000}, {0xc14fc000}, {0xc14fe000}, - {0xc1500000}, {0xc1502000}, {0xc1504000}, {0xc1506000}, - {0xc1508000}, {0xc150a000}, {0xc150c000}, {0xc150e000}, - {0xc1510000}, {0xc1512000}, {0xc1514000}, {0xc1516000}, - {0xc1518000}, {0xc151a000}, {0xc151c000}, {0xc151e000}, - {0xc1520000}, {0xc1522000}, {0xc1524000}, {0xc1526000}, - {0xc1528000}, {0xc152a000}, {0xc152c000}, {0xc152e000}, - {0xc1530000}, {0xc1532000}, {0xc1534000}, {0xc1536000}, - {0xc1538000}, {0xc153a000}, {0xc153c000}, {0xc153e000}, - {0xc1540000}, {0xc1542000}, {0xc1544000}, {0xc1546000}, - {0xc1548000}, {0xc154a000}, {0xc154c000}, {0xc154e000}, - {0xc1550000}, {0xc1552000}, {0xc1554000}, {0xc1556000}, - {0xc1558000}, {0xc155a000}, {0xc155c000}, {0xc155e000}, - {0xc1560000}, {0xc1562000}, {0xc1564000}, {0xc1566000}, - {0xc1568000}, {0xc156a000}, {0xc156c000}, {0xc156e000}, - {0xc1570000}, {0xc1572000}, {0xc1574000}, {0xc1576000}, - {0xc1578000}, {0xc157a000}, {0xc157c000}, {0xc157e000}, - {0xc1580000}, {0xc1582000}, {0xc1584000}, {0xc1586000}, - {0xc1588000}, {0xc158a000}, {0xc158c000}, {0xc158e000}, - {0xc1590000}, {0xc1592000}, {0xc1594000}, {0xc1596000}, - {0xc1598000}, {0xc159a000}, {0xc159c000}, {0xc159e000}, - {0xc15a0000}, {0xc15a2000}, {0xc15a4000}, {0xc15a6000}, - {0xc15a8000}, {0xc15aa000}, {0xc15ac000}, {0xc15ae000}, - {0xc15b0000}, {0xc15b2000}, {0xc15b4000}, {0xc15b6000}, - {0xc15b8000}, {0xc15ba000}, {0xc15bc000}, {0xc15be000}, - {0xc15c0000}, {0xc15c2000}, {0xc15c4000}, {0xc15c6000}, - {0xc15c8000}, {0xc15ca000}, {0xc15cc000}, {0xc15ce000}, - {0xc15d0000}, {0xc15d2000}, {0xc15d4000}, {0xc15d6000}, - {0xc15d8000}, {0xc15da000}, {0xc15dc000}, {0xc15de000}, - {0xc15e0000}, {0xc15e2000}, {0xc15e4000}, {0xc15e6000}, - {0xc15e8000}, {0xc15ea000}, {0xc15ec000}, {0xc15ee000}, - {0xc15f0000}, {0xc15f2000}, {0xc15f4000}, {0xc15f6000}, - {0xc15f8000}, {0xc15fa000}, {0xc15fc000}, {0xc15fe000}, - {0xc1600000}, {0xc1602000}, {0xc1604000}, {0xc1606000}, - {0xc1608000}, {0xc160a000}, {0xc160c000}, {0xc160e000}, - {0xc1610000}, {0xc1612000}, {0xc1614000}, {0xc1616000}, - {0xc1618000}, {0xc161a000}, {0xc161c000}, {0xc161e000}, - {0xc1620000}, {0xc1622000}, {0xc1624000}, {0xc1626000}, - {0xc1628000}, {0xc162a000}, {0xc162c000}, {0xc162e000}, - {0xc1630000}, {0xc1632000}, {0xc1634000}, {0xc1636000}, - {0xc1638000}, {0xc163a000}, {0xc163c000}, {0xc163e000}, - {0xc1640000}, {0xc1642000}, {0xc1644000}, {0xc1646000}, - {0xc1648000}, {0xc164a000}, {0xc164c000}, {0xc164e000}, - {0xc1650000}, {0xc1652000}, {0xc1654000}, {0xc1656000}, - {0xc1658000}, {0xc165a000}, {0xc165c000}, {0xc165e000}, - {0xc1660000}, {0xc1662000}, {0xc1664000}, {0xc1666000}, - {0xc1668000}, {0xc166a000}, {0xc166c000}, {0xc166e000}, - {0xc1670000}, {0xc1672000}, {0xc1674000}, {0xc1676000}, - {0xc1678000}, {0xc167a000}, {0xc167c000}, {0xc167e000}, - {0xc1680000}, {0xc1682000}, {0xc1684000}, {0xc1686000}, - {0xc1688000}, {0xc168a000}, {0xc168c000}, {0xc168e000}, - {0xc1690000}, {0xc1692000}, {0xc1694000}, {0xc1696000}, - {0xc1698000}, {0xc169a000}, {0xc169c000}, {0xc169e000}, - {0xc16a0000}, {0xc16a2000}, {0xc16a4000}, {0xc16a6000}, - {0xc16a8000}, {0xc16aa000}, {0xc16ac000}, {0xc16ae000}, - {0xc16b0000}, {0xc16b2000}, {0xc16b4000}, {0xc16b6000}, - {0xc16b8000}, {0xc16ba000}, {0xc16bc000}, {0xc16be000}, - {0xc16c0000}, {0xc16c2000}, {0xc16c4000}, {0xc16c6000}, - {0xc16c8000}, {0xc16ca000}, {0xc16cc000}, {0xc16ce000}, - {0xc16d0000}, {0xc16d2000}, {0xc16d4000}, {0xc16d6000}, - {0xc16d8000}, {0xc16da000}, {0xc16dc000}, {0xc16de000}, - {0xc16e0000}, {0xc16e2000}, {0xc16e4000}, {0xc16e6000}, - {0xc16e8000}, {0xc16ea000}, {0xc16ec000}, {0xc16ee000}, - {0xc16f0000}, {0xc16f2000}, {0xc16f4000}, {0xc16f6000}, - {0xc16f8000}, {0xc16fa000}, {0xc16fc000}, {0xc16fe000}, - {0xc1700000}, {0xc1702000}, {0xc1704000}, {0xc1706000}, - {0xc1708000}, {0xc170a000}, {0xc170c000}, {0xc170e000}, - {0xc1710000}, {0xc1712000}, {0xc1714000}, {0xc1716000}, - {0xc1718000}, {0xc171a000}, {0xc171c000}, {0xc171e000}, - {0xc1720000}, {0xc1722000}, {0xc1724000}, {0xc1726000}, - {0xc1728000}, {0xc172a000}, {0xc172c000}, {0xc172e000}, - {0xc1730000}, {0xc1732000}, {0xc1734000}, {0xc1736000}, - {0xc1738000}, {0xc173a000}, {0xc173c000}, {0xc173e000}, - {0xc1740000}, {0xc1742000}, {0xc1744000}, {0xc1746000}, - {0xc1748000}, {0xc174a000}, {0xc174c000}, {0xc174e000}, - {0xc1750000}, {0xc1752000}, {0xc1754000}, {0xc1756000}, - {0xc1758000}, {0xc175a000}, {0xc175c000}, {0xc175e000}, - {0xc1760000}, {0xc1762000}, {0xc1764000}, {0xc1766000}, - {0xc1768000}, {0xc176a000}, {0xc176c000}, {0xc176e000}, - {0xc1770000}, {0xc1772000}, {0xc1774000}, {0xc1776000}, - {0xc1778000}, {0xc177a000}, {0xc177c000}, {0xc177e000}, - {0xc1780000}, {0xc1782000}, {0xc1784000}, {0xc1786000}, - {0xc1788000}, {0xc178a000}, {0xc178c000}, {0xc178e000}, - {0xc1790000}, {0xc1792000}, {0xc1794000}, {0xc1796000}, - {0xc1798000}, {0xc179a000}, {0xc179c000}, {0xc179e000}, - {0xc17a0000}, {0xc17a2000}, {0xc17a4000}, {0xc17a6000}, - {0xc17a8000}, {0xc17aa000}, {0xc17ac000}, {0xc17ae000}, - {0xc17b0000}, {0xc17b2000}, {0xc17b4000}, {0xc17b6000}, - {0xc17b8000}, {0xc17ba000}, {0xc17bc000}, {0xc17be000}, - {0xc17c0000}, {0xc17c2000}, {0xc17c4000}, {0xc17c6000}, - {0xc17c8000}, {0xc17ca000}, {0xc17cc000}, {0xc17ce000}, - {0xc17d0000}, {0xc17d2000}, {0xc17d4000}, {0xc17d6000}, - {0xc17d8000}, {0xc17da000}, {0xc17dc000}, {0xc17de000}, - {0xc17e0000}, {0xc17e2000}, {0xc17e4000}, {0xc17e6000}, - {0xc17e8000}, {0xc17ea000}, {0xc17ec000}, {0xc17ee000}, - {0xc17f0000}, {0xc17f2000}, {0xc17f4000}, {0xc17f6000}, - {0xc17f8000}, {0xc17fa000}, {0xc17fc000}, {0xc17fe000}, - {0xc1800000}, {0xc1802000}, {0xc1804000}, {0xc1806000}, - {0xc1808000}, {0xc180a000}, {0xc180c000}, {0xc180e000}, - {0xc1810000}, {0xc1812000}, {0xc1814000}, {0xc1816000}, - {0xc1818000}, {0xc181a000}, {0xc181c000}, {0xc181e000}, - {0xc1820000}, {0xc1822000}, {0xc1824000}, {0xc1826000}, - {0xc1828000}, {0xc182a000}, {0xc182c000}, {0xc182e000}, - {0xc1830000}, {0xc1832000}, {0xc1834000}, {0xc1836000}, - {0xc1838000}, {0xc183a000}, {0xc183c000}, {0xc183e000}, - {0xc1840000}, {0xc1842000}, {0xc1844000}, {0xc1846000}, - {0xc1848000}, {0xc184a000}, {0xc184c000}, {0xc184e000}, - {0xc1850000}, {0xc1852000}, {0xc1854000}, {0xc1856000}, - {0xc1858000}, {0xc185a000}, {0xc185c000}, {0xc185e000}, - {0xc1860000}, {0xc1862000}, {0xc1864000}, {0xc1866000}, - {0xc1868000}, {0xc186a000}, {0xc186c000}, {0xc186e000}, - {0xc1870000}, {0xc1872000}, {0xc1874000}, {0xc1876000}, - {0xc1878000}, {0xc187a000}, {0xc187c000}, {0xc187e000}, - {0xc1880000}, {0xc1882000}, {0xc1884000}, {0xc1886000}, - {0xc1888000}, {0xc188a000}, {0xc188c000}, {0xc188e000}, - {0xc1890000}, {0xc1892000}, {0xc1894000}, {0xc1896000}, - {0xc1898000}, {0xc189a000}, {0xc189c000}, {0xc189e000}, - {0xc18a0000}, {0xc18a2000}, {0xc18a4000}, {0xc18a6000}, - {0xc18a8000}, {0xc18aa000}, {0xc18ac000}, {0xc18ae000}, - {0xc18b0000}, {0xc18b2000}, {0xc18b4000}, {0xc18b6000}, - {0xc18b8000}, {0xc18ba000}, {0xc18bc000}, {0xc18be000}, - {0xc18c0000}, {0xc18c2000}, {0xc18c4000}, {0xc18c6000}, - {0xc18c8000}, {0xc18ca000}, {0xc18cc000}, {0xc18ce000}, - {0xc18d0000}, {0xc18d2000}, {0xc18d4000}, {0xc18d6000}, - {0xc18d8000}, {0xc18da000}, {0xc18dc000}, {0xc18de000}, - {0xc18e0000}, {0xc18e2000}, {0xc18e4000}, {0xc18e6000}, - {0xc18e8000}, {0xc18ea000}, {0xc18ec000}, {0xc18ee000}, - {0xc18f0000}, {0xc18f2000}, {0xc18f4000}, {0xc18f6000}, - {0xc18f8000}, {0xc18fa000}, {0xc18fc000}, {0xc18fe000}, - {0xc1900000}, {0xc1902000}, {0xc1904000}, {0xc1906000}, - {0xc1908000}, {0xc190a000}, {0xc190c000}, {0xc190e000}, - {0xc1910000}, {0xc1912000}, {0xc1914000}, {0xc1916000}, - {0xc1918000}, {0xc191a000}, {0xc191c000}, {0xc191e000}, - {0xc1920000}, {0xc1922000}, {0xc1924000}, {0xc1926000}, - {0xc1928000}, {0xc192a000}, {0xc192c000}, {0xc192e000}, - {0xc1930000}, {0xc1932000}, {0xc1934000}, {0xc1936000}, - {0xc1938000}, {0xc193a000}, {0xc193c000}, {0xc193e000}, - {0xc1940000}, {0xc1942000}, {0xc1944000}, {0xc1946000}, - {0xc1948000}, {0xc194a000}, {0xc194c000}, {0xc194e000}, - {0xc1950000}, {0xc1952000}, {0xc1954000}, {0xc1956000}, - {0xc1958000}, {0xc195a000}, {0xc195c000}, {0xc195e000}, - {0xc1960000}, {0xc1962000}, {0xc1964000}, {0xc1966000}, - {0xc1968000}, {0xc196a000}, {0xc196c000}, {0xc196e000}, - {0xc1970000}, {0xc1972000}, {0xc1974000}, {0xc1976000}, - {0xc1978000}, {0xc197a000}, {0xc197c000}, {0xc197e000}, - {0xc1980000}, {0xc1982000}, {0xc1984000}, {0xc1986000}, - {0xc1988000}, {0xc198a000}, {0xc198c000}, {0xc198e000}, - {0xc1990000}, {0xc1992000}, {0xc1994000}, {0xc1996000}, - {0xc1998000}, {0xc199a000}, {0xc199c000}, {0xc199e000}, - {0xc19a0000}, {0xc19a2000}, {0xc19a4000}, {0xc19a6000}, - {0xc19a8000}, {0xc19aa000}, {0xc19ac000}, {0xc19ae000}, - {0xc19b0000}, {0xc19b2000}, {0xc19b4000}, {0xc19b6000}, - {0xc19b8000}, {0xc19ba000}, {0xc19bc000}, {0xc19be000}, - {0xc19c0000}, {0xc19c2000}, {0xc19c4000}, {0xc19c6000}, - {0xc19c8000}, {0xc19ca000}, {0xc19cc000}, {0xc19ce000}, - {0xc19d0000}, {0xc19d2000}, {0xc19d4000}, {0xc19d6000}, - {0xc19d8000}, {0xc19da000}, {0xc19dc000}, {0xc19de000}, - {0xc19e0000}, {0xc19e2000}, {0xc19e4000}, {0xc19e6000}, - {0xc19e8000}, {0xc19ea000}, {0xc19ec000}, {0xc19ee000}, - {0xc19f0000}, {0xc19f2000}, {0xc19f4000}, {0xc19f6000}, - {0xc19f8000}, {0xc19fa000}, {0xc19fc000}, {0xc19fe000}, - {0xc1a00000}, {0xc1a02000}, {0xc1a04000}, {0xc1a06000}, - {0xc1a08000}, {0xc1a0a000}, {0xc1a0c000}, {0xc1a0e000}, - {0xc1a10000}, {0xc1a12000}, {0xc1a14000}, {0xc1a16000}, - {0xc1a18000}, {0xc1a1a000}, {0xc1a1c000}, {0xc1a1e000}, - {0xc1a20000}, {0xc1a22000}, {0xc1a24000}, {0xc1a26000}, - {0xc1a28000}, {0xc1a2a000}, {0xc1a2c000}, {0xc1a2e000}, - {0xc1a30000}, {0xc1a32000}, {0xc1a34000}, {0xc1a36000}, - {0xc1a38000}, {0xc1a3a000}, {0xc1a3c000}, {0xc1a3e000}, - {0xc1a40000}, {0xc1a42000}, {0xc1a44000}, {0xc1a46000}, - {0xc1a48000}, {0xc1a4a000}, {0xc1a4c000}, {0xc1a4e000}, - {0xc1a50000}, {0xc1a52000}, {0xc1a54000}, {0xc1a56000}, - {0xc1a58000}, {0xc1a5a000}, {0xc1a5c000}, {0xc1a5e000}, - {0xc1a60000}, {0xc1a62000}, {0xc1a64000}, {0xc1a66000}, - {0xc1a68000}, {0xc1a6a000}, {0xc1a6c000}, {0xc1a6e000}, - {0xc1a70000}, {0xc1a72000}, {0xc1a74000}, {0xc1a76000}, - {0xc1a78000}, {0xc1a7a000}, {0xc1a7c000}, {0xc1a7e000}, - {0xc1a80000}, {0xc1a82000}, {0xc1a84000}, {0xc1a86000}, - {0xc1a88000}, {0xc1a8a000}, {0xc1a8c000}, {0xc1a8e000}, - {0xc1a90000}, {0xc1a92000}, {0xc1a94000}, {0xc1a96000}, - {0xc1a98000}, {0xc1a9a000}, {0xc1a9c000}, {0xc1a9e000}, - {0xc1aa0000}, {0xc1aa2000}, {0xc1aa4000}, {0xc1aa6000}, - {0xc1aa8000}, {0xc1aaa000}, {0xc1aac000}, {0xc1aae000}, - {0xc1ab0000}, {0xc1ab2000}, {0xc1ab4000}, {0xc1ab6000}, - {0xc1ab8000}, {0xc1aba000}, {0xc1abc000}, {0xc1abe000}, - {0xc1ac0000}, {0xc1ac2000}, {0xc1ac4000}, {0xc1ac6000}, - {0xc1ac8000}, {0xc1aca000}, {0xc1acc000}, {0xc1ace000}, - {0xc1ad0000}, {0xc1ad2000}, {0xc1ad4000}, {0xc1ad6000}, - {0xc1ad8000}, {0xc1ada000}, {0xc1adc000}, {0xc1ade000}, - {0xc1ae0000}, {0xc1ae2000}, {0xc1ae4000}, {0xc1ae6000}, - {0xc1ae8000}, {0xc1aea000}, {0xc1aec000}, {0xc1aee000}, - {0xc1af0000}, {0xc1af2000}, {0xc1af4000}, {0xc1af6000}, - {0xc1af8000}, {0xc1afa000}, {0xc1afc000}, {0xc1afe000}, - {0xc1b00000}, {0xc1b02000}, {0xc1b04000}, {0xc1b06000}, - {0xc1b08000}, {0xc1b0a000}, {0xc1b0c000}, {0xc1b0e000}, - {0xc1b10000}, {0xc1b12000}, {0xc1b14000}, {0xc1b16000}, - {0xc1b18000}, {0xc1b1a000}, {0xc1b1c000}, {0xc1b1e000}, - {0xc1b20000}, {0xc1b22000}, {0xc1b24000}, {0xc1b26000}, - {0xc1b28000}, {0xc1b2a000}, {0xc1b2c000}, {0xc1b2e000}, - {0xc1b30000}, {0xc1b32000}, {0xc1b34000}, {0xc1b36000}, - {0xc1b38000}, {0xc1b3a000}, {0xc1b3c000}, {0xc1b3e000}, - {0xc1b40000}, {0xc1b42000}, {0xc1b44000}, {0xc1b46000}, - {0xc1b48000}, {0xc1b4a000}, {0xc1b4c000}, {0xc1b4e000}, - {0xc1b50000}, {0xc1b52000}, {0xc1b54000}, {0xc1b56000}, - {0xc1b58000}, {0xc1b5a000}, {0xc1b5c000}, {0xc1b5e000}, - {0xc1b60000}, {0xc1b62000}, {0xc1b64000}, {0xc1b66000}, - {0xc1b68000}, {0xc1b6a000}, {0xc1b6c000}, {0xc1b6e000}, - {0xc1b70000}, {0xc1b72000}, {0xc1b74000}, {0xc1b76000}, - {0xc1b78000}, {0xc1b7a000}, {0xc1b7c000}, {0xc1b7e000}, - {0xc1b80000}, {0xc1b82000}, {0xc1b84000}, {0xc1b86000}, - {0xc1b88000}, {0xc1b8a000}, {0xc1b8c000}, {0xc1b8e000}, - {0xc1b90000}, {0xc1b92000}, {0xc1b94000}, {0xc1b96000}, - {0xc1b98000}, {0xc1b9a000}, {0xc1b9c000}, {0xc1b9e000}, - {0xc1ba0000}, {0xc1ba2000}, {0xc1ba4000}, {0xc1ba6000}, - {0xc1ba8000}, {0xc1baa000}, {0xc1bac000}, {0xc1bae000}, - {0xc1bb0000}, {0xc1bb2000}, {0xc1bb4000}, {0xc1bb6000}, - {0xc1bb8000}, {0xc1bba000}, {0xc1bbc000}, {0xc1bbe000}, - {0xc1bc0000}, {0xc1bc2000}, {0xc1bc4000}, {0xc1bc6000}, - {0xc1bc8000}, {0xc1bca000}, {0xc1bcc000}, {0xc1bce000}, - {0xc1bd0000}, {0xc1bd2000}, {0xc1bd4000}, {0xc1bd6000}, - {0xc1bd8000}, {0xc1bda000}, {0xc1bdc000}, {0xc1bde000}, - {0xc1be0000}, {0xc1be2000}, {0xc1be4000}, {0xc1be6000}, - {0xc1be8000}, {0xc1bea000}, {0xc1bec000}, {0xc1bee000}, - {0xc1bf0000}, {0xc1bf2000}, {0xc1bf4000}, {0xc1bf6000}, - {0xc1bf8000}, {0xc1bfa000}, {0xc1bfc000}, {0xc1bfe000}, - {0xc1c00000}, {0xc1c02000}, {0xc1c04000}, {0xc1c06000}, - {0xc1c08000}, {0xc1c0a000}, {0xc1c0c000}, {0xc1c0e000}, - {0xc1c10000}, {0xc1c12000}, {0xc1c14000}, {0xc1c16000}, - {0xc1c18000}, {0xc1c1a000}, {0xc1c1c000}, {0xc1c1e000}, - {0xc1c20000}, {0xc1c22000}, {0xc1c24000}, {0xc1c26000}, - {0xc1c28000}, {0xc1c2a000}, {0xc1c2c000}, {0xc1c2e000}, - {0xc1c30000}, {0xc1c32000}, {0xc1c34000}, {0xc1c36000}, - {0xc1c38000}, {0xc1c3a000}, {0xc1c3c000}, {0xc1c3e000}, - {0xc1c40000}, {0xc1c42000}, {0xc1c44000}, {0xc1c46000}, - {0xc1c48000}, {0xc1c4a000}, {0xc1c4c000}, {0xc1c4e000}, - {0xc1c50000}, {0xc1c52000}, {0xc1c54000}, {0xc1c56000}, - {0xc1c58000}, {0xc1c5a000}, {0xc1c5c000}, {0xc1c5e000}, - {0xc1c60000}, {0xc1c62000}, {0xc1c64000}, {0xc1c66000}, - {0xc1c68000}, {0xc1c6a000}, {0xc1c6c000}, {0xc1c6e000}, - {0xc1c70000}, {0xc1c72000}, {0xc1c74000}, {0xc1c76000}, - {0xc1c78000}, {0xc1c7a000}, {0xc1c7c000}, {0xc1c7e000}, - {0xc1c80000}, {0xc1c82000}, {0xc1c84000}, {0xc1c86000}, - {0xc1c88000}, {0xc1c8a000}, {0xc1c8c000}, {0xc1c8e000}, - {0xc1c90000}, {0xc1c92000}, {0xc1c94000}, {0xc1c96000}, - {0xc1c98000}, {0xc1c9a000}, {0xc1c9c000}, {0xc1c9e000}, - {0xc1ca0000}, {0xc1ca2000}, {0xc1ca4000}, {0xc1ca6000}, - {0xc1ca8000}, {0xc1caa000}, {0xc1cac000}, {0xc1cae000}, - {0xc1cb0000}, {0xc1cb2000}, {0xc1cb4000}, {0xc1cb6000}, - {0xc1cb8000}, {0xc1cba000}, {0xc1cbc000}, {0xc1cbe000}, - {0xc1cc0000}, {0xc1cc2000}, {0xc1cc4000}, {0xc1cc6000}, - {0xc1cc8000}, {0xc1cca000}, {0xc1ccc000}, {0xc1cce000}, - {0xc1cd0000}, {0xc1cd2000}, {0xc1cd4000}, {0xc1cd6000}, - {0xc1cd8000}, {0xc1cda000}, {0xc1cdc000}, {0xc1cde000}, - {0xc1ce0000}, {0xc1ce2000}, {0xc1ce4000}, {0xc1ce6000}, - {0xc1ce8000}, {0xc1cea000}, {0xc1cec000}, {0xc1cee000}, - {0xc1cf0000}, {0xc1cf2000}, {0xc1cf4000}, {0xc1cf6000}, - {0xc1cf8000}, {0xc1cfa000}, {0xc1cfc000}, {0xc1cfe000}, - {0xc1d00000}, {0xc1d02000}, {0xc1d04000}, {0xc1d06000}, - {0xc1d08000}, {0xc1d0a000}, {0xc1d0c000}, {0xc1d0e000}, - {0xc1d10000}, {0xc1d12000}, {0xc1d14000}, {0xc1d16000}, - {0xc1d18000}, {0xc1d1a000}, {0xc1d1c000}, {0xc1d1e000}, - {0xc1d20000}, {0xc1d22000}, {0xc1d24000}, {0xc1d26000}, - {0xc1d28000}, {0xc1d2a000}, {0xc1d2c000}, {0xc1d2e000}, - {0xc1d30000}, {0xc1d32000}, {0xc1d34000}, {0xc1d36000}, - {0xc1d38000}, {0xc1d3a000}, {0xc1d3c000}, {0xc1d3e000}, - {0xc1d40000}, {0xc1d42000}, {0xc1d44000}, {0xc1d46000}, - {0xc1d48000}, {0xc1d4a000}, {0xc1d4c000}, {0xc1d4e000}, - {0xc1d50000}, {0xc1d52000}, {0xc1d54000}, {0xc1d56000}, - {0xc1d58000}, {0xc1d5a000}, {0xc1d5c000}, {0xc1d5e000}, - {0xc1d60000}, {0xc1d62000}, {0xc1d64000}, {0xc1d66000}, - {0xc1d68000}, {0xc1d6a000}, {0xc1d6c000}, {0xc1d6e000}, - {0xc1d70000}, {0xc1d72000}, {0xc1d74000}, {0xc1d76000}, - {0xc1d78000}, {0xc1d7a000}, {0xc1d7c000}, {0xc1d7e000}, - {0xc1d80000}, {0xc1d82000}, {0xc1d84000}, {0xc1d86000}, - {0xc1d88000}, {0xc1d8a000}, {0xc1d8c000}, {0xc1d8e000}, - {0xc1d90000}, {0xc1d92000}, {0xc1d94000}, {0xc1d96000}, - {0xc1d98000}, {0xc1d9a000}, {0xc1d9c000}, {0xc1d9e000}, - {0xc1da0000}, {0xc1da2000}, {0xc1da4000}, {0xc1da6000}, - {0xc1da8000}, {0xc1daa000}, {0xc1dac000}, {0xc1dae000}, - {0xc1db0000}, {0xc1db2000}, {0xc1db4000}, {0xc1db6000}, - {0xc1db8000}, {0xc1dba000}, {0xc1dbc000}, {0xc1dbe000}, - {0xc1dc0000}, {0xc1dc2000}, {0xc1dc4000}, {0xc1dc6000}, - {0xc1dc8000}, {0xc1dca000}, {0xc1dcc000}, {0xc1dce000}, - {0xc1dd0000}, {0xc1dd2000}, {0xc1dd4000}, {0xc1dd6000}, - {0xc1dd8000}, {0xc1dda000}, {0xc1ddc000}, {0xc1dde000}, - {0xc1de0000}, {0xc1de2000}, {0xc1de4000}, {0xc1de6000}, - {0xc1de8000}, {0xc1dea000}, {0xc1dec000}, {0xc1dee000}, - {0xc1df0000}, {0xc1df2000}, {0xc1df4000}, {0xc1df6000}, - {0xc1df8000}, {0xc1dfa000}, {0xc1dfc000}, {0xc1dfe000}, - {0xc1e00000}, {0xc1e02000}, {0xc1e04000}, {0xc1e06000}, - {0xc1e08000}, {0xc1e0a000}, {0xc1e0c000}, {0xc1e0e000}, - {0xc1e10000}, {0xc1e12000}, {0xc1e14000}, {0xc1e16000}, - {0xc1e18000}, {0xc1e1a000}, {0xc1e1c000}, {0xc1e1e000}, - {0xc1e20000}, {0xc1e22000}, {0xc1e24000}, {0xc1e26000}, - {0xc1e28000}, {0xc1e2a000}, {0xc1e2c000}, {0xc1e2e000}, - {0xc1e30000}, {0xc1e32000}, {0xc1e34000}, {0xc1e36000}, - {0xc1e38000}, {0xc1e3a000}, {0xc1e3c000}, {0xc1e3e000}, - {0xc1e40000}, {0xc1e42000}, {0xc1e44000}, {0xc1e46000}, - {0xc1e48000}, {0xc1e4a000}, {0xc1e4c000}, {0xc1e4e000}, - {0xc1e50000}, {0xc1e52000}, {0xc1e54000}, {0xc1e56000}, - {0xc1e58000}, {0xc1e5a000}, {0xc1e5c000}, {0xc1e5e000}, - {0xc1e60000}, {0xc1e62000}, {0xc1e64000}, {0xc1e66000}, - {0xc1e68000}, {0xc1e6a000}, {0xc1e6c000}, {0xc1e6e000}, - {0xc1e70000}, {0xc1e72000}, {0xc1e74000}, {0xc1e76000}, - {0xc1e78000}, {0xc1e7a000}, {0xc1e7c000}, {0xc1e7e000}, - {0xc1e80000}, {0xc1e82000}, {0xc1e84000}, {0xc1e86000}, - {0xc1e88000}, {0xc1e8a000}, {0xc1e8c000}, {0xc1e8e000}, - {0xc1e90000}, {0xc1e92000}, {0xc1e94000}, {0xc1e96000}, - {0xc1e98000}, {0xc1e9a000}, {0xc1e9c000}, {0xc1e9e000}, - {0xc1ea0000}, {0xc1ea2000}, {0xc1ea4000}, {0xc1ea6000}, - {0xc1ea8000}, {0xc1eaa000}, {0xc1eac000}, {0xc1eae000}, - {0xc1eb0000}, {0xc1eb2000}, {0xc1eb4000}, {0xc1eb6000}, - {0xc1eb8000}, {0xc1eba000}, {0xc1ebc000}, {0xc1ebe000}, - {0xc1ec0000}, {0xc1ec2000}, {0xc1ec4000}, {0xc1ec6000}, - {0xc1ec8000}, {0xc1eca000}, {0xc1ecc000}, {0xc1ece000}, - {0xc1ed0000}, {0xc1ed2000}, {0xc1ed4000}, {0xc1ed6000}, - {0xc1ed8000}, {0xc1eda000}, {0xc1edc000}, {0xc1ede000}, - {0xc1ee0000}, {0xc1ee2000}, {0xc1ee4000}, {0xc1ee6000}, - {0xc1ee8000}, {0xc1eea000}, {0xc1eec000}, {0xc1eee000}, - {0xc1ef0000}, {0xc1ef2000}, {0xc1ef4000}, {0xc1ef6000}, - {0xc1ef8000}, {0xc1efa000}, {0xc1efc000}, {0xc1efe000}, - {0xc1f00000}, {0xc1f02000}, {0xc1f04000}, {0xc1f06000}, - {0xc1f08000}, {0xc1f0a000}, {0xc1f0c000}, {0xc1f0e000}, - {0xc1f10000}, {0xc1f12000}, {0xc1f14000}, {0xc1f16000}, - {0xc1f18000}, {0xc1f1a000}, {0xc1f1c000}, {0xc1f1e000}, - {0xc1f20000}, {0xc1f22000}, {0xc1f24000}, {0xc1f26000}, - {0xc1f28000}, {0xc1f2a000}, {0xc1f2c000}, {0xc1f2e000}, - {0xc1f30000}, {0xc1f32000}, {0xc1f34000}, {0xc1f36000}, - {0xc1f38000}, {0xc1f3a000}, {0xc1f3c000}, {0xc1f3e000}, - {0xc1f40000}, {0xc1f42000}, {0xc1f44000}, {0xc1f46000}, - {0xc1f48000}, {0xc1f4a000}, {0xc1f4c000}, {0xc1f4e000}, - {0xc1f50000}, {0xc1f52000}, {0xc1f54000}, {0xc1f56000}, - {0xc1f58000}, {0xc1f5a000}, {0xc1f5c000}, {0xc1f5e000}, - {0xc1f60000}, {0xc1f62000}, {0xc1f64000}, {0xc1f66000}, - {0xc1f68000}, {0xc1f6a000}, {0xc1f6c000}, {0xc1f6e000}, - {0xc1f70000}, {0xc1f72000}, {0xc1f74000}, {0xc1f76000}, - {0xc1f78000}, {0xc1f7a000}, {0xc1f7c000}, {0xc1f7e000}, - {0xc1f80000}, {0xc1f82000}, {0xc1f84000}, {0xc1f86000}, - {0xc1f88000}, {0xc1f8a000}, {0xc1f8c000}, {0xc1f8e000}, - {0xc1f90000}, {0xc1f92000}, {0xc1f94000}, {0xc1f96000}, - {0xc1f98000}, {0xc1f9a000}, {0xc1f9c000}, {0xc1f9e000}, - {0xc1fa0000}, {0xc1fa2000}, {0xc1fa4000}, {0xc1fa6000}, - {0xc1fa8000}, {0xc1faa000}, {0xc1fac000}, {0xc1fae000}, - {0xc1fb0000}, {0xc1fb2000}, {0xc1fb4000}, {0xc1fb6000}, - {0xc1fb8000}, {0xc1fba000}, {0xc1fbc000}, {0xc1fbe000}, - {0xc1fc0000}, {0xc1fc2000}, {0xc1fc4000}, {0xc1fc6000}, - {0xc1fc8000}, {0xc1fca000}, {0xc1fcc000}, {0xc1fce000}, - {0xc1fd0000}, {0xc1fd2000}, {0xc1fd4000}, {0xc1fd6000}, - {0xc1fd8000}, {0xc1fda000}, {0xc1fdc000}, {0xc1fde000}, - {0xc1fe0000}, {0xc1fe2000}, {0xc1fe4000}, {0xc1fe6000}, - {0xc1fe8000}, {0xc1fea000}, {0xc1fec000}, {0xc1fee000}, - {0xc1ff0000}, {0xc1ff2000}, {0xc1ff4000}, {0xc1ff6000}, - {0xc1ff8000}, {0xc1ffa000}, {0xc1ffc000}, {0xc1ffe000}, - {0xc2000000}, {0xc2002000}, {0xc2004000}, {0xc2006000}, - {0xc2008000}, {0xc200a000}, {0xc200c000}, {0xc200e000}, - {0xc2010000}, {0xc2012000}, {0xc2014000}, {0xc2016000}, - {0xc2018000}, {0xc201a000}, {0xc201c000}, {0xc201e000}, - {0xc2020000}, {0xc2022000}, {0xc2024000}, {0xc2026000}, - {0xc2028000}, {0xc202a000}, {0xc202c000}, {0xc202e000}, - {0xc2030000}, {0xc2032000}, {0xc2034000}, {0xc2036000}, - {0xc2038000}, {0xc203a000}, {0xc203c000}, {0xc203e000}, - {0xc2040000}, {0xc2042000}, {0xc2044000}, {0xc2046000}, - {0xc2048000}, {0xc204a000}, {0xc204c000}, {0xc204e000}, - {0xc2050000}, {0xc2052000}, {0xc2054000}, {0xc2056000}, - {0xc2058000}, {0xc205a000}, {0xc205c000}, {0xc205e000}, - {0xc2060000}, {0xc2062000}, {0xc2064000}, {0xc2066000}, - {0xc2068000}, {0xc206a000}, {0xc206c000}, {0xc206e000}, - {0xc2070000}, {0xc2072000}, {0xc2074000}, {0xc2076000}, - {0xc2078000}, {0xc207a000}, {0xc207c000}, {0xc207e000}, - {0xc2080000}, {0xc2082000}, {0xc2084000}, {0xc2086000}, - {0xc2088000}, {0xc208a000}, {0xc208c000}, {0xc208e000}, - {0xc2090000}, {0xc2092000}, {0xc2094000}, {0xc2096000}, - {0xc2098000}, {0xc209a000}, {0xc209c000}, {0xc209e000}, - {0xc20a0000}, {0xc20a2000}, {0xc20a4000}, {0xc20a6000}, - {0xc20a8000}, {0xc20aa000}, {0xc20ac000}, {0xc20ae000}, - {0xc20b0000}, {0xc20b2000}, {0xc20b4000}, {0xc20b6000}, - {0xc20b8000}, {0xc20ba000}, {0xc20bc000}, {0xc20be000}, - {0xc20c0000}, {0xc20c2000}, {0xc20c4000}, {0xc20c6000}, - {0xc20c8000}, {0xc20ca000}, {0xc20cc000}, {0xc20ce000}, - {0xc20d0000}, {0xc20d2000}, {0xc20d4000}, {0xc20d6000}, - {0xc20d8000}, {0xc20da000}, {0xc20dc000}, {0xc20de000}, - {0xc20e0000}, {0xc20e2000}, {0xc20e4000}, {0xc20e6000}, - {0xc20e8000}, {0xc20ea000}, {0xc20ec000}, {0xc20ee000}, - {0xc20f0000}, {0xc20f2000}, {0xc20f4000}, {0xc20f6000}, - {0xc20f8000}, {0xc20fa000}, {0xc20fc000}, {0xc20fe000}, - {0xc2100000}, {0xc2102000}, {0xc2104000}, {0xc2106000}, - {0xc2108000}, {0xc210a000}, {0xc210c000}, {0xc210e000}, - {0xc2110000}, {0xc2112000}, {0xc2114000}, {0xc2116000}, - {0xc2118000}, {0xc211a000}, {0xc211c000}, {0xc211e000}, - {0xc2120000}, {0xc2122000}, {0xc2124000}, {0xc2126000}, - {0xc2128000}, {0xc212a000}, {0xc212c000}, {0xc212e000}, - {0xc2130000}, {0xc2132000}, {0xc2134000}, {0xc2136000}, - {0xc2138000}, {0xc213a000}, {0xc213c000}, {0xc213e000}, - {0xc2140000}, {0xc2142000}, {0xc2144000}, {0xc2146000}, - {0xc2148000}, {0xc214a000}, {0xc214c000}, {0xc214e000}, - {0xc2150000}, {0xc2152000}, {0xc2154000}, {0xc2156000}, - {0xc2158000}, {0xc215a000}, {0xc215c000}, {0xc215e000}, - {0xc2160000}, {0xc2162000}, {0xc2164000}, {0xc2166000}, - {0xc2168000}, {0xc216a000}, {0xc216c000}, {0xc216e000}, - {0xc2170000}, {0xc2172000}, {0xc2174000}, {0xc2176000}, - {0xc2178000}, {0xc217a000}, {0xc217c000}, {0xc217e000}, - {0xc2180000}, {0xc2182000}, {0xc2184000}, {0xc2186000}, - {0xc2188000}, {0xc218a000}, {0xc218c000}, {0xc218e000}, - {0xc2190000}, {0xc2192000}, {0xc2194000}, {0xc2196000}, - {0xc2198000}, {0xc219a000}, {0xc219c000}, {0xc219e000}, - {0xc21a0000}, {0xc21a2000}, {0xc21a4000}, {0xc21a6000}, - {0xc21a8000}, {0xc21aa000}, {0xc21ac000}, {0xc21ae000}, - {0xc21b0000}, {0xc21b2000}, {0xc21b4000}, {0xc21b6000}, - {0xc21b8000}, {0xc21ba000}, {0xc21bc000}, {0xc21be000}, - {0xc21c0000}, {0xc21c2000}, {0xc21c4000}, {0xc21c6000}, - {0xc21c8000}, {0xc21ca000}, {0xc21cc000}, {0xc21ce000}, - {0xc21d0000}, {0xc21d2000}, {0xc21d4000}, {0xc21d6000}, - {0xc21d8000}, {0xc21da000}, {0xc21dc000}, {0xc21de000}, - {0xc21e0000}, {0xc21e2000}, {0xc21e4000}, {0xc21e6000}, - {0xc21e8000}, {0xc21ea000}, {0xc21ec000}, {0xc21ee000}, - {0xc21f0000}, {0xc21f2000}, {0xc21f4000}, {0xc21f6000}, - {0xc21f8000}, {0xc21fa000}, {0xc21fc000}, {0xc21fe000}, - {0xc2200000}, {0xc2202000}, {0xc2204000}, {0xc2206000}, - {0xc2208000}, {0xc220a000}, {0xc220c000}, {0xc220e000}, - {0xc2210000}, {0xc2212000}, {0xc2214000}, {0xc2216000}, - {0xc2218000}, {0xc221a000}, {0xc221c000}, {0xc221e000}, - {0xc2220000}, {0xc2222000}, {0xc2224000}, {0xc2226000}, - {0xc2228000}, {0xc222a000}, {0xc222c000}, {0xc222e000}, - {0xc2230000}, {0xc2232000}, {0xc2234000}, {0xc2236000}, - {0xc2238000}, {0xc223a000}, {0xc223c000}, {0xc223e000}, - {0xc2240000}, {0xc2242000}, {0xc2244000}, {0xc2246000}, - {0xc2248000}, {0xc224a000}, {0xc224c000}, {0xc224e000}, - {0xc2250000}, {0xc2252000}, {0xc2254000}, {0xc2256000}, - {0xc2258000}, {0xc225a000}, {0xc225c000}, {0xc225e000}, - {0xc2260000}, {0xc2262000}, {0xc2264000}, {0xc2266000}, - {0xc2268000}, {0xc226a000}, {0xc226c000}, {0xc226e000}, - {0xc2270000}, {0xc2272000}, {0xc2274000}, {0xc2276000}, - {0xc2278000}, {0xc227a000}, {0xc227c000}, {0xc227e000}, - {0xc2280000}, {0xc2282000}, {0xc2284000}, {0xc2286000}, - {0xc2288000}, {0xc228a000}, {0xc228c000}, {0xc228e000}, - {0xc2290000}, {0xc2292000}, {0xc2294000}, {0xc2296000}, - {0xc2298000}, {0xc229a000}, {0xc229c000}, {0xc229e000}, - {0xc22a0000}, {0xc22a2000}, {0xc22a4000}, {0xc22a6000}, - {0xc22a8000}, {0xc22aa000}, {0xc22ac000}, {0xc22ae000}, - {0xc22b0000}, {0xc22b2000}, {0xc22b4000}, {0xc22b6000}, - {0xc22b8000}, {0xc22ba000}, {0xc22bc000}, {0xc22be000}, - {0xc22c0000}, {0xc22c2000}, {0xc22c4000}, {0xc22c6000}, - {0xc22c8000}, {0xc22ca000}, {0xc22cc000}, {0xc22ce000}, - {0xc22d0000}, {0xc22d2000}, {0xc22d4000}, {0xc22d6000}, - {0xc22d8000}, {0xc22da000}, {0xc22dc000}, {0xc22de000}, - {0xc22e0000}, {0xc22e2000}, {0xc22e4000}, {0xc22e6000}, - {0xc22e8000}, {0xc22ea000}, {0xc22ec000}, {0xc22ee000}, - {0xc22f0000}, {0xc22f2000}, {0xc22f4000}, {0xc22f6000}, - {0xc22f8000}, {0xc22fa000}, {0xc22fc000}, {0xc22fe000}, - {0xc2300000}, {0xc2302000}, {0xc2304000}, {0xc2306000}, - {0xc2308000}, {0xc230a000}, {0xc230c000}, {0xc230e000}, - {0xc2310000}, {0xc2312000}, {0xc2314000}, {0xc2316000}, - {0xc2318000}, {0xc231a000}, {0xc231c000}, {0xc231e000}, - {0xc2320000}, {0xc2322000}, {0xc2324000}, {0xc2326000}, - {0xc2328000}, {0xc232a000}, {0xc232c000}, {0xc232e000}, - {0xc2330000}, {0xc2332000}, {0xc2334000}, {0xc2336000}, - {0xc2338000}, {0xc233a000}, {0xc233c000}, {0xc233e000}, - {0xc2340000}, {0xc2342000}, {0xc2344000}, {0xc2346000}, - {0xc2348000}, {0xc234a000}, {0xc234c000}, {0xc234e000}, - {0xc2350000}, {0xc2352000}, {0xc2354000}, {0xc2356000}, - {0xc2358000}, {0xc235a000}, {0xc235c000}, {0xc235e000}, - {0xc2360000}, {0xc2362000}, {0xc2364000}, {0xc2366000}, - {0xc2368000}, {0xc236a000}, {0xc236c000}, {0xc236e000}, - {0xc2370000}, {0xc2372000}, {0xc2374000}, {0xc2376000}, - {0xc2378000}, {0xc237a000}, {0xc237c000}, {0xc237e000}, - {0xc2380000}, {0xc2382000}, {0xc2384000}, {0xc2386000}, - {0xc2388000}, {0xc238a000}, {0xc238c000}, {0xc238e000}, - {0xc2390000}, {0xc2392000}, {0xc2394000}, {0xc2396000}, - {0xc2398000}, {0xc239a000}, {0xc239c000}, {0xc239e000}, - {0xc23a0000}, {0xc23a2000}, {0xc23a4000}, {0xc23a6000}, - {0xc23a8000}, {0xc23aa000}, {0xc23ac000}, {0xc23ae000}, - {0xc23b0000}, {0xc23b2000}, {0xc23b4000}, {0xc23b6000}, - {0xc23b8000}, {0xc23ba000}, {0xc23bc000}, {0xc23be000}, - {0xc23c0000}, {0xc23c2000}, {0xc23c4000}, {0xc23c6000}, - {0xc23c8000}, {0xc23ca000}, {0xc23cc000}, {0xc23ce000}, - {0xc23d0000}, {0xc23d2000}, {0xc23d4000}, {0xc23d6000}, - {0xc23d8000}, {0xc23da000}, {0xc23dc000}, {0xc23de000}, - {0xc23e0000}, {0xc23e2000}, {0xc23e4000}, {0xc23e6000}, - {0xc23e8000}, {0xc23ea000}, {0xc23ec000}, {0xc23ee000}, - {0xc23f0000}, {0xc23f2000}, {0xc23f4000}, {0xc23f6000}, - {0xc23f8000}, {0xc23fa000}, {0xc23fc000}, {0xc23fe000}, - {0xc2400000}, {0xc2402000}, {0xc2404000}, {0xc2406000}, - {0xc2408000}, {0xc240a000}, {0xc240c000}, {0xc240e000}, - {0xc2410000}, {0xc2412000}, {0xc2414000}, {0xc2416000}, - {0xc2418000}, {0xc241a000}, {0xc241c000}, {0xc241e000}, - {0xc2420000}, {0xc2422000}, {0xc2424000}, {0xc2426000}, - {0xc2428000}, {0xc242a000}, {0xc242c000}, {0xc242e000}, - {0xc2430000}, {0xc2432000}, {0xc2434000}, {0xc2436000}, - {0xc2438000}, {0xc243a000}, {0xc243c000}, {0xc243e000}, - {0xc2440000}, {0xc2442000}, {0xc2444000}, {0xc2446000}, - {0xc2448000}, {0xc244a000}, {0xc244c000}, {0xc244e000}, - {0xc2450000}, {0xc2452000}, {0xc2454000}, {0xc2456000}, - {0xc2458000}, {0xc245a000}, {0xc245c000}, {0xc245e000}, - {0xc2460000}, {0xc2462000}, {0xc2464000}, {0xc2466000}, - {0xc2468000}, {0xc246a000}, {0xc246c000}, {0xc246e000}, - {0xc2470000}, {0xc2472000}, {0xc2474000}, {0xc2476000}, - {0xc2478000}, {0xc247a000}, {0xc247c000}, {0xc247e000}, - {0xc2480000}, {0xc2482000}, {0xc2484000}, {0xc2486000}, - {0xc2488000}, {0xc248a000}, {0xc248c000}, {0xc248e000}, - {0xc2490000}, {0xc2492000}, {0xc2494000}, {0xc2496000}, - {0xc2498000}, {0xc249a000}, {0xc249c000}, {0xc249e000}, - {0xc24a0000}, {0xc24a2000}, {0xc24a4000}, {0xc24a6000}, - {0xc24a8000}, {0xc24aa000}, {0xc24ac000}, {0xc24ae000}, - {0xc24b0000}, {0xc24b2000}, {0xc24b4000}, {0xc24b6000}, - {0xc24b8000}, {0xc24ba000}, {0xc24bc000}, {0xc24be000}, - {0xc24c0000}, {0xc24c2000}, {0xc24c4000}, {0xc24c6000}, - {0xc24c8000}, {0xc24ca000}, {0xc24cc000}, {0xc24ce000}, - {0xc24d0000}, {0xc24d2000}, {0xc24d4000}, {0xc24d6000}, - {0xc24d8000}, {0xc24da000}, {0xc24dc000}, {0xc24de000}, - {0xc24e0000}, {0xc24e2000}, {0xc24e4000}, {0xc24e6000}, - {0xc24e8000}, {0xc24ea000}, {0xc24ec000}, {0xc24ee000}, - {0xc24f0000}, {0xc24f2000}, {0xc24f4000}, {0xc24f6000}, - {0xc24f8000}, {0xc24fa000}, {0xc24fc000}, {0xc24fe000}, - {0xc2500000}, {0xc2502000}, {0xc2504000}, {0xc2506000}, - {0xc2508000}, {0xc250a000}, {0xc250c000}, {0xc250e000}, - {0xc2510000}, {0xc2512000}, {0xc2514000}, {0xc2516000}, - {0xc2518000}, {0xc251a000}, {0xc251c000}, {0xc251e000}, - {0xc2520000}, {0xc2522000}, {0xc2524000}, {0xc2526000}, - {0xc2528000}, {0xc252a000}, {0xc252c000}, {0xc252e000}, - {0xc2530000}, {0xc2532000}, {0xc2534000}, {0xc2536000}, - {0xc2538000}, {0xc253a000}, {0xc253c000}, {0xc253e000}, - {0xc2540000}, {0xc2542000}, {0xc2544000}, {0xc2546000}, - {0xc2548000}, {0xc254a000}, {0xc254c000}, {0xc254e000}, - {0xc2550000}, {0xc2552000}, {0xc2554000}, {0xc2556000}, - {0xc2558000}, {0xc255a000}, {0xc255c000}, {0xc255e000}, - {0xc2560000}, {0xc2562000}, {0xc2564000}, {0xc2566000}, - {0xc2568000}, {0xc256a000}, {0xc256c000}, {0xc256e000}, - {0xc2570000}, {0xc2572000}, {0xc2574000}, {0xc2576000}, - {0xc2578000}, {0xc257a000}, {0xc257c000}, {0xc257e000}, - {0xc2580000}, {0xc2582000}, {0xc2584000}, {0xc2586000}, - {0xc2588000}, {0xc258a000}, {0xc258c000}, {0xc258e000}, - {0xc2590000}, {0xc2592000}, {0xc2594000}, {0xc2596000}, - {0xc2598000}, {0xc259a000}, {0xc259c000}, {0xc259e000}, - {0xc25a0000}, {0xc25a2000}, {0xc25a4000}, {0xc25a6000}, - {0xc25a8000}, {0xc25aa000}, {0xc25ac000}, {0xc25ae000}, - {0xc25b0000}, {0xc25b2000}, {0xc25b4000}, {0xc25b6000}, - {0xc25b8000}, {0xc25ba000}, {0xc25bc000}, {0xc25be000}, - {0xc25c0000}, {0xc25c2000}, {0xc25c4000}, {0xc25c6000}, - {0xc25c8000}, {0xc25ca000}, {0xc25cc000}, {0xc25ce000}, - {0xc25d0000}, {0xc25d2000}, {0xc25d4000}, {0xc25d6000}, - {0xc25d8000}, {0xc25da000}, {0xc25dc000}, {0xc25de000}, - {0xc25e0000}, {0xc25e2000}, {0xc25e4000}, {0xc25e6000}, - {0xc25e8000}, {0xc25ea000}, {0xc25ec000}, {0xc25ee000}, - {0xc25f0000}, {0xc25f2000}, {0xc25f4000}, {0xc25f6000}, - {0xc25f8000}, {0xc25fa000}, {0xc25fc000}, {0xc25fe000}, - {0xc2600000}, {0xc2602000}, {0xc2604000}, {0xc2606000}, - {0xc2608000}, {0xc260a000}, {0xc260c000}, {0xc260e000}, - {0xc2610000}, {0xc2612000}, {0xc2614000}, {0xc2616000}, - {0xc2618000}, {0xc261a000}, {0xc261c000}, {0xc261e000}, - {0xc2620000}, {0xc2622000}, {0xc2624000}, {0xc2626000}, - {0xc2628000}, {0xc262a000}, {0xc262c000}, {0xc262e000}, - {0xc2630000}, {0xc2632000}, {0xc2634000}, {0xc2636000}, - {0xc2638000}, {0xc263a000}, {0xc263c000}, {0xc263e000}, - {0xc2640000}, {0xc2642000}, {0xc2644000}, {0xc2646000}, - {0xc2648000}, {0xc264a000}, {0xc264c000}, {0xc264e000}, - {0xc2650000}, {0xc2652000}, {0xc2654000}, {0xc2656000}, - {0xc2658000}, {0xc265a000}, {0xc265c000}, {0xc265e000}, - {0xc2660000}, {0xc2662000}, {0xc2664000}, {0xc2666000}, - {0xc2668000}, {0xc266a000}, {0xc266c000}, {0xc266e000}, - {0xc2670000}, {0xc2672000}, {0xc2674000}, {0xc2676000}, - {0xc2678000}, {0xc267a000}, {0xc267c000}, {0xc267e000}, - {0xc2680000}, {0xc2682000}, {0xc2684000}, {0xc2686000}, - {0xc2688000}, {0xc268a000}, {0xc268c000}, {0xc268e000}, - {0xc2690000}, {0xc2692000}, {0xc2694000}, {0xc2696000}, - {0xc2698000}, {0xc269a000}, {0xc269c000}, {0xc269e000}, - {0xc26a0000}, {0xc26a2000}, {0xc26a4000}, {0xc26a6000}, - {0xc26a8000}, {0xc26aa000}, {0xc26ac000}, {0xc26ae000}, - {0xc26b0000}, {0xc26b2000}, {0xc26b4000}, {0xc26b6000}, - {0xc26b8000}, {0xc26ba000}, {0xc26bc000}, {0xc26be000}, - {0xc26c0000}, {0xc26c2000}, {0xc26c4000}, {0xc26c6000}, - {0xc26c8000}, {0xc26ca000}, {0xc26cc000}, {0xc26ce000}, - {0xc26d0000}, {0xc26d2000}, {0xc26d4000}, {0xc26d6000}, - {0xc26d8000}, {0xc26da000}, {0xc26dc000}, {0xc26de000}, - {0xc26e0000}, {0xc26e2000}, {0xc26e4000}, {0xc26e6000}, - {0xc26e8000}, {0xc26ea000}, {0xc26ec000}, {0xc26ee000}, - {0xc26f0000}, {0xc26f2000}, {0xc26f4000}, {0xc26f6000}, - {0xc26f8000}, {0xc26fa000}, {0xc26fc000}, {0xc26fe000}, - {0xc2700000}, {0xc2702000}, {0xc2704000}, {0xc2706000}, - {0xc2708000}, {0xc270a000}, {0xc270c000}, {0xc270e000}, - {0xc2710000}, {0xc2712000}, {0xc2714000}, {0xc2716000}, - {0xc2718000}, {0xc271a000}, {0xc271c000}, {0xc271e000}, - {0xc2720000}, {0xc2722000}, {0xc2724000}, {0xc2726000}, - {0xc2728000}, {0xc272a000}, {0xc272c000}, {0xc272e000}, - {0xc2730000}, {0xc2732000}, {0xc2734000}, {0xc2736000}, - {0xc2738000}, {0xc273a000}, {0xc273c000}, {0xc273e000}, - {0xc2740000}, {0xc2742000}, {0xc2744000}, {0xc2746000}, - {0xc2748000}, {0xc274a000}, {0xc274c000}, {0xc274e000}, - {0xc2750000}, {0xc2752000}, {0xc2754000}, {0xc2756000}, - {0xc2758000}, {0xc275a000}, {0xc275c000}, {0xc275e000}, - {0xc2760000}, {0xc2762000}, {0xc2764000}, {0xc2766000}, - {0xc2768000}, {0xc276a000}, {0xc276c000}, {0xc276e000}, - {0xc2770000}, {0xc2772000}, {0xc2774000}, {0xc2776000}, - {0xc2778000}, {0xc277a000}, {0xc277c000}, {0xc277e000}, - {0xc2780000}, {0xc2782000}, {0xc2784000}, {0xc2786000}, - {0xc2788000}, {0xc278a000}, {0xc278c000}, {0xc278e000}, - {0xc2790000}, {0xc2792000}, {0xc2794000}, {0xc2796000}, - {0xc2798000}, {0xc279a000}, {0xc279c000}, {0xc279e000}, - {0xc27a0000}, {0xc27a2000}, {0xc27a4000}, {0xc27a6000}, - {0xc27a8000}, {0xc27aa000}, {0xc27ac000}, {0xc27ae000}, - {0xc27b0000}, {0xc27b2000}, {0xc27b4000}, {0xc27b6000}, - {0xc27b8000}, {0xc27ba000}, {0xc27bc000}, {0xc27be000}, - {0xc27c0000}, {0xc27c2000}, {0xc27c4000}, {0xc27c6000}, - {0xc27c8000}, {0xc27ca000}, {0xc27cc000}, {0xc27ce000}, - {0xc27d0000}, {0xc27d2000}, {0xc27d4000}, {0xc27d6000}, - {0xc27d8000}, {0xc27da000}, {0xc27dc000}, {0xc27de000}, - {0xc27e0000}, {0xc27e2000}, {0xc27e4000}, {0xc27e6000}, - {0xc27e8000}, {0xc27ea000}, {0xc27ec000}, {0xc27ee000}, - {0xc27f0000}, {0xc27f2000}, {0xc27f4000}, {0xc27f6000}, - {0xc27f8000}, {0xc27fa000}, {0xc27fc000}, {0xc27fe000}, - {0xc2800000}, {0xc2802000}, {0xc2804000}, {0xc2806000}, - {0xc2808000}, {0xc280a000}, {0xc280c000}, {0xc280e000}, - {0xc2810000}, {0xc2812000}, {0xc2814000}, {0xc2816000}, - {0xc2818000}, {0xc281a000}, {0xc281c000}, {0xc281e000}, - {0xc2820000}, {0xc2822000}, {0xc2824000}, {0xc2826000}, - {0xc2828000}, {0xc282a000}, {0xc282c000}, {0xc282e000}, - {0xc2830000}, {0xc2832000}, {0xc2834000}, {0xc2836000}, - {0xc2838000}, {0xc283a000}, {0xc283c000}, {0xc283e000}, - {0xc2840000}, {0xc2842000}, {0xc2844000}, {0xc2846000}, - {0xc2848000}, {0xc284a000}, {0xc284c000}, {0xc284e000}, - {0xc2850000}, {0xc2852000}, {0xc2854000}, {0xc2856000}, - {0xc2858000}, {0xc285a000}, {0xc285c000}, {0xc285e000}, - {0xc2860000}, {0xc2862000}, {0xc2864000}, {0xc2866000}, - {0xc2868000}, {0xc286a000}, {0xc286c000}, {0xc286e000}, - {0xc2870000}, {0xc2872000}, {0xc2874000}, {0xc2876000}, - {0xc2878000}, {0xc287a000}, {0xc287c000}, {0xc287e000}, - {0xc2880000}, {0xc2882000}, {0xc2884000}, {0xc2886000}, - {0xc2888000}, {0xc288a000}, {0xc288c000}, {0xc288e000}, - {0xc2890000}, {0xc2892000}, {0xc2894000}, {0xc2896000}, - {0xc2898000}, {0xc289a000}, {0xc289c000}, {0xc289e000}, - {0xc28a0000}, {0xc28a2000}, {0xc28a4000}, {0xc28a6000}, - {0xc28a8000}, {0xc28aa000}, {0xc28ac000}, {0xc28ae000}, - {0xc28b0000}, {0xc28b2000}, {0xc28b4000}, {0xc28b6000}, - {0xc28b8000}, {0xc28ba000}, {0xc28bc000}, {0xc28be000}, - {0xc28c0000}, {0xc28c2000}, {0xc28c4000}, {0xc28c6000}, - {0xc28c8000}, {0xc28ca000}, {0xc28cc000}, {0xc28ce000}, - {0xc28d0000}, {0xc28d2000}, {0xc28d4000}, {0xc28d6000}, - {0xc28d8000}, {0xc28da000}, {0xc28dc000}, {0xc28de000}, - {0xc28e0000}, {0xc28e2000}, {0xc28e4000}, {0xc28e6000}, - {0xc28e8000}, {0xc28ea000}, {0xc28ec000}, {0xc28ee000}, - {0xc28f0000}, {0xc28f2000}, {0xc28f4000}, {0xc28f6000}, - {0xc28f8000}, {0xc28fa000}, {0xc28fc000}, {0xc28fe000}, - {0xc2900000}, {0xc2902000}, {0xc2904000}, {0xc2906000}, - {0xc2908000}, {0xc290a000}, {0xc290c000}, {0xc290e000}, - {0xc2910000}, {0xc2912000}, {0xc2914000}, {0xc2916000}, - {0xc2918000}, {0xc291a000}, {0xc291c000}, {0xc291e000}, - {0xc2920000}, {0xc2922000}, {0xc2924000}, {0xc2926000}, - {0xc2928000}, {0xc292a000}, {0xc292c000}, {0xc292e000}, - {0xc2930000}, {0xc2932000}, {0xc2934000}, {0xc2936000}, - {0xc2938000}, {0xc293a000}, {0xc293c000}, {0xc293e000}, - {0xc2940000}, {0xc2942000}, {0xc2944000}, {0xc2946000}, - {0xc2948000}, {0xc294a000}, {0xc294c000}, {0xc294e000}, - {0xc2950000}, {0xc2952000}, {0xc2954000}, {0xc2956000}, - {0xc2958000}, {0xc295a000}, {0xc295c000}, {0xc295e000}, - {0xc2960000}, {0xc2962000}, {0xc2964000}, {0xc2966000}, - {0xc2968000}, {0xc296a000}, {0xc296c000}, {0xc296e000}, - {0xc2970000}, {0xc2972000}, {0xc2974000}, {0xc2976000}, - {0xc2978000}, {0xc297a000}, {0xc297c000}, {0xc297e000}, - {0xc2980000}, {0xc2982000}, {0xc2984000}, {0xc2986000}, - {0xc2988000}, {0xc298a000}, {0xc298c000}, {0xc298e000}, - {0xc2990000}, {0xc2992000}, {0xc2994000}, {0xc2996000}, - {0xc2998000}, {0xc299a000}, {0xc299c000}, {0xc299e000}, - {0xc29a0000}, {0xc29a2000}, {0xc29a4000}, {0xc29a6000}, - {0xc29a8000}, {0xc29aa000}, {0xc29ac000}, {0xc29ae000}, - {0xc29b0000}, {0xc29b2000}, {0xc29b4000}, {0xc29b6000}, - {0xc29b8000}, {0xc29ba000}, {0xc29bc000}, {0xc29be000}, - {0xc29c0000}, {0xc29c2000}, {0xc29c4000}, {0xc29c6000}, - {0xc29c8000}, {0xc29ca000}, {0xc29cc000}, {0xc29ce000}, - {0xc29d0000}, {0xc29d2000}, {0xc29d4000}, {0xc29d6000}, - {0xc29d8000}, {0xc29da000}, {0xc29dc000}, {0xc29de000}, - {0xc29e0000}, {0xc29e2000}, {0xc29e4000}, {0xc29e6000}, - {0xc29e8000}, {0xc29ea000}, {0xc29ec000}, {0xc29ee000}, - {0xc29f0000}, {0xc29f2000}, {0xc29f4000}, {0xc29f6000}, - {0xc29f8000}, {0xc29fa000}, {0xc29fc000}, {0xc29fe000}, - {0xc2a00000}, {0xc2a02000}, {0xc2a04000}, {0xc2a06000}, - {0xc2a08000}, {0xc2a0a000}, {0xc2a0c000}, {0xc2a0e000}, - {0xc2a10000}, {0xc2a12000}, {0xc2a14000}, {0xc2a16000}, - {0xc2a18000}, {0xc2a1a000}, {0xc2a1c000}, {0xc2a1e000}, - {0xc2a20000}, {0xc2a22000}, {0xc2a24000}, {0xc2a26000}, - {0xc2a28000}, {0xc2a2a000}, {0xc2a2c000}, {0xc2a2e000}, - {0xc2a30000}, {0xc2a32000}, {0xc2a34000}, {0xc2a36000}, - {0xc2a38000}, {0xc2a3a000}, {0xc2a3c000}, {0xc2a3e000}, - {0xc2a40000}, {0xc2a42000}, {0xc2a44000}, {0xc2a46000}, - {0xc2a48000}, {0xc2a4a000}, {0xc2a4c000}, {0xc2a4e000}, - {0xc2a50000}, {0xc2a52000}, {0xc2a54000}, {0xc2a56000}, - {0xc2a58000}, {0xc2a5a000}, {0xc2a5c000}, {0xc2a5e000}, - {0xc2a60000}, {0xc2a62000}, {0xc2a64000}, {0xc2a66000}, - {0xc2a68000}, {0xc2a6a000}, {0xc2a6c000}, {0xc2a6e000}, - {0xc2a70000}, {0xc2a72000}, {0xc2a74000}, {0xc2a76000}, - {0xc2a78000}, {0xc2a7a000}, {0xc2a7c000}, {0xc2a7e000}, - {0xc2a80000}, {0xc2a82000}, {0xc2a84000}, {0xc2a86000}, - {0xc2a88000}, {0xc2a8a000}, {0xc2a8c000}, {0xc2a8e000}, - {0xc2a90000}, {0xc2a92000}, {0xc2a94000}, {0xc2a96000}, - {0xc2a98000}, {0xc2a9a000}, {0xc2a9c000}, {0xc2a9e000}, - {0xc2aa0000}, {0xc2aa2000}, {0xc2aa4000}, {0xc2aa6000}, - {0xc2aa8000}, {0xc2aaa000}, {0xc2aac000}, {0xc2aae000}, - {0xc2ab0000}, {0xc2ab2000}, {0xc2ab4000}, {0xc2ab6000}, - {0xc2ab8000}, {0xc2aba000}, {0xc2abc000}, {0xc2abe000}, - {0xc2ac0000}, {0xc2ac2000}, {0xc2ac4000}, {0xc2ac6000}, - {0xc2ac8000}, {0xc2aca000}, {0xc2acc000}, {0xc2ace000}, - {0xc2ad0000}, {0xc2ad2000}, {0xc2ad4000}, {0xc2ad6000}, - {0xc2ad8000}, {0xc2ada000}, {0xc2adc000}, {0xc2ade000}, - {0xc2ae0000}, {0xc2ae2000}, {0xc2ae4000}, {0xc2ae6000}, - {0xc2ae8000}, {0xc2aea000}, {0xc2aec000}, {0xc2aee000}, - {0xc2af0000}, {0xc2af2000}, {0xc2af4000}, {0xc2af6000}, - {0xc2af8000}, {0xc2afa000}, {0xc2afc000}, {0xc2afe000}, - {0xc2b00000}, {0xc2b02000}, {0xc2b04000}, {0xc2b06000}, - {0xc2b08000}, {0xc2b0a000}, {0xc2b0c000}, {0xc2b0e000}, - {0xc2b10000}, {0xc2b12000}, {0xc2b14000}, {0xc2b16000}, - {0xc2b18000}, {0xc2b1a000}, {0xc2b1c000}, {0xc2b1e000}, - {0xc2b20000}, {0xc2b22000}, {0xc2b24000}, {0xc2b26000}, - {0xc2b28000}, {0xc2b2a000}, {0xc2b2c000}, {0xc2b2e000}, - {0xc2b30000}, {0xc2b32000}, {0xc2b34000}, {0xc2b36000}, - {0xc2b38000}, {0xc2b3a000}, {0xc2b3c000}, {0xc2b3e000}, - {0xc2b40000}, {0xc2b42000}, {0xc2b44000}, {0xc2b46000}, - {0xc2b48000}, {0xc2b4a000}, {0xc2b4c000}, {0xc2b4e000}, - {0xc2b50000}, {0xc2b52000}, {0xc2b54000}, {0xc2b56000}, - {0xc2b58000}, {0xc2b5a000}, {0xc2b5c000}, {0xc2b5e000}, - {0xc2b60000}, {0xc2b62000}, {0xc2b64000}, {0xc2b66000}, - {0xc2b68000}, {0xc2b6a000}, {0xc2b6c000}, {0xc2b6e000}, - {0xc2b70000}, {0xc2b72000}, {0xc2b74000}, {0xc2b76000}, - {0xc2b78000}, {0xc2b7a000}, {0xc2b7c000}, {0xc2b7e000}, - {0xc2b80000}, {0xc2b82000}, {0xc2b84000}, {0xc2b86000}, - {0xc2b88000}, {0xc2b8a000}, {0xc2b8c000}, {0xc2b8e000}, - {0xc2b90000}, {0xc2b92000}, {0xc2b94000}, {0xc2b96000}, - {0xc2b98000}, {0xc2b9a000}, {0xc2b9c000}, {0xc2b9e000}, - {0xc2ba0000}, {0xc2ba2000}, {0xc2ba4000}, {0xc2ba6000}, - {0xc2ba8000}, {0xc2baa000}, {0xc2bac000}, {0xc2bae000}, - {0xc2bb0000}, {0xc2bb2000}, {0xc2bb4000}, {0xc2bb6000}, - {0xc2bb8000}, {0xc2bba000}, {0xc2bbc000}, {0xc2bbe000}, - {0xc2bc0000}, {0xc2bc2000}, {0xc2bc4000}, {0xc2bc6000}, - {0xc2bc8000}, {0xc2bca000}, {0xc2bcc000}, {0xc2bce000}, - {0xc2bd0000}, {0xc2bd2000}, {0xc2bd4000}, {0xc2bd6000}, - {0xc2bd8000}, {0xc2bda000}, {0xc2bdc000}, {0xc2bde000}, - {0xc2be0000}, {0xc2be2000}, {0xc2be4000}, {0xc2be6000}, - {0xc2be8000}, {0xc2bea000}, {0xc2bec000}, {0xc2bee000}, - {0xc2bf0000}, {0xc2bf2000}, {0xc2bf4000}, {0xc2bf6000}, - {0xc2bf8000}, {0xc2bfa000}, {0xc2bfc000}, {0xc2bfe000}, - {0xc2c00000}, {0xc2c02000}, {0xc2c04000}, {0xc2c06000}, - {0xc2c08000}, {0xc2c0a000}, {0xc2c0c000}, {0xc2c0e000}, - {0xc2c10000}, {0xc2c12000}, {0xc2c14000}, {0xc2c16000}, - {0xc2c18000}, {0xc2c1a000}, {0xc2c1c000}, {0xc2c1e000}, - {0xc2c20000}, {0xc2c22000}, {0xc2c24000}, {0xc2c26000}, - {0xc2c28000}, {0xc2c2a000}, {0xc2c2c000}, {0xc2c2e000}, - {0xc2c30000}, {0xc2c32000}, {0xc2c34000}, {0xc2c36000}, - {0xc2c38000}, {0xc2c3a000}, {0xc2c3c000}, {0xc2c3e000}, - {0xc2c40000}, {0xc2c42000}, {0xc2c44000}, {0xc2c46000}, - {0xc2c48000}, {0xc2c4a000}, {0xc2c4c000}, {0xc2c4e000}, - {0xc2c50000}, {0xc2c52000}, {0xc2c54000}, {0xc2c56000}, - {0xc2c58000}, {0xc2c5a000}, {0xc2c5c000}, {0xc2c5e000}, - {0xc2c60000}, {0xc2c62000}, {0xc2c64000}, {0xc2c66000}, - {0xc2c68000}, {0xc2c6a000}, {0xc2c6c000}, {0xc2c6e000}, - {0xc2c70000}, {0xc2c72000}, {0xc2c74000}, {0xc2c76000}, - {0xc2c78000}, {0xc2c7a000}, {0xc2c7c000}, {0xc2c7e000}, - {0xc2c80000}, {0xc2c82000}, {0xc2c84000}, {0xc2c86000}, - {0xc2c88000}, {0xc2c8a000}, {0xc2c8c000}, {0xc2c8e000}, - {0xc2c90000}, {0xc2c92000}, {0xc2c94000}, {0xc2c96000}, - {0xc2c98000}, {0xc2c9a000}, {0xc2c9c000}, {0xc2c9e000}, - {0xc2ca0000}, {0xc2ca2000}, {0xc2ca4000}, {0xc2ca6000}, - {0xc2ca8000}, {0xc2caa000}, {0xc2cac000}, {0xc2cae000}, - {0xc2cb0000}, {0xc2cb2000}, {0xc2cb4000}, {0xc2cb6000}, - {0xc2cb8000}, {0xc2cba000}, {0xc2cbc000}, {0xc2cbe000}, - {0xc2cc0000}, {0xc2cc2000}, {0xc2cc4000}, {0xc2cc6000}, - {0xc2cc8000}, {0xc2cca000}, {0xc2ccc000}, {0xc2cce000}, - {0xc2cd0000}, {0xc2cd2000}, {0xc2cd4000}, {0xc2cd6000}, - {0xc2cd8000}, {0xc2cda000}, {0xc2cdc000}, {0xc2cde000}, - {0xc2ce0000}, {0xc2ce2000}, {0xc2ce4000}, {0xc2ce6000}, - {0xc2ce8000}, {0xc2cea000}, {0xc2cec000}, {0xc2cee000}, - {0xc2cf0000}, {0xc2cf2000}, {0xc2cf4000}, {0xc2cf6000}, - {0xc2cf8000}, {0xc2cfa000}, {0xc2cfc000}, {0xc2cfe000}, - {0xc2d00000}, {0xc2d02000}, {0xc2d04000}, {0xc2d06000}, - {0xc2d08000}, {0xc2d0a000}, {0xc2d0c000}, {0xc2d0e000}, - {0xc2d10000}, {0xc2d12000}, {0xc2d14000}, {0xc2d16000}, - {0xc2d18000}, {0xc2d1a000}, {0xc2d1c000}, {0xc2d1e000}, - {0xc2d20000}, {0xc2d22000}, {0xc2d24000}, {0xc2d26000}, - {0xc2d28000}, {0xc2d2a000}, {0xc2d2c000}, {0xc2d2e000}, - {0xc2d30000}, {0xc2d32000}, {0xc2d34000}, {0xc2d36000}, - {0xc2d38000}, {0xc2d3a000}, {0xc2d3c000}, {0xc2d3e000}, - {0xc2d40000}, {0xc2d42000}, {0xc2d44000}, {0xc2d46000}, - {0xc2d48000}, {0xc2d4a000}, {0xc2d4c000}, {0xc2d4e000}, - {0xc2d50000}, {0xc2d52000}, {0xc2d54000}, {0xc2d56000}, - {0xc2d58000}, {0xc2d5a000}, {0xc2d5c000}, {0xc2d5e000}, - {0xc2d60000}, {0xc2d62000}, {0xc2d64000}, {0xc2d66000}, - {0xc2d68000}, {0xc2d6a000}, {0xc2d6c000}, {0xc2d6e000}, - {0xc2d70000}, {0xc2d72000}, {0xc2d74000}, {0xc2d76000}, - {0xc2d78000}, {0xc2d7a000}, {0xc2d7c000}, {0xc2d7e000}, - {0xc2d80000}, {0xc2d82000}, {0xc2d84000}, {0xc2d86000}, - {0xc2d88000}, {0xc2d8a000}, {0xc2d8c000}, {0xc2d8e000}, - {0xc2d90000}, {0xc2d92000}, {0xc2d94000}, {0xc2d96000}, - {0xc2d98000}, {0xc2d9a000}, {0xc2d9c000}, {0xc2d9e000}, - {0xc2da0000}, {0xc2da2000}, {0xc2da4000}, {0xc2da6000}, - {0xc2da8000}, {0xc2daa000}, {0xc2dac000}, {0xc2dae000}, - {0xc2db0000}, {0xc2db2000}, {0xc2db4000}, {0xc2db6000}, - {0xc2db8000}, {0xc2dba000}, {0xc2dbc000}, {0xc2dbe000}, - {0xc2dc0000}, {0xc2dc2000}, {0xc2dc4000}, {0xc2dc6000}, - {0xc2dc8000}, {0xc2dca000}, {0xc2dcc000}, {0xc2dce000}, - {0xc2dd0000}, {0xc2dd2000}, {0xc2dd4000}, {0xc2dd6000}, - {0xc2dd8000}, {0xc2dda000}, {0xc2ddc000}, {0xc2dde000}, - {0xc2de0000}, {0xc2de2000}, {0xc2de4000}, {0xc2de6000}, - {0xc2de8000}, {0xc2dea000}, {0xc2dec000}, {0xc2dee000}, - {0xc2df0000}, {0xc2df2000}, {0xc2df4000}, {0xc2df6000}, - {0xc2df8000}, {0xc2dfa000}, {0xc2dfc000}, {0xc2dfe000}, - {0xc2e00000}, {0xc2e02000}, {0xc2e04000}, {0xc2e06000}, - {0xc2e08000}, {0xc2e0a000}, {0xc2e0c000}, {0xc2e0e000}, - {0xc2e10000}, {0xc2e12000}, {0xc2e14000}, {0xc2e16000}, - {0xc2e18000}, {0xc2e1a000}, {0xc2e1c000}, {0xc2e1e000}, - {0xc2e20000}, {0xc2e22000}, {0xc2e24000}, {0xc2e26000}, - {0xc2e28000}, {0xc2e2a000}, {0xc2e2c000}, {0xc2e2e000}, - {0xc2e30000}, {0xc2e32000}, {0xc2e34000}, {0xc2e36000}, - {0xc2e38000}, {0xc2e3a000}, {0xc2e3c000}, {0xc2e3e000}, - {0xc2e40000}, {0xc2e42000}, {0xc2e44000}, {0xc2e46000}, - {0xc2e48000}, {0xc2e4a000}, {0xc2e4c000}, {0xc2e4e000}, - {0xc2e50000}, {0xc2e52000}, {0xc2e54000}, {0xc2e56000}, - {0xc2e58000}, {0xc2e5a000}, {0xc2e5c000}, {0xc2e5e000}, - {0xc2e60000}, {0xc2e62000}, {0xc2e64000}, {0xc2e66000}, - {0xc2e68000}, {0xc2e6a000}, {0xc2e6c000}, {0xc2e6e000}, - {0xc2e70000}, {0xc2e72000}, {0xc2e74000}, {0xc2e76000}, - {0xc2e78000}, {0xc2e7a000}, {0xc2e7c000}, {0xc2e7e000}, - {0xc2e80000}, {0xc2e82000}, {0xc2e84000}, {0xc2e86000}, - {0xc2e88000}, {0xc2e8a000}, {0xc2e8c000}, {0xc2e8e000}, - {0xc2e90000}, {0xc2e92000}, {0xc2e94000}, {0xc2e96000}, - {0xc2e98000}, {0xc2e9a000}, {0xc2e9c000}, {0xc2e9e000}, - {0xc2ea0000}, {0xc2ea2000}, {0xc2ea4000}, {0xc2ea6000}, - {0xc2ea8000}, {0xc2eaa000}, {0xc2eac000}, {0xc2eae000}, - {0xc2eb0000}, {0xc2eb2000}, {0xc2eb4000}, {0xc2eb6000}, - {0xc2eb8000}, {0xc2eba000}, {0xc2ebc000}, {0xc2ebe000}, - {0xc2ec0000}, {0xc2ec2000}, {0xc2ec4000}, {0xc2ec6000}, - {0xc2ec8000}, {0xc2eca000}, {0xc2ecc000}, {0xc2ece000}, - {0xc2ed0000}, {0xc2ed2000}, {0xc2ed4000}, {0xc2ed6000}, - {0xc2ed8000}, {0xc2eda000}, {0xc2edc000}, {0xc2ede000}, - {0xc2ee0000}, {0xc2ee2000}, {0xc2ee4000}, {0xc2ee6000}, - {0xc2ee8000}, {0xc2eea000}, {0xc2eec000}, {0xc2eee000}, - {0xc2ef0000}, {0xc2ef2000}, {0xc2ef4000}, {0xc2ef6000}, - {0xc2ef8000}, {0xc2efa000}, {0xc2efc000}, {0xc2efe000}, - {0xc2f00000}, {0xc2f02000}, {0xc2f04000}, {0xc2f06000}, - {0xc2f08000}, {0xc2f0a000}, {0xc2f0c000}, {0xc2f0e000}, - {0xc2f10000}, {0xc2f12000}, {0xc2f14000}, {0xc2f16000}, - {0xc2f18000}, {0xc2f1a000}, {0xc2f1c000}, {0xc2f1e000}, - {0xc2f20000}, {0xc2f22000}, {0xc2f24000}, {0xc2f26000}, - {0xc2f28000}, {0xc2f2a000}, {0xc2f2c000}, {0xc2f2e000}, - {0xc2f30000}, {0xc2f32000}, {0xc2f34000}, {0xc2f36000}, - {0xc2f38000}, {0xc2f3a000}, {0xc2f3c000}, {0xc2f3e000}, - {0xc2f40000}, {0xc2f42000}, {0xc2f44000}, {0xc2f46000}, - {0xc2f48000}, {0xc2f4a000}, {0xc2f4c000}, {0xc2f4e000}, - {0xc2f50000}, {0xc2f52000}, {0xc2f54000}, {0xc2f56000}, - {0xc2f58000}, {0xc2f5a000}, {0xc2f5c000}, {0xc2f5e000}, - {0xc2f60000}, {0xc2f62000}, {0xc2f64000}, {0xc2f66000}, - {0xc2f68000}, {0xc2f6a000}, {0xc2f6c000}, {0xc2f6e000}, - {0xc2f70000}, {0xc2f72000}, {0xc2f74000}, {0xc2f76000}, - {0xc2f78000}, {0xc2f7a000}, {0xc2f7c000}, {0xc2f7e000}, - {0xc2f80000}, {0xc2f82000}, {0xc2f84000}, {0xc2f86000}, - {0xc2f88000}, {0xc2f8a000}, {0xc2f8c000}, {0xc2f8e000}, - {0xc2f90000}, {0xc2f92000}, {0xc2f94000}, {0xc2f96000}, - {0xc2f98000}, {0xc2f9a000}, {0xc2f9c000}, {0xc2f9e000}, - {0xc2fa0000}, {0xc2fa2000}, {0xc2fa4000}, {0xc2fa6000}, - {0xc2fa8000}, {0xc2faa000}, {0xc2fac000}, {0xc2fae000}, - {0xc2fb0000}, {0xc2fb2000}, {0xc2fb4000}, {0xc2fb6000}, - {0xc2fb8000}, {0xc2fba000}, {0xc2fbc000}, {0xc2fbe000}, - {0xc2fc0000}, {0xc2fc2000}, {0xc2fc4000}, {0xc2fc6000}, - {0xc2fc8000}, {0xc2fca000}, {0xc2fcc000}, {0xc2fce000}, - {0xc2fd0000}, {0xc2fd2000}, {0xc2fd4000}, {0xc2fd6000}, - {0xc2fd8000}, {0xc2fda000}, {0xc2fdc000}, {0xc2fde000}, - {0xc2fe0000}, {0xc2fe2000}, {0xc2fe4000}, {0xc2fe6000}, - {0xc2fe8000}, {0xc2fea000}, {0xc2fec000}, {0xc2fee000}, - {0xc2ff0000}, {0xc2ff2000}, {0xc2ff4000}, {0xc2ff6000}, - {0xc2ff8000}, {0xc2ffa000}, {0xc2ffc000}, {0xc2ffe000}, - {0xc3000000}, {0xc3002000}, {0xc3004000}, {0xc3006000}, - {0xc3008000}, {0xc300a000}, {0xc300c000}, {0xc300e000}, - {0xc3010000}, {0xc3012000}, {0xc3014000}, {0xc3016000}, - {0xc3018000}, {0xc301a000}, {0xc301c000}, {0xc301e000}, - {0xc3020000}, {0xc3022000}, {0xc3024000}, {0xc3026000}, - {0xc3028000}, {0xc302a000}, {0xc302c000}, {0xc302e000}, - {0xc3030000}, {0xc3032000}, {0xc3034000}, {0xc3036000}, - {0xc3038000}, {0xc303a000}, {0xc303c000}, {0xc303e000}, - {0xc3040000}, {0xc3042000}, {0xc3044000}, {0xc3046000}, - {0xc3048000}, {0xc304a000}, {0xc304c000}, {0xc304e000}, - {0xc3050000}, {0xc3052000}, {0xc3054000}, {0xc3056000}, - {0xc3058000}, {0xc305a000}, {0xc305c000}, {0xc305e000}, - {0xc3060000}, {0xc3062000}, {0xc3064000}, {0xc3066000}, - {0xc3068000}, {0xc306a000}, {0xc306c000}, {0xc306e000}, - {0xc3070000}, {0xc3072000}, {0xc3074000}, {0xc3076000}, - {0xc3078000}, {0xc307a000}, {0xc307c000}, {0xc307e000}, - {0xc3080000}, {0xc3082000}, {0xc3084000}, {0xc3086000}, - {0xc3088000}, {0xc308a000}, {0xc308c000}, {0xc308e000}, - {0xc3090000}, {0xc3092000}, {0xc3094000}, {0xc3096000}, - {0xc3098000}, {0xc309a000}, {0xc309c000}, {0xc309e000}, - {0xc30a0000}, {0xc30a2000}, {0xc30a4000}, {0xc30a6000}, - {0xc30a8000}, {0xc30aa000}, {0xc30ac000}, {0xc30ae000}, - {0xc30b0000}, {0xc30b2000}, {0xc30b4000}, {0xc30b6000}, - {0xc30b8000}, {0xc30ba000}, {0xc30bc000}, {0xc30be000}, - {0xc30c0000}, {0xc30c2000}, {0xc30c4000}, {0xc30c6000}, - {0xc30c8000}, {0xc30ca000}, {0xc30cc000}, {0xc30ce000}, - {0xc30d0000}, {0xc30d2000}, {0xc30d4000}, {0xc30d6000}, - {0xc30d8000}, {0xc30da000}, {0xc30dc000}, {0xc30de000}, - {0xc30e0000}, {0xc30e2000}, {0xc30e4000}, {0xc30e6000}, - {0xc30e8000}, {0xc30ea000}, {0xc30ec000}, {0xc30ee000}, - {0xc30f0000}, {0xc30f2000}, {0xc30f4000}, {0xc30f6000}, - {0xc30f8000}, {0xc30fa000}, {0xc30fc000}, {0xc30fe000}, - {0xc3100000}, {0xc3102000}, {0xc3104000}, {0xc3106000}, - {0xc3108000}, {0xc310a000}, {0xc310c000}, {0xc310e000}, - {0xc3110000}, {0xc3112000}, {0xc3114000}, {0xc3116000}, - {0xc3118000}, {0xc311a000}, {0xc311c000}, {0xc311e000}, - {0xc3120000}, {0xc3122000}, {0xc3124000}, {0xc3126000}, - {0xc3128000}, {0xc312a000}, {0xc312c000}, {0xc312e000}, - {0xc3130000}, {0xc3132000}, {0xc3134000}, {0xc3136000}, - {0xc3138000}, {0xc313a000}, {0xc313c000}, {0xc313e000}, - {0xc3140000}, {0xc3142000}, {0xc3144000}, {0xc3146000}, - {0xc3148000}, {0xc314a000}, {0xc314c000}, {0xc314e000}, - {0xc3150000}, {0xc3152000}, {0xc3154000}, {0xc3156000}, - {0xc3158000}, {0xc315a000}, {0xc315c000}, {0xc315e000}, - {0xc3160000}, {0xc3162000}, {0xc3164000}, {0xc3166000}, - {0xc3168000}, {0xc316a000}, {0xc316c000}, {0xc316e000}, - {0xc3170000}, {0xc3172000}, {0xc3174000}, {0xc3176000}, - {0xc3178000}, {0xc317a000}, {0xc317c000}, {0xc317e000}, - {0xc3180000}, {0xc3182000}, {0xc3184000}, {0xc3186000}, - {0xc3188000}, {0xc318a000}, {0xc318c000}, {0xc318e000}, - {0xc3190000}, {0xc3192000}, {0xc3194000}, {0xc3196000}, - {0xc3198000}, {0xc319a000}, {0xc319c000}, {0xc319e000}, - {0xc31a0000}, {0xc31a2000}, {0xc31a4000}, {0xc31a6000}, - {0xc31a8000}, {0xc31aa000}, {0xc31ac000}, {0xc31ae000}, - {0xc31b0000}, {0xc31b2000}, {0xc31b4000}, {0xc31b6000}, - {0xc31b8000}, {0xc31ba000}, {0xc31bc000}, {0xc31be000}, - {0xc31c0000}, {0xc31c2000}, {0xc31c4000}, {0xc31c6000}, - {0xc31c8000}, {0xc31ca000}, {0xc31cc000}, {0xc31ce000}, - {0xc31d0000}, {0xc31d2000}, {0xc31d4000}, {0xc31d6000}, - {0xc31d8000}, {0xc31da000}, {0xc31dc000}, {0xc31de000}, - {0xc31e0000}, {0xc31e2000}, {0xc31e4000}, {0xc31e6000}, - {0xc31e8000}, {0xc31ea000}, {0xc31ec000}, {0xc31ee000}, - {0xc31f0000}, {0xc31f2000}, {0xc31f4000}, {0xc31f6000}, - {0xc31f8000}, {0xc31fa000}, {0xc31fc000}, {0xc31fe000}, - {0xc3200000}, {0xc3202000}, {0xc3204000}, {0xc3206000}, - {0xc3208000}, {0xc320a000}, {0xc320c000}, {0xc320e000}, - {0xc3210000}, {0xc3212000}, {0xc3214000}, {0xc3216000}, - {0xc3218000}, {0xc321a000}, {0xc321c000}, {0xc321e000}, - {0xc3220000}, {0xc3222000}, {0xc3224000}, {0xc3226000}, - {0xc3228000}, {0xc322a000}, {0xc322c000}, {0xc322e000}, - {0xc3230000}, {0xc3232000}, {0xc3234000}, {0xc3236000}, - {0xc3238000}, {0xc323a000}, {0xc323c000}, {0xc323e000}, - {0xc3240000}, {0xc3242000}, {0xc3244000}, {0xc3246000}, - {0xc3248000}, {0xc324a000}, {0xc324c000}, {0xc324e000}, - {0xc3250000}, {0xc3252000}, {0xc3254000}, {0xc3256000}, - {0xc3258000}, {0xc325a000}, {0xc325c000}, {0xc325e000}, - {0xc3260000}, {0xc3262000}, {0xc3264000}, {0xc3266000}, - {0xc3268000}, {0xc326a000}, {0xc326c000}, {0xc326e000}, - {0xc3270000}, {0xc3272000}, {0xc3274000}, {0xc3276000}, - {0xc3278000}, {0xc327a000}, {0xc327c000}, {0xc327e000}, - {0xc3280000}, {0xc3282000}, {0xc3284000}, {0xc3286000}, - {0xc3288000}, {0xc328a000}, {0xc328c000}, {0xc328e000}, - {0xc3290000}, {0xc3292000}, {0xc3294000}, {0xc3296000}, - {0xc3298000}, {0xc329a000}, {0xc329c000}, {0xc329e000}, - {0xc32a0000}, {0xc32a2000}, {0xc32a4000}, {0xc32a6000}, - {0xc32a8000}, {0xc32aa000}, {0xc32ac000}, {0xc32ae000}, - {0xc32b0000}, {0xc32b2000}, {0xc32b4000}, {0xc32b6000}, - {0xc32b8000}, {0xc32ba000}, {0xc32bc000}, {0xc32be000}, - {0xc32c0000}, {0xc32c2000}, {0xc32c4000}, {0xc32c6000}, - {0xc32c8000}, {0xc32ca000}, {0xc32cc000}, {0xc32ce000}, - {0xc32d0000}, {0xc32d2000}, {0xc32d4000}, {0xc32d6000}, - {0xc32d8000}, {0xc32da000}, {0xc32dc000}, {0xc32de000}, - {0xc32e0000}, {0xc32e2000}, {0xc32e4000}, {0xc32e6000}, - {0xc32e8000}, {0xc32ea000}, {0xc32ec000}, {0xc32ee000}, - {0xc32f0000}, {0xc32f2000}, {0xc32f4000}, {0xc32f6000}, - {0xc32f8000}, {0xc32fa000}, {0xc32fc000}, {0xc32fe000}, - {0xc3300000}, {0xc3302000}, {0xc3304000}, {0xc3306000}, - {0xc3308000}, {0xc330a000}, {0xc330c000}, {0xc330e000}, - {0xc3310000}, {0xc3312000}, {0xc3314000}, {0xc3316000}, - {0xc3318000}, {0xc331a000}, {0xc331c000}, {0xc331e000}, - {0xc3320000}, {0xc3322000}, {0xc3324000}, {0xc3326000}, - {0xc3328000}, {0xc332a000}, {0xc332c000}, {0xc332e000}, - {0xc3330000}, {0xc3332000}, {0xc3334000}, {0xc3336000}, - {0xc3338000}, {0xc333a000}, {0xc333c000}, {0xc333e000}, - {0xc3340000}, {0xc3342000}, {0xc3344000}, {0xc3346000}, - {0xc3348000}, {0xc334a000}, {0xc334c000}, {0xc334e000}, - {0xc3350000}, {0xc3352000}, {0xc3354000}, {0xc3356000}, - {0xc3358000}, {0xc335a000}, {0xc335c000}, {0xc335e000}, - {0xc3360000}, {0xc3362000}, {0xc3364000}, {0xc3366000}, - {0xc3368000}, {0xc336a000}, {0xc336c000}, {0xc336e000}, - {0xc3370000}, {0xc3372000}, {0xc3374000}, {0xc3376000}, - {0xc3378000}, {0xc337a000}, {0xc337c000}, {0xc337e000}, - {0xc3380000}, {0xc3382000}, {0xc3384000}, {0xc3386000}, - {0xc3388000}, {0xc338a000}, {0xc338c000}, {0xc338e000}, - {0xc3390000}, {0xc3392000}, {0xc3394000}, {0xc3396000}, - {0xc3398000}, {0xc339a000}, {0xc339c000}, {0xc339e000}, - {0xc33a0000}, {0xc33a2000}, {0xc33a4000}, {0xc33a6000}, - {0xc33a8000}, {0xc33aa000}, {0xc33ac000}, {0xc33ae000}, - {0xc33b0000}, {0xc33b2000}, {0xc33b4000}, {0xc33b6000}, - {0xc33b8000}, {0xc33ba000}, {0xc33bc000}, {0xc33be000}, - {0xc33c0000}, {0xc33c2000}, {0xc33c4000}, {0xc33c6000}, - {0xc33c8000}, {0xc33ca000}, {0xc33cc000}, {0xc33ce000}, - {0xc33d0000}, {0xc33d2000}, {0xc33d4000}, {0xc33d6000}, - {0xc33d8000}, {0xc33da000}, {0xc33dc000}, {0xc33de000}, - {0xc33e0000}, {0xc33e2000}, {0xc33e4000}, {0xc33e6000}, - {0xc33e8000}, {0xc33ea000}, {0xc33ec000}, {0xc33ee000}, - {0xc33f0000}, {0xc33f2000}, {0xc33f4000}, {0xc33f6000}, - {0xc33f8000}, {0xc33fa000}, {0xc33fc000}, {0xc33fe000}, - {0xc3400000}, {0xc3402000}, {0xc3404000}, {0xc3406000}, - {0xc3408000}, {0xc340a000}, {0xc340c000}, {0xc340e000}, - {0xc3410000}, {0xc3412000}, {0xc3414000}, {0xc3416000}, - {0xc3418000}, {0xc341a000}, {0xc341c000}, {0xc341e000}, - {0xc3420000}, {0xc3422000}, {0xc3424000}, {0xc3426000}, - {0xc3428000}, {0xc342a000}, {0xc342c000}, {0xc342e000}, - {0xc3430000}, {0xc3432000}, {0xc3434000}, {0xc3436000}, - {0xc3438000}, {0xc343a000}, {0xc343c000}, {0xc343e000}, - {0xc3440000}, {0xc3442000}, {0xc3444000}, {0xc3446000}, - {0xc3448000}, {0xc344a000}, {0xc344c000}, {0xc344e000}, - {0xc3450000}, {0xc3452000}, {0xc3454000}, {0xc3456000}, - {0xc3458000}, {0xc345a000}, {0xc345c000}, {0xc345e000}, - {0xc3460000}, {0xc3462000}, {0xc3464000}, {0xc3466000}, - {0xc3468000}, {0xc346a000}, {0xc346c000}, {0xc346e000}, - {0xc3470000}, {0xc3472000}, {0xc3474000}, {0xc3476000}, - {0xc3478000}, {0xc347a000}, {0xc347c000}, {0xc347e000}, - {0xc3480000}, {0xc3482000}, {0xc3484000}, {0xc3486000}, - {0xc3488000}, {0xc348a000}, {0xc348c000}, {0xc348e000}, - {0xc3490000}, {0xc3492000}, {0xc3494000}, {0xc3496000}, - {0xc3498000}, {0xc349a000}, {0xc349c000}, {0xc349e000}, - {0xc34a0000}, {0xc34a2000}, {0xc34a4000}, {0xc34a6000}, - {0xc34a8000}, {0xc34aa000}, {0xc34ac000}, {0xc34ae000}, - {0xc34b0000}, {0xc34b2000}, {0xc34b4000}, {0xc34b6000}, - {0xc34b8000}, {0xc34ba000}, {0xc34bc000}, {0xc34be000}, - {0xc34c0000}, {0xc34c2000}, {0xc34c4000}, {0xc34c6000}, - {0xc34c8000}, {0xc34ca000}, {0xc34cc000}, {0xc34ce000}, - {0xc34d0000}, {0xc34d2000}, {0xc34d4000}, {0xc34d6000}, - {0xc34d8000}, {0xc34da000}, {0xc34dc000}, {0xc34de000}, - {0xc34e0000}, {0xc34e2000}, {0xc34e4000}, {0xc34e6000}, - {0xc34e8000}, {0xc34ea000}, {0xc34ec000}, {0xc34ee000}, - {0xc34f0000}, {0xc34f2000}, {0xc34f4000}, {0xc34f6000}, - {0xc34f8000}, {0xc34fa000}, {0xc34fc000}, {0xc34fe000}, - {0xc3500000}, {0xc3502000}, {0xc3504000}, {0xc3506000}, - {0xc3508000}, {0xc350a000}, {0xc350c000}, {0xc350e000}, - {0xc3510000}, {0xc3512000}, {0xc3514000}, {0xc3516000}, - {0xc3518000}, {0xc351a000}, {0xc351c000}, {0xc351e000}, - {0xc3520000}, {0xc3522000}, {0xc3524000}, {0xc3526000}, - {0xc3528000}, {0xc352a000}, {0xc352c000}, {0xc352e000}, - {0xc3530000}, {0xc3532000}, {0xc3534000}, {0xc3536000}, - {0xc3538000}, {0xc353a000}, {0xc353c000}, {0xc353e000}, - {0xc3540000}, {0xc3542000}, {0xc3544000}, {0xc3546000}, - {0xc3548000}, {0xc354a000}, {0xc354c000}, {0xc354e000}, - {0xc3550000}, {0xc3552000}, {0xc3554000}, {0xc3556000}, - {0xc3558000}, {0xc355a000}, {0xc355c000}, {0xc355e000}, - {0xc3560000}, {0xc3562000}, {0xc3564000}, {0xc3566000}, - {0xc3568000}, {0xc356a000}, {0xc356c000}, {0xc356e000}, - {0xc3570000}, {0xc3572000}, {0xc3574000}, {0xc3576000}, - {0xc3578000}, {0xc357a000}, {0xc357c000}, {0xc357e000}, - {0xc3580000}, {0xc3582000}, {0xc3584000}, {0xc3586000}, - {0xc3588000}, {0xc358a000}, {0xc358c000}, {0xc358e000}, - {0xc3590000}, {0xc3592000}, {0xc3594000}, {0xc3596000}, - {0xc3598000}, {0xc359a000}, {0xc359c000}, {0xc359e000}, - {0xc35a0000}, {0xc35a2000}, {0xc35a4000}, {0xc35a6000}, - {0xc35a8000}, {0xc35aa000}, {0xc35ac000}, {0xc35ae000}, - {0xc35b0000}, {0xc35b2000}, {0xc35b4000}, {0xc35b6000}, - {0xc35b8000}, {0xc35ba000}, {0xc35bc000}, {0xc35be000}, - {0xc35c0000}, {0xc35c2000}, {0xc35c4000}, {0xc35c6000}, - {0xc35c8000}, {0xc35ca000}, {0xc35cc000}, {0xc35ce000}, - {0xc35d0000}, {0xc35d2000}, {0xc35d4000}, {0xc35d6000}, - {0xc35d8000}, {0xc35da000}, {0xc35dc000}, {0xc35de000}, - {0xc35e0000}, {0xc35e2000}, {0xc35e4000}, {0xc35e6000}, - {0xc35e8000}, {0xc35ea000}, {0xc35ec000}, {0xc35ee000}, - {0xc35f0000}, {0xc35f2000}, {0xc35f4000}, {0xc35f6000}, - {0xc35f8000}, {0xc35fa000}, {0xc35fc000}, {0xc35fe000}, - {0xc3600000}, {0xc3602000}, {0xc3604000}, {0xc3606000}, - {0xc3608000}, {0xc360a000}, {0xc360c000}, {0xc360e000}, - {0xc3610000}, {0xc3612000}, {0xc3614000}, {0xc3616000}, - {0xc3618000}, {0xc361a000}, {0xc361c000}, {0xc361e000}, - {0xc3620000}, {0xc3622000}, {0xc3624000}, {0xc3626000}, - {0xc3628000}, {0xc362a000}, {0xc362c000}, {0xc362e000}, - {0xc3630000}, {0xc3632000}, {0xc3634000}, {0xc3636000}, - {0xc3638000}, {0xc363a000}, {0xc363c000}, {0xc363e000}, - {0xc3640000}, {0xc3642000}, {0xc3644000}, {0xc3646000}, - {0xc3648000}, {0xc364a000}, {0xc364c000}, {0xc364e000}, - {0xc3650000}, {0xc3652000}, {0xc3654000}, {0xc3656000}, - {0xc3658000}, {0xc365a000}, {0xc365c000}, {0xc365e000}, - {0xc3660000}, {0xc3662000}, {0xc3664000}, {0xc3666000}, - {0xc3668000}, {0xc366a000}, {0xc366c000}, {0xc366e000}, - {0xc3670000}, {0xc3672000}, {0xc3674000}, {0xc3676000}, - {0xc3678000}, {0xc367a000}, {0xc367c000}, {0xc367e000}, - {0xc3680000}, {0xc3682000}, {0xc3684000}, {0xc3686000}, - {0xc3688000}, {0xc368a000}, {0xc368c000}, {0xc368e000}, - {0xc3690000}, {0xc3692000}, {0xc3694000}, {0xc3696000}, - {0xc3698000}, {0xc369a000}, {0xc369c000}, {0xc369e000}, - {0xc36a0000}, {0xc36a2000}, {0xc36a4000}, {0xc36a6000}, - {0xc36a8000}, {0xc36aa000}, {0xc36ac000}, {0xc36ae000}, - {0xc36b0000}, {0xc36b2000}, {0xc36b4000}, {0xc36b6000}, - {0xc36b8000}, {0xc36ba000}, {0xc36bc000}, {0xc36be000}, - {0xc36c0000}, {0xc36c2000}, {0xc36c4000}, {0xc36c6000}, - {0xc36c8000}, {0xc36ca000}, {0xc36cc000}, {0xc36ce000}, - {0xc36d0000}, {0xc36d2000}, {0xc36d4000}, {0xc36d6000}, - {0xc36d8000}, {0xc36da000}, {0xc36dc000}, {0xc36de000}, - {0xc36e0000}, {0xc36e2000}, {0xc36e4000}, {0xc36e6000}, - {0xc36e8000}, {0xc36ea000}, {0xc36ec000}, {0xc36ee000}, - {0xc36f0000}, {0xc36f2000}, {0xc36f4000}, {0xc36f6000}, - {0xc36f8000}, {0xc36fa000}, {0xc36fc000}, {0xc36fe000}, - {0xc3700000}, {0xc3702000}, {0xc3704000}, {0xc3706000}, - {0xc3708000}, {0xc370a000}, {0xc370c000}, {0xc370e000}, - {0xc3710000}, {0xc3712000}, {0xc3714000}, {0xc3716000}, - {0xc3718000}, {0xc371a000}, {0xc371c000}, {0xc371e000}, - {0xc3720000}, {0xc3722000}, {0xc3724000}, {0xc3726000}, - {0xc3728000}, {0xc372a000}, {0xc372c000}, {0xc372e000}, - {0xc3730000}, {0xc3732000}, {0xc3734000}, {0xc3736000}, - {0xc3738000}, {0xc373a000}, {0xc373c000}, {0xc373e000}, - {0xc3740000}, {0xc3742000}, {0xc3744000}, {0xc3746000}, - {0xc3748000}, {0xc374a000}, {0xc374c000}, {0xc374e000}, - {0xc3750000}, {0xc3752000}, {0xc3754000}, {0xc3756000}, - {0xc3758000}, {0xc375a000}, {0xc375c000}, {0xc375e000}, - {0xc3760000}, {0xc3762000}, {0xc3764000}, {0xc3766000}, - {0xc3768000}, {0xc376a000}, {0xc376c000}, {0xc376e000}, - {0xc3770000}, {0xc3772000}, {0xc3774000}, {0xc3776000}, - {0xc3778000}, {0xc377a000}, {0xc377c000}, {0xc377e000}, - {0xc3780000}, {0xc3782000}, {0xc3784000}, {0xc3786000}, - {0xc3788000}, {0xc378a000}, {0xc378c000}, {0xc378e000}, - {0xc3790000}, {0xc3792000}, {0xc3794000}, {0xc3796000}, - {0xc3798000}, {0xc379a000}, {0xc379c000}, {0xc379e000}, - {0xc37a0000}, {0xc37a2000}, {0xc37a4000}, {0xc37a6000}, - {0xc37a8000}, {0xc37aa000}, {0xc37ac000}, {0xc37ae000}, - {0xc37b0000}, {0xc37b2000}, {0xc37b4000}, {0xc37b6000}, - {0xc37b8000}, {0xc37ba000}, {0xc37bc000}, {0xc37be000}, - {0xc37c0000}, {0xc37c2000}, {0xc37c4000}, {0xc37c6000}, - {0xc37c8000}, {0xc37ca000}, {0xc37cc000}, {0xc37ce000}, - {0xc37d0000}, {0xc37d2000}, {0xc37d4000}, {0xc37d6000}, - {0xc37d8000}, {0xc37da000}, {0xc37dc000}, {0xc37de000}, - {0xc37e0000}, {0xc37e2000}, {0xc37e4000}, {0xc37e6000}, - {0xc37e8000}, {0xc37ea000}, {0xc37ec000}, {0xc37ee000}, - {0xc37f0000}, {0xc37f2000}, {0xc37f4000}, {0xc37f6000}, - {0xc37f8000}, {0xc37fa000}, {0xc37fc000}, {0xc37fe000}, - {0xc3800000}, {0xc3802000}, {0xc3804000}, {0xc3806000}, - {0xc3808000}, {0xc380a000}, {0xc380c000}, {0xc380e000}, - {0xc3810000}, {0xc3812000}, {0xc3814000}, {0xc3816000}, - {0xc3818000}, {0xc381a000}, {0xc381c000}, {0xc381e000}, - {0xc3820000}, {0xc3822000}, {0xc3824000}, {0xc3826000}, - {0xc3828000}, {0xc382a000}, {0xc382c000}, {0xc382e000}, - {0xc3830000}, {0xc3832000}, {0xc3834000}, {0xc3836000}, - {0xc3838000}, {0xc383a000}, {0xc383c000}, {0xc383e000}, - {0xc3840000}, {0xc3842000}, {0xc3844000}, {0xc3846000}, - {0xc3848000}, {0xc384a000}, {0xc384c000}, {0xc384e000}, - {0xc3850000}, {0xc3852000}, {0xc3854000}, {0xc3856000}, - {0xc3858000}, {0xc385a000}, {0xc385c000}, {0xc385e000}, - {0xc3860000}, {0xc3862000}, {0xc3864000}, {0xc3866000}, - {0xc3868000}, {0xc386a000}, {0xc386c000}, {0xc386e000}, - {0xc3870000}, {0xc3872000}, {0xc3874000}, {0xc3876000}, - {0xc3878000}, {0xc387a000}, {0xc387c000}, {0xc387e000}, - {0xc3880000}, {0xc3882000}, {0xc3884000}, {0xc3886000}, - {0xc3888000}, {0xc388a000}, {0xc388c000}, {0xc388e000}, - {0xc3890000}, {0xc3892000}, {0xc3894000}, {0xc3896000}, - {0xc3898000}, {0xc389a000}, {0xc389c000}, {0xc389e000}, - {0xc38a0000}, {0xc38a2000}, {0xc38a4000}, {0xc38a6000}, - {0xc38a8000}, {0xc38aa000}, {0xc38ac000}, {0xc38ae000}, - {0xc38b0000}, {0xc38b2000}, {0xc38b4000}, {0xc38b6000}, - {0xc38b8000}, {0xc38ba000}, {0xc38bc000}, {0xc38be000}, - {0xc38c0000}, {0xc38c2000}, {0xc38c4000}, {0xc38c6000}, - {0xc38c8000}, {0xc38ca000}, {0xc38cc000}, {0xc38ce000}, - {0xc38d0000}, {0xc38d2000}, {0xc38d4000}, {0xc38d6000}, - {0xc38d8000}, {0xc38da000}, {0xc38dc000}, {0xc38de000}, - {0xc38e0000}, {0xc38e2000}, {0xc38e4000}, {0xc38e6000}, - {0xc38e8000}, {0xc38ea000}, {0xc38ec000}, {0xc38ee000}, - {0xc38f0000}, {0xc38f2000}, {0xc38f4000}, {0xc38f6000}, - {0xc38f8000}, {0xc38fa000}, {0xc38fc000}, {0xc38fe000}, - {0xc3900000}, {0xc3902000}, {0xc3904000}, {0xc3906000}, - {0xc3908000}, {0xc390a000}, {0xc390c000}, {0xc390e000}, - {0xc3910000}, {0xc3912000}, {0xc3914000}, {0xc3916000}, - {0xc3918000}, {0xc391a000}, {0xc391c000}, {0xc391e000}, - {0xc3920000}, {0xc3922000}, {0xc3924000}, {0xc3926000}, - {0xc3928000}, {0xc392a000}, {0xc392c000}, {0xc392e000}, - {0xc3930000}, {0xc3932000}, {0xc3934000}, {0xc3936000}, - {0xc3938000}, {0xc393a000}, {0xc393c000}, {0xc393e000}, - {0xc3940000}, {0xc3942000}, {0xc3944000}, {0xc3946000}, - {0xc3948000}, {0xc394a000}, {0xc394c000}, {0xc394e000}, - {0xc3950000}, {0xc3952000}, {0xc3954000}, {0xc3956000}, - {0xc3958000}, {0xc395a000}, {0xc395c000}, {0xc395e000}, - {0xc3960000}, {0xc3962000}, {0xc3964000}, {0xc3966000}, - {0xc3968000}, {0xc396a000}, {0xc396c000}, {0xc396e000}, - {0xc3970000}, {0xc3972000}, {0xc3974000}, {0xc3976000}, - {0xc3978000}, {0xc397a000}, {0xc397c000}, {0xc397e000}, - {0xc3980000}, {0xc3982000}, {0xc3984000}, {0xc3986000}, - {0xc3988000}, {0xc398a000}, {0xc398c000}, {0xc398e000}, - {0xc3990000}, {0xc3992000}, {0xc3994000}, {0xc3996000}, - {0xc3998000}, {0xc399a000}, {0xc399c000}, {0xc399e000}, - {0xc39a0000}, {0xc39a2000}, {0xc39a4000}, {0xc39a6000}, - {0xc39a8000}, {0xc39aa000}, {0xc39ac000}, {0xc39ae000}, - {0xc39b0000}, {0xc39b2000}, {0xc39b4000}, {0xc39b6000}, - {0xc39b8000}, {0xc39ba000}, {0xc39bc000}, {0xc39be000}, - {0xc39c0000}, {0xc39c2000}, {0xc39c4000}, {0xc39c6000}, - {0xc39c8000}, {0xc39ca000}, {0xc39cc000}, {0xc39ce000}, - {0xc39d0000}, {0xc39d2000}, {0xc39d4000}, {0xc39d6000}, - {0xc39d8000}, {0xc39da000}, {0xc39dc000}, {0xc39de000}, - {0xc39e0000}, {0xc39e2000}, {0xc39e4000}, {0xc39e6000}, - {0xc39e8000}, {0xc39ea000}, {0xc39ec000}, {0xc39ee000}, - {0xc39f0000}, {0xc39f2000}, {0xc39f4000}, {0xc39f6000}, - {0xc39f8000}, {0xc39fa000}, {0xc39fc000}, {0xc39fe000}, - {0xc3a00000}, {0xc3a02000}, {0xc3a04000}, {0xc3a06000}, - {0xc3a08000}, {0xc3a0a000}, {0xc3a0c000}, {0xc3a0e000}, - {0xc3a10000}, {0xc3a12000}, {0xc3a14000}, {0xc3a16000}, - {0xc3a18000}, {0xc3a1a000}, {0xc3a1c000}, {0xc3a1e000}, - {0xc3a20000}, {0xc3a22000}, {0xc3a24000}, {0xc3a26000}, - {0xc3a28000}, {0xc3a2a000}, {0xc3a2c000}, {0xc3a2e000}, - {0xc3a30000}, {0xc3a32000}, {0xc3a34000}, {0xc3a36000}, - {0xc3a38000}, {0xc3a3a000}, {0xc3a3c000}, {0xc3a3e000}, - {0xc3a40000}, {0xc3a42000}, {0xc3a44000}, {0xc3a46000}, - {0xc3a48000}, {0xc3a4a000}, {0xc3a4c000}, {0xc3a4e000}, - {0xc3a50000}, {0xc3a52000}, {0xc3a54000}, {0xc3a56000}, - {0xc3a58000}, {0xc3a5a000}, {0xc3a5c000}, {0xc3a5e000}, - {0xc3a60000}, {0xc3a62000}, {0xc3a64000}, {0xc3a66000}, - {0xc3a68000}, {0xc3a6a000}, {0xc3a6c000}, {0xc3a6e000}, - {0xc3a70000}, {0xc3a72000}, {0xc3a74000}, {0xc3a76000}, - {0xc3a78000}, {0xc3a7a000}, {0xc3a7c000}, {0xc3a7e000}, - {0xc3a80000}, {0xc3a82000}, {0xc3a84000}, {0xc3a86000}, - {0xc3a88000}, {0xc3a8a000}, {0xc3a8c000}, {0xc3a8e000}, - {0xc3a90000}, {0xc3a92000}, {0xc3a94000}, {0xc3a96000}, - {0xc3a98000}, {0xc3a9a000}, {0xc3a9c000}, {0xc3a9e000}, - {0xc3aa0000}, {0xc3aa2000}, {0xc3aa4000}, {0xc3aa6000}, - {0xc3aa8000}, {0xc3aaa000}, {0xc3aac000}, {0xc3aae000}, - {0xc3ab0000}, {0xc3ab2000}, {0xc3ab4000}, {0xc3ab6000}, - {0xc3ab8000}, {0xc3aba000}, {0xc3abc000}, {0xc3abe000}, - {0xc3ac0000}, {0xc3ac2000}, {0xc3ac4000}, {0xc3ac6000}, - {0xc3ac8000}, {0xc3aca000}, {0xc3acc000}, {0xc3ace000}, - {0xc3ad0000}, {0xc3ad2000}, {0xc3ad4000}, {0xc3ad6000}, - {0xc3ad8000}, {0xc3ada000}, {0xc3adc000}, {0xc3ade000}, - {0xc3ae0000}, {0xc3ae2000}, {0xc3ae4000}, {0xc3ae6000}, - {0xc3ae8000}, {0xc3aea000}, {0xc3aec000}, {0xc3aee000}, - {0xc3af0000}, {0xc3af2000}, {0xc3af4000}, {0xc3af6000}, - {0xc3af8000}, {0xc3afa000}, {0xc3afc000}, {0xc3afe000}, - {0xc3b00000}, {0xc3b02000}, {0xc3b04000}, {0xc3b06000}, - {0xc3b08000}, {0xc3b0a000}, {0xc3b0c000}, {0xc3b0e000}, - {0xc3b10000}, {0xc3b12000}, {0xc3b14000}, {0xc3b16000}, - {0xc3b18000}, {0xc3b1a000}, {0xc3b1c000}, {0xc3b1e000}, - {0xc3b20000}, {0xc3b22000}, {0xc3b24000}, {0xc3b26000}, - {0xc3b28000}, {0xc3b2a000}, {0xc3b2c000}, {0xc3b2e000}, - {0xc3b30000}, {0xc3b32000}, {0xc3b34000}, {0xc3b36000}, - {0xc3b38000}, {0xc3b3a000}, {0xc3b3c000}, {0xc3b3e000}, - {0xc3b40000}, {0xc3b42000}, {0xc3b44000}, {0xc3b46000}, - {0xc3b48000}, {0xc3b4a000}, {0xc3b4c000}, {0xc3b4e000}, - {0xc3b50000}, {0xc3b52000}, {0xc3b54000}, {0xc3b56000}, - {0xc3b58000}, {0xc3b5a000}, {0xc3b5c000}, {0xc3b5e000}, - {0xc3b60000}, {0xc3b62000}, {0xc3b64000}, {0xc3b66000}, - {0xc3b68000}, {0xc3b6a000}, {0xc3b6c000}, {0xc3b6e000}, - {0xc3b70000}, {0xc3b72000}, {0xc3b74000}, {0xc3b76000}, - {0xc3b78000}, {0xc3b7a000}, {0xc3b7c000}, {0xc3b7e000}, - {0xc3b80000}, {0xc3b82000}, {0xc3b84000}, {0xc3b86000}, - {0xc3b88000}, {0xc3b8a000}, {0xc3b8c000}, {0xc3b8e000}, - {0xc3b90000}, {0xc3b92000}, {0xc3b94000}, {0xc3b96000}, - {0xc3b98000}, {0xc3b9a000}, {0xc3b9c000}, {0xc3b9e000}, - {0xc3ba0000}, {0xc3ba2000}, {0xc3ba4000}, {0xc3ba6000}, - {0xc3ba8000}, {0xc3baa000}, {0xc3bac000}, {0xc3bae000}, - {0xc3bb0000}, {0xc3bb2000}, {0xc3bb4000}, {0xc3bb6000}, - {0xc3bb8000}, {0xc3bba000}, {0xc3bbc000}, {0xc3bbe000}, - {0xc3bc0000}, {0xc3bc2000}, {0xc3bc4000}, {0xc3bc6000}, - {0xc3bc8000}, {0xc3bca000}, {0xc3bcc000}, {0xc3bce000}, - {0xc3bd0000}, {0xc3bd2000}, {0xc3bd4000}, {0xc3bd6000}, - {0xc3bd8000}, {0xc3bda000}, {0xc3bdc000}, {0xc3bde000}, - {0xc3be0000}, {0xc3be2000}, {0xc3be4000}, {0xc3be6000}, - {0xc3be8000}, {0xc3bea000}, {0xc3bec000}, {0xc3bee000}, - {0xc3bf0000}, {0xc3bf2000}, {0xc3bf4000}, {0xc3bf6000}, - {0xc3bf8000}, {0xc3bfa000}, {0xc3bfc000}, {0xc3bfe000}, - {0xc3c00000}, {0xc3c02000}, {0xc3c04000}, {0xc3c06000}, - {0xc3c08000}, {0xc3c0a000}, {0xc3c0c000}, {0xc3c0e000}, - {0xc3c10000}, {0xc3c12000}, {0xc3c14000}, {0xc3c16000}, - {0xc3c18000}, {0xc3c1a000}, {0xc3c1c000}, {0xc3c1e000}, - {0xc3c20000}, {0xc3c22000}, {0xc3c24000}, {0xc3c26000}, - {0xc3c28000}, {0xc3c2a000}, {0xc3c2c000}, {0xc3c2e000}, - {0xc3c30000}, {0xc3c32000}, {0xc3c34000}, {0xc3c36000}, - {0xc3c38000}, {0xc3c3a000}, {0xc3c3c000}, {0xc3c3e000}, - {0xc3c40000}, {0xc3c42000}, {0xc3c44000}, {0xc3c46000}, - {0xc3c48000}, {0xc3c4a000}, {0xc3c4c000}, {0xc3c4e000}, - {0xc3c50000}, {0xc3c52000}, {0xc3c54000}, {0xc3c56000}, - {0xc3c58000}, {0xc3c5a000}, {0xc3c5c000}, {0xc3c5e000}, - {0xc3c60000}, {0xc3c62000}, {0xc3c64000}, {0xc3c66000}, - {0xc3c68000}, {0xc3c6a000}, {0xc3c6c000}, {0xc3c6e000}, - {0xc3c70000}, {0xc3c72000}, {0xc3c74000}, {0xc3c76000}, - {0xc3c78000}, {0xc3c7a000}, {0xc3c7c000}, {0xc3c7e000}, - {0xc3c80000}, {0xc3c82000}, {0xc3c84000}, {0xc3c86000}, - {0xc3c88000}, {0xc3c8a000}, {0xc3c8c000}, {0xc3c8e000}, - {0xc3c90000}, {0xc3c92000}, {0xc3c94000}, {0xc3c96000}, - {0xc3c98000}, {0xc3c9a000}, {0xc3c9c000}, {0xc3c9e000}, - {0xc3ca0000}, {0xc3ca2000}, {0xc3ca4000}, {0xc3ca6000}, - {0xc3ca8000}, {0xc3caa000}, {0xc3cac000}, {0xc3cae000}, - {0xc3cb0000}, {0xc3cb2000}, {0xc3cb4000}, {0xc3cb6000}, - {0xc3cb8000}, {0xc3cba000}, {0xc3cbc000}, {0xc3cbe000}, - {0xc3cc0000}, {0xc3cc2000}, {0xc3cc4000}, {0xc3cc6000}, - {0xc3cc8000}, {0xc3cca000}, {0xc3ccc000}, {0xc3cce000}, - {0xc3cd0000}, {0xc3cd2000}, {0xc3cd4000}, {0xc3cd6000}, - {0xc3cd8000}, {0xc3cda000}, {0xc3cdc000}, {0xc3cde000}, - {0xc3ce0000}, {0xc3ce2000}, {0xc3ce4000}, {0xc3ce6000}, - {0xc3ce8000}, {0xc3cea000}, {0xc3cec000}, {0xc3cee000}, - {0xc3cf0000}, {0xc3cf2000}, {0xc3cf4000}, {0xc3cf6000}, - {0xc3cf8000}, {0xc3cfa000}, {0xc3cfc000}, {0xc3cfe000}, - {0xc3d00000}, {0xc3d02000}, {0xc3d04000}, {0xc3d06000}, - {0xc3d08000}, {0xc3d0a000}, {0xc3d0c000}, {0xc3d0e000}, - {0xc3d10000}, {0xc3d12000}, {0xc3d14000}, {0xc3d16000}, - {0xc3d18000}, {0xc3d1a000}, {0xc3d1c000}, {0xc3d1e000}, - {0xc3d20000}, {0xc3d22000}, {0xc3d24000}, {0xc3d26000}, - {0xc3d28000}, {0xc3d2a000}, {0xc3d2c000}, {0xc3d2e000}, - {0xc3d30000}, {0xc3d32000}, {0xc3d34000}, {0xc3d36000}, - {0xc3d38000}, {0xc3d3a000}, {0xc3d3c000}, {0xc3d3e000}, - {0xc3d40000}, {0xc3d42000}, {0xc3d44000}, {0xc3d46000}, - {0xc3d48000}, {0xc3d4a000}, {0xc3d4c000}, {0xc3d4e000}, - {0xc3d50000}, {0xc3d52000}, {0xc3d54000}, {0xc3d56000}, - {0xc3d58000}, {0xc3d5a000}, {0xc3d5c000}, {0xc3d5e000}, - {0xc3d60000}, {0xc3d62000}, {0xc3d64000}, {0xc3d66000}, - {0xc3d68000}, {0xc3d6a000}, {0xc3d6c000}, {0xc3d6e000}, - {0xc3d70000}, {0xc3d72000}, {0xc3d74000}, {0xc3d76000}, - {0xc3d78000}, {0xc3d7a000}, {0xc3d7c000}, {0xc3d7e000}, - {0xc3d80000}, {0xc3d82000}, {0xc3d84000}, {0xc3d86000}, - {0xc3d88000}, {0xc3d8a000}, {0xc3d8c000}, {0xc3d8e000}, - {0xc3d90000}, {0xc3d92000}, {0xc3d94000}, {0xc3d96000}, - {0xc3d98000}, {0xc3d9a000}, {0xc3d9c000}, {0xc3d9e000}, - {0xc3da0000}, {0xc3da2000}, {0xc3da4000}, {0xc3da6000}, - {0xc3da8000}, {0xc3daa000}, {0xc3dac000}, {0xc3dae000}, - {0xc3db0000}, {0xc3db2000}, {0xc3db4000}, {0xc3db6000}, - {0xc3db8000}, {0xc3dba000}, {0xc3dbc000}, {0xc3dbe000}, - {0xc3dc0000}, {0xc3dc2000}, {0xc3dc4000}, {0xc3dc6000}, - {0xc3dc8000}, {0xc3dca000}, {0xc3dcc000}, {0xc3dce000}, - {0xc3dd0000}, {0xc3dd2000}, {0xc3dd4000}, {0xc3dd6000}, - {0xc3dd8000}, {0xc3dda000}, {0xc3ddc000}, {0xc3dde000}, - {0xc3de0000}, {0xc3de2000}, {0xc3de4000}, {0xc3de6000}, - {0xc3de8000}, {0xc3dea000}, {0xc3dec000}, {0xc3dee000}, - {0xc3df0000}, {0xc3df2000}, {0xc3df4000}, {0xc3df6000}, - {0xc3df8000}, {0xc3dfa000}, {0xc3dfc000}, {0xc3dfe000}, - {0xc3e00000}, {0xc3e02000}, {0xc3e04000}, {0xc3e06000}, - {0xc3e08000}, {0xc3e0a000}, {0xc3e0c000}, {0xc3e0e000}, - {0xc3e10000}, {0xc3e12000}, {0xc3e14000}, {0xc3e16000}, - {0xc3e18000}, {0xc3e1a000}, {0xc3e1c000}, {0xc3e1e000}, - {0xc3e20000}, {0xc3e22000}, {0xc3e24000}, {0xc3e26000}, - {0xc3e28000}, {0xc3e2a000}, {0xc3e2c000}, {0xc3e2e000}, - {0xc3e30000}, {0xc3e32000}, {0xc3e34000}, {0xc3e36000}, - {0xc3e38000}, {0xc3e3a000}, {0xc3e3c000}, {0xc3e3e000}, - {0xc3e40000}, {0xc3e42000}, {0xc3e44000}, {0xc3e46000}, - {0xc3e48000}, {0xc3e4a000}, {0xc3e4c000}, {0xc3e4e000}, - {0xc3e50000}, {0xc3e52000}, {0xc3e54000}, {0xc3e56000}, - {0xc3e58000}, {0xc3e5a000}, {0xc3e5c000}, {0xc3e5e000}, - {0xc3e60000}, {0xc3e62000}, {0xc3e64000}, {0xc3e66000}, - {0xc3e68000}, {0xc3e6a000}, {0xc3e6c000}, {0xc3e6e000}, - {0xc3e70000}, {0xc3e72000}, {0xc3e74000}, {0xc3e76000}, - {0xc3e78000}, {0xc3e7a000}, {0xc3e7c000}, {0xc3e7e000}, - {0xc3e80000}, {0xc3e82000}, {0xc3e84000}, {0xc3e86000}, - {0xc3e88000}, {0xc3e8a000}, {0xc3e8c000}, {0xc3e8e000}, - {0xc3e90000}, {0xc3e92000}, {0xc3e94000}, {0xc3e96000}, - {0xc3e98000}, {0xc3e9a000}, {0xc3e9c000}, {0xc3e9e000}, - {0xc3ea0000}, {0xc3ea2000}, {0xc3ea4000}, {0xc3ea6000}, - {0xc3ea8000}, {0xc3eaa000}, {0xc3eac000}, {0xc3eae000}, - {0xc3eb0000}, {0xc3eb2000}, {0xc3eb4000}, {0xc3eb6000}, - {0xc3eb8000}, {0xc3eba000}, {0xc3ebc000}, {0xc3ebe000}, - {0xc3ec0000}, {0xc3ec2000}, {0xc3ec4000}, {0xc3ec6000}, - {0xc3ec8000}, {0xc3eca000}, {0xc3ecc000}, {0xc3ece000}, - {0xc3ed0000}, {0xc3ed2000}, {0xc3ed4000}, {0xc3ed6000}, - {0xc3ed8000}, {0xc3eda000}, {0xc3edc000}, {0xc3ede000}, - {0xc3ee0000}, {0xc3ee2000}, {0xc3ee4000}, {0xc3ee6000}, - {0xc3ee8000}, {0xc3eea000}, {0xc3eec000}, {0xc3eee000}, - {0xc3ef0000}, {0xc3ef2000}, {0xc3ef4000}, {0xc3ef6000}, - {0xc3ef8000}, {0xc3efa000}, {0xc3efc000}, {0xc3efe000}, - {0xc3f00000}, {0xc3f02000}, {0xc3f04000}, {0xc3f06000}, - {0xc3f08000}, {0xc3f0a000}, {0xc3f0c000}, {0xc3f0e000}, - {0xc3f10000}, {0xc3f12000}, {0xc3f14000}, {0xc3f16000}, - {0xc3f18000}, {0xc3f1a000}, {0xc3f1c000}, {0xc3f1e000}, - {0xc3f20000}, {0xc3f22000}, {0xc3f24000}, {0xc3f26000}, - {0xc3f28000}, {0xc3f2a000}, {0xc3f2c000}, {0xc3f2e000}, - {0xc3f30000}, {0xc3f32000}, {0xc3f34000}, {0xc3f36000}, - {0xc3f38000}, {0xc3f3a000}, {0xc3f3c000}, {0xc3f3e000}, - {0xc3f40000}, {0xc3f42000}, {0xc3f44000}, {0xc3f46000}, - {0xc3f48000}, {0xc3f4a000}, {0xc3f4c000}, {0xc3f4e000}, - {0xc3f50000}, {0xc3f52000}, {0xc3f54000}, {0xc3f56000}, - {0xc3f58000}, {0xc3f5a000}, {0xc3f5c000}, {0xc3f5e000}, - {0xc3f60000}, {0xc3f62000}, {0xc3f64000}, {0xc3f66000}, - {0xc3f68000}, {0xc3f6a000}, {0xc3f6c000}, {0xc3f6e000}, - {0xc3f70000}, {0xc3f72000}, {0xc3f74000}, {0xc3f76000}, - {0xc3f78000}, {0xc3f7a000}, {0xc3f7c000}, {0xc3f7e000}, - {0xc3f80000}, {0xc3f82000}, {0xc3f84000}, {0xc3f86000}, - {0xc3f88000}, {0xc3f8a000}, {0xc3f8c000}, {0xc3f8e000}, - {0xc3f90000}, {0xc3f92000}, {0xc3f94000}, {0xc3f96000}, - {0xc3f98000}, {0xc3f9a000}, {0xc3f9c000}, {0xc3f9e000}, - {0xc3fa0000}, {0xc3fa2000}, {0xc3fa4000}, {0xc3fa6000}, - {0xc3fa8000}, {0xc3faa000}, {0xc3fac000}, {0xc3fae000}, - {0xc3fb0000}, {0xc3fb2000}, {0xc3fb4000}, {0xc3fb6000}, - {0xc3fb8000}, {0xc3fba000}, {0xc3fbc000}, {0xc3fbe000}, - {0xc3fc0000}, {0xc3fc2000}, {0xc3fc4000}, {0xc3fc6000}, - {0xc3fc8000}, {0xc3fca000}, {0xc3fcc000}, {0xc3fce000}, - {0xc3fd0000}, {0xc3fd2000}, {0xc3fd4000}, {0xc3fd6000}, - {0xc3fd8000}, {0xc3fda000}, {0xc3fdc000}, {0xc3fde000}, - {0xc3fe0000}, {0xc3fe2000}, {0xc3fe4000}, {0xc3fe6000}, - {0xc3fe8000}, {0xc3fea000}, {0xc3fec000}, {0xc3fee000}, - {0xc3ff0000}, {0xc3ff2000}, {0xc3ff4000}, {0xc3ff6000}, - {0xc3ff8000}, {0xc3ffa000}, {0xc3ffc000}, {0xc3ffe000}, - {0xc4000000}, {0xc4002000}, {0xc4004000}, {0xc4006000}, - {0xc4008000}, {0xc400a000}, {0xc400c000}, {0xc400e000}, - {0xc4010000}, {0xc4012000}, {0xc4014000}, {0xc4016000}, - {0xc4018000}, {0xc401a000}, {0xc401c000}, {0xc401e000}, - {0xc4020000}, {0xc4022000}, {0xc4024000}, {0xc4026000}, - {0xc4028000}, {0xc402a000}, {0xc402c000}, {0xc402e000}, - {0xc4030000}, {0xc4032000}, {0xc4034000}, {0xc4036000}, - {0xc4038000}, {0xc403a000}, {0xc403c000}, {0xc403e000}, - {0xc4040000}, {0xc4042000}, {0xc4044000}, {0xc4046000}, - {0xc4048000}, {0xc404a000}, {0xc404c000}, {0xc404e000}, - {0xc4050000}, {0xc4052000}, {0xc4054000}, {0xc4056000}, - {0xc4058000}, {0xc405a000}, {0xc405c000}, {0xc405e000}, - {0xc4060000}, {0xc4062000}, {0xc4064000}, {0xc4066000}, - {0xc4068000}, {0xc406a000}, {0xc406c000}, {0xc406e000}, - {0xc4070000}, {0xc4072000}, {0xc4074000}, {0xc4076000}, - {0xc4078000}, {0xc407a000}, {0xc407c000}, {0xc407e000}, - {0xc4080000}, {0xc4082000}, {0xc4084000}, {0xc4086000}, - {0xc4088000}, {0xc408a000}, {0xc408c000}, {0xc408e000}, - {0xc4090000}, {0xc4092000}, {0xc4094000}, {0xc4096000}, - {0xc4098000}, {0xc409a000}, {0xc409c000}, {0xc409e000}, - {0xc40a0000}, {0xc40a2000}, {0xc40a4000}, {0xc40a6000}, - {0xc40a8000}, {0xc40aa000}, {0xc40ac000}, {0xc40ae000}, - {0xc40b0000}, {0xc40b2000}, {0xc40b4000}, {0xc40b6000}, - {0xc40b8000}, {0xc40ba000}, {0xc40bc000}, {0xc40be000}, - {0xc40c0000}, {0xc40c2000}, {0xc40c4000}, {0xc40c6000}, - {0xc40c8000}, {0xc40ca000}, {0xc40cc000}, {0xc40ce000}, - {0xc40d0000}, {0xc40d2000}, {0xc40d4000}, {0xc40d6000}, - {0xc40d8000}, {0xc40da000}, {0xc40dc000}, {0xc40de000}, - {0xc40e0000}, {0xc40e2000}, {0xc40e4000}, {0xc40e6000}, - {0xc40e8000}, {0xc40ea000}, {0xc40ec000}, {0xc40ee000}, - {0xc40f0000}, {0xc40f2000}, {0xc40f4000}, {0xc40f6000}, - {0xc40f8000}, {0xc40fa000}, {0xc40fc000}, {0xc40fe000}, - {0xc4100000}, {0xc4102000}, {0xc4104000}, {0xc4106000}, - {0xc4108000}, {0xc410a000}, {0xc410c000}, {0xc410e000}, - {0xc4110000}, {0xc4112000}, {0xc4114000}, {0xc4116000}, - {0xc4118000}, {0xc411a000}, {0xc411c000}, {0xc411e000}, - {0xc4120000}, {0xc4122000}, {0xc4124000}, {0xc4126000}, - {0xc4128000}, {0xc412a000}, {0xc412c000}, {0xc412e000}, - {0xc4130000}, {0xc4132000}, {0xc4134000}, {0xc4136000}, - {0xc4138000}, {0xc413a000}, {0xc413c000}, {0xc413e000}, - {0xc4140000}, {0xc4142000}, {0xc4144000}, {0xc4146000}, - {0xc4148000}, {0xc414a000}, {0xc414c000}, {0xc414e000}, - {0xc4150000}, {0xc4152000}, {0xc4154000}, {0xc4156000}, - {0xc4158000}, {0xc415a000}, {0xc415c000}, {0xc415e000}, - {0xc4160000}, {0xc4162000}, {0xc4164000}, {0xc4166000}, - {0xc4168000}, {0xc416a000}, {0xc416c000}, {0xc416e000}, - {0xc4170000}, {0xc4172000}, {0xc4174000}, {0xc4176000}, - {0xc4178000}, {0xc417a000}, {0xc417c000}, {0xc417e000}, - {0xc4180000}, {0xc4182000}, {0xc4184000}, {0xc4186000}, - {0xc4188000}, {0xc418a000}, {0xc418c000}, {0xc418e000}, - {0xc4190000}, {0xc4192000}, {0xc4194000}, {0xc4196000}, - {0xc4198000}, {0xc419a000}, {0xc419c000}, {0xc419e000}, - {0xc41a0000}, {0xc41a2000}, {0xc41a4000}, {0xc41a6000}, - {0xc41a8000}, {0xc41aa000}, {0xc41ac000}, {0xc41ae000}, - {0xc41b0000}, {0xc41b2000}, {0xc41b4000}, {0xc41b6000}, - {0xc41b8000}, {0xc41ba000}, {0xc41bc000}, {0xc41be000}, - {0xc41c0000}, {0xc41c2000}, {0xc41c4000}, {0xc41c6000}, - {0xc41c8000}, {0xc41ca000}, {0xc41cc000}, {0xc41ce000}, - {0xc41d0000}, {0xc41d2000}, {0xc41d4000}, {0xc41d6000}, - {0xc41d8000}, {0xc41da000}, {0xc41dc000}, {0xc41de000}, - {0xc41e0000}, {0xc41e2000}, {0xc41e4000}, {0xc41e6000}, - {0xc41e8000}, {0xc41ea000}, {0xc41ec000}, {0xc41ee000}, - {0xc41f0000}, {0xc41f2000}, {0xc41f4000}, {0xc41f6000}, - {0xc41f8000}, {0xc41fa000}, {0xc41fc000}, {0xc41fe000}, - {0xc4200000}, {0xc4202000}, {0xc4204000}, {0xc4206000}, - {0xc4208000}, {0xc420a000}, {0xc420c000}, {0xc420e000}, - {0xc4210000}, {0xc4212000}, {0xc4214000}, {0xc4216000}, - {0xc4218000}, {0xc421a000}, {0xc421c000}, {0xc421e000}, - {0xc4220000}, {0xc4222000}, {0xc4224000}, {0xc4226000}, - {0xc4228000}, {0xc422a000}, {0xc422c000}, {0xc422e000}, - {0xc4230000}, {0xc4232000}, {0xc4234000}, {0xc4236000}, - {0xc4238000}, {0xc423a000}, {0xc423c000}, {0xc423e000}, - {0xc4240000}, {0xc4242000}, {0xc4244000}, {0xc4246000}, - {0xc4248000}, {0xc424a000}, {0xc424c000}, {0xc424e000}, - {0xc4250000}, {0xc4252000}, {0xc4254000}, {0xc4256000}, - {0xc4258000}, {0xc425a000}, {0xc425c000}, {0xc425e000}, - {0xc4260000}, {0xc4262000}, {0xc4264000}, {0xc4266000}, - {0xc4268000}, {0xc426a000}, {0xc426c000}, {0xc426e000}, - {0xc4270000}, {0xc4272000}, {0xc4274000}, {0xc4276000}, - {0xc4278000}, {0xc427a000}, {0xc427c000}, {0xc427e000}, - {0xc4280000}, {0xc4282000}, {0xc4284000}, {0xc4286000}, - {0xc4288000}, {0xc428a000}, {0xc428c000}, {0xc428e000}, - {0xc4290000}, {0xc4292000}, {0xc4294000}, {0xc4296000}, - {0xc4298000}, {0xc429a000}, {0xc429c000}, {0xc429e000}, - {0xc42a0000}, {0xc42a2000}, {0xc42a4000}, {0xc42a6000}, - {0xc42a8000}, {0xc42aa000}, {0xc42ac000}, {0xc42ae000}, - {0xc42b0000}, {0xc42b2000}, {0xc42b4000}, {0xc42b6000}, - {0xc42b8000}, {0xc42ba000}, {0xc42bc000}, {0xc42be000}, - {0xc42c0000}, {0xc42c2000}, {0xc42c4000}, {0xc42c6000}, - {0xc42c8000}, {0xc42ca000}, {0xc42cc000}, {0xc42ce000}, - {0xc42d0000}, {0xc42d2000}, {0xc42d4000}, {0xc42d6000}, - {0xc42d8000}, {0xc42da000}, {0xc42dc000}, {0xc42de000}, - {0xc42e0000}, {0xc42e2000}, {0xc42e4000}, {0xc42e6000}, - {0xc42e8000}, {0xc42ea000}, {0xc42ec000}, {0xc42ee000}, - {0xc42f0000}, {0xc42f2000}, {0xc42f4000}, {0xc42f6000}, - {0xc42f8000}, {0xc42fa000}, {0xc42fc000}, {0xc42fe000}, - {0xc4300000}, {0xc4302000}, {0xc4304000}, {0xc4306000}, - {0xc4308000}, {0xc430a000}, {0xc430c000}, {0xc430e000}, - {0xc4310000}, {0xc4312000}, {0xc4314000}, {0xc4316000}, - {0xc4318000}, {0xc431a000}, {0xc431c000}, {0xc431e000}, - {0xc4320000}, {0xc4322000}, {0xc4324000}, {0xc4326000}, - {0xc4328000}, {0xc432a000}, {0xc432c000}, {0xc432e000}, - {0xc4330000}, {0xc4332000}, {0xc4334000}, {0xc4336000}, - {0xc4338000}, {0xc433a000}, {0xc433c000}, {0xc433e000}, - {0xc4340000}, {0xc4342000}, {0xc4344000}, {0xc4346000}, - {0xc4348000}, {0xc434a000}, {0xc434c000}, {0xc434e000}, - {0xc4350000}, {0xc4352000}, {0xc4354000}, {0xc4356000}, - {0xc4358000}, {0xc435a000}, {0xc435c000}, {0xc435e000}, - {0xc4360000}, {0xc4362000}, {0xc4364000}, {0xc4366000}, - {0xc4368000}, {0xc436a000}, {0xc436c000}, {0xc436e000}, - {0xc4370000}, {0xc4372000}, {0xc4374000}, {0xc4376000}, - {0xc4378000}, {0xc437a000}, {0xc437c000}, {0xc437e000}, - {0xc4380000}, {0xc4382000}, {0xc4384000}, {0xc4386000}, - {0xc4388000}, {0xc438a000}, {0xc438c000}, {0xc438e000}, - {0xc4390000}, {0xc4392000}, {0xc4394000}, {0xc4396000}, - {0xc4398000}, {0xc439a000}, {0xc439c000}, {0xc439e000}, - {0xc43a0000}, {0xc43a2000}, {0xc43a4000}, {0xc43a6000}, - {0xc43a8000}, {0xc43aa000}, {0xc43ac000}, {0xc43ae000}, - {0xc43b0000}, {0xc43b2000}, {0xc43b4000}, {0xc43b6000}, - {0xc43b8000}, {0xc43ba000}, {0xc43bc000}, {0xc43be000}, - {0xc43c0000}, {0xc43c2000}, {0xc43c4000}, {0xc43c6000}, - {0xc43c8000}, {0xc43ca000}, {0xc43cc000}, {0xc43ce000}, - {0xc43d0000}, {0xc43d2000}, {0xc43d4000}, {0xc43d6000}, - {0xc43d8000}, {0xc43da000}, {0xc43dc000}, {0xc43de000}, - {0xc43e0000}, {0xc43e2000}, {0xc43e4000}, {0xc43e6000}, - {0xc43e8000}, {0xc43ea000}, {0xc43ec000}, {0xc43ee000}, - {0xc43f0000}, {0xc43f2000}, {0xc43f4000}, {0xc43f6000}, - {0xc43f8000}, {0xc43fa000}, {0xc43fc000}, {0xc43fe000}, - {0xc4400000}, {0xc4402000}, {0xc4404000}, {0xc4406000}, - {0xc4408000}, {0xc440a000}, {0xc440c000}, {0xc440e000}, - {0xc4410000}, {0xc4412000}, {0xc4414000}, {0xc4416000}, - {0xc4418000}, {0xc441a000}, {0xc441c000}, {0xc441e000}, - {0xc4420000}, {0xc4422000}, {0xc4424000}, {0xc4426000}, - {0xc4428000}, {0xc442a000}, {0xc442c000}, {0xc442e000}, - {0xc4430000}, {0xc4432000}, {0xc4434000}, {0xc4436000}, - {0xc4438000}, {0xc443a000}, {0xc443c000}, {0xc443e000}, - {0xc4440000}, {0xc4442000}, {0xc4444000}, {0xc4446000}, - {0xc4448000}, {0xc444a000}, {0xc444c000}, {0xc444e000}, - {0xc4450000}, {0xc4452000}, {0xc4454000}, {0xc4456000}, - {0xc4458000}, {0xc445a000}, {0xc445c000}, {0xc445e000}, - {0xc4460000}, {0xc4462000}, {0xc4464000}, {0xc4466000}, - {0xc4468000}, {0xc446a000}, {0xc446c000}, {0xc446e000}, - {0xc4470000}, {0xc4472000}, {0xc4474000}, {0xc4476000}, - {0xc4478000}, {0xc447a000}, {0xc447c000}, {0xc447e000}, - {0xc4480000}, {0xc4482000}, {0xc4484000}, {0xc4486000}, - {0xc4488000}, {0xc448a000}, {0xc448c000}, {0xc448e000}, - {0xc4490000}, {0xc4492000}, {0xc4494000}, {0xc4496000}, - {0xc4498000}, {0xc449a000}, {0xc449c000}, {0xc449e000}, - {0xc44a0000}, {0xc44a2000}, {0xc44a4000}, {0xc44a6000}, - {0xc44a8000}, {0xc44aa000}, {0xc44ac000}, {0xc44ae000}, - {0xc44b0000}, {0xc44b2000}, {0xc44b4000}, {0xc44b6000}, - {0xc44b8000}, {0xc44ba000}, {0xc44bc000}, {0xc44be000}, - {0xc44c0000}, {0xc44c2000}, {0xc44c4000}, {0xc44c6000}, - {0xc44c8000}, {0xc44ca000}, {0xc44cc000}, {0xc44ce000}, - {0xc44d0000}, {0xc44d2000}, {0xc44d4000}, {0xc44d6000}, - {0xc44d8000}, {0xc44da000}, {0xc44dc000}, {0xc44de000}, - {0xc44e0000}, {0xc44e2000}, {0xc44e4000}, {0xc44e6000}, - {0xc44e8000}, {0xc44ea000}, {0xc44ec000}, {0xc44ee000}, - {0xc44f0000}, {0xc44f2000}, {0xc44f4000}, {0xc44f6000}, - {0xc44f8000}, {0xc44fa000}, {0xc44fc000}, {0xc44fe000}, - {0xc4500000}, {0xc4502000}, {0xc4504000}, {0xc4506000}, - {0xc4508000}, {0xc450a000}, {0xc450c000}, {0xc450e000}, - {0xc4510000}, {0xc4512000}, {0xc4514000}, {0xc4516000}, - {0xc4518000}, {0xc451a000}, {0xc451c000}, {0xc451e000}, - {0xc4520000}, {0xc4522000}, {0xc4524000}, {0xc4526000}, - {0xc4528000}, {0xc452a000}, {0xc452c000}, {0xc452e000}, - {0xc4530000}, {0xc4532000}, {0xc4534000}, {0xc4536000}, - {0xc4538000}, {0xc453a000}, {0xc453c000}, {0xc453e000}, - {0xc4540000}, {0xc4542000}, {0xc4544000}, {0xc4546000}, - {0xc4548000}, {0xc454a000}, {0xc454c000}, {0xc454e000}, - {0xc4550000}, {0xc4552000}, {0xc4554000}, {0xc4556000}, - {0xc4558000}, {0xc455a000}, {0xc455c000}, {0xc455e000}, - {0xc4560000}, {0xc4562000}, {0xc4564000}, {0xc4566000}, - {0xc4568000}, {0xc456a000}, {0xc456c000}, {0xc456e000}, - {0xc4570000}, {0xc4572000}, {0xc4574000}, {0xc4576000}, - {0xc4578000}, {0xc457a000}, {0xc457c000}, {0xc457e000}, - {0xc4580000}, {0xc4582000}, {0xc4584000}, {0xc4586000}, - {0xc4588000}, {0xc458a000}, {0xc458c000}, {0xc458e000}, - {0xc4590000}, {0xc4592000}, {0xc4594000}, {0xc4596000}, - {0xc4598000}, {0xc459a000}, {0xc459c000}, {0xc459e000}, - {0xc45a0000}, {0xc45a2000}, {0xc45a4000}, {0xc45a6000}, - {0xc45a8000}, {0xc45aa000}, {0xc45ac000}, {0xc45ae000}, - {0xc45b0000}, {0xc45b2000}, {0xc45b4000}, {0xc45b6000}, - {0xc45b8000}, {0xc45ba000}, {0xc45bc000}, {0xc45be000}, - {0xc45c0000}, {0xc45c2000}, {0xc45c4000}, {0xc45c6000}, - {0xc45c8000}, {0xc45ca000}, {0xc45cc000}, {0xc45ce000}, - {0xc45d0000}, {0xc45d2000}, {0xc45d4000}, {0xc45d6000}, - {0xc45d8000}, {0xc45da000}, {0xc45dc000}, {0xc45de000}, - {0xc45e0000}, {0xc45e2000}, {0xc45e4000}, {0xc45e6000}, - {0xc45e8000}, {0xc45ea000}, {0xc45ec000}, {0xc45ee000}, - {0xc45f0000}, {0xc45f2000}, {0xc45f4000}, {0xc45f6000}, - {0xc45f8000}, {0xc45fa000}, {0xc45fc000}, {0xc45fe000}, - {0xc4600000}, {0xc4602000}, {0xc4604000}, {0xc4606000}, - {0xc4608000}, {0xc460a000}, {0xc460c000}, {0xc460e000}, - {0xc4610000}, {0xc4612000}, {0xc4614000}, {0xc4616000}, - {0xc4618000}, {0xc461a000}, {0xc461c000}, {0xc461e000}, - {0xc4620000}, {0xc4622000}, {0xc4624000}, {0xc4626000}, - {0xc4628000}, {0xc462a000}, {0xc462c000}, {0xc462e000}, - {0xc4630000}, {0xc4632000}, {0xc4634000}, {0xc4636000}, - {0xc4638000}, {0xc463a000}, {0xc463c000}, {0xc463e000}, - {0xc4640000}, {0xc4642000}, {0xc4644000}, {0xc4646000}, - {0xc4648000}, {0xc464a000}, {0xc464c000}, {0xc464e000}, - {0xc4650000}, {0xc4652000}, {0xc4654000}, {0xc4656000}, - {0xc4658000}, {0xc465a000}, {0xc465c000}, {0xc465e000}, - {0xc4660000}, {0xc4662000}, {0xc4664000}, {0xc4666000}, - {0xc4668000}, {0xc466a000}, {0xc466c000}, {0xc466e000}, - {0xc4670000}, {0xc4672000}, {0xc4674000}, {0xc4676000}, - {0xc4678000}, {0xc467a000}, {0xc467c000}, {0xc467e000}, - {0xc4680000}, {0xc4682000}, {0xc4684000}, {0xc4686000}, - {0xc4688000}, {0xc468a000}, {0xc468c000}, {0xc468e000}, - {0xc4690000}, {0xc4692000}, {0xc4694000}, {0xc4696000}, - {0xc4698000}, {0xc469a000}, {0xc469c000}, {0xc469e000}, - {0xc46a0000}, {0xc46a2000}, {0xc46a4000}, {0xc46a6000}, - {0xc46a8000}, {0xc46aa000}, {0xc46ac000}, {0xc46ae000}, - {0xc46b0000}, {0xc46b2000}, {0xc46b4000}, {0xc46b6000}, - {0xc46b8000}, {0xc46ba000}, {0xc46bc000}, {0xc46be000}, - {0xc46c0000}, {0xc46c2000}, {0xc46c4000}, {0xc46c6000}, - {0xc46c8000}, {0xc46ca000}, {0xc46cc000}, {0xc46ce000}, - {0xc46d0000}, {0xc46d2000}, {0xc46d4000}, {0xc46d6000}, - {0xc46d8000}, {0xc46da000}, {0xc46dc000}, {0xc46de000}, - {0xc46e0000}, {0xc46e2000}, {0xc46e4000}, {0xc46e6000}, - {0xc46e8000}, {0xc46ea000}, {0xc46ec000}, {0xc46ee000}, - {0xc46f0000}, {0xc46f2000}, {0xc46f4000}, {0xc46f6000}, - {0xc46f8000}, {0xc46fa000}, {0xc46fc000}, {0xc46fe000}, - {0xc4700000}, {0xc4702000}, {0xc4704000}, {0xc4706000}, - {0xc4708000}, {0xc470a000}, {0xc470c000}, {0xc470e000}, - {0xc4710000}, {0xc4712000}, {0xc4714000}, {0xc4716000}, - {0xc4718000}, {0xc471a000}, {0xc471c000}, {0xc471e000}, - {0xc4720000}, {0xc4722000}, {0xc4724000}, {0xc4726000}, - {0xc4728000}, {0xc472a000}, {0xc472c000}, {0xc472e000}, - {0xc4730000}, {0xc4732000}, {0xc4734000}, {0xc4736000}, - {0xc4738000}, {0xc473a000}, {0xc473c000}, {0xc473e000}, - {0xc4740000}, {0xc4742000}, {0xc4744000}, {0xc4746000}, - {0xc4748000}, {0xc474a000}, {0xc474c000}, {0xc474e000}, - {0xc4750000}, {0xc4752000}, {0xc4754000}, {0xc4756000}, - {0xc4758000}, {0xc475a000}, {0xc475c000}, {0xc475e000}, - {0xc4760000}, {0xc4762000}, {0xc4764000}, {0xc4766000}, - {0xc4768000}, {0xc476a000}, {0xc476c000}, {0xc476e000}, - {0xc4770000}, {0xc4772000}, {0xc4774000}, {0xc4776000}, - {0xc4778000}, {0xc477a000}, {0xc477c000}, {0xc477e000}, - {0xc4780000}, {0xc4782000}, {0xc4784000}, {0xc4786000}, - {0xc4788000}, {0xc478a000}, {0xc478c000}, {0xc478e000}, - {0xc4790000}, {0xc4792000}, {0xc4794000}, {0xc4796000}, - {0xc4798000}, {0xc479a000}, {0xc479c000}, {0xc479e000}, - {0xc47a0000}, {0xc47a2000}, {0xc47a4000}, {0xc47a6000}, - {0xc47a8000}, {0xc47aa000}, {0xc47ac000}, {0xc47ae000}, - {0xc47b0000}, {0xc47b2000}, {0xc47b4000}, {0xc47b6000}, - {0xc47b8000}, {0xc47ba000}, {0xc47bc000}, {0xc47be000}, - {0xc47c0000}, {0xc47c2000}, {0xc47c4000}, {0xc47c6000}, - {0xc47c8000}, {0xc47ca000}, {0xc47cc000}, {0xc47ce000}, - {0xc47d0000}, {0xc47d2000}, {0xc47d4000}, {0xc47d6000}, - {0xc47d8000}, {0xc47da000}, {0xc47dc000}, {0xc47de000}, - {0xc47e0000}, {0xc47e2000}, {0xc47e4000}, {0xc47e6000}, - {0xc47e8000}, {0xc47ea000}, {0xc47ec000}, {0xc47ee000}, - {0xc47f0000}, {0xc47f2000}, {0xc47f4000}, {0xc47f6000}, - {0xc47f8000}, {0xc47fa000}, {0xc47fc000}, {0xc47fe000}, - {0xc4800000}, {0xc4802000}, {0xc4804000}, {0xc4806000}, - {0xc4808000}, {0xc480a000}, {0xc480c000}, {0xc480e000}, - {0xc4810000}, {0xc4812000}, {0xc4814000}, {0xc4816000}, - {0xc4818000}, {0xc481a000}, {0xc481c000}, {0xc481e000}, - {0xc4820000}, {0xc4822000}, {0xc4824000}, {0xc4826000}, - {0xc4828000}, {0xc482a000}, {0xc482c000}, {0xc482e000}, - {0xc4830000}, {0xc4832000}, {0xc4834000}, {0xc4836000}, - {0xc4838000}, {0xc483a000}, {0xc483c000}, {0xc483e000}, - {0xc4840000}, {0xc4842000}, {0xc4844000}, {0xc4846000}, - {0xc4848000}, {0xc484a000}, {0xc484c000}, {0xc484e000}, - {0xc4850000}, {0xc4852000}, {0xc4854000}, {0xc4856000}, - {0xc4858000}, {0xc485a000}, {0xc485c000}, {0xc485e000}, - {0xc4860000}, {0xc4862000}, {0xc4864000}, {0xc4866000}, - {0xc4868000}, {0xc486a000}, {0xc486c000}, {0xc486e000}, - {0xc4870000}, {0xc4872000}, {0xc4874000}, {0xc4876000}, - {0xc4878000}, {0xc487a000}, {0xc487c000}, {0xc487e000}, - {0xc4880000}, {0xc4882000}, {0xc4884000}, {0xc4886000}, - {0xc4888000}, {0xc488a000}, {0xc488c000}, {0xc488e000}, - {0xc4890000}, {0xc4892000}, {0xc4894000}, {0xc4896000}, - {0xc4898000}, {0xc489a000}, {0xc489c000}, {0xc489e000}, - {0xc48a0000}, {0xc48a2000}, {0xc48a4000}, {0xc48a6000}, - {0xc48a8000}, {0xc48aa000}, {0xc48ac000}, {0xc48ae000}, - {0xc48b0000}, {0xc48b2000}, {0xc48b4000}, {0xc48b6000}, - {0xc48b8000}, {0xc48ba000}, {0xc48bc000}, {0xc48be000}, - {0xc48c0000}, {0xc48c2000}, {0xc48c4000}, {0xc48c6000}, - {0xc48c8000}, {0xc48ca000}, {0xc48cc000}, {0xc48ce000}, - {0xc48d0000}, {0xc48d2000}, {0xc48d4000}, {0xc48d6000}, - {0xc48d8000}, {0xc48da000}, {0xc48dc000}, {0xc48de000}, - {0xc48e0000}, {0xc48e2000}, {0xc48e4000}, {0xc48e6000}, - {0xc48e8000}, {0xc48ea000}, {0xc48ec000}, {0xc48ee000}, - {0xc48f0000}, {0xc48f2000}, {0xc48f4000}, {0xc48f6000}, - {0xc48f8000}, {0xc48fa000}, {0xc48fc000}, {0xc48fe000}, - {0xc4900000}, {0xc4902000}, {0xc4904000}, {0xc4906000}, - {0xc4908000}, {0xc490a000}, {0xc490c000}, {0xc490e000}, - {0xc4910000}, {0xc4912000}, {0xc4914000}, {0xc4916000}, - {0xc4918000}, {0xc491a000}, {0xc491c000}, {0xc491e000}, - {0xc4920000}, {0xc4922000}, {0xc4924000}, {0xc4926000}, - {0xc4928000}, {0xc492a000}, {0xc492c000}, {0xc492e000}, - {0xc4930000}, {0xc4932000}, {0xc4934000}, {0xc4936000}, - {0xc4938000}, {0xc493a000}, {0xc493c000}, {0xc493e000}, - {0xc4940000}, {0xc4942000}, {0xc4944000}, {0xc4946000}, - {0xc4948000}, {0xc494a000}, {0xc494c000}, {0xc494e000}, - {0xc4950000}, {0xc4952000}, {0xc4954000}, {0xc4956000}, - {0xc4958000}, {0xc495a000}, {0xc495c000}, {0xc495e000}, - {0xc4960000}, {0xc4962000}, {0xc4964000}, {0xc4966000}, - {0xc4968000}, {0xc496a000}, {0xc496c000}, {0xc496e000}, - {0xc4970000}, {0xc4972000}, {0xc4974000}, {0xc4976000}, - {0xc4978000}, {0xc497a000}, {0xc497c000}, {0xc497e000}, - {0xc4980000}, {0xc4982000}, {0xc4984000}, {0xc4986000}, - {0xc4988000}, {0xc498a000}, {0xc498c000}, {0xc498e000}, - {0xc4990000}, {0xc4992000}, {0xc4994000}, {0xc4996000}, - {0xc4998000}, {0xc499a000}, {0xc499c000}, {0xc499e000}, - {0xc49a0000}, {0xc49a2000}, {0xc49a4000}, {0xc49a6000}, - {0xc49a8000}, {0xc49aa000}, {0xc49ac000}, {0xc49ae000}, - {0xc49b0000}, {0xc49b2000}, {0xc49b4000}, {0xc49b6000}, - {0xc49b8000}, {0xc49ba000}, {0xc49bc000}, {0xc49be000}, - {0xc49c0000}, {0xc49c2000}, {0xc49c4000}, {0xc49c6000}, - {0xc49c8000}, {0xc49ca000}, {0xc49cc000}, {0xc49ce000}, - {0xc49d0000}, {0xc49d2000}, {0xc49d4000}, {0xc49d6000}, - {0xc49d8000}, {0xc49da000}, {0xc49dc000}, {0xc49de000}, - {0xc49e0000}, {0xc49e2000}, {0xc49e4000}, {0xc49e6000}, - {0xc49e8000}, {0xc49ea000}, {0xc49ec000}, {0xc49ee000}, - {0xc49f0000}, {0xc49f2000}, {0xc49f4000}, {0xc49f6000}, - {0xc49f8000}, {0xc49fa000}, {0xc49fc000}, {0xc49fe000}, - {0xc4a00000}, {0xc4a02000}, {0xc4a04000}, {0xc4a06000}, - {0xc4a08000}, {0xc4a0a000}, {0xc4a0c000}, {0xc4a0e000}, - {0xc4a10000}, {0xc4a12000}, {0xc4a14000}, {0xc4a16000}, - {0xc4a18000}, {0xc4a1a000}, {0xc4a1c000}, {0xc4a1e000}, - {0xc4a20000}, {0xc4a22000}, {0xc4a24000}, {0xc4a26000}, - {0xc4a28000}, {0xc4a2a000}, {0xc4a2c000}, {0xc4a2e000}, - {0xc4a30000}, {0xc4a32000}, {0xc4a34000}, {0xc4a36000}, - {0xc4a38000}, {0xc4a3a000}, {0xc4a3c000}, {0xc4a3e000}, - {0xc4a40000}, {0xc4a42000}, {0xc4a44000}, {0xc4a46000}, - {0xc4a48000}, {0xc4a4a000}, {0xc4a4c000}, {0xc4a4e000}, - {0xc4a50000}, {0xc4a52000}, {0xc4a54000}, {0xc4a56000}, - {0xc4a58000}, {0xc4a5a000}, {0xc4a5c000}, {0xc4a5e000}, - {0xc4a60000}, {0xc4a62000}, {0xc4a64000}, {0xc4a66000}, - {0xc4a68000}, {0xc4a6a000}, {0xc4a6c000}, {0xc4a6e000}, - {0xc4a70000}, {0xc4a72000}, {0xc4a74000}, {0xc4a76000}, - {0xc4a78000}, {0xc4a7a000}, {0xc4a7c000}, {0xc4a7e000}, - {0xc4a80000}, {0xc4a82000}, {0xc4a84000}, {0xc4a86000}, - {0xc4a88000}, {0xc4a8a000}, {0xc4a8c000}, {0xc4a8e000}, - {0xc4a90000}, {0xc4a92000}, {0xc4a94000}, {0xc4a96000}, - {0xc4a98000}, {0xc4a9a000}, {0xc4a9c000}, {0xc4a9e000}, - {0xc4aa0000}, {0xc4aa2000}, {0xc4aa4000}, {0xc4aa6000}, - {0xc4aa8000}, {0xc4aaa000}, {0xc4aac000}, {0xc4aae000}, - {0xc4ab0000}, {0xc4ab2000}, {0xc4ab4000}, {0xc4ab6000}, - {0xc4ab8000}, {0xc4aba000}, {0xc4abc000}, {0xc4abe000}, - {0xc4ac0000}, {0xc4ac2000}, {0xc4ac4000}, {0xc4ac6000}, - {0xc4ac8000}, {0xc4aca000}, {0xc4acc000}, {0xc4ace000}, - {0xc4ad0000}, {0xc4ad2000}, {0xc4ad4000}, {0xc4ad6000}, - {0xc4ad8000}, {0xc4ada000}, {0xc4adc000}, {0xc4ade000}, - {0xc4ae0000}, {0xc4ae2000}, {0xc4ae4000}, {0xc4ae6000}, - {0xc4ae8000}, {0xc4aea000}, {0xc4aec000}, {0xc4aee000}, - {0xc4af0000}, {0xc4af2000}, {0xc4af4000}, {0xc4af6000}, - {0xc4af8000}, {0xc4afa000}, {0xc4afc000}, {0xc4afe000}, - {0xc4b00000}, {0xc4b02000}, {0xc4b04000}, {0xc4b06000}, - {0xc4b08000}, {0xc4b0a000}, {0xc4b0c000}, {0xc4b0e000}, - {0xc4b10000}, {0xc4b12000}, {0xc4b14000}, {0xc4b16000}, - {0xc4b18000}, {0xc4b1a000}, {0xc4b1c000}, {0xc4b1e000}, - {0xc4b20000}, {0xc4b22000}, {0xc4b24000}, {0xc4b26000}, - {0xc4b28000}, {0xc4b2a000}, {0xc4b2c000}, {0xc4b2e000}, - {0xc4b30000}, {0xc4b32000}, {0xc4b34000}, {0xc4b36000}, - {0xc4b38000}, {0xc4b3a000}, {0xc4b3c000}, {0xc4b3e000}, - {0xc4b40000}, {0xc4b42000}, {0xc4b44000}, {0xc4b46000}, - {0xc4b48000}, {0xc4b4a000}, {0xc4b4c000}, {0xc4b4e000}, - {0xc4b50000}, {0xc4b52000}, {0xc4b54000}, {0xc4b56000}, - {0xc4b58000}, {0xc4b5a000}, {0xc4b5c000}, {0xc4b5e000}, - {0xc4b60000}, {0xc4b62000}, {0xc4b64000}, {0xc4b66000}, - {0xc4b68000}, {0xc4b6a000}, {0xc4b6c000}, {0xc4b6e000}, - {0xc4b70000}, {0xc4b72000}, {0xc4b74000}, {0xc4b76000}, - {0xc4b78000}, {0xc4b7a000}, {0xc4b7c000}, {0xc4b7e000}, - {0xc4b80000}, {0xc4b82000}, {0xc4b84000}, {0xc4b86000}, - {0xc4b88000}, {0xc4b8a000}, {0xc4b8c000}, {0xc4b8e000}, - {0xc4b90000}, {0xc4b92000}, {0xc4b94000}, {0xc4b96000}, - {0xc4b98000}, {0xc4b9a000}, {0xc4b9c000}, {0xc4b9e000}, - {0xc4ba0000}, {0xc4ba2000}, {0xc4ba4000}, {0xc4ba6000}, - {0xc4ba8000}, {0xc4baa000}, {0xc4bac000}, {0xc4bae000}, - {0xc4bb0000}, {0xc4bb2000}, {0xc4bb4000}, {0xc4bb6000}, - {0xc4bb8000}, {0xc4bba000}, {0xc4bbc000}, {0xc4bbe000}, - {0xc4bc0000}, {0xc4bc2000}, {0xc4bc4000}, {0xc4bc6000}, - {0xc4bc8000}, {0xc4bca000}, {0xc4bcc000}, {0xc4bce000}, - {0xc4bd0000}, {0xc4bd2000}, {0xc4bd4000}, {0xc4bd6000}, - {0xc4bd8000}, {0xc4bda000}, {0xc4bdc000}, {0xc4bde000}, - {0xc4be0000}, {0xc4be2000}, {0xc4be4000}, {0xc4be6000}, - {0xc4be8000}, {0xc4bea000}, {0xc4bec000}, {0xc4bee000}, - {0xc4bf0000}, {0xc4bf2000}, {0xc4bf4000}, {0xc4bf6000}, - {0xc4bf8000}, {0xc4bfa000}, {0xc4bfc000}, {0xc4bfe000}, - {0xc4c00000}, {0xc4c02000}, {0xc4c04000}, {0xc4c06000}, - {0xc4c08000}, {0xc4c0a000}, {0xc4c0c000}, {0xc4c0e000}, - {0xc4c10000}, {0xc4c12000}, {0xc4c14000}, {0xc4c16000}, - {0xc4c18000}, {0xc4c1a000}, {0xc4c1c000}, {0xc4c1e000}, - {0xc4c20000}, {0xc4c22000}, {0xc4c24000}, {0xc4c26000}, - {0xc4c28000}, {0xc4c2a000}, {0xc4c2c000}, {0xc4c2e000}, - {0xc4c30000}, {0xc4c32000}, {0xc4c34000}, {0xc4c36000}, - {0xc4c38000}, {0xc4c3a000}, {0xc4c3c000}, {0xc4c3e000}, - {0xc4c40000}, {0xc4c42000}, {0xc4c44000}, {0xc4c46000}, - {0xc4c48000}, {0xc4c4a000}, {0xc4c4c000}, {0xc4c4e000}, - {0xc4c50000}, {0xc4c52000}, {0xc4c54000}, {0xc4c56000}, - {0xc4c58000}, {0xc4c5a000}, {0xc4c5c000}, {0xc4c5e000}, - {0xc4c60000}, {0xc4c62000}, {0xc4c64000}, {0xc4c66000}, - {0xc4c68000}, {0xc4c6a000}, {0xc4c6c000}, {0xc4c6e000}, - {0xc4c70000}, {0xc4c72000}, {0xc4c74000}, {0xc4c76000}, - {0xc4c78000}, {0xc4c7a000}, {0xc4c7c000}, {0xc4c7e000}, - {0xc4c80000}, {0xc4c82000}, {0xc4c84000}, {0xc4c86000}, - {0xc4c88000}, {0xc4c8a000}, {0xc4c8c000}, {0xc4c8e000}, - {0xc4c90000}, {0xc4c92000}, {0xc4c94000}, {0xc4c96000}, - {0xc4c98000}, {0xc4c9a000}, {0xc4c9c000}, {0xc4c9e000}, - {0xc4ca0000}, {0xc4ca2000}, {0xc4ca4000}, {0xc4ca6000}, - {0xc4ca8000}, {0xc4caa000}, {0xc4cac000}, {0xc4cae000}, - {0xc4cb0000}, {0xc4cb2000}, {0xc4cb4000}, {0xc4cb6000}, - {0xc4cb8000}, {0xc4cba000}, {0xc4cbc000}, {0xc4cbe000}, - {0xc4cc0000}, {0xc4cc2000}, {0xc4cc4000}, {0xc4cc6000}, - {0xc4cc8000}, {0xc4cca000}, {0xc4ccc000}, {0xc4cce000}, - {0xc4cd0000}, {0xc4cd2000}, {0xc4cd4000}, {0xc4cd6000}, - {0xc4cd8000}, {0xc4cda000}, {0xc4cdc000}, {0xc4cde000}, - {0xc4ce0000}, {0xc4ce2000}, {0xc4ce4000}, {0xc4ce6000}, - {0xc4ce8000}, {0xc4cea000}, {0xc4cec000}, {0xc4cee000}, - {0xc4cf0000}, {0xc4cf2000}, {0xc4cf4000}, {0xc4cf6000}, - {0xc4cf8000}, {0xc4cfa000}, {0xc4cfc000}, {0xc4cfe000}, - {0xc4d00000}, {0xc4d02000}, {0xc4d04000}, {0xc4d06000}, - {0xc4d08000}, {0xc4d0a000}, {0xc4d0c000}, {0xc4d0e000}, - {0xc4d10000}, {0xc4d12000}, {0xc4d14000}, {0xc4d16000}, - {0xc4d18000}, {0xc4d1a000}, {0xc4d1c000}, {0xc4d1e000}, - {0xc4d20000}, {0xc4d22000}, {0xc4d24000}, {0xc4d26000}, - {0xc4d28000}, {0xc4d2a000}, {0xc4d2c000}, {0xc4d2e000}, - {0xc4d30000}, {0xc4d32000}, {0xc4d34000}, {0xc4d36000}, - {0xc4d38000}, {0xc4d3a000}, {0xc4d3c000}, {0xc4d3e000}, - {0xc4d40000}, {0xc4d42000}, {0xc4d44000}, {0xc4d46000}, - {0xc4d48000}, {0xc4d4a000}, {0xc4d4c000}, {0xc4d4e000}, - {0xc4d50000}, {0xc4d52000}, {0xc4d54000}, {0xc4d56000}, - {0xc4d58000}, {0xc4d5a000}, {0xc4d5c000}, {0xc4d5e000}, - {0xc4d60000}, {0xc4d62000}, {0xc4d64000}, {0xc4d66000}, - {0xc4d68000}, {0xc4d6a000}, {0xc4d6c000}, {0xc4d6e000}, - {0xc4d70000}, {0xc4d72000}, {0xc4d74000}, {0xc4d76000}, - {0xc4d78000}, {0xc4d7a000}, {0xc4d7c000}, {0xc4d7e000}, - {0xc4d80000}, {0xc4d82000}, {0xc4d84000}, {0xc4d86000}, - {0xc4d88000}, {0xc4d8a000}, {0xc4d8c000}, {0xc4d8e000}, - {0xc4d90000}, {0xc4d92000}, {0xc4d94000}, {0xc4d96000}, - {0xc4d98000}, {0xc4d9a000}, {0xc4d9c000}, {0xc4d9e000}, - {0xc4da0000}, {0xc4da2000}, {0xc4da4000}, {0xc4da6000}, - {0xc4da8000}, {0xc4daa000}, {0xc4dac000}, {0xc4dae000}, - {0xc4db0000}, {0xc4db2000}, {0xc4db4000}, {0xc4db6000}, - {0xc4db8000}, {0xc4dba000}, {0xc4dbc000}, {0xc4dbe000}, - {0xc4dc0000}, {0xc4dc2000}, {0xc4dc4000}, {0xc4dc6000}, - {0xc4dc8000}, {0xc4dca000}, {0xc4dcc000}, {0xc4dce000}, - {0xc4dd0000}, {0xc4dd2000}, {0xc4dd4000}, {0xc4dd6000}, - {0xc4dd8000}, {0xc4dda000}, {0xc4ddc000}, {0xc4dde000}, - {0xc4de0000}, {0xc4de2000}, {0xc4de4000}, {0xc4de6000}, - {0xc4de8000}, {0xc4dea000}, {0xc4dec000}, {0xc4dee000}, - {0xc4df0000}, {0xc4df2000}, {0xc4df4000}, {0xc4df6000}, - {0xc4df8000}, {0xc4dfa000}, {0xc4dfc000}, {0xc4dfe000}, - {0xc4e00000}, {0xc4e02000}, {0xc4e04000}, {0xc4e06000}, - {0xc4e08000}, {0xc4e0a000}, {0xc4e0c000}, {0xc4e0e000}, - {0xc4e10000}, {0xc4e12000}, {0xc4e14000}, {0xc4e16000}, - {0xc4e18000}, {0xc4e1a000}, {0xc4e1c000}, {0xc4e1e000}, - {0xc4e20000}, {0xc4e22000}, {0xc4e24000}, {0xc4e26000}, - {0xc4e28000}, {0xc4e2a000}, {0xc4e2c000}, {0xc4e2e000}, - {0xc4e30000}, {0xc4e32000}, {0xc4e34000}, {0xc4e36000}, - {0xc4e38000}, {0xc4e3a000}, {0xc4e3c000}, {0xc4e3e000}, - {0xc4e40000}, {0xc4e42000}, {0xc4e44000}, {0xc4e46000}, - {0xc4e48000}, {0xc4e4a000}, {0xc4e4c000}, {0xc4e4e000}, - {0xc4e50000}, {0xc4e52000}, {0xc4e54000}, {0xc4e56000}, - {0xc4e58000}, {0xc4e5a000}, {0xc4e5c000}, {0xc4e5e000}, - {0xc4e60000}, {0xc4e62000}, {0xc4e64000}, {0xc4e66000}, - {0xc4e68000}, {0xc4e6a000}, {0xc4e6c000}, {0xc4e6e000}, - {0xc4e70000}, {0xc4e72000}, {0xc4e74000}, {0xc4e76000}, - {0xc4e78000}, {0xc4e7a000}, {0xc4e7c000}, {0xc4e7e000}, - {0xc4e80000}, {0xc4e82000}, {0xc4e84000}, {0xc4e86000}, - {0xc4e88000}, {0xc4e8a000}, {0xc4e8c000}, {0xc4e8e000}, - {0xc4e90000}, {0xc4e92000}, {0xc4e94000}, {0xc4e96000}, - {0xc4e98000}, {0xc4e9a000}, {0xc4e9c000}, {0xc4e9e000}, - {0xc4ea0000}, {0xc4ea2000}, {0xc4ea4000}, {0xc4ea6000}, - {0xc4ea8000}, {0xc4eaa000}, {0xc4eac000}, {0xc4eae000}, - {0xc4eb0000}, {0xc4eb2000}, {0xc4eb4000}, {0xc4eb6000}, - {0xc4eb8000}, {0xc4eba000}, {0xc4ebc000}, {0xc4ebe000}, - {0xc4ec0000}, {0xc4ec2000}, {0xc4ec4000}, {0xc4ec6000}, - {0xc4ec8000}, {0xc4eca000}, {0xc4ecc000}, {0xc4ece000}, - {0xc4ed0000}, {0xc4ed2000}, {0xc4ed4000}, {0xc4ed6000}, - {0xc4ed8000}, {0xc4eda000}, {0xc4edc000}, {0xc4ede000}, - {0xc4ee0000}, {0xc4ee2000}, {0xc4ee4000}, {0xc4ee6000}, - {0xc4ee8000}, {0xc4eea000}, {0xc4eec000}, {0xc4eee000}, - {0xc4ef0000}, {0xc4ef2000}, {0xc4ef4000}, {0xc4ef6000}, - {0xc4ef8000}, {0xc4efa000}, {0xc4efc000}, {0xc4efe000}, - {0xc4f00000}, {0xc4f02000}, {0xc4f04000}, {0xc4f06000}, - {0xc4f08000}, {0xc4f0a000}, {0xc4f0c000}, {0xc4f0e000}, - {0xc4f10000}, {0xc4f12000}, {0xc4f14000}, {0xc4f16000}, - {0xc4f18000}, {0xc4f1a000}, {0xc4f1c000}, {0xc4f1e000}, - {0xc4f20000}, {0xc4f22000}, {0xc4f24000}, {0xc4f26000}, - {0xc4f28000}, {0xc4f2a000}, {0xc4f2c000}, {0xc4f2e000}, - {0xc4f30000}, {0xc4f32000}, {0xc4f34000}, {0xc4f36000}, - {0xc4f38000}, {0xc4f3a000}, {0xc4f3c000}, {0xc4f3e000}, - {0xc4f40000}, {0xc4f42000}, {0xc4f44000}, {0xc4f46000}, - {0xc4f48000}, {0xc4f4a000}, {0xc4f4c000}, {0xc4f4e000}, - {0xc4f50000}, {0xc4f52000}, {0xc4f54000}, {0xc4f56000}, - {0xc4f58000}, {0xc4f5a000}, {0xc4f5c000}, {0xc4f5e000}, - {0xc4f60000}, {0xc4f62000}, {0xc4f64000}, {0xc4f66000}, - {0xc4f68000}, {0xc4f6a000}, {0xc4f6c000}, {0xc4f6e000}, - {0xc4f70000}, {0xc4f72000}, {0xc4f74000}, {0xc4f76000}, - {0xc4f78000}, {0xc4f7a000}, {0xc4f7c000}, {0xc4f7e000}, - {0xc4f80000}, {0xc4f82000}, {0xc4f84000}, {0xc4f86000}, - {0xc4f88000}, {0xc4f8a000}, {0xc4f8c000}, {0xc4f8e000}, - {0xc4f90000}, {0xc4f92000}, {0xc4f94000}, {0xc4f96000}, - {0xc4f98000}, {0xc4f9a000}, {0xc4f9c000}, {0xc4f9e000}, - {0xc4fa0000}, {0xc4fa2000}, {0xc4fa4000}, {0xc4fa6000}, - {0xc4fa8000}, {0xc4faa000}, {0xc4fac000}, {0xc4fae000}, - {0xc4fb0000}, {0xc4fb2000}, {0xc4fb4000}, {0xc4fb6000}, - {0xc4fb8000}, {0xc4fba000}, {0xc4fbc000}, {0xc4fbe000}, - {0xc4fc0000}, {0xc4fc2000}, {0xc4fc4000}, {0xc4fc6000}, - {0xc4fc8000}, {0xc4fca000}, {0xc4fcc000}, {0xc4fce000}, - {0xc4fd0000}, {0xc4fd2000}, {0xc4fd4000}, {0xc4fd6000}, - {0xc4fd8000}, {0xc4fda000}, {0xc4fdc000}, {0xc4fde000}, - {0xc4fe0000}, {0xc4fe2000}, {0xc4fe4000}, {0xc4fe6000}, - {0xc4fe8000}, {0xc4fea000}, {0xc4fec000}, {0xc4fee000}, - {0xc4ff0000}, {0xc4ff2000}, {0xc4ff4000}, {0xc4ff6000}, - {0xc4ff8000}, {0xc4ffa000}, {0xc4ffc000}, {0xc4ffe000}, - {0xc5000000}, {0xc5002000}, {0xc5004000}, {0xc5006000}, - {0xc5008000}, {0xc500a000}, {0xc500c000}, {0xc500e000}, - {0xc5010000}, {0xc5012000}, {0xc5014000}, {0xc5016000}, - {0xc5018000}, {0xc501a000}, {0xc501c000}, {0xc501e000}, - {0xc5020000}, {0xc5022000}, {0xc5024000}, {0xc5026000}, - {0xc5028000}, {0xc502a000}, {0xc502c000}, {0xc502e000}, - {0xc5030000}, {0xc5032000}, {0xc5034000}, {0xc5036000}, - {0xc5038000}, {0xc503a000}, {0xc503c000}, {0xc503e000}, - {0xc5040000}, {0xc5042000}, {0xc5044000}, {0xc5046000}, - {0xc5048000}, {0xc504a000}, {0xc504c000}, {0xc504e000}, - {0xc5050000}, {0xc5052000}, {0xc5054000}, {0xc5056000}, - {0xc5058000}, {0xc505a000}, {0xc505c000}, {0xc505e000}, - {0xc5060000}, {0xc5062000}, {0xc5064000}, {0xc5066000}, - {0xc5068000}, {0xc506a000}, {0xc506c000}, {0xc506e000}, - {0xc5070000}, {0xc5072000}, {0xc5074000}, {0xc5076000}, - {0xc5078000}, {0xc507a000}, {0xc507c000}, {0xc507e000}, - {0xc5080000}, {0xc5082000}, {0xc5084000}, {0xc5086000}, - {0xc5088000}, {0xc508a000}, {0xc508c000}, {0xc508e000}, - {0xc5090000}, {0xc5092000}, {0xc5094000}, {0xc5096000}, - {0xc5098000}, {0xc509a000}, {0xc509c000}, {0xc509e000}, - {0xc50a0000}, {0xc50a2000}, {0xc50a4000}, {0xc50a6000}, - {0xc50a8000}, {0xc50aa000}, {0xc50ac000}, {0xc50ae000}, - {0xc50b0000}, {0xc50b2000}, {0xc50b4000}, {0xc50b6000}, - {0xc50b8000}, {0xc50ba000}, {0xc50bc000}, {0xc50be000}, - {0xc50c0000}, {0xc50c2000}, {0xc50c4000}, {0xc50c6000}, - {0xc50c8000}, {0xc50ca000}, {0xc50cc000}, {0xc50ce000}, - {0xc50d0000}, {0xc50d2000}, {0xc50d4000}, {0xc50d6000}, - {0xc50d8000}, {0xc50da000}, {0xc50dc000}, {0xc50de000}, - {0xc50e0000}, {0xc50e2000}, {0xc50e4000}, {0xc50e6000}, - {0xc50e8000}, {0xc50ea000}, {0xc50ec000}, {0xc50ee000}, - {0xc50f0000}, {0xc50f2000}, {0xc50f4000}, {0xc50f6000}, - {0xc50f8000}, {0xc50fa000}, {0xc50fc000}, {0xc50fe000}, - {0xc5100000}, {0xc5102000}, {0xc5104000}, {0xc5106000}, - {0xc5108000}, {0xc510a000}, {0xc510c000}, {0xc510e000}, - {0xc5110000}, {0xc5112000}, {0xc5114000}, {0xc5116000}, - {0xc5118000}, {0xc511a000}, {0xc511c000}, {0xc511e000}, - {0xc5120000}, {0xc5122000}, {0xc5124000}, {0xc5126000}, - {0xc5128000}, {0xc512a000}, {0xc512c000}, {0xc512e000}, - {0xc5130000}, {0xc5132000}, {0xc5134000}, {0xc5136000}, - {0xc5138000}, {0xc513a000}, {0xc513c000}, {0xc513e000}, - {0xc5140000}, {0xc5142000}, {0xc5144000}, {0xc5146000}, - {0xc5148000}, {0xc514a000}, {0xc514c000}, {0xc514e000}, - {0xc5150000}, {0xc5152000}, {0xc5154000}, {0xc5156000}, - {0xc5158000}, {0xc515a000}, {0xc515c000}, {0xc515e000}, - {0xc5160000}, {0xc5162000}, {0xc5164000}, {0xc5166000}, - {0xc5168000}, {0xc516a000}, {0xc516c000}, {0xc516e000}, - {0xc5170000}, {0xc5172000}, {0xc5174000}, {0xc5176000}, - {0xc5178000}, {0xc517a000}, {0xc517c000}, {0xc517e000}, - {0xc5180000}, {0xc5182000}, {0xc5184000}, {0xc5186000}, - {0xc5188000}, {0xc518a000}, {0xc518c000}, {0xc518e000}, - {0xc5190000}, {0xc5192000}, {0xc5194000}, {0xc5196000}, - {0xc5198000}, {0xc519a000}, {0xc519c000}, {0xc519e000}, - {0xc51a0000}, {0xc51a2000}, {0xc51a4000}, {0xc51a6000}, - {0xc51a8000}, {0xc51aa000}, {0xc51ac000}, {0xc51ae000}, - {0xc51b0000}, {0xc51b2000}, {0xc51b4000}, {0xc51b6000}, - {0xc51b8000}, {0xc51ba000}, {0xc51bc000}, {0xc51be000}, - {0xc51c0000}, {0xc51c2000}, {0xc51c4000}, {0xc51c6000}, - {0xc51c8000}, {0xc51ca000}, {0xc51cc000}, {0xc51ce000}, - {0xc51d0000}, {0xc51d2000}, {0xc51d4000}, {0xc51d6000}, - {0xc51d8000}, {0xc51da000}, {0xc51dc000}, {0xc51de000}, - {0xc51e0000}, {0xc51e2000}, {0xc51e4000}, {0xc51e6000}, - {0xc51e8000}, {0xc51ea000}, {0xc51ec000}, {0xc51ee000}, - {0xc51f0000}, {0xc51f2000}, {0xc51f4000}, {0xc51f6000}, - {0xc51f8000}, {0xc51fa000}, {0xc51fc000}, {0xc51fe000}, - {0xc5200000}, {0xc5202000}, {0xc5204000}, {0xc5206000}, - {0xc5208000}, {0xc520a000}, {0xc520c000}, {0xc520e000}, - {0xc5210000}, {0xc5212000}, {0xc5214000}, {0xc5216000}, - {0xc5218000}, {0xc521a000}, {0xc521c000}, {0xc521e000}, - {0xc5220000}, {0xc5222000}, {0xc5224000}, {0xc5226000}, - {0xc5228000}, {0xc522a000}, {0xc522c000}, {0xc522e000}, - {0xc5230000}, {0xc5232000}, {0xc5234000}, {0xc5236000}, - {0xc5238000}, {0xc523a000}, {0xc523c000}, {0xc523e000}, - {0xc5240000}, {0xc5242000}, {0xc5244000}, {0xc5246000}, - {0xc5248000}, {0xc524a000}, {0xc524c000}, {0xc524e000}, - {0xc5250000}, {0xc5252000}, {0xc5254000}, {0xc5256000}, - {0xc5258000}, {0xc525a000}, {0xc525c000}, {0xc525e000}, - {0xc5260000}, {0xc5262000}, {0xc5264000}, {0xc5266000}, - {0xc5268000}, {0xc526a000}, {0xc526c000}, {0xc526e000}, - {0xc5270000}, {0xc5272000}, {0xc5274000}, {0xc5276000}, - {0xc5278000}, {0xc527a000}, {0xc527c000}, {0xc527e000}, - {0xc5280000}, {0xc5282000}, {0xc5284000}, {0xc5286000}, - {0xc5288000}, {0xc528a000}, {0xc528c000}, {0xc528e000}, - {0xc5290000}, {0xc5292000}, {0xc5294000}, {0xc5296000}, - {0xc5298000}, {0xc529a000}, {0xc529c000}, {0xc529e000}, - {0xc52a0000}, {0xc52a2000}, {0xc52a4000}, {0xc52a6000}, - {0xc52a8000}, {0xc52aa000}, {0xc52ac000}, {0xc52ae000}, - {0xc52b0000}, {0xc52b2000}, {0xc52b4000}, {0xc52b6000}, - {0xc52b8000}, {0xc52ba000}, {0xc52bc000}, {0xc52be000}, - {0xc52c0000}, {0xc52c2000}, {0xc52c4000}, {0xc52c6000}, - {0xc52c8000}, {0xc52ca000}, {0xc52cc000}, {0xc52ce000}, - {0xc52d0000}, {0xc52d2000}, {0xc52d4000}, {0xc52d6000}, - {0xc52d8000}, {0xc52da000}, {0xc52dc000}, {0xc52de000}, - {0xc52e0000}, {0xc52e2000}, {0xc52e4000}, {0xc52e6000}, - {0xc52e8000}, {0xc52ea000}, {0xc52ec000}, {0xc52ee000}, - {0xc52f0000}, {0xc52f2000}, {0xc52f4000}, {0xc52f6000}, - {0xc52f8000}, {0xc52fa000}, {0xc52fc000}, {0xc52fe000}, - {0xc5300000}, {0xc5302000}, {0xc5304000}, {0xc5306000}, - {0xc5308000}, {0xc530a000}, {0xc530c000}, {0xc530e000}, - {0xc5310000}, {0xc5312000}, {0xc5314000}, {0xc5316000}, - {0xc5318000}, {0xc531a000}, {0xc531c000}, {0xc531e000}, - {0xc5320000}, {0xc5322000}, {0xc5324000}, {0xc5326000}, - {0xc5328000}, {0xc532a000}, {0xc532c000}, {0xc532e000}, - {0xc5330000}, {0xc5332000}, {0xc5334000}, {0xc5336000}, - {0xc5338000}, {0xc533a000}, {0xc533c000}, {0xc533e000}, - {0xc5340000}, {0xc5342000}, {0xc5344000}, {0xc5346000}, - {0xc5348000}, {0xc534a000}, {0xc534c000}, {0xc534e000}, - {0xc5350000}, {0xc5352000}, {0xc5354000}, {0xc5356000}, - {0xc5358000}, {0xc535a000}, {0xc535c000}, {0xc535e000}, - {0xc5360000}, {0xc5362000}, {0xc5364000}, {0xc5366000}, - {0xc5368000}, {0xc536a000}, {0xc536c000}, {0xc536e000}, - {0xc5370000}, {0xc5372000}, {0xc5374000}, {0xc5376000}, - {0xc5378000}, {0xc537a000}, {0xc537c000}, {0xc537e000}, - {0xc5380000}, {0xc5382000}, {0xc5384000}, {0xc5386000}, - {0xc5388000}, {0xc538a000}, {0xc538c000}, {0xc538e000}, - {0xc5390000}, {0xc5392000}, {0xc5394000}, {0xc5396000}, - {0xc5398000}, {0xc539a000}, {0xc539c000}, {0xc539e000}, - {0xc53a0000}, {0xc53a2000}, {0xc53a4000}, {0xc53a6000}, - {0xc53a8000}, {0xc53aa000}, {0xc53ac000}, {0xc53ae000}, - {0xc53b0000}, {0xc53b2000}, {0xc53b4000}, {0xc53b6000}, - {0xc53b8000}, {0xc53ba000}, {0xc53bc000}, {0xc53be000}, - {0xc53c0000}, {0xc53c2000}, {0xc53c4000}, {0xc53c6000}, - {0xc53c8000}, {0xc53ca000}, {0xc53cc000}, {0xc53ce000}, - {0xc53d0000}, {0xc53d2000}, {0xc53d4000}, {0xc53d6000}, - {0xc53d8000}, {0xc53da000}, {0xc53dc000}, {0xc53de000}, - {0xc53e0000}, {0xc53e2000}, {0xc53e4000}, {0xc53e6000}, - {0xc53e8000}, {0xc53ea000}, {0xc53ec000}, {0xc53ee000}, - {0xc53f0000}, {0xc53f2000}, {0xc53f4000}, {0xc53f6000}, - {0xc53f8000}, {0xc53fa000}, {0xc53fc000}, {0xc53fe000}, - {0xc5400000}, {0xc5402000}, {0xc5404000}, {0xc5406000}, - {0xc5408000}, {0xc540a000}, {0xc540c000}, {0xc540e000}, - {0xc5410000}, {0xc5412000}, {0xc5414000}, {0xc5416000}, - {0xc5418000}, {0xc541a000}, {0xc541c000}, {0xc541e000}, - {0xc5420000}, {0xc5422000}, {0xc5424000}, {0xc5426000}, - {0xc5428000}, {0xc542a000}, {0xc542c000}, {0xc542e000}, - {0xc5430000}, {0xc5432000}, {0xc5434000}, {0xc5436000}, - {0xc5438000}, {0xc543a000}, {0xc543c000}, {0xc543e000}, - {0xc5440000}, {0xc5442000}, {0xc5444000}, {0xc5446000}, - {0xc5448000}, {0xc544a000}, {0xc544c000}, {0xc544e000}, - {0xc5450000}, {0xc5452000}, {0xc5454000}, {0xc5456000}, - {0xc5458000}, {0xc545a000}, {0xc545c000}, {0xc545e000}, - {0xc5460000}, {0xc5462000}, {0xc5464000}, {0xc5466000}, - {0xc5468000}, {0xc546a000}, {0xc546c000}, {0xc546e000}, - {0xc5470000}, {0xc5472000}, {0xc5474000}, {0xc5476000}, - {0xc5478000}, {0xc547a000}, {0xc547c000}, {0xc547e000}, - {0xc5480000}, {0xc5482000}, {0xc5484000}, {0xc5486000}, - {0xc5488000}, {0xc548a000}, {0xc548c000}, {0xc548e000}, - {0xc5490000}, {0xc5492000}, {0xc5494000}, {0xc5496000}, - {0xc5498000}, {0xc549a000}, {0xc549c000}, {0xc549e000}, - {0xc54a0000}, {0xc54a2000}, {0xc54a4000}, {0xc54a6000}, - {0xc54a8000}, {0xc54aa000}, {0xc54ac000}, {0xc54ae000}, - {0xc54b0000}, {0xc54b2000}, {0xc54b4000}, {0xc54b6000}, - {0xc54b8000}, {0xc54ba000}, {0xc54bc000}, {0xc54be000}, - {0xc54c0000}, {0xc54c2000}, {0xc54c4000}, {0xc54c6000}, - {0xc54c8000}, {0xc54ca000}, {0xc54cc000}, {0xc54ce000}, - {0xc54d0000}, {0xc54d2000}, {0xc54d4000}, {0xc54d6000}, - {0xc54d8000}, {0xc54da000}, {0xc54dc000}, {0xc54de000}, - {0xc54e0000}, {0xc54e2000}, {0xc54e4000}, {0xc54e6000}, - {0xc54e8000}, {0xc54ea000}, {0xc54ec000}, {0xc54ee000}, - {0xc54f0000}, {0xc54f2000}, {0xc54f4000}, {0xc54f6000}, - {0xc54f8000}, {0xc54fa000}, {0xc54fc000}, {0xc54fe000}, - {0xc5500000}, {0xc5502000}, {0xc5504000}, {0xc5506000}, - {0xc5508000}, {0xc550a000}, {0xc550c000}, {0xc550e000}, - {0xc5510000}, {0xc5512000}, {0xc5514000}, {0xc5516000}, - {0xc5518000}, {0xc551a000}, {0xc551c000}, {0xc551e000}, - {0xc5520000}, {0xc5522000}, {0xc5524000}, {0xc5526000}, - {0xc5528000}, {0xc552a000}, {0xc552c000}, {0xc552e000}, - {0xc5530000}, {0xc5532000}, {0xc5534000}, {0xc5536000}, - {0xc5538000}, {0xc553a000}, {0xc553c000}, {0xc553e000}, - {0xc5540000}, {0xc5542000}, {0xc5544000}, {0xc5546000}, - {0xc5548000}, {0xc554a000}, {0xc554c000}, {0xc554e000}, - {0xc5550000}, {0xc5552000}, {0xc5554000}, {0xc5556000}, - {0xc5558000}, {0xc555a000}, {0xc555c000}, {0xc555e000}, - {0xc5560000}, {0xc5562000}, {0xc5564000}, {0xc5566000}, - {0xc5568000}, {0xc556a000}, {0xc556c000}, {0xc556e000}, - {0xc5570000}, {0xc5572000}, {0xc5574000}, {0xc5576000}, - {0xc5578000}, {0xc557a000}, {0xc557c000}, {0xc557e000}, - {0xc5580000}, {0xc5582000}, {0xc5584000}, {0xc5586000}, - {0xc5588000}, {0xc558a000}, {0xc558c000}, {0xc558e000}, - {0xc5590000}, {0xc5592000}, {0xc5594000}, {0xc5596000}, - {0xc5598000}, {0xc559a000}, {0xc559c000}, {0xc559e000}, - {0xc55a0000}, {0xc55a2000}, {0xc55a4000}, {0xc55a6000}, - {0xc55a8000}, {0xc55aa000}, {0xc55ac000}, {0xc55ae000}, - {0xc55b0000}, {0xc55b2000}, {0xc55b4000}, {0xc55b6000}, - {0xc55b8000}, {0xc55ba000}, {0xc55bc000}, {0xc55be000}, - {0xc55c0000}, {0xc55c2000}, {0xc55c4000}, {0xc55c6000}, - {0xc55c8000}, {0xc55ca000}, {0xc55cc000}, {0xc55ce000}, - {0xc55d0000}, {0xc55d2000}, {0xc55d4000}, {0xc55d6000}, - {0xc55d8000}, {0xc55da000}, {0xc55dc000}, {0xc55de000}, - {0xc55e0000}, {0xc55e2000}, {0xc55e4000}, {0xc55e6000}, - {0xc55e8000}, {0xc55ea000}, {0xc55ec000}, {0xc55ee000}, - {0xc55f0000}, {0xc55f2000}, {0xc55f4000}, {0xc55f6000}, - {0xc55f8000}, {0xc55fa000}, {0xc55fc000}, {0xc55fe000}, - {0xc5600000}, {0xc5602000}, {0xc5604000}, {0xc5606000}, - {0xc5608000}, {0xc560a000}, {0xc560c000}, {0xc560e000}, - {0xc5610000}, {0xc5612000}, {0xc5614000}, {0xc5616000}, - {0xc5618000}, {0xc561a000}, {0xc561c000}, {0xc561e000}, - {0xc5620000}, {0xc5622000}, {0xc5624000}, {0xc5626000}, - {0xc5628000}, {0xc562a000}, {0xc562c000}, {0xc562e000}, - {0xc5630000}, {0xc5632000}, {0xc5634000}, {0xc5636000}, - {0xc5638000}, {0xc563a000}, {0xc563c000}, {0xc563e000}, - {0xc5640000}, {0xc5642000}, {0xc5644000}, {0xc5646000}, - {0xc5648000}, {0xc564a000}, {0xc564c000}, {0xc564e000}, - {0xc5650000}, {0xc5652000}, {0xc5654000}, {0xc5656000}, - {0xc5658000}, {0xc565a000}, {0xc565c000}, {0xc565e000}, - {0xc5660000}, {0xc5662000}, {0xc5664000}, {0xc5666000}, - {0xc5668000}, {0xc566a000}, {0xc566c000}, {0xc566e000}, - {0xc5670000}, {0xc5672000}, {0xc5674000}, {0xc5676000}, - {0xc5678000}, {0xc567a000}, {0xc567c000}, {0xc567e000}, - {0xc5680000}, {0xc5682000}, {0xc5684000}, {0xc5686000}, - {0xc5688000}, {0xc568a000}, {0xc568c000}, {0xc568e000}, - {0xc5690000}, {0xc5692000}, {0xc5694000}, {0xc5696000}, - {0xc5698000}, {0xc569a000}, {0xc569c000}, {0xc569e000}, - {0xc56a0000}, {0xc56a2000}, {0xc56a4000}, {0xc56a6000}, - {0xc56a8000}, {0xc56aa000}, {0xc56ac000}, {0xc56ae000}, - {0xc56b0000}, {0xc56b2000}, {0xc56b4000}, {0xc56b6000}, - {0xc56b8000}, {0xc56ba000}, {0xc56bc000}, {0xc56be000}, - {0xc56c0000}, {0xc56c2000}, {0xc56c4000}, {0xc56c6000}, - {0xc56c8000}, {0xc56ca000}, {0xc56cc000}, {0xc56ce000}, - {0xc56d0000}, {0xc56d2000}, {0xc56d4000}, {0xc56d6000}, - {0xc56d8000}, {0xc56da000}, {0xc56dc000}, {0xc56de000}, - {0xc56e0000}, {0xc56e2000}, {0xc56e4000}, {0xc56e6000}, - {0xc56e8000}, {0xc56ea000}, {0xc56ec000}, {0xc56ee000}, - {0xc56f0000}, {0xc56f2000}, {0xc56f4000}, {0xc56f6000}, - {0xc56f8000}, {0xc56fa000}, {0xc56fc000}, {0xc56fe000}, - {0xc5700000}, {0xc5702000}, {0xc5704000}, {0xc5706000}, - {0xc5708000}, {0xc570a000}, {0xc570c000}, {0xc570e000}, - {0xc5710000}, {0xc5712000}, {0xc5714000}, {0xc5716000}, - {0xc5718000}, {0xc571a000}, {0xc571c000}, {0xc571e000}, - {0xc5720000}, {0xc5722000}, {0xc5724000}, {0xc5726000}, - {0xc5728000}, {0xc572a000}, {0xc572c000}, {0xc572e000}, - {0xc5730000}, {0xc5732000}, {0xc5734000}, {0xc5736000}, - {0xc5738000}, {0xc573a000}, {0xc573c000}, {0xc573e000}, - {0xc5740000}, {0xc5742000}, {0xc5744000}, {0xc5746000}, - {0xc5748000}, {0xc574a000}, {0xc574c000}, {0xc574e000}, - {0xc5750000}, {0xc5752000}, {0xc5754000}, {0xc5756000}, - {0xc5758000}, {0xc575a000}, {0xc575c000}, {0xc575e000}, - {0xc5760000}, {0xc5762000}, {0xc5764000}, {0xc5766000}, - {0xc5768000}, {0xc576a000}, {0xc576c000}, {0xc576e000}, - {0xc5770000}, {0xc5772000}, {0xc5774000}, {0xc5776000}, - {0xc5778000}, {0xc577a000}, {0xc577c000}, {0xc577e000}, - {0xc5780000}, {0xc5782000}, {0xc5784000}, {0xc5786000}, - {0xc5788000}, {0xc578a000}, {0xc578c000}, {0xc578e000}, - {0xc5790000}, {0xc5792000}, {0xc5794000}, {0xc5796000}, - {0xc5798000}, {0xc579a000}, {0xc579c000}, {0xc579e000}, - {0xc57a0000}, {0xc57a2000}, {0xc57a4000}, {0xc57a6000}, - {0xc57a8000}, {0xc57aa000}, {0xc57ac000}, {0xc57ae000}, - {0xc57b0000}, {0xc57b2000}, {0xc57b4000}, {0xc57b6000}, - {0xc57b8000}, {0xc57ba000}, {0xc57bc000}, {0xc57be000}, - {0xc57c0000}, {0xc57c2000}, {0xc57c4000}, {0xc57c6000}, - {0xc57c8000}, {0xc57ca000}, {0xc57cc000}, {0xc57ce000}, - {0xc57d0000}, {0xc57d2000}, {0xc57d4000}, {0xc57d6000}, - {0xc57d8000}, {0xc57da000}, {0xc57dc000}, {0xc57de000}, - {0xc57e0000}, {0xc57e2000}, {0xc57e4000}, {0xc57e6000}, - {0xc57e8000}, {0xc57ea000}, {0xc57ec000}, {0xc57ee000}, - {0xc57f0000}, {0xc57f2000}, {0xc57f4000}, {0xc57f6000}, - {0xc57f8000}, {0xc57fa000}, {0xc57fc000}, {0xc57fe000}, - {0xc5800000}, {0xc5802000}, {0xc5804000}, {0xc5806000}, - {0xc5808000}, {0xc580a000}, {0xc580c000}, {0xc580e000}, - {0xc5810000}, {0xc5812000}, {0xc5814000}, {0xc5816000}, - {0xc5818000}, {0xc581a000}, {0xc581c000}, {0xc581e000}, - {0xc5820000}, {0xc5822000}, {0xc5824000}, {0xc5826000}, - {0xc5828000}, {0xc582a000}, {0xc582c000}, {0xc582e000}, - {0xc5830000}, {0xc5832000}, {0xc5834000}, {0xc5836000}, - {0xc5838000}, {0xc583a000}, {0xc583c000}, {0xc583e000}, - {0xc5840000}, {0xc5842000}, {0xc5844000}, {0xc5846000}, - {0xc5848000}, {0xc584a000}, {0xc584c000}, {0xc584e000}, - {0xc5850000}, {0xc5852000}, {0xc5854000}, {0xc5856000}, - {0xc5858000}, {0xc585a000}, {0xc585c000}, {0xc585e000}, - {0xc5860000}, {0xc5862000}, {0xc5864000}, {0xc5866000}, - {0xc5868000}, {0xc586a000}, {0xc586c000}, {0xc586e000}, - {0xc5870000}, {0xc5872000}, {0xc5874000}, {0xc5876000}, - {0xc5878000}, {0xc587a000}, {0xc587c000}, {0xc587e000}, - {0xc5880000}, {0xc5882000}, {0xc5884000}, {0xc5886000}, - {0xc5888000}, {0xc588a000}, {0xc588c000}, {0xc588e000}, - {0xc5890000}, {0xc5892000}, {0xc5894000}, {0xc5896000}, - {0xc5898000}, {0xc589a000}, {0xc589c000}, {0xc589e000}, - {0xc58a0000}, {0xc58a2000}, {0xc58a4000}, {0xc58a6000}, - {0xc58a8000}, {0xc58aa000}, {0xc58ac000}, {0xc58ae000}, - {0xc58b0000}, {0xc58b2000}, {0xc58b4000}, {0xc58b6000}, - {0xc58b8000}, {0xc58ba000}, {0xc58bc000}, {0xc58be000}, - {0xc58c0000}, {0xc58c2000}, {0xc58c4000}, {0xc58c6000}, - {0xc58c8000}, {0xc58ca000}, {0xc58cc000}, {0xc58ce000}, - {0xc58d0000}, {0xc58d2000}, {0xc58d4000}, {0xc58d6000}, - {0xc58d8000}, {0xc58da000}, {0xc58dc000}, {0xc58de000}, - {0xc58e0000}, {0xc58e2000}, {0xc58e4000}, {0xc58e6000}, - {0xc58e8000}, {0xc58ea000}, {0xc58ec000}, {0xc58ee000}, - {0xc58f0000}, {0xc58f2000}, {0xc58f4000}, {0xc58f6000}, - {0xc58f8000}, {0xc58fa000}, {0xc58fc000}, {0xc58fe000}, - {0xc5900000}, {0xc5902000}, {0xc5904000}, {0xc5906000}, - {0xc5908000}, {0xc590a000}, {0xc590c000}, {0xc590e000}, - {0xc5910000}, {0xc5912000}, {0xc5914000}, {0xc5916000}, - {0xc5918000}, {0xc591a000}, {0xc591c000}, {0xc591e000}, - {0xc5920000}, {0xc5922000}, {0xc5924000}, {0xc5926000}, - {0xc5928000}, {0xc592a000}, {0xc592c000}, {0xc592e000}, - {0xc5930000}, {0xc5932000}, {0xc5934000}, {0xc5936000}, - {0xc5938000}, {0xc593a000}, {0xc593c000}, {0xc593e000}, - {0xc5940000}, {0xc5942000}, {0xc5944000}, {0xc5946000}, - {0xc5948000}, {0xc594a000}, {0xc594c000}, {0xc594e000}, - {0xc5950000}, {0xc5952000}, {0xc5954000}, {0xc5956000}, - {0xc5958000}, {0xc595a000}, {0xc595c000}, {0xc595e000}, - {0xc5960000}, {0xc5962000}, {0xc5964000}, {0xc5966000}, - {0xc5968000}, {0xc596a000}, {0xc596c000}, {0xc596e000}, - {0xc5970000}, {0xc5972000}, {0xc5974000}, {0xc5976000}, - {0xc5978000}, {0xc597a000}, {0xc597c000}, {0xc597e000}, - {0xc5980000}, {0xc5982000}, {0xc5984000}, {0xc5986000}, - {0xc5988000}, {0xc598a000}, {0xc598c000}, {0xc598e000}, - {0xc5990000}, {0xc5992000}, {0xc5994000}, {0xc5996000}, - {0xc5998000}, {0xc599a000}, {0xc599c000}, {0xc599e000}, - {0xc59a0000}, {0xc59a2000}, {0xc59a4000}, {0xc59a6000}, - {0xc59a8000}, {0xc59aa000}, {0xc59ac000}, {0xc59ae000}, - {0xc59b0000}, {0xc59b2000}, {0xc59b4000}, {0xc59b6000}, - {0xc59b8000}, {0xc59ba000}, {0xc59bc000}, {0xc59be000}, - {0xc59c0000}, {0xc59c2000}, {0xc59c4000}, {0xc59c6000}, - {0xc59c8000}, {0xc59ca000}, {0xc59cc000}, {0xc59ce000}, - {0xc59d0000}, {0xc59d2000}, {0xc59d4000}, {0xc59d6000}, - {0xc59d8000}, {0xc59da000}, {0xc59dc000}, {0xc59de000}, - {0xc59e0000}, {0xc59e2000}, {0xc59e4000}, {0xc59e6000}, - {0xc59e8000}, {0xc59ea000}, {0xc59ec000}, {0xc59ee000}, - {0xc59f0000}, {0xc59f2000}, {0xc59f4000}, {0xc59f6000}, - {0xc59f8000}, {0xc59fa000}, {0xc59fc000}, {0xc59fe000}, - {0xc5a00000}, {0xc5a02000}, {0xc5a04000}, {0xc5a06000}, - {0xc5a08000}, {0xc5a0a000}, {0xc5a0c000}, {0xc5a0e000}, - {0xc5a10000}, {0xc5a12000}, {0xc5a14000}, {0xc5a16000}, - {0xc5a18000}, {0xc5a1a000}, {0xc5a1c000}, {0xc5a1e000}, - {0xc5a20000}, {0xc5a22000}, {0xc5a24000}, {0xc5a26000}, - {0xc5a28000}, {0xc5a2a000}, {0xc5a2c000}, {0xc5a2e000}, - {0xc5a30000}, {0xc5a32000}, {0xc5a34000}, {0xc5a36000}, - {0xc5a38000}, {0xc5a3a000}, {0xc5a3c000}, {0xc5a3e000}, - {0xc5a40000}, {0xc5a42000}, {0xc5a44000}, {0xc5a46000}, - {0xc5a48000}, {0xc5a4a000}, {0xc5a4c000}, {0xc5a4e000}, - {0xc5a50000}, {0xc5a52000}, {0xc5a54000}, {0xc5a56000}, - {0xc5a58000}, {0xc5a5a000}, {0xc5a5c000}, {0xc5a5e000}, - {0xc5a60000}, {0xc5a62000}, {0xc5a64000}, {0xc5a66000}, - {0xc5a68000}, {0xc5a6a000}, {0xc5a6c000}, {0xc5a6e000}, - {0xc5a70000}, {0xc5a72000}, {0xc5a74000}, {0xc5a76000}, - {0xc5a78000}, {0xc5a7a000}, {0xc5a7c000}, {0xc5a7e000}, - {0xc5a80000}, {0xc5a82000}, {0xc5a84000}, {0xc5a86000}, - {0xc5a88000}, {0xc5a8a000}, {0xc5a8c000}, {0xc5a8e000}, - {0xc5a90000}, {0xc5a92000}, {0xc5a94000}, {0xc5a96000}, - {0xc5a98000}, {0xc5a9a000}, {0xc5a9c000}, {0xc5a9e000}, - {0xc5aa0000}, {0xc5aa2000}, {0xc5aa4000}, {0xc5aa6000}, - {0xc5aa8000}, {0xc5aaa000}, {0xc5aac000}, {0xc5aae000}, - {0xc5ab0000}, {0xc5ab2000}, {0xc5ab4000}, {0xc5ab6000}, - {0xc5ab8000}, {0xc5aba000}, {0xc5abc000}, {0xc5abe000}, - {0xc5ac0000}, {0xc5ac2000}, {0xc5ac4000}, {0xc5ac6000}, - {0xc5ac8000}, {0xc5aca000}, {0xc5acc000}, {0xc5ace000}, - {0xc5ad0000}, {0xc5ad2000}, {0xc5ad4000}, {0xc5ad6000}, - {0xc5ad8000}, {0xc5ada000}, {0xc5adc000}, {0xc5ade000}, - {0xc5ae0000}, {0xc5ae2000}, {0xc5ae4000}, {0xc5ae6000}, - {0xc5ae8000}, {0xc5aea000}, {0xc5aec000}, {0xc5aee000}, - {0xc5af0000}, {0xc5af2000}, {0xc5af4000}, {0xc5af6000}, - {0xc5af8000}, {0xc5afa000}, {0xc5afc000}, {0xc5afe000}, - {0xc5b00000}, {0xc5b02000}, {0xc5b04000}, {0xc5b06000}, - {0xc5b08000}, {0xc5b0a000}, {0xc5b0c000}, {0xc5b0e000}, - {0xc5b10000}, {0xc5b12000}, {0xc5b14000}, {0xc5b16000}, - {0xc5b18000}, {0xc5b1a000}, {0xc5b1c000}, {0xc5b1e000}, - {0xc5b20000}, {0xc5b22000}, {0xc5b24000}, {0xc5b26000}, - {0xc5b28000}, {0xc5b2a000}, {0xc5b2c000}, {0xc5b2e000}, - {0xc5b30000}, {0xc5b32000}, {0xc5b34000}, {0xc5b36000}, - {0xc5b38000}, {0xc5b3a000}, {0xc5b3c000}, {0xc5b3e000}, - {0xc5b40000}, {0xc5b42000}, {0xc5b44000}, {0xc5b46000}, - {0xc5b48000}, {0xc5b4a000}, {0xc5b4c000}, {0xc5b4e000}, - {0xc5b50000}, {0xc5b52000}, {0xc5b54000}, {0xc5b56000}, - {0xc5b58000}, {0xc5b5a000}, {0xc5b5c000}, {0xc5b5e000}, - {0xc5b60000}, {0xc5b62000}, {0xc5b64000}, {0xc5b66000}, - {0xc5b68000}, {0xc5b6a000}, {0xc5b6c000}, {0xc5b6e000}, - {0xc5b70000}, {0xc5b72000}, {0xc5b74000}, {0xc5b76000}, - {0xc5b78000}, {0xc5b7a000}, {0xc5b7c000}, {0xc5b7e000}, - {0xc5b80000}, {0xc5b82000}, {0xc5b84000}, {0xc5b86000}, - {0xc5b88000}, {0xc5b8a000}, {0xc5b8c000}, {0xc5b8e000}, - {0xc5b90000}, {0xc5b92000}, {0xc5b94000}, {0xc5b96000}, - {0xc5b98000}, {0xc5b9a000}, {0xc5b9c000}, {0xc5b9e000}, - {0xc5ba0000}, {0xc5ba2000}, {0xc5ba4000}, {0xc5ba6000}, - {0xc5ba8000}, {0xc5baa000}, {0xc5bac000}, {0xc5bae000}, - {0xc5bb0000}, {0xc5bb2000}, {0xc5bb4000}, {0xc5bb6000}, - {0xc5bb8000}, {0xc5bba000}, {0xc5bbc000}, {0xc5bbe000}, - {0xc5bc0000}, {0xc5bc2000}, {0xc5bc4000}, {0xc5bc6000}, - {0xc5bc8000}, {0xc5bca000}, {0xc5bcc000}, {0xc5bce000}, - {0xc5bd0000}, {0xc5bd2000}, {0xc5bd4000}, {0xc5bd6000}, - {0xc5bd8000}, {0xc5bda000}, {0xc5bdc000}, {0xc5bde000}, - {0xc5be0000}, {0xc5be2000}, {0xc5be4000}, {0xc5be6000}, - {0xc5be8000}, {0xc5bea000}, {0xc5bec000}, {0xc5bee000}, - {0xc5bf0000}, {0xc5bf2000}, {0xc5bf4000}, {0xc5bf6000}, - {0xc5bf8000}, {0xc5bfa000}, {0xc5bfc000}, {0xc5bfe000}, - {0xc5c00000}, {0xc5c02000}, {0xc5c04000}, {0xc5c06000}, - {0xc5c08000}, {0xc5c0a000}, {0xc5c0c000}, {0xc5c0e000}, - {0xc5c10000}, {0xc5c12000}, {0xc5c14000}, {0xc5c16000}, - {0xc5c18000}, {0xc5c1a000}, {0xc5c1c000}, {0xc5c1e000}, - {0xc5c20000}, {0xc5c22000}, {0xc5c24000}, {0xc5c26000}, - {0xc5c28000}, {0xc5c2a000}, {0xc5c2c000}, {0xc5c2e000}, - {0xc5c30000}, {0xc5c32000}, {0xc5c34000}, {0xc5c36000}, - {0xc5c38000}, {0xc5c3a000}, {0xc5c3c000}, {0xc5c3e000}, - {0xc5c40000}, {0xc5c42000}, {0xc5c44000}, {0xc5c46000}, - {0xc5c48000}, {0xc5c4a000}, {0xc5c4c000}, {0xc5c4e000}, - {0xc5c50000}, {0xc5c52000}, {0xc5c54000}, {0xc5c56000}, - {0xc5c58000}, {0xc5c5a000}, {0xc5c5c000}, {0xc5c5e000}, - {0xc5c60000}, {0xc5c62000}, {0xc5c64000}, {0xc5c66000}, - {0xc5c68000}, {0xc5c6a000}, {0xc5c6c000}, {0xc5c6e000}, - {0xc5c70000}, {0xc5c72000}, {0xc5c74000}, {0xc5c76000}, - {0xc5c78000}, {0xc5c7a000}, {0xc5c7c000}, {0xc5c7e000}, - {0xc5c80000}, {0xc5c82000}, {0xc5c84000}, {0xc5c86000}, - {0xc5c88000}, {0xc5c8a000}, {0xc5c8c000}, {0xc5c8e000}, - {0xc5c90000}, {0xc5c92000}, {0xc5c94000}, {0xc5c96000}, - {0xc5c98000}, {0xc5c9a000}, {0xc5c9c000}, {0xc5c9e000}, - {0xc5ca0000}, {0xc5ca2000}, {0xc5ca4000}, {0xc5ca6000}, - {0xc5ca8000}, {0xc5caa000}, {0xc5cac000}, {0xc5cae000}, - {0xc5cb0000}, {0xc5cb2000}, {0xc5cb4000}, {0xc5cb6000}, - {0xc5cb8000}, {0xc5cba000}, {0xc5cbc000}, {0xc5cbe000}, - {0xc5cc0000}, {0xc5cc2000}, {0xc5cc4000}, {0xc5cc6000}, - {0xc5cc8000}, {0xc5cca000}, {0xc5ccc000}, {0xc5cce000}, - {0xc5cd0000}, {0xc5cd2000}, {0xc5cd4000}, {0xc5cd6000}, - {0xc5cd8000}, {0xc5cda000}, {0xc5cdc000}, {0xc5cde000}, - {0xc5ce0000}, {0xc5ce2000}, {0xc5ce4000}, {0xc5ce6000}, - {0xc5ce8000}, {0xc5cea000}, {0xc5cec000}, {0xc5cee000}, - {0xc5cf0000}, {0xc5cf2000}, {0xc5cf4000}, {0xc5cf6000}, - {0xc5cf8000}, {0xc5cfa000}, {0xc5cfc000}, {0xc5cfe000}, - {0xc5d00000}, {0xc5d02000}, {0xc5d04000}, {0xc5d06000}, - {0xc5d08000}, {0xc5d0a000}, {0xc5d0c000}, {0xc5d0e000}, - {0xc5d10000}, {0xc5d12000}, {0xc5d14000}, {0xc5d16000}, - {0xc5d18000}, {0xc5d1a000}, {0xc5d1c000}, {0xc5d1e000}, - {0xc5d20000}, {0xc5d22000}, {0xc5d24000}, {0xc5d26000}, - {0xc5d28000}, {0xc5d2a000}, {0xc5d2c000}, {0xc5d2e000}, - {0xc5d30000}, {0xc5d32000}, {0xc5d34000}, {0xc5d36000}, - {0xc5d38000}, {0xc5d3a000}, {0xc5d3c000}, {0xc5d3e000}, - {0xc5d40000}, {0xc5d42000}, {0xc5d44000}, {0xc5d46000}, - {0xc5d48000}, {0xc5d4a000}, {0xc5d4c000}, {0xc5d4e000}, - {0xc5d50000}, {0xc5d52000}, {0xc5d54000}, {0xc5d56000}, - {0xc5d58000}, {0xc5d5a000}, {0xc5d5c000}, {0xc5d5e000}, - {0xc5d60000}, {0xc5d62000}, {0xc5d64000}, {0xc5d66000}, - {0xc5d68000}, {0xc5d6a000}, {0xc5d6c000}, {0xc5d6e000}, - {0xc5d70000}, {0xc5d72000}, {0xc5d74000}, {0xc5d76000}, - {0xc5d78000}, {0xc5d7a000}, {0xc5d7c000}, {0xc5d7e000}, - {0xc5d80000}, {0xc5d82000}, {0xc5d84000}, {0xc5d86000}, - {0xc5d88000}, {0xc5d8a000}, {0xc5d8c000}, {0xc5d8e000}, - {0xc5d90000}, {0xc5d92000}, {0xc5d94000}, {0xc5d96000}, - {0xc5d98000}, {0xc5d9a000}, {0xc5d9c000}, {0xc5d9e000}, - {0xc5da0000}, {0xc5da2000}, {0xc5da4000}, {0xc5da6000}, - {0xc5da8000}, {0xc5daa000}, {0xc5dac000}, {0xc5dae000}, - {0xc5db0000}, {0xc5db2000}, {0xc5db4000}, {0xc5db6000}, - {0xc5db8000}, {0xc5dba000}, {0xc5dbc000}, {0xc5dbe000}, - {0xc5dc0000}, {0xc5dc2000}, {0xc5dc4000}, {0xc5dc6000}, - {0xc5dc8000}, {0xc5dca000}, {0xc5dcc000}, {0xc5dce000}, - {0xc5dd0000}, {0xc5dd2000}, {0xc5dd4000}, {0xc5dd6000}, - {0xc5dd8000}, {0xc5dda000}, {0xc5ddc000}, {0xc5dde000}, - {0xc5de0000}, {0xc5de2000}, {0xc5de4000}, {0xc5de6000}, - {0xc5de8000}, {0xc5dea000}, {0xc5dec000}, {0xc5dee000}, - {0xc5df0000}, {0xc5df2000}, {0xc5df4000}, {0xc5df6000}, - {0xc5df8000}, {0xc5dfa000}, {0xc5dfc000}, {0xc5dfe000}, - {0xc5e00000}, {0xc5e02000}, {0xc5e04000}, {0xc5e06000}, - {0xc5e08000}, {0xc5e0a000}, {0xc5e0c000}, {0xc5e0e000}, - {0xc5e10000}, {0xc5e12000}, {0xc5e14000}, {0xc5e16000}, - {0xc5e18000}, {0xc5e1a000}, {0xc5e1c000}, {0xc5e1e000}, - {0xc5e20000}, {0xc5e22000}, {0xc5e24000}, {0xc5e26000}, - {0xc5e28000}, {0xc5e2a000}, {0xc5e2c000}, {0xc5e2e000}, - {0xc5e30000}, {0xc5e32000}, {0xc5e34000}, {0xc5e36000}, - {0xc5e38000}, {0xc5e3a000}, {0xc5e3c000}, {0xc5e3e000}, - {0xc5e40000}, {0xc5e42000}, {0xc5e44000}, {0xc5e46000}, - {0xc5e48000}, {0xc5e4a000}, {0xc5e4c000}, {0xc5e4e000}, - {0xc5e50000}, {0xc5e52000}, {0xc5e54000}, {0xc5e56000}, - {0xc5e58000}, {0xc5e5a000}, {0xc5e5c000}, {0xc5e5e000}, - {0xc5e60000}, {0xc5e62000}, {0xc5e64000}, {0xc5e66000}, - {0xc5e68000}, {0xc5e6a000}, {0xc5e6c000}, {0xc5e6e000}, - {0xc5e70000}, {0xc5e72000}, {0xc5e74000}, {0xc5e76000}, - {0xc5e78000}, {0xc5e7a000}, {0xc5e7c000}, {0xc5e7e000}, - {0xc5e80000}, {0xc5e82000}, {0xc5e84000}, {0xc5e86000}, - {0xc5e88000}, {0xc5e8a000}, {0xc5e8c000}, {0xc5e8e000}, - {0xc5e90000}, {0xc5e92000}, {0xc5e94000}, {0xc5e96000}, - {0xc5e98000}, {0xc5e9a000}, {0xc5e9c000}, {0xc5e9e000}, - {0xc5ea0000}, {0xc5ea2000}, {0xc5ea4000}, {0xc5ea6000}, - {0xc5ea8000}, {0xc5eaa000}, {0xc5eac000}, {0xc5eae000}, - {0xc5eb0000}, {0xc5eb2000}, {0xc5eb4000}, {0xc5eb6000}, - {0xc5eb8000}, {0xc5eba000}, {0xc5ebc000}, {0xc5ebe000}, - {0xc5ec0000}, {0xc5ec2000}, {0xc5ec4000}, {0xc5ec6000}, - {0xc5ec8000}, {0xc5eca000}, {0xc5ecc000}, {0xc5ece000}, - {0xc5ed0000}, {0xc5ed2000}, {0xc5ed4000}, {0xc5ed6000}, - {0xc5ed8000}, {0xc5eda000}, {0xc5edc000}, {0xc5ede000}, - {0xc5ee0000}, {0xc5ee2000}, {0xc5ee4000}, {0xc5ee6000}, - {0xc5ee8000}, {0xc5eea000}, {0xc5eec000}, {0xc5eee000}, - {0xc5ef0000}, {0xc5ef2000}, {0xc5ef4000}, {0xc5ef6000}, - {0xc5ef8000}, {0xc5efa000}, {0xc5efc000}, {0xc5efe000}, - {0xc5f00000}, {0xc5f02000}, {0xc5f04000}, {0xc5f06000}, - {0xc5f08000}, {0xc5f0a000}, {0xc5f0c000}, {0xc5f0e000}, - {0xc5f10000}, {0xc5f12000}, {0xc5f14000}, {0xc5f16000}, - {0xc5f18000}, {0xc5f1a000}, {0xc5f1c000}, {0xc5f1e000}, - {0xc5f20000}, {0xc5f22000}, {0xc5f24000}, {0xc5f26000}, - {0xc5f28000}, {0xc5f2a000}, {0xc5f2c000}, {0xc5f2e000}, - {0xc5f30000}, {0xc5f32000}, {0xc5f34000}, {0xc5f36000}, - {0xc5f38000}, {0xc5f3a000}, {0xc5f3c000}, {0xc5f3e000}, - {0xc5f40000}, {0xc5f42000}, {0xc5f44000}, {0xc5f46000}, - {0xc5f48000}, {0xc5f4a000}, {0xc5f4c000}, {0xc5f4e000}, - {0xc5f50000}, {0xc5f52000}, {0xc5f54000}, {0xc5f56000}, - {0xc5f58000}, {0xc5f5a000}, {0xc5f5c000}, {0xc5f5e000}, - {0xc5f60000}, {0xc5f62000}, {0xc5f64000}, {0xc5f66000}, - {0xc5f68000}, {0xc5f6a000}, {0xc5f6c000}, {0xc5f6e000}, - {0xc5f70000}, {0xc5f72000}, {0xc5f74000}, {0xc5f76000}, - {0xc5f78000}, {0xc5f7a000}, {0xc5f7c000}, {0xc5f7e000}, - {0xc5f80000}, {0xc5f82000}, {0xc5f84000}, {0xc5f86000}, - {0xc5f88000}, {0xc5f8a000}, {0xc5f8c000}, {0xc5f8e000}, - {0xc5f90000}, {0xc5f92000}, {0xc5f94000}, {0xc5f96000}, - {0xc5f98000}, {0xc5f9a000}, {0xc5f9c000}, {0xc5f9e000}, - {0xc5fa0000}, {0xc5fa2000}, {0xc5fa4000}, {0xc5fa6000}, - {0xc5fa8000}, {0xc5faa000}, {0xc5fac000}, {0xc5fae000}, - {0xc5fb0000}, {0xc5fb2000}, {0xc5fb4000}, {0xc5fb6000}, - {0xc5fb8000}, {0xc5fba000}, {0xc5fbc000}, {0xc5fbe000}, - {0xc5fc0000}, {0xc5fc2000}, {0xc5fc4000}, {0xc5fc6000}, - {0xc5fc8000}, {0xc5fca000}, {0xc5fcc000}, {0xc5fce000}, - {0xc5fd0000}, {0xc5fd2000}, {0xc5fd4000}, {0xc5fd6000}, - {0xc5fd8000}, {0xc5fda000}, {0xc5fdc000}, {0xc5fde000}, - {0xc5fe0000}, {0xc5fe2000}, {0xc5fe4000}, {0xc5fe6000}, - {0xc5fe8000}, {0xc5fea000}, {0xc5fec000}, {0xc5fee000}, - {0xc5ff0000}, {0xc5ff2000}, {0xc5ff4000}, {0xc5ff6000}, - {0xc5ff8000}, {0xc5ffa000}, {0xc5ffc000}, {0xc5ffe000}, - {0xc6000000}, {0xc6002000}, {0xc6004000}, {0xc6006000}, - {0xc6008000}, {0xc600a000}, {0xc600c000}, {0xc600e000}, - {0xc6010000}, {0xc6012000}, {0xc6014000}, {0xc6016000}, - {0xc6018000}, {0xc601a000}, {0xc601c000}, {0xc601e000}, - {0xc6020000}, {0xc6022000}, {0xc6024000}, {0xc6026000}, - {0xc6028000}, {0xc602a000}, {0xc602c000}, {0xc602e000}, - {0xc6030000}, {0xc6032000}, {0xc6034000}, {0xc6036000}, - {0xc6038000}, {0xc603a000}, {0xc603c000}, {0xc603e000}, - {0xc6040000}, {0xc6042000}, {0xc6044000}, {0xc6046000}, - {0xc6048000}, {0xc604a000}, {0xc604c000}, {0xc604e000}, - {0xc6050000}, {0xc6052000}, {0xc6054000}, {0xc6056000}, - {0xc6058000}, {0xc605a000}, {0xc605c000}, {0xc605e000}, - {0xc6060000}, {0xc6062000}, {0xc6064000}, {0xc6066000}, - {0xc6068000}, {0xc606a000}, {0xc606c000}, {0xc606e000}, - {0xc6070000}, {0xc6072000}, {0xc6074000}, {0xc6076000}, - {0xc6078000}, {0xc607a000}, {0xc607c000}, {0xc607e000}, - {0xc6080000}, {0xc6082000}, {0xc6084000}, {0xc6086000}, - {0xc6088000}, {0xc608a000}, {0xc608c000}, {0xc608e000}, - {0xc6090000}, {0xc6092000}, {0xc6094000}, {0xc6096000}, - {0xc6098000}, {0xc609a000}, {0xc609c000}, {0xc609e000}, - {0xc60a0000}, {0xc60a2000}, {0xc60a4000}, {0xc60a6000}, - {0xc60a8000}, {0xc60aa000}, {0xc60ac000}, {0xc60ae000}, - {0xc60b0000}, {0xc60b2000}, {0xc60b4000}, {0xc60b6000}, - {0xc60b8000}, {0xc60ba000}, {0xc60bc000}, {0xc60be000}, - {0xc60c0000}, {0xc60c2000}, {0xc60c4000}, {0xc60c6000}, - {0xc60c8000}, {0xc60ca000}, {0xc60cc000}, {0xc60ce000}, - {0xc60d0000}, {0xc60d2000}, {0xc60d4000}, {0xc60d6000}, - {0xc60d8000}, {0xc60da000}, {0xc60dc000}, {0xc60de000}, - {0xc60e0000}, {0xc60e2000}, {0xc60e4000}, {0xc60e6000}, - {0xc60e8000}, {0xc60ea000}, {0xc60ec000}, {0xc60ee000}, - {0xc60f0000}, {0xc60f2000}, {0xc60f4000}, {0xc60f6000}, - {0xc60f8000}, {0xc60fa000}, {0xc60fc000}, {0xc60fe000}, - {0xc6100000}, {0xc6102000}, {0xc6104000}, {0xc6106000}, - {0xc6108000}, {0xc610a000}, {0xc610c000}, {0xc610e000}, - {0xc6110000}, {0xc6112000}, {0xc6114000}, {0xc6116000}, - {0xc6118000}, {0xc611a000}, {0xc611c000}, {0xc611e000}, - {0xc6120000}, {0xc6122000}, {0xc6124000}, {0xc6126000}, - {0xc6128000}, {0xc612a000}, {0xc612c000}, {0xc612e000}, - {0xc6130000}, {0xc6132000}, {0xc6134000}, {0xc6136000}, - {0xc6138000}, {0xc613a000}, {0xc613c000}, {0xc613e000}, - {0xc6140000}, {0xc6142000}, {0xc6144000}, {0xc6146000}, - {0xc6148000}, {0xc614a000}, {0xc614c000}, {0xc614e000}, - {0xc6150000}, {0xc6152000}, {0xc6154000}, {0xc6156000}, - {0xc6158000}, {0xc615a000}, {0xc615c000}, {0xc615e000}, - {0xc6160000}, {0xc6162000}, {0xc6164000}, {0xc6166000}, - {0xc6168000}, {0xc616a000}, {0xc616c000}, {0xc616e000}, - {0xc6170000}, {0xc6172000}, {0xc6174000}, {0xc6176000}, - {0xc6178000}, {0xc617a000}, {0xc617c000}, {0xc617e000}, - {0xc6180000}, {0xc6182000}, {0xc6184000}, {0xc6186000}, - {0xc6188000}, {0xc618a000}, {0xc618c000}, {0xc618e000}, - {0xc6190000}, {0xc6192000}, {0xc6194000}, {0xc6196000}, - {0xc6198000}, {0xc619a000}, {0xc619c000}, {0xc619e000}, - {0xc61a0000}, {0xc61a2000}, {0xc61a4000}, {0xc61a6000}, - {0xc61a8000}, {0xc61aa000}, {0xc61ac000}, {0xc61ae000}, - {0xc61b0000}, {0xc61b2000}, {0xc61b4000}, {0xc61b6000}, - {0xc61b8000}, {0xc61ba000}, {0xc61bc000}, {0xc61be000}, - {0xc61c0000}, {0xc61c2000}, {0xc61c4000}, {0xc61c6000}, - {0xc61c8000}, {0xc61ca000}, {0xc61cc000}, {0xc61ce000}, - {0xc61d0000}, {0xc61d2000}, {0xc61d4000}, {0xc61d6000}, - {0xc61d8000}, {0xc61da000}, {0xc61dc000}, {0xc61de000}, - {0xc61e0000}, {0xc61e2000}, {0xc61e4000}, {0xc61e6000}, - {0xc61e8000}, {0xc61ea000}, {0xc61ec000}, {0xc61ee000}, - {0xc61f0000}, {0xc61f2000}, {0xc61f4000}, {0xc61f6000}, - {0xc61f8000}, {0xc61fa000}, {0xc61fc000}, {0xc61fe000}, - {0xc6200000}, {0xc6202000}, {0xc6204000}, {0xc6206000}, - {0xc6208000}, {0xc620a000}, {0xc620c000}, {0xc620e000}, - {0xc6210000}, {0xc6212000}, {0xc6214000}, {0xc6216000}, - {0xc6218000}, {0xc621a000}, {0xc621c000}, {0xc621e000}, - {0xc6220000}, {0xc6222000}, {0xc6224000}, {0xc6226000}, - {0xc6228000}, {0xc622a000}, {0xc622c000}, {0xc622e000}, - {0xc6230000}, {0xc6232000}, {0xc6234000}, {0xc6236000}, - {0xc6238000}, {0xc623a000}, {0xc623c000}, {0xc623e000}, - {0xc6240000}, {0xc6242000}, {0xc6244000}, {0xc6246000}, - {0xc6248000}, {0xc624a000}, {0xc624c000}, {0xc624e000}, - {0xc6250000}, {0xc6252000}, {0xc6254000}, {0xc6256000}, - {0xc6258000}, {0xc625a000}, {0xc625c000}, {0xc625e000}, - {0xc6260000}, {0xc6262000}, {0xc6264000}, {0xc6266000}, - {0xc6268000}, {0xc626a000}, {0xc626c000}, {0xc626e000}, - {0xc6270000}, {0xc6272000}, {0xc6274000}, {0xc6276000}, - {0xc6278000}, {0xc627a000}, {0xc627c000}, {0xc627e000}, - {0xc6280000}, {0xc6282000}, {0xc6284000}, {0xc6286000}, - {0xc6288000}, {0xc628a000}, {0xc628c000}, {0xc628e000}, - {0xc6290000}, {0xc6292000}, {0xc6294000}, {0xc6296000}, - {0xc6298000}, {0xc629a000}, {0xc629c000}, {0xc629e000}, - {0xc62a0000}, {0xc62a2000}, {0xc62a4000}, {0xc62a6000}, - {0xc62a8000}, {0xc62aa000}, {0xc62ac000}, {0xc62ae000}, - {0xc62b0000}, {0xc62b2000}, {0xc62b4000}, {0xc62b6000}, - {0xc62b8000}, {0xc62ba000}, {0xc62bc000}, {0xc62be000}, - {0xc62c0000}, {0xc62c2000}, {0xc62c4000}, {0xc62c6000}, - {0xc62c8000}, {0xc62ca000}, {0xc62cc000}, {0xc62ce000}, - {0xc62d0000}, {0xc62d2000}, {0xc62d4000}, {0xc62d6000}, - {0xc62d8000}, {0xc62da000}, {0xc62dc000}, {0xc62de000}, - {0xc62e0000}, {0xc62e2000}, {0xc62e4000}, {0xc62e6000}, - {0xc62e8000}, {0xc62ea000}, {0xc62ec000}, {0xc62ee000}, - {0xc62f0000}, {0xc62f2000}, {0xc62f4000}, {0xc62f6000}, - {0xc62f8000}, {0xc62fa000}, {0xc62fc000}, {0xc62fe000}, - {0xc6300000}, {0xc6302000}, {0xc6304000}, {0xc6306000}, - {0xc6308000}, {0xc630a000}, {0xc630c000}, {0xc630e000}, - {0xc6310000}, {0xc6312000}, {0xc6314000}, {0xc6316000}, - {0xc6318000}, {0xc631a000}, {0xc631c000}, {0xc631e000}, - {0xc6320000}, {0xc6322000}, {0xc6324000}, {0xc6326000}, - {0xc6328000}, {0xc632a000}, {0xc632c000}, {0xc632e000}, - {0xc6330000}, {0xc6332000}, {0xc6334000}, {0xc6336000}, - {0xc6338000}, {0xc633a000}, {0xc633c000}, {0xc633e000}, - {0xc6340000}, {0xc6342000}, {0xc6344000}, {0xc6346000}, - {0xc6348000}, {0xc634a000}, {0xc634c000}, {0xc634e000}, - {0xc6350000}, {0xc6352000}, {0xc6354000}, {0xc6356000}, - {0xc6358000}, {0xc635a000}, {0xc635c000}, {0xc635e000}, - {0xc6360000}, {0xc6362000}, {0xc6364000}, {0xc6366000}, - {0xc6368000}, {0xc636a000}, {0xc636c000}, {0xc636e000}, - {0xc6370000}, {0xc6372000}, {0xc6374000}, {0xc6376000}, - {0xc6378000}, {0xc637a000}, {0xc637c000}, {0xc637e000}, - {0xc6380000}, {0xc6382000}, {0xc6384000}, {0xc6386000}, - {0xc6388000}, {0xc638a000}, {0xc638c000}, {0xc638e000}, - {0xc6390000}, {0xc6392000}, {0xc6394000}, {0xc6396000}, - {0xc6398000}, {0xc639a000}, {0xc639c000}, {0xc639e000}, - {0xc63a0000}, {0xc63a2000}, {0xc63a4000}, {0xc63a6000}, - {0xc63a8000}, {0xc63aa000}, {0xc63ac000}, {0xc63ae000}, - {0xc63b0000}, {0xc63b2000}, {0xc63b4000}, {0xc63b6000}, - {0xc63b8000}, {0xc63ba000}, {0xc63bc000}, {0xc63be000}, - {0xc63c0000}, {0xc63c2000}, {0xc63c4000}, {0xc63c6000}, - {0xc63c8000}, {0xc63ca000}, {0xc63cc000}, {0xc63ce000}, - {0xc63d0000}, {0xc63d2000}, {0xc63d4000}, {0xc63d6000}, - {0xc63d8000}, {0xc63da000}, {0xc63dc000}, {0xc63de000}, - {0xc63e0000}, {0xc63e2000}, {0xc63e4000}, {0xc63e6000}, - {0xc63e8000}, {0xc63ea000}, {0xc63ec000}, {0xc63ee000}, - {0xc63f0000}, {0xc63f2000}, {0xc63f4000}, {0xc63f6000}, - {0xc63f8000}, {0xc63fa000}, {0xc63fc000}, {0xc63fe000}, - {0xc6400000}, {0xc6402000}, {0xc6404000}, {0xc6406000}, - {0xc6408000}, {0xc640a000}, {0xc640c000}, {0xc640e000}, - {0xc6410000}, {0xc6412000}, {0xc6414000}, {0xc6416000}, - {0xc6418000}, {0xc641a000}, {0xc641c000}, {0xc641e000}, - {0xc6420000}, {0xc6422000}, {0xc6424000}, {0xc6426000}, - {0xc6428000}, {0xc642a000}, {0xc642c000}, {0xc642e000}, - {0xc6430000}, {0xc6432000}, {0xc6434000}, {0xc6436000}, - {0xc6438000}, {0xc643a000}, {0xc643c000}, {0xc643e000}, - {0xc6440000}, {0xc6442000}, {0xc6444000}, {0xc6446000}, - {0xc6448000}, {0xc644a000}, {0xc644c000}, {0xc644e000}, - {0xc6450000}, {0xc6452000}, {0xc6454000}, {0xc6456000}, - {0xc6458000}, {0xc645a000}, {0xc645c000}, {0xc645e000}, - {0xc6460000}, {0xc6462000}, {0xc6464000}, {0xc6466000}, - {0xc6468000}, {0xc646a000}, {0xc646c000}, {0xc646e000}, - {0xc6470000}, {0xc6472000}, {0xc6474000}, {0xc6476000}, - {0xc6478000}, {0xc647a000}, {0xc647c000}, {0xc647e000}, - {0xc6480000}, {0xc6482000}, {0xc6484000}, {0xc6486000}, - {0xc6488000}, {0xc648a000}, {0xc648c000}, {0xc648e000}, - {0xc6490000}, {0xc6492000}, {0xc6494000}, {0xc6496000}, - {0xc6498000}, {0xc649a000}, {0xc649c000}, {0xc649e000}, - {0xc64a0000}, {0xc64a2000}, {0xc64a4000}, {0xc64a6000}, - {0xc64a8000}, {0xc64aa000}, {0xc64ac000}, {0xc64ae000}, - {0xc64b0000}, {0xc64b2000}, {0xc64b4000}, {0xc64b6000}, - {0xc64b8000}, {0xc64ba000}, {0xc64bc000}, {0xc64be000}, - {0xc64c0000}, {0xc64c2000}, {0xc64c4000}, {0xc64c6000}, - {0xc64c8000}, {0xc64ca000}, {0xc64cc000}, {0xc64ce000}, - {0xc64d0000}, {0xc64d2000}, {0xc64d4000}, {0xc64d6000}, - {0xc64d8000}, {0xc64da000}, {0xc64dc000}, {0xc64de000}, - {0xc64e0000}, {0xc64e2000}, {0xc64e4000}, {0xc64e6000}, - {0xc64e8000}, {0xc64ea000}, {0xc64ec000}, {0xc64ee000}, - {0xc64f0000}, {0xc64f2000}, {0xc64f4000}, {0xc64f6000}, - {0xc64f8000}, {0xc64fa000}, {0xc64fc000}, {0xc64fe000}, - {0xc6500000}, {0xc6502000}, {0xc6504000}, {0xc6506000}, - {0xc6508000}, {0xc650a000}, {0xc650c000}, {0xc650e000}, - {0xc6510000}, {0xc6512000}, {0xc6514000}, {0xc6516000}, - {0xc6518000}, {0xc651a000}, {0xc651c000}, {0xc651e000}, - {0xc6520000}, {0xc6522000}, {0xc6524000}, {0xc6526000}, - {0xc6528000}, {0xc652a000}, {0xc652c000}, {0xc652e000}, - {0xc6530000}, {0xc6532000}, {0xc6534000}, {0xc6536000}, - {0xc6538000}, {0xc653a000}, {0xc653c000}, {0xc653e000}, - {0xc6540000}, {0xc6542000}, {0xc6544000}, {0xc6546000}, - {0xc6548000}, {0xc654a000}, {0xc654c000}, {0xc654e000}, - {0xc6550000}, {0xc6552000}, {0xc6554000}, {0xc6556000}, - {0xc6558000}, {0xc655a000}, {0xc655c000}, {0xc655e000}, - {0xc6560000}, {0xc6562000}, {0xc6564000}, {0xc6566000}, - {0xc6568000}, {0xc656a000}, {0xc656c000}, {0xc656e000}, - {0xc6570000}, {0xc6572000}, {0xc6574000}, {0xc6576000}, - {0xc6578000}, {0xc657a000}, {0xc657c000}, {0xc657e000}, - {0xc6580000}, {0xc6582000}, {0xc6584000}, {0xc6586000}, - {0xc6588000}, {0xc658a000}, {0xc658c000}, {0xc658e000}, - {0xc6590000}, {0xc6592000}, {0xc6594000}, {0xc6596000}, - {0xc6598000}, {0xc659a000}, {0xc659c000}, {0xc659e000}, - {0xc65a0000}, {0xc65a2000}, {0xc65a4000}, {0xc65a6000}, - {0xc65a8000}, {0xc65aa000}, {0xc65ac000}, {0xc65ae000}, - {0xc65b0000}, {0xc65b2000}, {0xc65b4000}, {0xc65b6000}, - {0xc65b8000}, {0xc65ba000}, {0xc65bc000}, {0xc65be000}, - {0xc65c0000}, {0xc65c2000}, {0xc65c4000}, {0xc65c6000}, - {0xc65c8000}, {0xc65ca000}, {0xc65cc000}, {0xc65ce000}, - {0xc65d0000}, {0xc65d2000}, {0xc65d4000}, {0xc65d6000}, - {0xc65d8000}, {0xc65da000}, {0xc65dc000}, {0xc65de000}, - {0xc65e0000}, {0xc65e2000}, {0xc65e4000}, {0xc65e6000}, - {0xc65e8000}, {0xc65ea000}, {0xc65ec000}, {0xc65ee000}, - {0xc65f0000}, {0xc65f2000}, {0xc65f4000}, {0xc65f6000}, - {0xc65f8000}, {0xc65fa000}, {0xc65fc000}, {0xc65fe000}, - {0xc6600000}, {0xc6602000}, {0xc6604000}, {0xc6606000}, - {0xc6608000}, {0xc660a000}, {0xc660c000}, {0xc660e000}, - {0xc6610000}, {0xc6612000}, {0xc6614000}, {0xc6616000}, - {0xc6618000}, {0xc661a000}, {0xc661c000}, {0xc661e000}, - {0xc6620000}, {0xc6622000}, {0xc6624000}, {0xc6626000}, - {0xc6628000}, {0xc662a000}, {0xc662c000}, {0xc662e000}, - {0xc6630000}, {0xc6632000}, {0xc6634000}, {0xc6636000}, - {0xc6638000}, {0xc663a000}, {0xc663c000}, {0xc663e000}, - {0xc6640000}, {0xc6642000}, {0xc6644000}, {0xc6646000}, - {0xc6648000}, {0xc664a000}, {0xc664c000}, {0xc664e000}, - {0xc6650000}, {0xc6652000}, {0xc6654000}, {0xc6656000}, - {0xc6658000}, {0xc665a000}, {0xc665c000}, {0xc665e000}, - {0xc6660000}, {0xc6662000}, {0xc6664000}, {0xc6666000}, - {0xc6668000}, {0xc666a000}, {0xc666c000}, {0xc666e000}, - {0xc6670000}, {0xc6672000}, {0xc6674000}, {0xc6676000}, - {0xc6678000}, {0xc667a000}, {0xc667c000}, {0xc667e000}, - {0xc6680000}, {0xc6682000}, {0xc6684000}, {0xc6686000}, - {0xc6688000}, {0xc668a000}, {0xc668c000}, {0xc668e000}, - {0xc6690000}, {0xc6692000}, {0xc6694000}, {0xc6696000}, - {0xc6698000}, {0xc669a000}, {0xc669c000}, {0xc669e000}, - {0xc66a0000}, {0xc66a2000}, {0xc66a4000}, {0xc66a6000}, - {0xc66a8000}, {0xc66aa000}, {0xc66ac000}, {0xc66ae000}, - {0xc66b0000}, {0xc66b2000}, {0xc66b4000}, {0xc66b6000}, - {0xc66b8000}, {0xc66ba000}, {0xc66bc000}, {0xc66be000}, - {0xc66c0000}, {0xc66c2000}, {0xc66c4000}, {0xc66c6000}, - {0xc66c8000}, {0xc66ca000}, {0xc66cc000}, {0xc66ce000}, - {0xc66d0000}, {0xc66d2000}, {0xc66d4000}, {0xc66d6000}, - {0xc66d8000}, {0xc66da000}, {0xc66dc000}, {0xc66de000}, - {0xc66e0000}, {0xc66e2000}, {0xc66e4000}, {0xc66e6000}, - {0xc66e8000}, {0xc66ea000}, {0xc66ec000}, {0xc66ee000}, - {0xc66f0000}, {0xc66f2000}, {0xc66f4000}, {0xc66f6000}, - {0xc66f8000}, {0xc66fa000}, {0xc66fc000}, {0xc66fe000}, - {0xc6700000}, {0xc6702000}, {0xc6704000}, {0xc6706000}, - {0xc6708000}, {0xc670a000}, {0xc670c000}, {0xc670e000}, - {0xc6710000}, {0xc6712000}, {0xc6714000}, {0xc6716000}, - {0xc6718000}, {0xc671a000}, {0xc671c000}, {0xc671e000}, - {0xc6720000}, {0xc6722000}, {0xc6724000}, {0xc6726000}, - {0xc6728000}, {0xc672a000}, {0xc672c000}, {0xc672e000}, - {0xc6730000}, {0xc6732000}, {0xc6734000}, {0xc6736000}, - {0xc6738000}, {0xc673a000}, {0xc673c000}, {0xc673e000}, - {0xc6740000}, {0xc6742000}, {0xc6744000}, {0xc6746000}, - {0xc6748000}, {0xc674a000}, {0xc674c000}, {0xc674e000}, - {0xc6750000}, {0xc6752000}, {0xc6754000}, {0xc6756000}, - {0xc6758000}, {0xc675a000}, {0xc675c000}, {0xc675e000}, - {0xc6760000}, {0xc6762000}, {0xc6764000}, {0xc6766000}, - {0xc6768000}, {0xc676a000}, {0xc676c000}, {0xc676e000}, - {0xc6770000}, {0xc6772000}, {0xc6774000}, {0xc6776000}, - {0xc6778000}, {0xc677a000}, {0xc677c000}, {0xc677e000}, - {0xc6780000}, {0xc6782000}, {0xc6784000}, {0xc6786000}, - {0xc6788000}, {0xc678a000}, {0xc678c000}, {0xc678e000}, - {0xc6790000}, {0xc6792000}, {0xc6794000}, {0xc6796000}, - {0xc6798000}, {0xc679a000}, {0xc679c000}, {0xc679e000}, - {0xc67a0000}, {0xc67a2000}, {0xc67a4000}, {0xc67a6000}, - {0xc67a8000}, {0xc67aa000}, {0xc67ac000}, {0xc67ae000}, - {0xc67b0000}, {0xc67b2000}, {0xc67b4000}, {0xc67b6000}, - {0xc67b8000}, {0xc67ba000}, {0xc67bc000}, {0xc67be000}, - {0xc67c0000}, {0xc67c2000}, {0xc67c4000}, {0xc67c6000}, - {0xc67c8000}, {0xc67ca000}, {0xc67cc000}, {0xc67ce000}, - {0xc67d0000}, {0xc67d2000}, {0xc67d4000}, {0xc67d6000}, - {0xc67d8000}, {0xc67da000}, {0xc67dc000}, {0xc67de000}, - {0xc67e0000}, {0xc67e2000}, {0xc67e4000}, {0xc67e6000}, - {0xc67e8000}, {0xc67ea000}, {0xc67ec000}, {0xc67ee000}, - {0xc67f0000}, {0xc67f2000}, {0xc67f4000}, {0xc67f6000}, - {0xc67f8000}, {0xc67fa000}, {0xc67fc000}, {0xc67fe000}, - {0xc6800000}, {0xc6802000}, {0xc6804000}, {0xc6806000}, - {0xc6808000}, {0xc680a000}, {0xc680c000}, {0xc680e000}, - {0xc6810000}, {0xc6812000}, {0xc6814000}, {0xc6816000}, - {0xc6818000}, {0xc681a000}, {0xc681c000}, {0xc681e000}, - {0xc6820000}, {0xc6822000}, {0xc6824000}, {0xc6826000}, - {0xc6828000}, {0xc682a000}, {0xc682c000}, {0xc682e000}, - {0xc6830000}, {0xc6832000}, {0xc6834000}, {0xc6836000}, - {0xc6838000}, {0xc683a000}, {0xc683c000}, {0xc683e000}, - {0xc6840000}, {0xc6842000}, {0xc6844000}, {0xc6846000}, - {0xc6848000}, {0xc684a000}, {0xc684c000}, {0xc684e000}, - {0xc6850000}, {0xc6852000}, {0xc6854000}, {0xc6856000}, - {0xc6858000}, {0xc685a000}, {0xc685c000}, {0xc685e000}, - {0xc6860000}, {0xc6862000}, {0xc6864000}, {0xc6866000}, - {0xc6868000}, {0xc686a000}, {0xc686c000}, {0xc686e000}, - {0xc6870000}, {0xc6872000}, {0xc6874000}, {0xc6876000}, - {0xc6878000}, {0xc687a000}, {0xc687c000}, {0xc687e000}, - {0xc6880000}, {0xc6882000}, {0xc6884000}, {0xc6886000}, - {0xc6888000}, {0xc688a000}, {0xc688c000}, {0xc688e000}, - {0xc6890000}, {0xc6892000}, {0xc6894000}, {0xc6896000}, - {0xc6898000}, {0xc689a000}, {0xc689c000}, {0xc689e000}, - {0xc68a0000}, {0xc68a2000}, {0xc68a4000}, {0xc68a6000}, - {0xc68a8000}, {0xc68aa000}, {0xc68ac000}, {0xc68ae000}, - {0xc68b0000}, {0xc68b2000}, {0xc68b4000}, {0xc68b6000}, - {0xc68b8000}, {0xc68ba000}, {0xc68bc000}, {0xc68be000}, - {0xc68c0000}, {0xc68c2000}, {0xc68c4000}, {0xc68c6000}, - {0xc68c8000}, {0xc68ca000}, {0xc68cc000}, {0xc68ce000}, - {0xc68d0000}, {0xc68d2000}, {0xc68d4000}, {0xc68d6000}, - {0xc68d8000}, {0xc68da000}, {0xc68dc000}, {0xc68de000}, - {0xc68e0000}, {0xc68e2000}, {0xc68e4000}, {0xc68e6000}, - {0xc68e8000}, {0xc68ea000}, {0xc68ec000}, {0xc68ee000}, - {0xc68f0000}, {0xc68f2000}, {0xc68f4000}, {0xc68f6000}, - {0xc68f8000}, {0xc68fa000}, {0xc68fc000}, {0xc68fe000}, - {0xc6900000}, {0xc6902000}, {0xc6904000}, {0xc6906000}, - {0xc6908000}, {0xc690a000}, {0xc690c000}, {0xc690e000}, - {0xc6910000}, {0xc6912000}, {0xc6914000}, {0xc6916000}, - {0xc6918000}, {0xc691a000}, {0xc691c000}, {0xc691e000}, - {0xc6920000}, {0xc6922000}, {0xc6924000}, {0xc6926000}, - {0xc6928000}, {0xc692a000}, {0xc692c000}, {0xc692e000}, - {0xc6930000}, {0xc6932000}, {0xc6934000}, {0xc6936000}, - {0xc6938000}, {0xc693a000}, {0xc693c000}, {0xc693e000}, - {0xc6940000}, {0xc6942000}, {0xc6944000}, {0xc6946000}, - {0xc6948000}, {0xc694a000}, {0xc694c000}, {0xc694e000}, - {0xc6950000}, {0xc6952000}, {0xc6954000}, {0xc6956000}, - {0xc6958000}, {0xc695a000}, {0xc695c000}, {0xc695e000}, - {0xc6960000}, {0xc6962000}, {0xc6964000}, {0xc6966000}, - {0xc6968000}, {0xc696a000}, {0xc696c000}, {0xc696e000}, - {0xc6970000}, {0xc6972000}, {0xc6974000}, {0xc6976000}, - {0xc6978000}, {0xc697a000}, {0xc697c000}, {0xc697e000}, - {0xc6980000}, {0xc6982000}, {0xc6984000}, {0xc6986000}, - {0xc6988000}, {0xc698a000}, {0xc698c000}, {0xc698e000}, - {0xc6990000}, {0xc6992000}, {0xc6994000}, {0xc6996000}, - {0xc6998000}, {0xc699a000}, {0xc699c000}, {0xc699e000}, - {0xc69a0000}, {0xc69a2000}, {0xc69a4000}, {0xc69a6000}, - {0xc69a8000}, {0xc69aa000}, {0xc69ac000}, {0xc69ae000}, - {0xc69b0000}, {0xc69b2000}, {0xc69b4000}, {0xc69b6000}, - {0xc69b8000}, {0xc69ba000}, {0xc69bc000}, {0xc69be000}, - {0xc69c0000}, {0xc69c2000}, {0xc69c4000}, {0xc69c6000}, - {0xc69c8000}, {0xc69ca000}, {0xc69cc000}, {0xc69ce000}, - {0xc69d0000}, {0xc69d2000}, {0xc69d4000}, {0xc69d6000}, - {0xc69d8000}, {0xc69da000}, {0xc69dc000}, {0xc69de000}, - {0xc69e0000}, {0xc69e2000}, {0xc69e4000}, {0xc69e6000}, - {0xc69e8000}, {0xc69ea000}, {0xc69ec000}, {0xc69ee000}, - {0xc69f0000}, {0xc69f2000}, {0xc69f4000}, {0xc69f6000}, - {0xc69f8000}, {0xc69fa000}, {0xc69fc000}, {0xc69fe000}, - {0xc6a00000}, {0xc6a02000}, {0xc6a04000}, {0xc6a06000}, - {0xc6a08000}, {0xc6a0a000}, {0xc6a0c000}, {0xc6a0e000}, - {0xc6a10000}, {0xc6a12000}, {0xc6a14000}, {0xc6a16000}, - {0xc6a18000}, {0xc6a1a000}, {0xc6a1c000}, {0xc6a1e000}, - {0xc6a20000}, {0xc6a22000}, {0xc6a24000}, {0xc6a26000}, - {0xc6a28000}, {0xc6a2a000}, {0xc6a2c000}, {0xc6a2e000}, - {0xc6a30000}, {0xc6a32000}, {0xc6a34000}, {0xc6a36000}, - {0xc6a38000}, {0xc6a3a000}, {0xc6a3c000}, {0xc6a3e000}, - {0xc6a40000}, {0xc6a42000}, {0xc6a44000}, {0xc6a46000}, - {0xc6a48000}, {0xc6a4a000}, {0xc6a4c000}, {0xc6a4e000}, - {0xc6a50000}, {0xc6a52000}, {0xc6a54000}, {0xc6a56000}, - {0xc6a58000}, {0xc6a5a000}, {0xc6a5c000}, {0xc6a5e000}, - {0xc6a60000}, {0xc6a62000}, {0xc6a64000}, {0xc6a66000}, - {0xc6a68000}, {0xc6a6a000}, {0xc6a6c000}, {0xc6a6e000}, - {0xc6a70000}, {0xc6a72000}, {0xc6a74000}, {0xc6a76000}, - {0xc6a78000}, {0xc6a7a000}, {0xc6a7c000}, {0xc6a7e000}, - {0xc6a80000}, {0xc6a82000}, {0xc6a84000}, {0xc6a86000}, - {0xc6a88000}, {0xc6a8a000}, {0xc6a8c000}, {0xc6a8e000}, - {0xc6a90000}, {0xc6a92000}, {0xc6a94000}, {0xc6a96000}, - {0xc6a98000}, {0xc6a9a000}, {0xc6a9c000}, {0xc6a9e000}, - {0xc6aa0000}, {0xc6aa2000}, {0xc6aa4000}, {0xc6aa6000}, - {0xc6aa8000}, {0xc6aaa000}, {0xc6aac000}, {0xc6aae000}, - {0xc6ab0000}, {0xc6ab2000}, {0xc6ab4000}, {0xc6ab6000}, - {0xc6ab8000}, {0xc6aba000}, {0xc6abc000}, {0xc6abe000}, - {0xc6ac0000}, {0xc6ac2000}, {0xc6ac4000}, {0xc6ac6000}, - {0xc6ac8000}, {0xc6aca000}, {0xc6acc000}, {0xc6ace000}, - {0xc6ad0000}, {0xc6ad2000}, {0xc6ad4000}, {0xc6ad6000}, - {0xc6ad8000}, {0xc6ada000}, {0xc6adc000}, {0xc6ade000}, - {0xc6ae0000}, {0xc6ae2000}, {0xc6ae4000}, {0xc6ae6000}, - {0xc6ae8000}, {0xc6aea000}, {0xc6aec000}, {0xc6aee000}, - {0xc6af0000}, {0xc6af2000}, {0xc6af4000}, {0xc6af6000}, - {0xc6af8000}, {0xc6afa000}, {0xc6afc000}, {0xc6afe000}, - {0xc6b00000}, {0xc6b02000}, {0xc6b04000}, {0xc6b06000}, - {0xc6b08000}, {0xc6b0a000}, {0xc6b0c000}, {0xc6b0e000}, - {0xc6b10000}, {0xc6b12000}, {0xc6b14000}, {0xc6b16000}, - {0xc6b18000}, {0xc6b1a000}, {0xc6b1c000}, {0xc6b1e000}, - {0xc6b20000}, {0xc6b22000}, {0xc6b24000}, {0xc6b26000}, - {0xc6b28000}, {0xc6b2a000}, {0xc6b2c000}, {0xc6b2e000}, - {0xc6b30000}, {0xc6b32000}, {0xc6b34000}, {0xc6b36000}, - {0xc6b38000}, {0xc6b3a000}, {0xc6b3c000}, {0xc6b3e000}, - {0xc6b40000}, {0xc6b42000}, {0xc6b44000}, {0xc6b46000}, - {0xc6b48000}, {0xc6b4a000}, {0xc6b4c000}, {0xc6b4e000}, - {0xc6b50000}, {0xc6b52000}, {0xc6b54000}, {0xc6b56000}, - {0xc6b58000}, {0xc6b5a000}, {0xc6b5c000}, {0xc6b5e000}, - {0xc6b60000}, {0xc6b62000}, {0xc6b64000}, {0xc6b66000}, - {0xc6b68000}, {0xc6b6a000}, {0xc6b6c000}, {0xc6b6e000}, - {0xc6b70000}, {0xc6b72000}, {0xc6b74000}, {0xc6b76000}, - {0xc6b78000}, {0xc6b7a000}, {0xc6b7c000}, {0xc6b7e000}, - {0xc6b80000}, {0xc6b82000}, {0xc6b84000}, {0xc6b86000}, - {0xc6b88000}, {0xc6b8a000}, {0xc6b8c000}, {0xc6b8e000}, - {0xc6b90000}, {0xc6b92000}, {0xc6b94000}, {0xc6b96000}, - {0xc6b98000}, {0xc6b9a000}, {0xc6b9c000}, {0xc6b9e000}, - {0xc6ba0000}, {0xc6ba2000}, {0xc6ba4000}, {0xc6ba6000}, - {0xc6ba8000}, {0xc6baa000}, {0xc6bac000}, {0xc6bae000}, - {0xc6bb0000}, {0xc6bb2000}, {0xc6bb4000}, {0xc6bb6000}, - {0xc6bb8000}, {0xc6bba000}, {0xc6bbc000}, {0xc6bbe000}, - {0xc6bc0000}, {0xc6bc2000}, {0xc6bc4000}, {0xc6bc6000}, - {0xc6bc8000}, {0xc6bca000}, {0xc6bcc000}, {0xc6bce000}, - {0xc6bd0000}, {0xc6bd2000}, {0xc6bd4000}, {0xc6bd6000}, - {0xc6bd8000}, {0xc6bda000}, {0xc6bdc000}, {0xc6bde000}, - {0xc6be0000}, {0xc6be2000}, {0xc6be4000}, {0xc6be6000}, - {0xc6be8000}, {0xc6bea000}, {0xc6bec000}, {0xc6bee000}, - {0xc6bf0000}, {0xc6bf2000}, {0xc6bf4000}, {0xc6bf6000}, - {0xc6bf8000}, {0xc6bfa000}, {0xc6bfc000}, {0xc6bfe000}, - {0xc6c00000}, {0xc6c02000}, {0xc6c04000}, {0xc6c06000}, - {0xc6c08000}, {0xc6c0a000}, {0xc6c0c000}, {0xc6c0e000}, - {0xc6c10000}, {0xc6c12000}, {0xc6c14000}, {0xc6c16000}, - {0xc6c18000}, {0xc6c1a000}, {0xc6c1c000}, {0xc6c1e000}, - {0xc6c20000}, {0xc6c22000}, {0xc6c24000}, {0xc6c26000}, - {0xc6c28000}, {0xc6c2a000}, {0xc6c2c000}, {0xc6c2e000}, - {0xc6c30000}, {0xc6c32000}, {0xc6c34000}, {0xc6c36000}, - {0xc6c38000}, {0xc6c3a000}, {0xc6c3c000}, {0xc6c3e000}, - {0xc6c40000}, {0xc6c42000}, {0xc6c44000}, {0xc6c46000}, - {0xc6c48000}, {0xc6c4a000}, {0xc6c4c000}, {0xc6c4e000}, - {0xc6c50000}, {0xc6c52000}, {0xc6c54000}, {0xc6c56000}, - {0xc6c58000}, {0xc6c5a000}, {0xc6c5c000}, {0xc6c5e000}, - {0xc6c60000}, {0xc6c62000}, {0xc6c64000}, {0xc6c66000}, - {0xc6c68000}, {0xc6c6a000}, {0xc6c6c000}, {0xc6c6e000}, - {0xc6c70000}, {0xc6c72000}, {0xc6c74000}, {0xc6c76000}, - {0xc6c78000}, {0xc6c7a000}, {0xc6c7c000}, {0xc6c7e000}, - {0xc6c80000}, {0xc6c82000}, {0xc6c84000}, {0xc6c86000}, - {0xc6c88000}, {0xc6c8a000}, {0xc6c8c000}, {0xc6c8e000}, - {0xc6c90000}, {0xc6c92000}, {0xc6c94000}, {0xc6c96000}, - {0xc6c98000}, {0xc6c9a000}, {0xc6c9c000}, {0xc6c9e000}, - {0xc6ca0000}, {0xc6ca2000}, {0xc6ca4000}, {0xc6ca6000}, - {0xc6ca8000}, {0xc6caa000}, {0xc6cac000}, {0xc6cae000}, - {0xc6cb0000}, {0xc6cb2000}, {0xc6cb4000}, {0xc6cb6000}, - {0xc6cb8000}, {0xc6cba000}, {0xc6cbc000}, {0xc6cbe000}, - {0xc6cc0000}, {0xc6cc2000}, {0xc6cc4000}, {0xc6cc6000}, - {0xc6cc8000}, {0xc6cca000}, {0xc6ccc000}, {0xc6cce000}, - {0xc6cd0000}, {0xc6cd2000}, {0xc6cd4000}, {0xc6cd6000}, - {0xc6cd8000}, {0xc6cda000}, {0xc6cdc000}, {0xc6cde000}, - {0xc6ce0000}, {0xc6ce2000}, {0xc6ce4000}, {0xc6ce6000}, - {0xc6ce8000}, {0xc6cea000}, {0xc6cec000}, {0xc6cee000}, - {0xc6cf0000}, {0xc6cf2000}, {0xc6cf4000}, {0xc6cf6000}, - {0xc6cf8000}, {0xc6cfa000}, {0xc6cfc000}, {0xc6cfe000}, - {0xc6d00000}, {0xc6d02000}, {0xc6d04000}, {0xc6d06000}, - {0xc6d08000}, {0xc6d0a000}, {0xc6d0c000}, {0xc6d0e000}, - {0xc6d10000}, {0xc6d12000}, {0xc6d14000}, {0xc6d16000}, - {0xc6d18000}, {0xc6d1a000}, {0xc6d1c000}, {0xc6d1e000}, - {0xc6d20000}, {0xc6d22000}, {0xc6d24000}, {0xc6d26000}, - {0xc6d28000}, {0xc6d2a000}, {0xc6d2c000}, {0xc6d2e000}, - {0xc6d30000}, {0xc6d32000}, {0xc6d34000}, {0xc6d36000}, - {0xc6d38000}, {0xc6d3a000}, {0xc6d3c000}, {0xc6d3e000}, - {0xc6d40000}, {0xc6d42000}, {0xc6d44000}, {0xc6d46000}, - {0xc6d48000}, {0xc6d4a000}, {0xc6d4c000}, {0xc6d4e000}, - {0xc6d50000}, {0xc6d52000}, {0xc6d54000}, {0xc6d56000}, - {0xc6d58000}, {0xc6d5a000}, {0xc6d5c000}, {0xc6d5e000}, - {0xc6d60000}, {0xc6d62000}, {0xc6d64000}, {0xc6d66000}, - {0xc6d68000}, {0xc6d6a000}, {0xc6d6c000}, {0xc6d6e000}, - {0xc6d70000}, {0xc6d72000}, {0xc6d74000}, {0xc6d76000}, - {0xc6d78000}, {0xc6d7a000}, {0xc6d7c000}, {0xc6d7e000}, - {0xc6d80000}, {0xc6d82000}, {0xc6d84000}, {0xc6d86000}, - {0xc6d88000}, {0xc6d8a000}, {0xc6d8c000}, {0xc6d8e000}, - {0xc6d90000}, {0xc6d92000}, {0xc6d94000}, {0xc6d96000}, - {0xc6d98000}, {0xc6d9a000}, {0xc6d9c000}, {0xc6d9e000}, - {0xc6da0000}, {0xc6da2000}, {0xc6da4000}, {0xc6da6000}, - {0xc6da8000}, {0xc6daa000}, {0xc6dac000}, {0xc6dae000}, - {0xc6db0000}, {0xc6db2000}, {0xc6db4000}, {0xc6db6000}, - {0xc6db8000}, {0xc6dba000}, {0xc6dbc000}, {0xc6dbe000}, - {0xc6dc0000}, {0xc6dc2000}, {0xc6dc4000}, {0xc6dc6000}, - {0xc6dc8000}, {0xc6dca000}, {0xc6dcc000}, {0xc6dce000}, - {0xc6dd0000}, {0xc6dd2000}, {0xc6dd4000}, {0xc6dd6000}, - {0xc6dd8000}, {0xc6dda000}, {0xc6ddc000}, {0xc6dde000}, - {0xc6de0000}, {0xc6de2000}, {0xc6de4000}, {0xc6de6000}, - {0xc6de8000}, {0xc6dea000}, {0xc6dec000}, {0xc6dee000}, - {0xc6df0000}, {0xc6df2000}, {0xc6df4000}, {0xc6df6000}, - {0xc6df8000}, {0xc6dfa000}, {0xc6dfc000}, {0xc6dfe000}, - {0xc6e00000}, {0xc6e02000}, {0xc6e04000}, {0xc6e06000}, - {0xc6e08000}, {0xc6e0a000}, {0xc6e0c000}, {0xc6e0e000}, - {0xc6e10000}, {0xc6e12000}, {0xc6e14000}, {0xc6e16000}, - {0xc6e18000}, {0xc6e1a000}, {0xc6e1c000}, {0xc6e1e000}, - {0xc6e20000}, {0xc6e22000}, {0xc6e24000}, {0xc6e26000}, - {0xc6e28000}, {0xc6e2a000}, {0xc6e2c000}, {0xc6e2e000}, - {0xc6e30000}, {0xc6e32000}, {0xc6e34000}, {0xc6e36000}, - {0xc6e38000}, {0xc6e3a000}, {0xc6e3c000}, {0xc6e3e000}, - {0xc6e40000}, {0xc6e42000}, {0xc6e44000}, {0xc6e46000}, - {0xc6e48000}, {0xc6e4a000}, {0xc6e4c000}, {0xc6e4e000}, - {0xc6e50000}, {0xc6e52000}, {0xc6e54000}, {0xc6e56000}, - {0xc6e58000}, {0xc6e5a000}, {0xc6e5c000}, {0xc6e5e000}, - {0xc6e60000}, {0xc6e62000}, {0xc6e64000}, {0xc6e66000}, - {0xc6e68000}, {0xc6e6a000}, {0xc6e6c000}, {0xc6e6e000}, - {0xc6e70000}, {0xc6e72000}, {0xc6e74000}, {0xc6e76000}, - {0xc6e78000}, {0xc6e7a000}, {0xc6e7c000}, {0xc6e7e000}, - {0xc6e80000}, {0xc6e82000}, {0xc6e84000}, {0xc6e86000}, - {0xc6e88000}, {0xc6e8a000}, {0xc6e8c000}, {0xc6e8e000}, - {0xc6e90000}, {0xc6e92000}, {0xc6e94000}, {0xc6e96000}, - {0xc6e98000}, {0xc6e9a000}, {0xc6e9c000}, {0xc6e9e000}, - {0xc6ea0000}, {0xc6ea2000}, {0xc6ea4000}, {0xc6ea6000}, - {0xc6ea8000}, {0xc6eaa000}, {0xc6eac000}, {0xc6eae000}, - {0xc6eb0000}, {0xc6eb2000}, {0xc6eb4000}, {0xc6eb6000}, - {0xc6eb8000}, {0xc6eba000}, {0xc6ebc000}, {0xc6ebe000}, - {0xc6ec0000}, {0xc6ec2000}, {0xc6ec4000}, {0xc6ec6000}, - {0xc6ec8000}, {0xc6eca000}, {0xc6ecc000}, {0xc6ece000}, - {0xc6ed0000}, {0xc6ed2000}, {0xc6ed4000}, {0xc6ed6000}, - {0xc6ed8000}, {0xc6eda000}, {0xc6edc000}, {0xc6ede000}, - {0xc6ee0000}, {0xc6ee2000}, {0xc6ee4000}, {0xc6ee6000}, - {0xc6ee8000}, {0xc6eea000}, {0xc6eec000}, {0xc6eee000}, - {0xc6ef0000}, {0xc6ef2000}, {0xc6ef4000}, {0xc6ef6000}, - {0xc6ef8000}, {0xc6efa000}, {0xc6efc000}, {0xc6efe000}, - {0xc6f00000}, {0xc6f02000}, {0xc6f04000}, {0xc6f06000}, - {0xc6f08000}, {0xc6f0a000}, {0xc6f0c000}, {0xc6f0e000}, - {0xc6f10000}, {0xc6f12000}, {0xc6f14000}, {0xc6f16000}, - {0xc6f18000}, {0xc6f1a000}, {0xc6f1c000}, {0xc6f1e000}, - {0xc6f20000}, {0xc6f22000}, {0xc6f24000}, {0xc6f26000}, - {0xc6f28000}, {0xc6f2a000}, {0xc6f2c000}, {0xc6f2e000}, - {0xc6f30000}, {0xc6f32000}, {0xc6f34000}, {0xc6f36000}, - {0xc6f38000}, {0xc6f3a000}, {0xc6f3c000}, {0xc6f3e000}, - {0xc6f40000}, {0xc6f42000}, {0xc6f44000}, {0xc6f46000}, - {0xc6f48000}, {0xc6f4a000}, {0xc6f4c000}, {0xc6f4e000}, - {0xc6f50000}, {0xc6f52000}, {0xc6f54000}, {0xc6f56000}, - {0xc6f58000}, {0xc6f5a000}, {0xc6f5c000}, {0xc6f5e000}, - {0xc6f60000}, {0xc6f62000}, {0xc6f64000}, {0xc6f66000}, - {0xc6f68000}, {0xc6f6a000}, {0xc6f6c000}, {0xc6f6e000}, - {0xc6f70000}, {0xc6f72000}, {0xc6f74000}, {0xc6f76000}, - {0xc6f78000}, {0xc6f7a000}, {0xc6f7c000}, {0xc6f7e000}, - {0xc6f80000}, {0xc6f82000}, {0xc6f84000}, {0xc6f86000}, - {0xc6f88000}, {0xc6f8a000}, {0xc6f8c000}, {0xc6f8e000}, - {0xc6f90000}, {0xc6f92000}, {0xc6f94000}, {0xc6f96000}, - {0xc6f98000}, {0xc6f9a000}, {0xc6f9c000}, {0xc6f9e000}, - {0xc6fa0000}, {0xc6fa2000}, {0xc6fa4000}, {0xc6fa6000}, - {0xc6fa8000}, {0xc6faa000}, {0xc6fac000}, {0xc6fae000}, - {0xc6fb0000}, {0xc6fb2000}, {0xc6fb4000}, {0xc6fb6000}, - {0xc6fb8000}, {0xc6fba000}, {0xc6fbc000}, {0xc6fbe000}, - {0xc6fc0000}, {0xc6fc2000}, {0xc6fc4000}, {0xc6fc6000}, - {0xc6fc8000}, {0xc6fca000}, {0xc6fcc000}, {0xc6fce000}, - {0xc6fd0000}, {0xc6fd2000}, {0xc6fd4000}, {0xc6fd6000}, - {0xc6fd8000}, {0xc6fda000}, {0xc6fdc000}, {0xc6fde000}, - {0xc6fe0000}, {0xc6fe2000}, {0xc6fe4000}, {0xc6fe6000}, - {0xc6fe8000}, {0xc6fea000}, {0xc6fec000}, {0xc6fee000}, - {0xc6ff0000}, {0xc6ff2000}, {0xc6ff4000}, {0xc6ff6000}, - {0xc6ff8000}, {0xc6ffa000}, {0xc6ffc000}, {0xc6ffe000}, - {0xc7000000}, {0xc7002000}, {0xc7004000}, {0xc7006000}, - {0xc7008000}, {0xc700a000}, {0xc700c000}, {0xc700e000}, - {0xc7010000}, {0xc7012000}, {0xc7014000}, {0xc7016000}, - {0xc7018000}, {0xc701a000}, {0xc701c000}, {0xc701e000}, - {0xc7020000}, {0xc7022000}, {0xc7024000}, {0xc7026000}, - {0xc7028000}, {0xc702a000}, {0xc702c000}, {0xc702e000}, - {0xc7030000}, {0xc7032000}, {0xc7034000}, {0xc7036000}, - {0xc7038000}, {0xc703a000}, {0xc703c000}, {0xc703e000}, - {0xc7040000}, {0xc7042000}, {0xc7044000}, {0xc7046000}, - {0xc7048000}, {0xc704a000}, {0xc704c000}, {0xc704e000}, - {0xc7050000}, {0xc7052000}, {0xc7054000}, {0xc7056000}, - {0xc7058000}, {0xc705a000}, {0xc705c000}, {0xc705e000}, - {0xc7060000}, {0xc7062000}, {0xc7064000}, {0xc7066000}, - {0xc7068000}, {0xc706a000}, {0xc706c000}, {0xc706e000}, - {0xc7070000}, {0xc7072000}, {0xc7074000}, {0xc7076000}, - {0xc7078000}, {0xc707a000}, {0xc707c000}, {0xc707e000}, - {0xc7080000}, {0xc7082000}, {0xc7084000}, {0xc7086000}, - {0xc7088000}, {0xc708a000}, {0xc708c000}, {0xc708e000}, - {0xc7090000}, {0xc7092000}, {0xc7094000}, {0xc7096000}, - {0xc7098000}, {0xc709a000}, {0xc709c000}, {0xc709e000}, - {0xc70a0000}, {0xc70a2000}, {0xc70a4000}, {0xc70a6000}, - {0xc70a8000}, {0xc70aa000}, {0xc70ac000}, {0xc70ae000}, - {0xc70b0000}, {0xc70b2000}, {0xc70b4000}, {0xc70b6000}, - {0xc70b8000}, {0xc70ba000}, {0xc70bc000}, {0xc70be000}, - {0xc70c0000}, {0xc70c2000}, {0xc70c4000}, {0xc70c6000}, - {0xc70c8000}, {0xc70ca000}, {0xc70cc000}, {0xc70ce000}, - {0xc70d0000}, {0xc70d2000}, {0xc70d4000}, {0xc70d6000}, - {0xc70d8000}, {0xc70da000}, {0xc70dc000}, {0xc70de000}, - {0xc70e0000}, {0xc70e2000}, {0xc70e4000}, {0xc70e6000}, - {0xc70e8000}, {0xc70ea000}, {0xc70ec000}, {0xc70ee000}, - {0xc70f0000}, {0xc70f2000}, {0xc70f4000}, {0xc70f6000}, - {0xc70f8000}, {0xc70fa000}, {0xc70fc000}, {0xc70fe000}, - {0xc7100000}, {0xc7102000}, {0xc7104000}, {0xc7106000}, - {0xc7108000}, {0xc710a000}, {0xc710c000}, {0xc710e000}, - {0xc7110000}, {0xc7112000}, {0xc7114000}, {0xc7116000}, - {0xc7118000}, {0xc711a000}, {0xc711c000}, {0xc711e000}, - {0xc7120000}, {0xc7122000}, {0xc7124000}, {0xc7126000}, - {0xc7128000}, {0xc712a000}, {0xc712c000}, {0xc712e000}, - {0xc7130000}, {0xc7132000}, {0xc7134000}, {0xc7136000}, - {0xc7138000}, {0xc713a000}, {0xc713c000}, {0xc713e000}, - {0xc7140000}, {0xc7142000}, {0xc7144000}, {0xc7146000}, - {0xc7148000}, {0xc714a000}, {0xc714c000}, {0xc714e000}, - {0xc7150000}, {0xc7152000}, {0xc7154000}, {0xc7156000}, - {0xc7158000}, {0xc715a000}, {0xc715c000}, {0xc715e000}, - {0xc7160000}, {0xc7162000}, {0xc7164000}, {0xc7166000}, - {0xc7168000}, {0xc716a000}, {0xc716c000}, {0xc716e000}, - {0xc7170000}, {0xc7172000}, {0xc7174000}, {0xc7176000}, - {0xc7178000}, {0xc717a000}, {0xc717c000}, {0xc717e000}, - {0xc7180000}, {0xc7182000}, {0xc7184000}, {0xc7186000}, - {0xc7188000}, {0xc718a000}, {0xc718c000}, {0xc718e000}, - {0xc7190000}, {0xc7192000}, {0xc7194000}, {0xc7196000}, - {0xc7198000}, {0xc719a000}, {0xc719c000}, {0xc719e000}, - {0xc71a0000}, {0xc71a2000}, {0xc71a4000}, {0xc71a6000}, - {0xc71a8000}, {0xc71aa000}, {0xc71ac000}, {0xc71ae000}, - {0xc71b0000}, {0xc71b2000}, {0xc71b4000}, {0xc71b6000}, - {0xc71b8000}, {0xc71ba000}, {0xc71bc000}, {0xc71be000}, - {0xc71c0000}, {0xc71c2000}, {0xc71c4000}, {0xc71c6000}, - {0xc71c8000}, {0xc71ca000}, {0xc71cc000}, {0xc71ce000}, - {0xc71d0000}, {0xc71d2000}, {0xc71d4000}, {0xc71d6000}, - {0xc71d8000}, {0xc71da000}, {0xc71dc000}, {0xc71de000}, - {0xc71e0000}, {0xc71e2000}, {0xc71e4000}, {0xc71e6000}, - {0xc71e8000}, {0xc71ea000}, {0xc71ec000}, {0xc71ee000}, - {0xc71f0000}, {0xc71f2000}, {0xc71f4000}, {0xc71f6000}, - {0xc71f8000}, {0xc71fa000}, {0xc71fc000}, {0xc71fe000}, - {0xc7200000}, {0xc7202000}, {0xc7204000}, {0xc7206000}, - {0xc7208000}, {0xc720a000}, {0xc720c000}, {0xc720e000}, - {0xc7210000}, {0xc7212000}, {0xc7214000}, {0xc7216000}, - {0xc7218000}, {0xc721a000}, {0xc721c000}, {0xc721e000}, - {0xc7220000}, {0xc7222000}, {0xc7224000}, {0xc7226000}, - {0xc7228000}, {0xc722a000}, {0xc722c000}, {0xc722e000}, - {0xc7230000}, {0xc7232000}, {0xc7234000}, {0xc7236000}, - {0xc7238000}, {0xc723a000}, {0xc723c000}, {0xc723e000}, - {0xc7240000}, {0xc7242000}, {0xc7244000}, {0xc7246000}, - {0xc7248000}, {0xc724a000}, {0xc724c000}, {0xc724e000}, - {0xc7250000}, {0xc7252000}, {0xc7254000}, {0xc7256000}, - {0xc7258000}, {0xc725a000}, {0xc725c000}, {0xc725e000}, - {0xc7260000}, {0xc7262000}, {0xc7264000}, {0xc7266000}, - {0xc7268000}, {0xc726a000}, {0xc726c000}, {0xc726e000}, - {0xc7270000}, {0xc7272000}, {0xc7274000}, {0xc7276000}, - {0xc7278000}, {0xc727a000}, {0xc727c000}, {0xc727e000}, - {0xc7280000}, {0xc7282000}, {0xc7284000}, {0xc7286000}, - {0xc7288000}, {0xc728a000}, {0xc728c000}, {0xc728e000}, - {0xc7290000}, {0xc7292000}, {0xc7294000}, {0xc7296000}, - {0xc7298000}, {0xc729a000}, {0xc729c000}, {0xc729e000}, - {0xc72a0000}, {0xc72a2000}, {0xc72a4000}, {0xc72a6000}, - {0xc72a8000}, {0xc72aa000}, {0xc72ac000}, {0xc72ae000}, - {0xc72b0000}, {0xc72b2000}, {0xc72b4000}, {0xc72b6000}, - {0xc72b8000}, {0xc72ba000}, {0xc72bc000}, {0xc72be000}, - {0xc72c0000}, {0xc72c2000}, {0xc72c4000}, {0xc72c6000}, - {0xc72c8000}, {0xc72ca000}, {0xc72cc000}, {0xc72ce000}, - {0xc72d0000}, {0xc72d2000}, {0xc72d4000}, {0xc72d6000}, - {0xc72d8000}, {0xc72da000}, {0xc72dc000}, {0xc72de000}, - {0xc72e0000}, {0xc72e2000}, {0xc72e4000}, {0xc72e6000}, - {0xc72e8000}, {0xc72ea000}, {0xc72ec000}, {0xc72ee000}, - {0xc72f0000}, {0xc72f2000}, {0xc72f4000}, {0xc72f6000}, - {0xc72f8000}, {0xc72fa000}, {0xc72fc000}, {0xc72fe000}, - {0xc7300000}, {0xc7302000}, {0xc7304000}, {0xc7306000}, - {0xc7308000}, {0xc730a000}, {0xc730c000}, {0xc730e000}, - {0xc7310000}, {0xc7312000}, {0xc7314000}, {0xc7316000}, - {0xc7318000}, {0xc731a000}, {0xc731c000}, {0xc731e000}, - {0xc7320000}, {0xc7322000}, {0xc7324000}, {0xc7326000}, - {0xc7328000}, {0xc732a000}, {0xc732c000}, {0xc732e000}, - {0xc7330000}, {0xc7332000}, {0xc7334000}, {0xc7336000}, - {0xc7338000}, {0xc733a000}, {0xc733c000}, {0xc733e000}, - {0xc7340000}, {0xc7342000}, {0xc7344000}, {0xc7346000}, - {0xc7348000}, {0xc734a000}, {0xc734c000}, {0xc734e000}, - {0xc7350000}, {0xc7352000}, {0xc7354000}, {0xc7356000}, - {0xc7358000}, {0xc735a000}, {0xc735c000}, {0xc735e000}, - {0xc7360000}, {0xc7362000}, {0xc7364000}, {0xc7366000}, - {0xc7368000}, {0xc736a000}, {0xc736c000}, {0xc736e000}, - {0xc7370000}, {0xc7372000}, {0xc7374000}, {0xc7376000}, - {0xc7378000}, {0xc737a000}, {0xc737c000}, {0xc737e000}, - {0xc7380000}, {0xc7382000}, {0xc7384000}, {0xc7386000}, - {0xc7388000}, {0xc738a000}, {0xc738c000}, {0xc738e000}, - {0xc7390000}, {0xc7392000}, {0xc7394000}, {0xc7396000}, - {0xc7398000}, {0xc739a000}, {0xc739c000}, {0xc739e000}, - {0xc73a0000}, {0xc73a2000}, {0xc73a4000}, {0xc73a6000}, - {0xc73a8000}, {0xc73aa000}, {0xc73ac000}, {0xc73ae000}, - {0xc73b0000}, {0xc73b2000}, {0xc73b4000}, {0xc73b6000}, - {0xc73b8000}, {0xc73ba000}, {0xc73bc000}, {0xc73be000}, - {0xc73c0000}, {0xc73c2000}, {0xc73c4000}, {0xc73c6000}, - {0xc73c8000}, {0xc73ca000}, {0xc73cc000}, {0xc73ce000}, - {0xc73d0000}, {0xc73d2000}, {0xc73d4000}, {0xc73d6000}, - {0xc73d8000}, {0xc73da000}, {0xc73dc000}, {0xc73de000}, - {0xc73e0000}, {0xc73e2000}, {0xc73e4000}, {0xc73e6000}, - {0xc73e8000}, {0xc73ea000}, {0xc73ec000}, {0xc73ee000}, - {0xc73f0000}, {0xc73f2000}, {0xc73f4000}, {0xc73f6000}, - {0xc73f8000}, {0xc73fa000}, {0xc73fc000}, {0xc73fe000}, - {0xc7400000}, {0xc7402000}, {0xc7404000}, {0xc7406000}, - {0xc7408000}, {0xc740a000}, {0xc740c000}, {0xc740e000}, - {0xc7410000}, {0xc7412000}, {0xc7414000}, {0xc7416000}, - {0xc7418000}, {0xc741a000}, {0xc741c000}, {0xc741e000}, - {0xc7420000}, {0xc7422000}, {0xc7424000}, {0xc7426000}, - {0xc7428000}, {0xc742a000}, {0xc742c000}, {0xc742e000}, - {0xc7430000}, {0xc7432000}, {0xc7434000}, {0xc7436000}, - {0xc7438000}, {0xc743a000}, {0xc743c000}, {0xc743e000}, - {0xc7440000}, {0xc7442000}, {0xc7444000}, {0xc7446000}, - {0xc7448000}, {0xc744a000}, {0xc744c000}, {0xc744e000}, - {0xc7450000}, {0xc7452000}, {0xc7454000}, {0xc7456000}, - {0xc7458000}, {0xc745a000}, {0xc745c000}, {0xc745e000}, - {0xc7460000}, {0xc7462000}, {0xc7464000}, {0xc7466000}, - {0xc7468000}, {0xc746a000}, {0xc746c000}, {0xc746e000}, - {0xc7470000}, {0xc7472000}, {0xc7474000}, {0xc7476000}, - {0xc7478000}, {0xc747a000}, {0xc747c000}, {0xc747e000}, - {0xc7480000}, {0xc7482000}, {0xc7484000}, {0xc7486000}, - {0xc7488000}, {0xc748a000}, {0xc748c000}, {0xc748e000}, - {0xc7490000}, {0xc7492000}, {0xc7494000}, {0xc7496000}, - {0xc7498000}, {0xc749a000}, {0xc749c000}, {0xc749e000}, - {0xc74a0000}, {0xc74a2000}, {0xc74a4000}, {0xc74a6000}, - {0xc74a8000}, {0xc74aa000}, {0xc74ac000}, {0xc74ae000}, - {0xc74b0000}, {0xc74b2000}, {0xc74b4000}, {0xc74b6000}, - {0xc74b8000}, {0xc74ba000}, {0xc74bc000}, {0xc74be000}, - {0xc74c0000}, {0xc74c2000}, {0xc74c4000}, {0xc74c6000}, - {0xc74c8000}, {0xc74ca000}, {0xc74cc000}, {0xc74ce000}, - {0xc74d0000}, {0xc74d2000}, {0xc74d4000}, {0xc74d6000}, - {0xc74d8000}, {0xc74da000}, {0xc74dc000}, {0xc74de000}, - {0xc74e0000}, {0xc74e2000}, {0xc74e4000}, {0xc74e6000}, - {0xc74e8000}, {0xc74ea000}, {0xc74ec000}, {0xc74ee000}, - {0xc74f0000}, {0xc74f2000}, {0xc74f4000}, {0xc74f6000}, - {0xc74f8000}, {0xc74fa000}, {0xc74fc000}, {0xc74fe000}, - {0xc7500000}, {0xc7502000}, {0xc7504000}, {0xc7506000}, - {0xc7508000}, {0xc750a000}, {0xc750c000}, {0xc750e000}, - {0xc7510000}, {0xc7512000}, {0xc7514000}, {0xc7516000}, - {0xc7518000}, {0xc751a000}, {0xc751c000}, {0xc751e000}, - {0xc7520000}, {0xc7522000}, {0xc7524000}, {0xc7526000}, - {0xc7528000}, {0xc752a000}, {0xc752c000}, {0xc752e000}, - {0xc7530000}, {0xc7532000}, {0xc7534000}, {0xc7536000}, - {0xc7538000}, {0xc753a000}, {0xc753c000}, {0xc753e000}, - {0xc7540000}, {0xc7542000}, {0xc7544000}, {0xc7546000}, - {0xc7548000}, {0xc754a000}, {0xc754c000}, {0xc754e000}, - {0xc7550000}, {0xc7552000}, {0xc7554000}, {0xc7556000}, - {0xc7558000}, {0xc755a000}, {0xc755c000}, {0xc755e000}, - {0xc7560000}, {0xc7562000}, {0xc7564000}, {0xc7566000}, - {0xc7568000}, {0xc756a000}, {0xc756c000}, {0xc756e000}, - {0xc7570000}, {0xc7572000}, {0xc7574000}, {0xc7576000}, - {0xc7578000}, {0xc757a000}, {0xc757c000}, {0xc757e000}, - {0xc7580000}, {0xc7582000}, {0xc7584000}, {0xc7586000}, - {0xc7588000}, {0xc758a000}, {0xc758c000}, {0xc758e000}, - {0xc7590000}, {0xc7592000}, {0xc7594000}, {0xc7596000}, - {0xc7598000}, {0xc759a000}, {0xc759c000}, {0xc759e000}, - {0xc75a0000}, {0xc75a2000}, {0xc75a4000}, {0xc75a6000}, - {0xc75a8000}, {0xc75aa000}, {0xc75ac000}, {0xc75ae000}, - {0xc75b0000}, {0xc75b2000}, {0xc75b4000}, {0xc75b6000}, - {0xc75b8000}, {0xc75ba000}, {0xc75bc000}, {0xc75be000}, - {0xc75c0000}, {0xc75c2000}, {0xc75c4000}, {0xc75c6000}, - {0xc75c8000}, {0xc75ca000}, {0xc75cc000}, {0xc75ce000}, - {0xc75d0000}, {0xc75d2000}, {0xc75d4000}, {0xc75d6000}, - {0xc75d8000}, {0xc75da000}, {0xc75dc000}, {0xc75de000}, - {0xc75e0000}, {0xc75e2000}, {0xc75e4000}, {0xc75e6000}, - {0xc75e8000}, {0xc75ea000}, {0xc75ec000}, {0xc75ee000}, - {0xc75f0000}, {0xc75f2000}, {0xc75f4000}, {0xc75f6000}, - {0xc75f8000}, {0xc75fa000}, {0xc75fc000}, {0xc75fe000}, - {0xc7600000}, {0xc7602000}, {0xc7604000}, {0xc7606000}, - {0xc7608000}, {0xc760a000}, {0xc760c000}, {0xc760e000}, - {0xc7610000}, {0xc7612000}, {0xc7614000}, {0xc7616000}, - {0xc7618000}, {0xc761a000}, {0xc761c000}, {0xc761e000}, - {0xc7620000}, {0xc7622000}, {0xc7624000}, {0xc7626000}, - {0xc7628000}, {0xc762a000}, {0xc762c000}, {0xc762e000}, - {0xc7630000}, {0xc7632000}, {0xc7634000}, {0xc7636000}, - {0xc7638000}, {0xc763a000}, {0xc763c000}, {0xc763e000}, - {0xc7640000}, {0xc7642000}, {0xc7644000}, {0xc7646000}, - {0xc7648000}, {0xc764a000}, {0xc764c000}, {0xc764e000}, - {0xc7650000}, {0xc7652000}, {0xc7654000}, {0xc7656000}, - {0xc7658000}, {0xc765a000}, {0xc765c000}, {0xc765e000}, - {0xc7660000}, {0xc7662000}, {0xc7664000}, {0xc7666000}, - {0xc7668000}, {0xc766a000}, {0xc766c000}, {0xc766e000}, - {0xc7670000}, {0xc7672000}, {0xc7674000}, {0xc7676000}, - {0xc7678000}, {0xc767a000}, {0xc767c000}, {0xc767e000}, - {0xc7680000}, {0xc7682000}, {0xc7684000}, {0xc7686000}, - {0xc7688000}, {0xc768a000}, {0xc768c000}, {0xc768e000}, - {0xc7690000}, {0xc7692000}, {0xc7694000}, {0xc7696000}, - {0xc7698000}, {0xc769a000}, {0xc769c000}, {0xc769e000}, - {0xc76a0000}, {0xc76a2000}, {0xc76a4000}, {0xc76a6000}, - {0xc76a8000}, {0xc76aa000}, {0xc76ac000}, {0xc76ae000}, - {0xc76b0000}, {0xc76b2000}, {0xc76b4000}, {0xc76b6000}, - {0xc76b8000}, {0xc76ba000}, {0xc76bc000}, {0xc76be000}, - {0xc76c0000}, {0xc76c2000}, {0xc76c4000}, {0xc76c6000}, - {0xc76c8000}, {0xc76ca000}, {0xc76cc000}, {0xc76ce000}, - {0xc76d0000}, {0xc76d2000}, {0xc76d4000}, {0xc76d6000}, - {0xc76d8000}, {0xc76da000}, {0xc76dc000}, {0xc76de000}, - {0xc76e0000}, {0xc76e2000}, {0xc76e4000}, {0xc76e6000}, - {0xc76e8000}, {0xc76ea000}, {0xc76ec000}, {0xc76ee000}, - {0xc76f0000}, {0xc76f2000}, {0xc76f4000}, {0xc76f6000}, - {0xc76f8000}, {0xc76fa000}, {0xc76fc000}, {0xc76fe000}, - {0xc7700000}, {0xc7702000}, {0xc7704000}, {0xc7706000}, - {0xc7708000}, {0xc770a000}, {0xc770c000}, {0xc770e000}, - {0xc7710000}, {0xc7712000}, {0xc7714000}, {0xc7716000}, - {0xc7718000}, {0xc771a000}, {0xc771c000}, {0xc771e000}, - {0xc7720000}, {0xc7722000}, {0xc7724000}, {0xc7726000}, - {0xc7728000}, {0xc772a000}, {0xc772c000}, {0xc772e000}, - {0xc7730000}, {0xc7732000}, {0xc7734000}, {0xc7736000}, - {0xc7738000}, {0xc773a000}, {0xc773c000}, {0xc773e000}, - {0xc7740000}, {0xc7742000}, {0xc7744000}, {0xc7746000}, - {0xc7748000}, {0xc774a000}, {0xc774c000}, {0xc774e000}, - {0xc7750000}, {0xc7752000}, {0xc7754000}, {0xc7756000}, - {0xc7758000}, {0xc775a000}, {0xc775c000}, {0xc775e000}, - {0xc7760000}, {0xc7762000}, {0xc7764000}, {0xc7766000}, - {0xc7768000}, {0xc776a000}, {0xc776c000}, {0xc776e000}, - {0xc7770000}, {0xc7772000}, {0xc7774000}, {0xc7776000}, - {0xc7778000}, {0xc777a000}, {0xc777c000}, {0xc777e000}, - {0xc7780000}, {0xc7782000}, {0xc7784000}, {0xc7786000}, - {0xc7788000}, {0xc778a000}, {0xc778c000}, {0xc778e000}, - {0xc7790000}, {0xc7792000}, {0xc7794000}, {0xc7796000}, - {0xc7798000}, {0xc779a000}, {0xc779c000}, {0xc779e000}, - {0xc77a0000}, {0xc77a2000}, {0xc77a4000}, {0xc77a6000}, - {0xc77a8000}, {0xc77aa000}, {0xc77ac000}, {0xc77ae000}, - {0xc77b0000}, {0xc77b2000}, {0xc77b4000}, {0xc77b6000}, - {0xc77b8000}, {0xc77ba000}, {0xc77bc000}, {0xc77be000}, - {0xc77c0000}, {0xc77c2000}, {0xc77c4000}, {0xc77c6000}, - {0xc77c8000}, {0xc77ca000}, {0xc77cc000}, {0xc77ce000}, - {0xc77d0000}, {0xc77d2000}, {0xc77d4000}, {0xc77d6000}, - {0xc77d8000}, {0xc77da000}, {0xc77dc000}, {0xc77de000}, - {0xc77e0000}, {0xc77e2000}, {0xc77e4000}, {0xc77e6000}, - {0xc77e8000}, {0xc77ea000}, {0xc77ec000}, {0xc77ee000}, - {0xc77f0000}, {0xc77f2000}, {0xc77f4000}, {0xc77f6000}, - {0xc77f8000}, {0xc77fa000}, {0xc77fc000}, {0xc77fe000}, - {0xff800000}, {0xff802000}, {0xff804000}, {0xff806000}, - {0xff808000}, {0xff80a000}, {0xff80c000}, {0xff80e000}, - {0xff810000}, {0xff812000}, {0xff814000}, {0xff816000}, - {0xff818000}, {0xff81a000}, {0xff81c000}, {0xff81e000}, - {0xff820000}, {0xff822000}, {0xff824000}, {0xff826000}, - {0xff828000}, {0xff82a000}, {0xff82c000}, {0xff82e000}, - {0xff830000}, {0xff832000}, {0xff834000}, {0xff836000}, - {0xff838000}, {0xff83a000}, {0xff83c000}, {0xff83e000}, - {0xff840000}, {0xff842000}, {0xff844000}, {0xff846000}, - {0xff848000}, {0xff84a000}, {0xff84c000}, {0xff84e000}, - {0xff850000}, {0xff852000}, {0xff854000}, {0xff856000}, - {0xff858000}, {0xff85a000}, {0xff85c000}, {0xff85e000}, - {0xff860000}, {0xff862000}, {0xff864000}, {0xff866000}, - {0xff868000}, {0xff86a000}, {0xff86c000}, {0xff86e000}, - {0xff870000}, {0xff872000}, {0xff874000}, {0xff876000}, - {0xff878000}, {0xff87a000}, {0xff87c000}, {0xff87e000}, - {0xff880000}, {0xff882000}, {0xff884000}, {0xff886000}, - {0xff888000}, {0xff88a000}, {0xff88c000}, {0xff88e000}, - {0xff890000}, {0xff892000}, {0xff894000}, {0xff896000}, - {0xff898000}, {0xff89a000}, {0xff89c000}, {0xff89e000}, - {0xff8a0000}, {0xff8a2000}, {0xff8a4000}, {0xff8a6000}, - {0xff8a8000}, {0xff8aa000}, {0xff8ac000}, {0xff8ae000}, - {0xff8b0000}, {0xff8b2000}, {0xff8b4000}, {0xff8b6000}, - {0xff8b8000}, {0xff8ba000}, {0xff8bc000}, {0xff8be000}, - {0xff8c0000}, {0xff8c2000}, {0xff8c4000}, {0xff8c6000}, - {0xff8c8000}, {0xff8ca000}, {0xff8cc000}, {0xff8ce000}, - {0xff8d0000}, {0xff8d2000}, {0xff8d4000}, {0xff8d6000}, - {0xff8d8000}, {0xff8da000}, {0xff8dc000}, {0xff8de000}, - {0xff8e0000}, {0xff8e2000}, {0xff8e4000}, {0xff8e6000}, - {0xff8e8000}, {0xff8ea000}, {0xff8ec000}, {0xff8ee000}, - {0xff8f0000}, {0xff8f2000}, {0xff8f4000}, {0xff8f6000}, - {0xff8f8000}, {0xff8fa000}, {0xff8fc000}, {0xff8fe000}, - {0xff900000}, {0xff902000}, {0xff904000}, {0xff906000}, - {0xff908000}, {0xff90a000}, {0xff90c000}, {0xff90e000}, - {0xff910000}, {0xff912000}, {0xff914000}, {0xff916000}, - {0xff918000}, {0xff91a000}, {0xff91c000}, {0xff91e000}, - {0xff920000}, {0xff922000}, {0xff924000}, {0xff926000}, - {0xff928000}, {0xff92a000}, {0xff92c000}, {0xff92e000}, - {0xff930000}, {0xff932000}, {0xff934000}, {0xff936000}, - {0xff938000}, {0xff93a000}, {0xff93c000}, {0xff93e000}, - {0xff940000}, {0xff942000}, {0xff944000}, {0xff946000}, - {0xff948000}, {0xff94a000}, {0xff94c000}, {0xff94e000}, - {0xff950000}, {0xff952000}, {0xff954000}, {0xff956000}, - {0xff958000}, {0xff95a000}, {0xff95c000}, {0xff95e000}, - {0xff960000}, {0xff962000}, {0xff964000}, {0xff966000}, - {0xff968000}, {0xff96a000}, {0xff96c000}, {0xff96e000}, - {0xff970000}, {0xff972000}, {0xff974000}, {0xff976000}, - {0xff978000}, {0xff97a000}, {0xff97c000}, {0xff97e000}, - {0xff980000}, {0xff982000}, {0xff984000}, {0xff986000}, - {0xff988000}, {0xff98a000}, {0xff98c000}, {0xff98e000}, - {0xff990000}, {0xff992000}, {0xff994000}, {0xff996000}, - {0xff998000}, {0xff99a000}, {0xff99c000}, {0xff99e000}, - {0xff9a0000}, {0xff9a2000}, {0xff9a4000}, {0xff9a6000}, - {0xff9a8000}, {0xff9aa000}, {0xff9ac000}, {0xff9ae000}, - {0xff9b0000}, {0xff9b2000}, {0xff9b4000}, {0xff9b6000}, - {0xff9b8000}, {0xff9ba000}, {0xff9bc000}, {0xff9be000}, - {0xff9c0000}, {0xff9c2000}, {0xff9c4000}, {0xff9c6000}, - {0xff9c8000}, {0xff9ca000}, {0xff9cc000}, {0xff9ce000}, - {0xff9d0000}, {0xff9d2000}, {0xff9d4000}, {0xff9d6000}, - {0xff9d8000}, {0xff9da000}, {0xff9dc000}, {0xff9de000}, - {0xff9e0000}, {0xff9e2000}, {0xff9e4000}, {0xff9e6000}, - {0xff9e8000}, {0xff9ea000}, {0xff9ec000}, {0xff9ee000}, - {0xff9f0000}, {0xff9f2000}, {0xff9f4000}, {0xff9f6000}, - {0xff9f8000}, {0xff9fa000}, {0xff9fc000}, {0xff9fe000}, - {0xffa00000}, {0xffa02000}, {0xffa04000}, {0xffa06000}, - {0xffa08000}, {0xffa0a000}, {0xffa0c000}, {0xffa0e000}, - {0xffa10000}, {0xffa12000}, {0xffa14000}, {0xffa16000}, - {0xffa18000}, {0xffa1a000}, {0xffa1c000}, {0xffa1e000}, - {0xffa20000}, {0xffa22000}, {0xffa24000}, {0xffa26000}, - {0xffa28000}, {0xffa2a000}, {0xffa2c000}, {0xffa2e000}, - {0xffa30000}, {0xffa32000}, {0xffa34000}, {0xffa36000}, - {0xffa38000}, {0xffa3a000}, {0xffa3c000}, {0xffa3e000}, - {0xffa40000}, {0xffa42000}, {0xffa44000}, {0xffa46000}, - {0xffa48000}, {0xffa4a000}, {0xffa4c000}, {0xffa4e000}, - {0xffa50000}, {0xffa52000}, {0xffa54000}, {0xffa56000}, - {0xffa58000}, {0xffa5a000}, {0xffa5c000}, {0xffa5e000}, - {0xffa60000}, {0xffa62000}, {0xffa64000}, {0xffa66000}, - {0xffa68000}, {0xffa6a000}, {0xffa6c000}, {0xffa6e000}, - {0xffa70000}, {0xffa72000}, {0xffa74000}, {0xffa76000}, - {0xffa78000}, {0xffa7a000}, {0xffa7c000}, {0xffa7e000}, - {0xffa80000}, {0xffa82000}, {0xffa84000}, {0xffa86000}, - {0xffa88000}, {0xffa8a000}, {0xffa8c000}, {0xffa8e000}, - {0xffa90000}, {0xffa92000}, {0xffa94000}, {0xffa96000}, - {0xffa98000}, {0xffa9a000}, {0xffa9c000}, {0xffa9e000}, - {0xffaa0000}, {0xffaa2000}, {0xffaa4000}, {0xffaa6000}, - {0xffaa8000}, {0xffaaa000}, {0xffaac000}, {0xffaae000}, - {0xffab0000}, {0xffab2000}, {0xffab4000}, {0xffab6000}, - {0xffab8000}, {0xffaba000}, {0xffabc000}, {0xffabe000}, - {0xffac0000}, {0xffac2000}, {0xffac4000}, {0xffac6000}, - {0xffac8000}, {0xffaca000}, {0xffacc000}, {0xfface000}, - {0xffad0000}, {0xffad2000}, {0xffad4000}, {0xffad6000}, - {0xffad8000}, {0xffada000}, {0xffadc000}, {0xffade000}, - {0xffae0000}, {0xffae2000}, {0xffae4000}, {0xffae6000}, - {0xffae8000}, {0xffaea000}, {0xffaec000}, {0xffaee000}, - {0xffaf0000}, {0xffaf2000}, {0xffaf4000}, {0xffaf6000}, - {0xffaf8000}, {0xffafa000}, {0xffafc000}, {0xffafe000}, - {0xffb00000}, {0xffb02000}, {0xffb04000}, {0xffb06000}, - {0xffb08000}, {0xffb0a000}, {0xffb0c000}, {0xffb0e000}, - {0xffb10000}, {0xffb12000}, {0xffb14000}, {0xffb16000}, - {0xffb18000}, {0xffb1a000}, {0xffb1c000}, {0xffb1e000}, - {0xffb20000}, {0xffb22000}, {0xffb24000}, {0xffb26000}, - {0xffb28000}, {0xffb2a000}, {0xffb2c000}, {0xffb2e000}, - {0xffb30000}, {0xffb32000}, {0xffb34000}, {0xffb36000}, - {0xffb38000}, {0xffb3a000}, {0xffb3c000}, {0xffb3e000}, - {0xffb40000}, {0xffb42000}, {0xffb44000}, {0xffb46000}, - {0xffb48000}, {0xffb4a000}, {0xffb4c000}, {0xffb4e000}, - {0xffb50000}, {0xffb52000}, {0xffb54000}, {0xffb56000}, - {0xffb58000}, {0xffb5a000}, {0xffb5c000}, {0xffb5e000}, - {0xffb60000}, {0xffb62000}, {0xffb64000}, {0xffb66000}, - {0xffb68000}, {0xffb6a000}, {0xffb6c000}, {0xffb6e000}, - {0xffb70000}, {0xffb72000}, {0xffb74000}, {0xffb76000}, - {0xffb78000}, {0xffb7a000}, {0xffb7c000}, {0xffb7e000}, - {0xffb80000}, {0xffb82000}, {0xffb84000}, {0xffb86000}, - {0xffb88000}, {0xffb8a000}, {0xffb8c000}, {0xffb8e000}, - {0xffb90000}, {0xffb92000}, {0xffb94000}, {0xffb96000}, - {0xffb98000}, {0xffb9a000}, {0xffb9c000}, {0xffb9e000}, - {0xffba0000}, {0xffba2000}, {0xffba4000}, {0xffba6000}, - {0xffba8000}, {0xffbaa000}, {0xffbac000}, {0xffbae000}, - {0xffbb0000}, {0xffbb2000}, {0xffbb4000}, {0xffbb6000}, - {0xffbb8000}, {0xffbba000}, {0xffbbc000}, {0xffbbe000}, - {0xffbc0000}, {0xffbc2000}, {0xffbc4000}, {0xffbc6000}, - {0xffbc8000}, {0xffbca000}, {0xffbcc000}, {0xffbce000}, - {0xffbd0000}, {0xffbd2000}, {0xffbd4000}, {0xffbd6000}, - {0xffbd8000}, {0xffbda000}, {0xffbdc000}, {0xffbde000}, - {0xffbe0000}, {0xffbe2000}, {0xffbe4000}, {0xffbe6000}, - {0xffbe8000}, {0xffbea000}, {0xffbec000}, {0xffbee000}, - {0xffbf0000}, {0xffbf2000}, {0xffbf4000}, {0xffbf6000}, - {0xffbf8000}, {0xffbfa000}, {0xffbfc000}, {0xffbfe000}, - {0xffc00000}, {0xffc02000}, {0xffc04000}, {0xffc06000}, - {0xffc08000}, {0xffc0a000}, {0xffc0c000}, {0xffc0e000}, - {0xffc10000}, {0xffc12000}, {0xffc14000}, {0xffc16000}, - {0xffc18000}, {0xffc1a000}, {0xffc1c000}, {0xffc1e000}, - {0xffc20000}, {0xffc22000}, {0xffc24000}, {0xffc26000}, - {0xffc28000}, {0xffc2a000}, {0xffc2c000}, {0xffc2e000}, - {0xffc30000}, {0xffc32000}, {0xffc34000}, {0xffc36000}, - {0xffc38000}, {0xffc3a000}, {0xffc3c000}, {0xffc3e000}, - {0xffc40000}, {0xffc42000}, {0xffc44000}, {0xffc46000}, - {0xffc48000}, {0xffc4a000}, {0xffc4c000}, {0xffc4e000}, - {0xffc50000}, {0xffc52000}, {0xffc54000}, {0xffc56000}, - {0xffc58000}, {0xffc5a000}, {0xffc5c000}, {0xffc5e000}, - {0xffc60000}, {0xffc62000}, {0xffc64000}, {0xffc66000}, - {0xffc68000}, {0xffc6a000}, {0xffc6c000}, {0xffc6e000}, - {0xffc70000}, {0xffc72000}, {0xffc74000}, {0xffc76000}, - {0xffc78000}, {0xffc7a000}, {0xffc7c000}, {0xffc7e000}, - {0xffc80000}, {0xffc82000}, {0xffc84000}, {0xffc86000}, - {0xffc88000}, {0xffc8a000}, {0xffc8c000}, {0xffc8e000}, - {0xffc90000}, {0xffc92000}, {0xffc94000}, {0xffc96000}, - {0xffc98000}, {0xffc9a000}, {0xffc9c000}, {0xffc9e000}, - {0xffca0000}, {0xffca2000}, {0xffca4000}, {0xffca6000}, - {0xffca8000}, {0xffcaa000}, {0xffcac000}, {0xffcae000}, - {0xffcb0000}, {0xffcb2000}, {0xffcb4000}, {0xffcb6000}, - {0xffcb8000}, {0xffcba000}, {0xffcbc000}, {0xffcbe000}, - {0xffcc0000}, {0xffcc2000}, {0xffcc4000}, {0xffcc6000}, - {0xffcc8000}, {0xffcca000}, {0xffccc000}, {0xffcce000}, - {0xffcd0000}, {0xffcd2000}, {0xffcd4000}, {0xffcd6000}, - {0xffcd8000}, {0xffcda000}, {0xffcdc000}, {0xffcde000}, - {0xffce0000}, {0xffce2000}, {0xffce4000}, {0xffce6000}, - {0xffce8000}, {0xffcea000}, {0xffcec000}, {0xffcee000}, - {0xffcf0000}, {0xffcf2000}, {0xffcf4000}, {0xffcf6000}, - {0xffcf8000}, {0xffcfa000}, {0xffcfc000}, {0xffcfe000}, - {0xffd00000}, {0xffd02000}, {0xffd04000}, {0xffd06000}, - {0xffd08000}, {0xffd0a000}, {0xffd0c000}, {0xffd0e000}, - {0xffd10000}, {0xffd12000}, {0xffd14000}, {0xffd16000}, - {0xffd18000}, {0xffd1a000}, {0xffd1c000}, {0xffd1e000}, - {0xffd20000}, {0xffd22000}, {0xffd24000}, {0xffd26000}, - {0xffd28000}, {0xffd2a000}, {0xffd2c000}, {0xffd2e000}, - {0xffd30000}, {0xffd32000}, {0xffd34000}, {0xffd36000}, - {0xffd38000}, {0xffd3a000}, {0xffd3c000}, {0xffd3e000}, - {0xffd40000}, {0xffd42000}, {0xffd44000}, {0xffd46000}, - {0xffd48000}, {0xffd4a000}, {0xffd4c000}, {0xffd4e000}, - {0xffd50000}, {0xffd52000}, {0xffd54000}, {0xffd56000}, - {0xffd58000}, {0xffd5a000}, {0xffd5c000}, {0xffd5e000}, - {0xffd60000}, {0xffd62000}, {0xffd64000}, {0xffd66000}, - {0xffd68000}, {0xffd6a000}, {0xffd6c000}, {0xffd6e000}, - {0xffd70000}, {0xffd72000}, {0xffd74000}, {0xffd76000}, - {0xffd78000}, {0xffd7a000}, {0xffd7c000}, {0xffd7e000}, - {0xffd80000}, {0xffd82000}, {0xffd84000}, {0xffd86000}, - {0xffd88000}, {0xffd8a000}, {0xffd8c000}, {0xffd8e000}, - {0xffd90000}, {0xffd92000}, {0xffd94000}, {0xffd96000}, - {0xffd98000}, {0xffd9a000}, {0xffd9c000}, {0xffd9e000}, - {0xffda0000}, {0xffda2000}, {0xffda4000}, {0xffda6000}, - {0xffda8000}, {0xffdaa000}, {0xffdac000}, {0xffdae000}, - {0xffdb0000}, {0xffdb2000}, {0xffdb4000}, {0xffdb6000}, - {0xffdb8000}, {0xffdba000}, {0xffdbc000}, {0xffdbe000}, - {0xffdc0000}, {0xffdc2000}, {0xffdc4000}, {0xffdc6000}, - {0xffdc8000}, {0xffdca000}, {0xffdcc000}, {0xffdce000}, - {0xffdd0000}, {0xffdd2000}, {0xffdd4000}, {0xffdd6000}, - {0xffdd8000}, {0xffdda000}, {0xffddc000}, {0xffdde000}, - {0xffde0000}, {0xffde2000}, {0xffde4000}, {0xffde6000}, - {0xffde8000}, {0xffdea000}, {0xffdec000}, {0xffdee000}, - {0xffdf0000}, {0xffdf2000}, {0xffdf4000}, {0xffdf6000}, - {0xffdf8000}, {0xffdfa000}, {0xffdfc000}, {0xffdfe000}, - {0xffe00000}, {0xffe02000}, {0xffe04000}, {0xffe06000}, - {0xffe08000}, {0xffe0a000}, {0xffe0c000}, {0xffe0e000}, - {0xffe10000}, {0xffe12000}, {0xffe14000}, {0xffe16000}, - {0xffe18000}, {0xffe1a000}, {0xffe1c000}, {0xffe1e000}, - {0xffe20000}, {0xffe22000}, {0xffe24000}, {0xffe26000}, - {0xffe28000}, {0xffe2a000}, {0xffe2c000}, {0xffe2e000}, - {0xffe30000}, {0xffe32000}, {0xffe34000}, {0xffe36000}, - {0xffe38000}, {0xffe3a000}, {0xffe3c000}, {0xffe3e000}, - {0xffe40000}, {0xffe42000}, {0xffe44000}, {0xffe46000}, - {0xffe48000}, {0xffe4a000}, {0xffe4c000}, {0xffe4e000}, - {0xffe50000}, {0xffe52000}, {0xffe54000}, {0xffe56000}, - {0xffe58000}, {0xffe5a000}, {0xffe5c000}, {0xffe5e000}, - {0xffe60000}, {0xffe62000}, {0xffe64000}, {0xffe66000}, - {0xffe68000}, {0xffe6a000}, {0xffe6c000}, {0xffe6e000}, - {0xffe70000}, {0xffe72000}, {0xffe74000}, {0xffe76000}, - {0xffe78000}, {0xffe7a000}, {0xffe7c000}, {0xffe7e000}, - {0xffe80000}, {0xffe82000}, {0xffe84000}, {0xffe86000}, - {0xffe88000}, {0xffe8a000}, {0xffe8c000}, {0xffe8e000}, - {0xffe90000}, {0xffe92000}, {0xffe94000}, {0xffe96000}, - {0xffe98000}, {0xffe9a000}, {0xffe9c000}, {0xffe9e000}, - {0xffea0000}, {0xffea2000}, {0xffea4000}, {0xffea6000}, - {0xffea8000}, {0xffeaa000}, {0xffeac000}, {0xffeae000}, - {0xffeb0000}, {0xffeb2000}, {0xffeb4000}, {0xffeb6000}, - {0xffeb8000}, {0xffeba000}, {0xffebc000}, {0xffebe000}, - {0xffec0000}, {0xffec2000}, {0xffec4000}, {0xffec6000}, - {0xffec8000}, {0xffeca000}, {0xffecc000}, {0xffece000}, - {0xffed0000}, {0xffed2000}, {0xffed4000}, {0xffed6000}, - {0xffed8000}, {0xffeda000}, {0xffedc000}, {0xffede000}, - {0xffee0000}, {0xffee2000}, {0xffee4000}, {0xffee6000}, - {0xffee8000}, {0xffeea000}, {0xffeec000}, {0xffeee000}, - {0xffef0000}, {0xffef2000}, {0xffef4000}, {0xffef6000}, - {0xffef8000}, {0xffefa000}, {0xffefc000}, {0xffefe000}, - {0xfff00000}, {0xfff02000}, {0xfff04000}, {0xfff06000}, - {0xfff08000}, {0xfff0a000}, {0xfff0c000}, {0xfff0e000}, - {0xfff10000}, {0xfff12000}, {0xfff14000}, {0xfff16000}, - {0xfff18000}, {0xfff1a000}, {0xfff1c000}, {0xfff1e000}, - {0xfff20000}, {0xfff22000}, {0xfff24000}, {0xfff26000}, - {0xfff28000}, {0xfff2a000}, {0xfff2c000}, {0xfff2e000}, - {0xfff30000}, {0xfff32000}, {0xfff34000}, {0xfff36000}, - {0xfff38000}, {0xfff3a000}, {0xfff3c000}, {0xfff3e000}, - {0xfff40000}, {0xfff42000}, {0xfff44000}, {0xfff46000}, - {0xfff48000}, {0xfff4a000}, {0xfff4c000}, {0xfff4e000}, - {0xfff50000}, {0xfff52000}, {0xfff54000}, {0xfff56000}, - {0xfff58000}, {0xfff5a000}, {0xfff5c000}, {0xfff5e000}, - {0xfff60000}, {0xfff62000}, {0xfff64000}, {0xfff66000}, - {0xfff68000}, {0xfff6a000}, {0xfff6c000}, {0xfff6e000}, - {0xfff70000}, {0xfff72000}, {0xfff74000}, {0xfff76000}, - {0xfff78000}, {0xfff7a000}, {0xfff7c000}, {0xfff7e000}, - {0xfff80000}, {0xfff82000}, {0xfff84000}, {0xfff86000}, - {0xfff88000}, {0xfff8a000}, {0xfff8c000}, {0xfff8e000}, - {0xfff90000}, {0xfff92000}, {0xfff94000}, {0xfff96000}, - {0xfff98000}, {0xfff9a000}, {0xfff9c000}, {0xfff9e000}, - {0xfffa0000}, {0xfffa2000}, {0xfffa4000}, {0xfffa6000}, - {0xfffa8000}, {0xfffaa000}, {0xfffac000}, {0xfffae000}, - {0xfffb0000}, {0xfffb2000}, {0xfffb4000}, {0xfffb6000}, - {0xfffb8000}, {0xfffba000}, {0xfffbc000}, {0xfffbe000}, - {0xfffc0000}, {0xfffc2000}, {0xfffc4000}, {0xfffc6000}, - {0xfffc8000}, {0xfffca000}, {0xfffcc000}, {0xfffce000}, - {0xfffd0000}, {0xfffd2000}, {0xfffd4000}, {0xfffd6000}, - {0xfffd8000}, {0xfffda000}, {0xfffdc000}, {0xfffde000}, - {0xfffe0000}, {0xfffe2000}, {0xfffe4000}, {0xfffe6000}, - {0xfffe8000}, {0xfffea000}, {0xfffec000}, {0xfffee000}, - {0xffff0000}, {0xffff2000}, {0xffff4000}, {0xffff6000}, - {0xffff8000}, {0xffffa000}, {0xffffc000}, {0xffffe000}, -}; diff --git a/3rdparty/openexr/Iex/Iex.h b/3rdparty/openexr/Iex/Iex.h deleted file mode 100644 index a0fd31d017..0000000000 --- a/3rdparty/openexr/Iex/Iex.h +++ /dev/null @@ -1,60 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - - -#ifndef INCLUDED_IEX_H -#define INCLUDED_IEX_H - - -//-------------------------------- -// -// Exception handling -// -//-------------------------------- - - -#include "IexMacros.h" -#include "IexBaseExc.h" -#include "IexMathExc.h" -#include "IexThrowErrnoExc.h" - -// Note that we do not include file IexErrnoExc.h here. That file -// defines over 150 classes and significantly slows down compilation. -// If you throw ErrnoExc exceptions using the throwErrnoExc() function, -// you don't need IexErrnoExc.h. You have to include IexErrnoExc.h -// only if you want to catch specific subclasses of ErrnoExc. - - -#endif diff --git a/3rdparty/openexr/Iex/IexBaseExc.cpp b/3rdparty/openexr/Iex/IexBaseExc.cpp deleted file mode 100644 index cd975c3d10..0000000000 --- a/3rdparty/openexr/Iex/IexBaseExc.cpp +++ /dev/null @@ -1,213 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2002-2012, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - - -//--------------------------------------------------------------------- -// -// Constructors and destructors for our exception base class. -// -//--------------------------------------------------------------------- - -#include "IexExport.h" -#include "IexBaseExc.h" -#include "IexMacros.h" - -#ifdef PLATFORM_WINDOWS -#include -#endif - -#include - -IEX_INTERNAL_NAMESPACE_SOURCE_ENTER - - -namespace { - -StackTracer currentStackTracer = 0; - -} // namespace - - -void -setStackTracer (StackTracer stackTracer) -{ - currentStackTracer = stackTracer; -} - - -StackTracer -stackTracer () -{ - return currentStackTracer; -} - - -BaseExc::BaseExc (const char* s) throw () : - _message (s? s: ""), - _stackTrace (currentStackTracer? currentStackTracer(): "") -{ - // empty -} - - -BaseExc::BaseExc (const std::string &s) throw () : - _message (s), - _stackTrace (currentStackTracer? currentStackTracer(): "") -{ - // empty -} - - -BaseExc::BaseExc (std::stringstream &s) throw () : - _message (s.str()), - _stackTrace (currentStackTracer? currentStackTracer(): "") -{ - // empty -} - - -BaseExc::BaseExc (const BaseExc &be) throw () : - _message (be._message), - _stackTrace (be._stackTrace) -{ - // empty -} - - -BaseExc::~BaseExc () throw () -{ - // empty -} - - -const char * -BaseExc::what () const throw () -{ - return _message.c_str(); -} - - -BaseExc & -BaseExc::assign (std::stringstream &s) -{ - _message.assign (s.str()); - return *this; -} - -BaseExc & -BaseExc::append (std::stringstream &s) -{ - _message.append (s.str()); - return *this; -} - -const std::string & -BaseExc::message() const -{ - return _message; -} - -BaseExc & -BaseExc::operator = (std::stringstream &s) -{ - return assign (s); -} - - -BaseExc & -BaseExc::operator += (std::stringstream &s) -{ - return append (s); -} - - -BaseExc & -BaseExc::assign (const char *s) -{ - _message.assign(s); - return *this; -} - - -BaseExc & -BaseExc::operator = (const char *s) -{ - return assign(s); -} - - -BaseExc & -BaseExc::append (const char *s) -{ - _message.append(s); - return *this; -} - - -BaseExc & -BaseExc::operator += (const char *s) -{ - return append(s); -} - - -const std::string & -BaseExc::stackTrace () const -{ - return _stackTrace; -} - - -IEX_INTERNAL_NAMESPACE_SOURCE_EXIT - - -#ifdef PLATFORM_WINDOWS - -#pragma optimize("", off) -void -iex_debugTrap() -{ - if (0 != getenv("IEXDEBUGTHROW")) - ::DebugBreak(); -} -#else -void -iex_debugTrap() -{ - // how to in Linux? - if (0 != ::getenv("IEXDEBUGTHROW")) - __builtin_trap(); -} -#endif diff --git a/3rdparty/openexr/Iex/IexBaseExc.h b/3rdparty/openexr/Iex/IexBaseExc.h deleted file mode 100644 index 30cb17f509..0000000000 --- a/3rdparty/openexr/Iex/IexBaseExc.h +++ /dev/null @@ -1,215 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2002-2012, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - -#ifndef INCLUDED_IEXBASEEXC_H -#define INCLUDED_IEXBASEEXC_H - -#include "IexNamespace.h" -#include "IexExport.h" - -//---------------------------------------------------------- -// -// A general exception base class, and a few -// useful exceptions derived from the base class. -// -//---------------------------------------------------------- - -#include -#include -#include - -IEX_INTERNAL_NAMESPACE_HEADER_ENTER - - -//------------------------------- -// Our most basic exception class -//------------------------------- - -class BaseExc: public std::exception -{ - public: - - //---------------------------- - // Constructors and destructor - //---------------------------- - - IEX_EXPORT BaseExc (const char *s = 0) throw(); // std::string (s) - IEX_EXPORT BaseExc (const std::string &s) throw(); // std::string (s) - IEX_EXPORT BaseExc (std::stringstream &s) throw(); // std::string (s.str()) - - IEX_EXPORT BaseExc (const BaseExc &be) throw(); - IEX_EXPORT virtual ~BaseExc () throw (); - - //--------------------------------------------------- - // what() method -- e.what() returns _message.c_str() - //--------------------------------------------------- - - IEX_EXPORT virtual const char * what () const throw (); - - - //-------------------------------------------------- - // Convenient methods to change the exception's text - //-------------------------------------------------- - - IEX_EXPORT BaseExc & assign (std::stringstream &s); // assign (s.str()) - IEX_EXPORT BaseExc & operator = (std::stringstream &s); - - IEX_EXPORT BaseExc & append (std::stringstream &s); // append (s.str()) - IEX_EXPORT BaseExc & operator += (std::stringstream &s); - - - //-------------------------------------------------- - // These methods from the base class get obscured by - // the definitions above. - //-------------------------------------------------- - - IEX_EXPORT BaseExc & assign (const char *s); - IEX_EXPORT BaseExc & operator = (const char *s); - - IEX_EXPORT BaseExc & append (const char *s); - IEX_EXPORT BaseExc & operator += (const char *s); - - //--------------------------------------------------- - // Access to the string representation of the message - //--------------------------------------------------- - - IEX_EXPORT const std::string & message () const; - - //-------------------------------------------------- - // Stack trace for the point at which the exception - // was thrown. The stack trace will be an empty - // string unless a working stack-tracing routine - // has been installed (see below, setStackTracer()). - //-------------------------------------------------- - - IEX_EXPORT const std::string & stackTrace () const; - - private: - - std::string _message; - std::string _stackTrace; -}; - - -//----------------------------------------------------- -// A macro to save typing when declararing an exception -// class derived directly or indirectly from BaseExc: -//----------------------------------------------------- - -#define DEFINE_EXC_EXP(exp, name, base) \ - class name: public base \ - { \ - public: \ - exp name() throw(): base (0) {} \ - exp name (const char* text) throw(): base (text) {} \ - exp name (const std::string &text) throw(): base (text) {} \ - exp name (std::stringstream &text) throw(): base (text) {} \ - exp ~name() throw() { } \ - }; - -// For backward compatibility. -#define DEFINE_EXC(name, base) DEFINE_EXC_EXP(, name, base) - - -//-------------------------------------------------------- -// Some exceptions which should be useful in most programs -//-------------------------------------------------------- -DEFINE_EXC_EXP (IEX_EXPORT, ArgExc, BaseExc) // Invalid arguments to a function call - -DEFINE_EXC_EXP (IEX_EXPORT, LogicExc, BaseExc) // General error in a program's logic, - // for example, a function was called - // in a context where the call does - // not make sense. - -DEFINE_EXC_EXP (IEX_EXPORT, InputExc, BaseExc) // Invalid input data, e.g. from a file - -DEFINE_EXC_EXP (IEX_EXPORT, IoExc, BaseExc) // Input or output operation failed - -DEFINE_EXC_EXP (IEX_EXPORT, MathExc, BaseExc) // Arithmetic exception; more specific - // exceptions derived from this class - // are defined in ExcMath.h - -DEFINE_EXC_EXP (IEX_EXPORT, ErrnoExc, BaseExc) // Base class for exceptions corresponding - // to errno values (see errno.h); more - // specific exceptions derived from this - // class are defined in ExcErrno.h - -DEFINE_EXC_EXP (IEX_EXPORT, NoImplExc, BaseExc) // Missing method exception e.g. from a - // call to a method that is only partially - // or not at all implemented. A reminder - // to lazy software people to get back - // to work. - -DEFINE_EXC_EXP (IEX_EXPORT, NullExc, BaseExc) // A pointer is inappropriately null. - -DEFINE_EXC_EXP (IEX_EXPORT, TypeExc, BaseExc) // An object is an inappropriate type, - // i.e. a dynamnic_cast failed. - - -//---------------------------------------------------------------------- -// Stack-tracing support: -// -// setStackTracer(st) -// -// installs a stack-tracing routine, st, which will be called from -// class BaseExc's constructor every time an exception derived from -// BaseExc is thrown. The stack-tracing routine should return a -// string that contains a printable representation of the program's -// current call stack. This string will be stored in the BaseExc -// object; the string is accesible via the BaseExc::stackTrace() -// method. -// -// setStackTracer(0) -// -// removes the current stack tracing routine. When an exception -// derived from BaseExc is thrown, the stack trace string stored -// in the BaseExc object will be empty. -// -// stackTracer() -// -// returns a pointer to the current stack-tracing routine, or 0 -// if there is no current stack stack-tracing routine. -// -//---------------------------------------------------------------------- - -typedef std::string (* StackTracer) (); - -IEX_EXPORT void setStackTracer (StackTracer stackTracer); -IEX_EXPORT StackTracer stackTracer (); - - -IEX_INTERNAL_NAMESPACE_HEADER_EXIT - -#endif // INCLUDED_IEXBASEEXC_H diff --git a/3rdparty/openexr/Iex/IexErrnoExc.h b/3rdparty/openexr/Iex/IexErrnoExc.h deleted file mode 100644 index 027c7a4e9c..0000000000 --- a/3rdparty/openexr/Iex/IexErrnoExc.h +++ /dev/null @@ -1,208 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2002-2012, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - - -#ifndef INCLUDED_IEXERRNOEXC_H -#define INCLUDED_IEXERRNOEXC_H - -//---------------------------------------------------------------- -// -// Exceptions which correspond to "errno" error codes. -// -//---------------------------------------------------------------- - -#include "IexBaseExc.h" - -IEX_INTERNAL_NAMESPACE_HEADER_ENTER - -DEFINE_EXC (EpermExc, ErrnoExc) -DEFINE_EXC (EnoentExc, ErrnoExc) -DEFINE_EXC (EsrchExc, ErrnoExc) -DEFINE_EXC (EintrExc, ErrnoExc) -DEFINE_EXC (EioExc, ErrnoExc) -DEFINE_EXC (EnxioExc, ErrnoExc) -DEFINE_EXC (E2bigExc, ErrnoExc) -DEFINE_EXC (EnoexecExc, ErrnoExc) -DEFINE_EXC (EbadfExc, ErrnoExc) -DEFINE_EXC (EchildExc, ErrnoExc) -DEFINE_EXC (EagainExc, ErrnoExc) -DEFINE_EXC (EnomemExc, ErrnoExc) -DEFINE_EXC (EaccesExc, ErrnoExc) -DEFINE_EXC (EfaultExc, ErrnoExc) -DEFINE_EXC (EnotblkExc, ErrnoExc) -DEFINE_EXC (EbusyExc, ErrnoExc) -DEFINE_EXC (EexistExc, ErrnoExc) -DEFINE_EXC (ExdevExc, ErrnoExc) -DEFINE_EXC (EnodevExc, ErrnoExc) -DEFINE_EXC (EnotdirExc, ErrnoExc) -DEFINE_EXC (EisdirExc, ErrnoExc) -DEFINE_EXC (EinvalExc, ErrnoExc) -DEFINE_EXC (EnfileExc, ErrnoExc) -DEFINE_EXC (EmfileExc, ErrnoExc) -DEFINE_EXC (EnottyExc, ErrnoExc) -DEFINE_EXC (EtxtbsyExc, ErrnoExc) -DEFINE_EXC (EfbigExc, ErrnoExc) -DEFINE_EXC (EnospcExc, ErrnoExc) -DEFINE_EXC (EspipeExc, ErrnoExc) -DEFINE_EXC (ErofsExc, ErrnoExc) -DEFINE_EXC (EmlinkExc, ErrnoExc) -DEFINE_EXC (EpipeExc, ErrnoExc) -DEFINE_EXC (EdomExc, ErrnoExc) -DEFINE_EXC (ErangeExc, ErrnoExc) -DEFINE_EXC (EnomsgExc, ErrnoExc) -DEFINE_EXC (EidrmExc, ErrnoExc) -DEFINE_EXC (EchrngExc, ErrnoExc) -DEFINE_EXC (El2nsyncExc, ErrnoExc) -DEFINE_EXC (El3hltExc, ErrnoExc) -DEFINE_EXC (El3rstExc, ErrnoExc) -DEFINE_EXC (ElnrngExc, ErrnoExc) -DEFINE_EXC (EunatchExc, ErrnoExc) -DEFINE_EXC (EnocsiExc, ErrnoExc) -DEFINE_EXC (El2hltExc, ErrnoExc) -DEFINE_EXC (EdeadlkExc, ErrnoExc) -DEFINE_EXC (EnolckExc, ErrnoExc) -DEFINE_EXC (EbadeExc, ErrnoExc) -DEFINE_EXC (EbadrExc, ErrnoExc) -DEFINE_EXC (ExfullExc, ErrnoExc) -DEFINE_EXC (EnoanoExc, ErrnoExc) -DEFINE_EXC (EbadrqcExc, ErrnoExc) -DEFINE_EXC (EbadsltExc, ErrnoExc) -DEFINE_EXC (EdeadlockExc, ErrnoExc) -DEFINE_EXC (EbfontExc, ErrnoExc) -DEFINE_EXC (EnostrExc, ErrnoExc) -DEFINE_EXC (EnodataExc, ErrnoExc) -DEFINE_EXC (EtimeExc, ErrnoExc) -DEFINE_EXC (EnosrExc, ErrnoExc) -DEFINE_EXC (EnonetExc, ErrnoExc) -DEFINE_EXC (EnopkgExc, ErrnoExc) -DEFINE_EXC (EremoteExc, ErrnoExc) -DEFINE_EXC (EnolinkExc, ErrnoExc) -DEFINE_EXC (EadvExc, ErrnoExc) -DEFINE_EXC (EsrmntExc, ErrnoExc) -DEFINE_EXC (EcommExc, ErrnoExc) -DEFINE_EXC (EprotoExc, ErrnoExc) -DEFINE_EXC (EmultihopExc, ErrnoExc) -DEFINE_EXC (EbadmsgExc, ErrnoExc) -DEFINE_EXC (EnametoolongExc, ErrnoExc) -DEFINE_EXC (EoverflowExc, ErrnoExc) -DEFINE_EXC (EnotuniqExc, ErrnoExc) -DEFINE_EXC (EbadfdExc, ErrnoExc) -DEFINE_EXC (EremchgExc, ErrnoExc) -DEFINE_EXC (ElibaccExc, ErrnoExc) -DEFINE_EXC (ElibbadExc, ErrnoExc) -DEFINE_EXC (ElibscnExc, ErrnoExc) -DEFINE_EXC (ElibmaxExc, ErrnoExc) -DEFINE_EXC (ElibexecExc, ErrnoExc) -DEFINE_EXC (EilseqExc, ErrnoExc) -DEFINE_EXC (EnosysExc, ErrnoExc) -DEFINE_EXC (EloopExc, ErrnoExc) -DEFINE_EXC (ErestartExc, ErrnoExc) -DEFINE_EXC (EstrpipeExc, ErrnoExc) -DEFINE_EXC (EnotemptyExc, ErrnoExc) -DEFINE_EXC (EusersExc, ErrnoExc) -DEFINE_EXC (EnotsockExc, ErrnoExc) -DEFINE_EXC (EdestaddrreqExc, ErrnoExc) -DEFINE_EXC (EmsgsizeExc, ErrnoExc) -DEFINE_EXC (EprototypeExc, ErrnoExc) -DEFINE_EXC (EnoprotooptExc, ErrnoExc) -DEFINE_EXC (EprotonosupportExc, ErrnoExc) -DEFINE_EXC (EsocktnosupportExc, ErrnoExc) -DEFINE_EXC (EopnotsuppExc, ErrnoExc) -DEFINE_EXC (EpfnosupportExc, ErrnoExc) -DEFINE_EXC (EafnosupportExc, ErrnoExc) -DEFINE_EXC (EaddrinuseExc, ErrnoExc) -DEFINE_EXC (EaddrnotavailExc, ErrnoExc) -DEFINE_EXC (EnetdownExc, ErrnoExc) -DEFINE_EXC (EnetunreachExc, ErrnoExc) -DEFINE_EXC (EnetresetExc, ErrnoExc) -DEFINE_EXC (EconnabortedExc, ErrnoExc) -DEFINE_EXC (EconnresetExc, ErrnoExc) -DEFINE_EXC (EnobufsExc, ErrnoExc) -DEFINE_EXC (EisconnExc, ErrnoExc) -DEFINE_EXC (EnotconnExc, ErrnoExc) -DEFINE_EXC (EshutdownExc, ErrnoExc) -DEFINE_EXC (EtoomanyrefsExc, ErrnoExc) -DEFINE_EXC (EtimedoutExc, ErrnoExc) -DEFINE_EXC (EconnrefusedExc, ErrnoExc) -DEFINE_EXC (EhostdownExc, ErrnoExc) -DEFINE_EXC (EhostunreachExc, ErrnoExc) -DEFINE_EXC (EalreadyExc, ErrnoExc) -DEFINE_EXC (EinprogressExc, ErrnoExc) -DEFINE_EXC (EstaleExc, ErrnoExc) -DEFINE_EXC (EioresidExc, ErrnoExc) -DEFINE_EXC (EucleanExc, ErrnoExc) -DEFINE_EXC (EnotnamExc, ErrnoExc) -DEFINE_EXC (EnavailExc, ErrnoExc) -DEFINE_EXC (EisnamExc, ErrnoExc) -DEFINE_EXC (EremoteioExc, ErrnoExc) -DEFINE_EXC (EinitExc, ErrnoExc) -DEFINE_EXC (EremdevExc, ErrnoExc) -DEFINE_EXC (EcanceledExc, ErrnoExc) -DEFINE_EXC (EnolimfileExc, ErrnoExc) -DEFINE_EXC (EproclimExc, ErrnoExc) -DEFINE_EXC (EdisjointExc, ErrnoExc) -DEFINE_EXC (EnologinExc, ErrnoExc) -DEFINE_EXC (EloginlimExc, ErrnoExc) -DEFINE_EXC (EgrouploopExc, ErrnoExc) -DEFINE_EXC (EnoattachExc, ErrnoExc) -DEFINE_EXC (EnotsupExc, ErrnoExc) -DEFINE_EXC (EnoattrExc, ErrnoExc) -DEFINE_EXC (EdircorruptedExc, ErrnoExc) -DEFINE_EXC (EdquotExc, ErrnoExc) -DEFINE_EXC (EnfsremoteExc, ErrnoExc) -DEFINE_EXC (EcontrollerExc, ErrnoExc) -DEFINE_EXC (EnotcontrollerExc, ErrnoExc) -DEFINE_EXC (EenqueuedExc, ErrnoExc) -DEFINE_EXC (EnotenqueuedExc, ErrnoExc) -DEFINE_EXC (EjoinedExc, ErrnoExc) -DEFINE_EXC (EnotjoinedExc, ErrnoExc) -DEFINE_EXC (EnoprocExc, ErrnoExc) -DEFINE_EXC (EmustrunExc, ErrnoExc) -DEFINE_EXC (EnotstoppedExc, ErrnoExc) -DEFINE_EXC (EclockcpuExc, ErrnoExc) -DEFINE_EXC (EinvalstateExc, ErrnoExc) -DEFINE_EXC (EnoexistExc, ErrnoExc) -DEFINE_EXC (EendofminorExc, ErrnoExc) -DEFINE_EXC (EbufsizeExc, ErrnoExc) -DEFINE_EXC (EemptyExc, ErrnoExc) -DEFINE_EXC (EnointrgroupExc, ErrnoExc) -DEFINE_EXC (EinvalmodeExc, ErrnoExc) -DEFINE_EXC (EcantextentExc, ErrnoExc) -DEFINE_EXC (EinvaltimeExc, ErrnoExc) -DEFINE_EXC (EdestroyedExc, ErrnoExc) - -IEX_INTERNAL_NAMESPACE_HEADER_EXIT - -#endif diff --git a/3rdparty/openexr/Iex/IexExport.h b/3rdparty/openexr/Iex/IexExport.h deleted file mode 100644 index 270c1cf49d..0000000000 --- a/3rdparty/openexr/Iex/IexExport.h +++ /dev/null @@ -1,51 +0,0 @@ -#ifndef IEXEXPORT_H -#define IEXEXPORT_H - -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2012, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - -#if defined(OPENEXR_DLL) - #if defined(IEX_EXPORTS) - #define IEX_EXPORT __declspec(dllexport) - #else - #define IEX_EXPORT __declspec(dllimport) - #endif - #define IEX_EXPORT_CONST -#else - #define IEX_EXPORT - #define IEX_EXPORT_CONST const -#endif - -#endif // #ifndef IEXEXPORT_H - diff --git a/3rdparty/openexr/Iex/IexForward.h b/3rdparty/openexr/Iex/IexForward.h deleted file mode 100644 index 743771cbb1..0000000000 --- a/3rdparty/openexr/Iex/IexForward.h +++ /dev/null @@ -1,229 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2012, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - -#ifndef INCLUDED_IEXFORWARD_H -#define INCLUDED_IEXFORWARD_H - -#include "IexNamespace.h" - -IEX_INTERNAL_NAMESPACE_HEADER_ENTER - -// -// Base exceptions. -// - -class BaseExc; -class ArgExc; -class LogicExc; -class InputExc; -class IoExc; -class MathExc; -class ErrnoExc; -class NoImplExc; -class NullExc; -class TypeExc; - -// -// Math exceptions. -// - -class OverflowExc; -class UnderflowExc; -class DivzeroExc; -class InexactExc; -class InvalidFpOpExc; - -// -// Errno exceptions. -// - -class EpermExc; -class EnoentExc; -class EsrchExc; -class EintrExc; -class EioExc; -class EnxioExc; -class E2bigExc; -class EnoexecExc; -class EbadfExc; -class EchildExc; -class EagainExc; -class EnomemExc; -class EaccesExc; -class EfaultExc; -class EnotblkExc; -class EbusyExc; -class EexistExc; -class ExdevExc; -class EnodevExc; -class EnotdirExc; -class EisdirExc; -class EinvalExc; -class EnfileExc; -class EmfileExc; -class EnottyExc; -class EtxtbsyExc; -class EfbigExc; -class EnospcExc; -class EspipeExc; -class ErofsExc; -class EmlinkExc; -class EpipeExc; -class EdomExc; -class ErangeExc; -class EnomsgExc; -class EidrmExc; -class EchrngExc; -class El2nsyncExc; -class El3hltExc; -class El3rstExc; -class ElnrngExc; -class EunatchExc; -class EnocsiExc; -class El2hltExc; -class EdeadlkExc; -class EnolckExc; -class EbadeExc; -class EbadrExc; -class ExfullExc; -class EnoanoExc; -class EbadrqcExc; -class EbadsltExc; -class EdeadlockExc; -class EbfontExc; -class EnostrExc; -class EnodataExc; -class EtimeExc; -class EnosrExc; -class EnonetExc; -class EnopkgExc; -class EremoteExc; -class EnolinkExc; -class EadvExc; -class EsrmntExc; -class EcommExc; -class EprotoExc; -class EmultihopExc; -class EbadmsgExc; -class EnametoolongExc; -class EoverflowExc; -class EnotuniqExc; -class EbadfdExc; -class EremchgExc; -class ElibaccExc; -class ElibbadExc; -class ElibscnExc; -class ElibmaxExc; -class ElibexecExc; -class EilseqExc; -class EnosysExc; -class EloopExc; -class ErestartExc; -class EstrpipeExc; -class EnotemptyExc; -class EusersExc; -class EnotsockExc; -class EdestaddrreqExc; -class EmsgsizeExc; -class EprototypeExc; -class EnoprotooptExc; -class EprotonosupportExc; -class EsocktnosupportExc; -class EopnotsuppExc; -class EpfnosupportExc; -class EafnosupportExc; -class EaddrinuseExc; -class EaddrnotavailExc; -class EnetdownExc; -class EnetunreachExc; -class EnetresetExc; -class EconnabortedExc; -class EconnresetExc; -class EnobufsExc; -class EisconnExc; -class EnotconnExc; -class EshutdownExc; -class EtoomanyrefsExc; -class EtimedoutExc; -class EconnrefusedExc; -class EhostdownExc; -class EhostunreachExc; -class EalreadyExc; -class EinprogressExc; -class EstaleExc; -class EioresidExc; -class EucleanExc; -class EnotnamExc; -class EnavailExc; -class EisnamExc; -class EremoteioExc; -class EinitExc; -class EremdevExc; -class EcanceledExc; -class EnolimfileExc; -class EproclimExc; -class EdisjointExc; -class EnologinExc; -class EloginlimExc; -class EgrouploopExc; -class EnoattachExc; -class EnotsupExc; -class EnoattrExc; -class EdircorruptedExc; -class EdquotExc; -class EnfsremoteExc; -class EcontrollerExc; -class EnotcontrollerExc; -class EenqueuedExc; -class EnotenqueuedExc; -class EjoinedExc; -class EnotjoinedExc; -class EnoprocExc; -class EmustrunExc; -class EnotstoppedExc; -class EclockcpuExc; -class EinvalstateExc; -class EnoexistExc; -class EendofminorExc; -class EbufsizeExc; -class EemptyExc; -class EnointrgroupExc; -class EinvalmodeExc; -class EcantextentExc; -class EinvaltimeExc; -class EdestroyedExc; - -IEX_INTERNAL_NAMESPACE_HEADER_EXIT - -#endif // INCLUDED_IEXFORWARD_H diff --git a/3rdparty/openexr/Iex/IexMacros.h b/3rdparty/openexr/Iex/IexMacros.h deleted file mode 100644 index 5de57c9eb3..0000000000 --- a/3rdparty/openexr/Iex/IexMacros.h +++ /dev/null @@ -1,170 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2002-2018, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - - -#ifndef INCLUDED_IEXMACROS_H -#define INCLUDED_IEXMACROS_H - -//-------------------------------------------------------------------- -// -// Macros which make throwing exceptions more convenient -// -//-------------------------------------------------------------------- - -#include - - -//---------------------------------------------------------------------------- -// A macro to throw exceptions whose text is assembled using stringstreams. -// -// Example: -// -// THROW (InputExc, "Syntax error in line " << line ", " << file << "."); -// -//---------------------------------------------------------------------------- - -#include "IexExport.h" -#include "IexForward.h" - -IEX_EXPORT void iex_debugTrap(); - -#define THROW(type, text) \ - do \ - { \ - iex_debugTrap(); \ - std::stringstream _iex_throw_s; \ - _iex_throw_s << text; \ - throw type (_iex_throw_s); \ - } \ - while (0) - - -//---------------------------------------------------------------------------- -// Macros to add to or to replace the text of an exception. -// The new text is assembled using stringstreams. -// -// Examples: -// -// Append to end of an exception's text: -// -// catch (BaseExc &e) -// { -// APPEND_EXC (e, " Directory " << name << " does not exist."); -// throw; -// } -// -// Replace an exception's text: -// -// catch (BaseExc &e) -// { -// REPLACE_EXC (e, "Directory " << name << " does not exist. " << e); -// throw; -// } -//---------------------------------------------------------------------------- - -#define APPEND_EXC(exc, text) \ - do \ - { \ - std::stringstream _iex_append_s; \ - _iex_append_s << text; \ - exc.append (_iex_append_s); \ - } \ - while (0) - -#define REPLACE_EXC(exc, text) \ - do \ - { \ - std::stringstream _iex_replace_s; \ - _iex_replace_s << text; \ - exc.assign (_iex_replace_s); \ - } \ - while (0) - - -//------------------------------------------------------------- -// A macro to throw ErrnoExc exceptions whose text is assembled -// using stringstreams: -// -// Example: -// -// THROW_ERRNO ("Cannot open file " << name << " (%T)."); -// -//------------------------------------------------------------- - -#define THROW_ERRNO(text) \ - do \ - { \ - std::stringstream _iex_throw_errno_s; \ - _iex_throw_errno_s << text; \ - ::IEX_NAMESPACE::throwErrnoExc (_iex_throw_errno_s.str()); \ - } \ - while (0) - - -//------------------------------------------------------------- -// A macro to throw exceptions if an assertion is false. -// -// Example: -// -// ASSERT (ptr != 0, NullExc, "Null pointer" ); -// -//------------------------------------------------------------- - -#define ASSERT(assertion, type, text) \ - do \ - { \ - if( bool(assertion) == false ) \ - { \ - THROW( type, text ); \ - } \ - } \ - while (0) - -//------------------------------------------------------------- -// A macro to throw an IEX_NAMESPACE::LogicExc if an assertion is false, -// with the text composed from the source code file, line number, -// and assertion argument text. -// -// Example: -// -// LOGIC_ASSERT (i < n); -// -//------------------------------------------------------------- -#define LOGIC_ASSERT(assertion) \ - ASSERT(assertion, \ - IEX_NAMESPACE::LogicExc, \ - __FILE__ << "(" << __LINE__ << "): logical assertion failed: " << #assertion ) - -#endif diff --git a/3rdparty/openexr/Iex/IexMathExc.h b/3rdparty/openexr/Iex/IexMathExc.h deleted file mode 100644 index 795f500675..0000000000 --- a/3rdparty/openexr/Iex/IexMathExc.h +++ /dev/null @@ -1,57 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2002-2012, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - - -#ifndef INCLUDED_IEXMATHEXC_H -#define INCLUDED_IEXMATHEXC_H - -#include "IexBaseExc.h" - -IEX_INTERNAL_NAMESPACE_HEADER_ENTER - -//--------------------------------------------------------- -// Exception classess which correspond to specific floating -// point exceptions. -//--------------------------------------------------------- - -DEFINE_EXC (OverflowExc, MathExc) // Overflow -DEFINE_EXC (UnderflowExc, MathExc) // Underflow -DEFINE_EXC (DivzeroExc, MathExc) // Division by zero -DEFINE_EXC (InexactExc, MathExc) // Inexact result -DEFINE_EXC (InvalidFpOpExc, MathExc) // Invalid operation - -IEX_INTERNAL_NAMESPACE_HEADER_EXIT - -#endif // INCLUDED_IEXMATHEXC_H diff --git a/3rdparty/openexr/Iex/IexNamespace.h b/3rdparty/openexr/Iex/IexNamespace.h deleted file mode 100644 index bef1572283..0000000000 --- a/3rdparty/openexr/Iex/IexNamespace.h +++ /dev/null @@ -1,112 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2012, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - -#ifndef INCLUDED_IEXNAMESPACE_H -#define INCLUDED_IEXNAMESPACE_H - -// -// The purpose of this file is to make it possible to specify an -// IEX_INTERNAL_NAMESPACE as a preprocessor definition and have all of the -// Iex symbols defined within that namespace rather than the standard -// Iex namespace. Those symbols are made available to client code through -// the IEX_NAMESPACE in addition to the IEX_INTERNAL_NAMESPACE. -// -// To ensure source code compatibility, the IEX_NAMESPACE defaults to Iex -// and then "using namespace IEX_INTERNAL_NAMESPACE;" brings all of the -// declarations from the IEX_INTERNAL_NAMESPACE into the IEX_NAMESPACE. This -// means that client code can continue to use syntax like Iex::BaseExc, but -// at link time it will resolve to a mangled symbol based on the -// IEX_INTERNAL_NAMESPACE. -// -// As an example, if one needed to build against a newer version of Iex and -// have it run alongside an older version in the same application, it is now -// possible to use an internal namespace to prevent collisions between the -// older versions of Iex symbols and the newer ones. To do this, the -// following could be defined at build time: -// -// IEX_INTERNAL_NAMESPACE = Iex_v2 -// -// This means that declarations inside Iex headers look like this (after the -// preprocessor has done its work): -// -// namespace Iex_v2 { -// ... -// class declarations -// ... -// } -// -// namespace Iex { -// using namespace Iex_v2; -// } -// - -// -// Open Source version of this file pulls in the IlmBaseConfig.h file -// for the configure time options. -// -#include "IlmBaseConfig.h" - -#ifndef IEX_NAMESPACE -#define IEX_NAMESPACE Iex -#endif - -#ifndef IEX_INTERNAL_NAMESPACE -#define IEX_INTERNAL_NAMESPACE IEX_NAMESPACE -#endif - -// -// We need to be sure that we import the internal namespace into the public one. -// To do this, we use the small bit of code below which initially defines -// IEX_INTERNAL_NAMESPACE (so it can be referenced) and then defines -// IEX_NAMESPACE and pulls the internal symbols into the public namespace. -// - -namespace IEX_INTERNAL_NAMESPACE {} -namespace IEX_NAMESPACE { - using namespace IEX_INTERNAL_NAMESPACE; -} - -// -// There are identical pairs of HEADER/SOURCE ENTER/EXIT macros so that -// future extension to the namespace mechanism is possible without changing -// project source code. -// - -#define IEX_INTERNAL_NAMESPACE_HEADER_ENTER namespace IEX_INTERNAL_NAMESPACE { -#define IEX_INTERNAL_NAMESPACE_HEADER_EXIT } - -#define IEX_INTERNAL_NAMESPACE_SOURCE_ENTER namespace IEX_INTERNAL_NAMESPACE { -#define IEX_INTERNAL_NAMESPACE_SOURCE_EXIT } - -#endif // INCLUDED_IEXNAMESPACE_H diff --git a/3rdparty/openexr/Iex/IexThrowErrnoExc.cpp b/3rdparty/openexr/Iex/IexThrowErrnoExc.cpp deleted file mode 100644 index 32e7fb2fe1..0000000000 --- a/3rdparty/openexr/Iex/IexThrowErrnoExc.cpp +++ /dev/null @@ -1,873 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2002-2012, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - - -//---------------------------------------------------------------- -// -// Exceptions that correspond to "errno" error codes, -// and a function to make throwing those exceptions easy. -// -//---------------------------------------------------------------- - -#include "IexThrowErrnoExc.h" -#include "IexErrnoExc.h" -#include -#include - -#ifdef PLATFORM_WINDOWS -#include -#endif - -IEX_INTERNAL_NAMESPACE_SOURCE_ENTER - - -void throwErrnoExc (const std::string &text, int errnum) -{ -#ifdef PLATFORM_WINDOWS - if (0 != getenv("IEXDEBUGTHROW")) - DebugBreak(); -#endif - - const char *entext = strerror (errnum); - std::string tmp (text); - std::string::size_type pos; - - while (std::string::npos != (pos = tmp.find ("%T"))) - tmp.replace (pos, 2, entext, strlen (entext)); - - switch (errnum) - { - #if defined (EPERM) - case EPERM: - throw EpermExc (tmp); - #endif - - #if defined (ENOENT) - case ENOENT: - throw EnoentExc (tmp); - #endif - - #if defined (ESRCH) - case ESRCH: - throw EsrchExc (tmp); - #endif - - #if defined (EINTR) - case EINTR: - throw EintrExc (tmp); - #endif - - #if defined (EIO) - case EIO: - throw EioExc (tmp); - #endif - - #if defined (ENXIO) - case ENXIO: - throw EnxioExc (tmp); - #endif - - #if defined (E2BIG) - case E2BIG: - throw E2bigExc (tmp); - #endif - - #if defined (ENOEXEC) - case ENOEXEC: - throw EnoexecExc (tmp); - #endif - - #if defined (EBADF) - case EBADF: - throw EbadfExc (tmp); - #endif - - #if defined (ECHILD) - case ECHILD: - throw EchildExc (tmp); - #endif - - #if defined (EAGAIN) - case EAGAIN: - throw EagainExc (tmp); - #endif - - #if defined (ENOMEM) - case ENOMEM: - throw EnomemExc (tmp); - #endif - - #if defined (EACCES) - case EACCES: - throw EaccesExc (tmp); - #endif - - #if defined (EFAULT) - case EFAULT: - throw EfaultExc (tmp); - #endif - - #if defined (ENOTBLK) - case ENOTBLK: - throw EnotblkExc (tmp); - #endif - - #if defined (EBUSY) - case EBUSY: - throw EbusyExc (tmp); - #endif - - #if defined (EEXIST) - case EEXIST: - throw EexistExc (tmp); - #endif - - #if defined (EXDEV) - case EXDEV: - throw ExdevExc (tmp); - #endif - - #if defined (ENODEV) - case ENODEV: - throw EnodevExc (tmp); - #endif - - #if defined (ENOTDIR) - case ENOTDIR: - throw EnotdirExc (tmp); - #endif - - #if defined (EISDIR) - case EISDIR: - throw EisdirExc (tmp); - #endif - - #if defined (EINVAL) - case EINVAL: - throw EinvalExc (tmp); - #endif - - #if defined (ENFILE) - case ENFILE: - throw EnfileExc (tmp); - #endif - - #if defined (EMFILE) - case EMFILE: - throw EmfileExc (tmp); - #endif - - #if defined (ENOTTY) - case ENOTTY: - throw EnottyExc (tmp); - #endif - - #if defined (ETXTBSY) - case ETXTBSY: - throw EtxtbsyExc (tmp); - #endif - - #if defined (EFBIG) - case EFBIG: - throw EfbigExc (tmp); - #endif - - #if defined (ENOSPC) - case ENOSPC: - throw EnospcExc (tmp); - #endif - - #if defined (ESPIPE) - case ESPIPE: - throw EspipeExc (tmp); - #endif - - #if defined (EROFS) - case EROFS: - throw ErofsExc (tmp); - #endif - - #if defined (EMLINK) - case EMLINK: - throw EmlinkExc (tmp); - #endif - - #if defined (EPIPE) - case EPIPE: - throw EpipeExc (tmp); - #endif - - #if defined (EDOM) - case EDOM: - throw EdomExc (tmp); - #endif - - #if defined (ERANGE) - case ERANGE: - throw ErangeExc (tmp); - #endif - - #if defined (ENOMSG) - case ENOMSG: - throw EnomsgExc (tmp); - #endif - - #if defined (EIDRM) - case EIDRM: - throw EidrmExc (tmp); - #endif - - #if defined (ECHRNG) - case ECHRNG: - throw EchrngExc (tmp); - #endif - - #if defined (EL2NSYNC) - case EL2NSYNC: - throw El2nsyncExc (tmp); - #endif - - #if defined (EL3HLT) - case EL3HLT: - throw El3hltExc (tmp); - #endif - - #if defined (EL3RST) - case EL3RST: - throw El3rstExc (tmp); - #endif - - #if defined (ELNRNG) - case ELNRNG: - throw ElnrngExc (tmp); - #endif - - #if defined (EUNATCH) - case EUNATCH: - throw EunatchExc (tmp); - #endif - - #if defined (ENOSCI) - case ENOCSI: - throw EnocsiExc (tmp); - #endif - - #if defined (EL2HLT) - case EL2HLT: - throw El2hltExc (tmp); - #endif - - #if defined (EDEADLK) - case EDEADLK: - throw EdeadlkExc (tmp); - #endif - - #if defined (ENOLCK) - case ENOLCK: - throw EnolckExc (tmp); - #endif - - #if defined (EBADE) - case EBADE: - throw EbadeExc (tmp); - #endif - - #if defined (EBADR) - case EBADR: - throw EbadrExc (tmp); - #endif - - #if defined (EXFULL) - case EXFULL: - throw ExfullExc (tmp); - #endif - - #if defined (ENOANO) - case ENOANO: - throw EnoanoExc (tmp); - #endif - - #if defined (EBADRQC) - case EBADRQC: - throw EbadrqcExc (tmp); - #endif - - #if defined (EBADSLT) - case EBADSLT: - throw EbadsltExc (tmp); - #endif - - #if defined (EDEADLOCK) && defined (EDEADLK) - #if EDEADLOCK != EDEADLK - case EDEADLOCK: - throw EdeadlockExc (tmp); - #endif - #elif defined (EDEADLOCK) - case EDEADLOCK: - throw EdeadlockExc (tmp); - #endif - - #if defined (EBFONT) - case EBFONT: - throw EbfontExc (tmp); - #endif - - #if defined (ENOSTR) - case ENOSTR: - throw EnostrExc (tmp); - #endif - - #if defined (ENODATA) - case ENODATA: - throw EnodataExc (tmp); - #endif - - #if defined (ETIME) - case ETIME: - throw EtimeExc (tmp); - #endif - - #if defined (ENOSR) - case ENOSR: - throw EnosrExc (tmp); - #endif - - #if defined (ENONET) - case ENONET: - throw EnonetExc (tmp); - #endif - - #if defined (ENOPKG) - case ENOPKG: - throw EnopkgExc (tmp); - #endif - - #if defined (EREMOTE) - case EREMOTE: - throw EremoteExc (tmp); - #endif - - #if defined (ENOLINK) - case ENOLINK: - throw EnolinkExc (tmp); - #endif - - #if defined (EADV) - case EADV: - throw EadvExc (tmp); - #endif - - #if defined (ESRMNT) - case ESRMNT: - throw EsrmntExc (tmp); - #endif - - #if defined (ECOMM) - case ECOMM: - throw EcommExc (tmp); - #endif - - #if defined (EPROTO) - case EPROTO: - throw EprotoExc (tmp); - #endif - - #if defined (EMULTIHOP) - case EMULTIHOP: - throw EmultihopExc (tmp); - #endif - - #if defined (EBADMSG) - case EBADMSG: - throw EbadmsgExc (tmp); - #endif - - #if defined (ENAMETOOLONG) - case ENAMETOOLONG: - throw EnametoolongExc (tmp); - #endif - - #if defined (EOVERFLOW) - case EOVERFLOW: - throw EoverflowExc (tmp); - #endif - - #if defined (ENOTUNIQ) - case ENOTUNIQ: - throw EnotuniqExc (tmp); - #endif - - #if defined (EBADFD) - case EBADFD: - throw EbadfdExc (tmp); - #endif - - #if defined (EREMCHG) - case EREMCHG: - throw EremchgExc (tmp); - #endif - - #if defined (ELIBACC) - case ELIBACC: - throw ElibaccExc (tmp); - #endif - - #if defined (ELIBBAD) - case ELIBBAD: - throw ElibbadExc (tmp); - #endif - - #if defined (ELIBSCN) - case ELIBSCN: - throw ElibscnExc (tmp); - #endif - - #if defined (ELIBMAX) - case ELIBMAX: - throw ElibmaxExc (tmp); - #endif - - #if defined (ELIBEXEC) - case ELIBEXEC: - throw ElibexecExc (tmp); - #endif - - #if defined (EILSEQ) - case EILSEQ: - throw EilseqExc (tmp); - #endif - - #if defined (ENOSYS) - case ENOSYS: - throw EnosysExc (tmp); - #endif - - #if defined (ELOOP) - case ELOOP: - throw EloopExc (tmp); - #endif - - #if defined (ERESTART) - case ERESTART: - throw ErestartExc (tmp); - #endif - - #if defined (ESTRPIPE) - case ESTRPIPE: - throw EstrpipeExc (tmp); - #endif - - #if defined (ENOTEMPTY) - case ENOTEMPTY: - throw EnotemptyExc (tmp); - #endif - - #if defined (EUSERS) - case EUSERS: - throw EusersExc (tmp); - #endif - - #if defined (ENOTSOCK) - case ENOTSOCK: - throw EnotsockExc (tmp); - #endif - - #if defined (EDESTADDRREQ) - case EDESTADDRREQ: - throw EdestaddrreqExc (tmp); - #endif - - #if defined (EMSGSIZE) - case EMSGSIZE: - throw EmsgsizeExc (tmp); - #endif - - #if defined (EPROTOTYPE) - case EPROTOTYPE: - throw EprototypeExc (tmp); - #endif - - #if defined (ENOPROTOOPT) - case ENOPROTOOPT: - throw EnoprotooptExc (tmp); - #endif - - #if defined (EPROTONOSUPPORT) - case EPROTONOSUPPORT: - throw EprotonosupportExc (tmp); - #endif - - #if defined (ESOCKTNOSUPPORT) - case ESOCKTNOSUPPORT: - throw EsocktnosupportExc (tmp); - #endif - - #if defined (EOPNOTSUPP) - case EOPNOTSUPP: - throw EopnotsuppExc (tmp); - #endif - - #if defined (EPFNOSUPPORT) - case EPFNOSUPPORT: - throw EpfnosupportExc (tmp); - #endif - - #if defined (EAFNOSUPPORT) - case EAFNOSUPPORT: - throw EafnosupportExc (tmp); - #endif - - #if defined (EADDRINUSE) - case EADDRINUSE: - throw EaddrinuseExc (tmp); - #endif - - #if defined (EADDRNOTAVAIL) - case EADDRNOTAVAIL: - throw EaddrnotavailExc (tmp); - #endif - - #if defined (ENETDOWN) - case ENETDOWN: - throw EnetdownExc (tmp); - #endif - - #if defined (ENETUNREACH) - case ENETUNREACH: - throw EnetunreachExc (tmp); - #endif - - #if defined (ENETRESET) - case ENETRESET: - throw EnetresetExc (tmp); - #endif - - #if defined (ECONNABORTED) - case ECONNABORTED: - throw EconnabortedExc (tmp); - #endif - - #if defined (ECONNRESET) - case ECONNRESET: - throw EconnresetExc (tmp); - #endif - - #if defined (ENOBUFS) - case ENOBUFS: - throw EnobufsExc (tmp); - #endif - - #if defined (EISCONN) - case EISCONN: - throw EisconnExc (tmp); - #endif - - #if defined (ENOTCONN) - case ENOTCONN: - throw EnotconnExc (tmp); - #endif - - #if defined (ESHUTDOWN) - case ESHUTDOWN: - throw EshutdownExc (tmp); - #endif - - #if defined (ETOOMANYREFS) - case ETOOMANYREFS: - throw EtoomanyrefsExc (tmp); - #endif - - #if defined (ETIMEDOUT) - case ETIMEDOUT: - throw EtimedoutExc (tmp); - #endif - - #if defined (ECONNREFUSED) - case ECONNREFUSED: - throw EconnrefusedExc (tmp); - #endif - - #if defined (EHOSTDOWN) - case EHOSTDOWN: - throw EhostdownExc (tmp); - #endif - - #if defined (EHOSTUNREACH) - case EHOSTUNREACH: - throw EhostunreachExc (tmp); - #endif - - #if defined (EALREADY) - case EALREADY: - throw EalreadyExc (tmp); - #endif - - #if defined (EINPROGRESS) - case EINPROGRESS: - throw EinprogressExc (tmp); - #endif - - #if defined (ESTALE) - case ESTALE: - throw EstaleExc (tmp); - #endif - - #if defined (EIORESID) - case EIORESID: - throw EioresidExc (tmp); - #endif - - #if defined (EUCLEAN) - case EUCLEAN: - throw EucleanExc (tmp); - #endif - - #if defined (ENOTNAM) - case ENOTNAM: - throw EnotnamExc (tmp); - #endif - - #if defined (ENAVAIL) - case ENAVAIL: - throw EnavailExc (tmp); - #endif - - #if defined (EISNAM) - case EISNAM: - throw EisnamExc (tmp); - #endif - - #if defined (EREMOTEIO) - case EREMOTEIO: - throw EremoteioExc (tmp); - #endif - - #if defined (EINIT) - case EINIT: - throw EinitExc (tmp); - #endif - - #if defined (EREMDEV) - case EREMDEV: - throw EremdevExc (tmp); - #endif - - #if defined (ECANCELED) - case ECANCELED: - throw EcanceledExc (tmp); - #endif - - #if defined (ENOLIMFILE) - case ENOLIMFILE: - throw EnolimfileExc (tmp); - #endif - - #if defined (EPROCLIM) - case EPROCLIM: - throw EproclimExc (tmp); - #endif - - #if defined (EDISJOINT) - case EDISJOINT: - throw EdisjointExc (tmp); - #endif - - #if defined (ENOLOGIN) - case ENOLOGIN: - throw EnologinExc (tmp); - #endif - - #if defined (ELOGINLIM) - case ELOGINLIM: - throw EloginlimExc (tmp); - #endif - - #if defined (EGROUPLOOP) - case EGROUPLOOP: - throw EgrouploopExc (tmp); - #endif - - #if defined (ENOATTACH) - case ENOATTACH: - throw EnoattachExc (tmp); - #endif - - #if defined (ENOTSUP) && defined (EOPNOTSUPP) - #if ENOTSUP != EOPNOTSUPP - case ENOTSUP: - throw EnotsupExc (tmp); - #endif - #elif defined (ENOTSUP) - case ENOTSUP: - throw EnotsupExc (tmp); - #endif - - #if defined (ENOATTR) - case ENOATTR: - throw EnoattrExc (tmp); - #endif - - #if defined (EDIRCORRUPTED) - case EDIRCORRUPTED: - throw EdircorruptedExc (tmp); - #endif - - #if defined (EDQUOT) - case EDQUOT: - throw EdquotExc (tmp); - #endif - - #if defined (ENFSREMOTE) - case ENFSREMOTE: - throw EnfsremoteExc (tmp); - #endif - - #if defined (ECONTROLLER) - case ECONTROLLER: - throw EcontrollerExc (tmp); - #endif - - #if defined (ENOTCONTROLLER) - case ENOTCONTROLLER: - throw EnotcontrollerExc (tmp); - #endif - - #if defined (EENQUEUED) - case EENQUEUED: - throw EenqueuedExc (tmp); - #endif - - #if defined (ENOTENQUEUED) - case ENOTENQUEUED: - throw EnotenqueuedExc (tmp); - #endif - - #if defined (EJOINED) - case EJOINED: - throw EjoinedExc (tmp); - #endif - - #if defined (ENOTJOINED) - case ENOTJOINED: - throw EnotjoinedExc (tmp); - #endif - - #if defined (ENOPROC) - case ENOPROC: - throw EnoprocExc (tmp); - #endif - - #if defined (EMUSTRUN) - case EMUSTRUN: - throw EmustrunExc (tmp); - #endif - - #if defined (ENOTSTOPPED) - case ENOTSTOPPED: - throw EnotstoppedExc (tmp); - #endif - - #if defined (ECLOCKCPU) - case ECLOCKCPU: - throw EclockcpuExc (tmp); - #endif - - #if defined (EINVALSTATE) - case EINVALSTATE: - throw EinvalstateExc (tmp); - #endif - - #if defined (ENOEXIST) - case ENOEXIST: - throw EnoexistExc (tmp); - #endif - - #if defined (EENDOFMINOR) - case EENDOFMINOR: - throw EendofminorExc (tmp); - #endif - - #if defined (EBUFSIZE) - case EBUFSIZE: - throw EbufsizeExc (tmp); - #endif - - #if defined (EEMPTY) - case EEMPTY: - throw EemptyExc (tmp); - #endif - - #if defined (ENOINTRGROUP) - case ENOINTRGROUP: - throw EnointrgroupExc (tmp); - #endif - - #if defined (EINVALMODE) - case EINVALMODE: - throw EinvalmodeExc (tmp); - #endif - - #if defined (ECANTEXTENT) - case ECANTEXTENT: - throw EcantextentExc (tmp); - #endif - - #if defined (EINVALTIME) - case EINVALTIME: - throw EinvaltimeExc (tmp); - #endif - - #if defined (EDESTROYED) - case EDESTROYED: - throw EdestroyedExc (tmp); - #endif - } - - throw ErrnoExc (tmp); -} - - -void throwErrnoExc (const std::string &text) -{ - throwErrnoExc (text, errno); -} - -void throwErrnoExc() -{ - std::string txt = "%T."; - throwErrnoExc (txt); -} - -IEX_INTERNAL_NAMESPACE_SOURCE_EXIT diff --git a/3rdparty/openexr/Iex/IexThrowErrnoExc.h b/3rdparty/openexr/Iex/IexThrowErrnoExc.h deleted file mode 100644 index 224ed2bf58..0000000000 --- a/3rdparty/openexr/Iex/IexThrowErrnoExc.h +++ /dev/null @@ -1,97 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2002-2012, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - - -#ifndef INCLUDED_IEXTHROWERRNOEXC_H -#define INCLUDED_IEXTHROWERRNOEXC_H - -//---------------------------------------------------------- -// -// A function which throws ExcErrno exceptions -// -//---------------------------------------------------------- - -#include "IexBaseExc.h" -#include "IexExport.h" - -IEX_INTERNAL_NAMESPACE_HEADER_ENTER - - -//-------------------------------------------------------------------------- -// -// Function throwErrnoExc() throws an exception which corresponds to -// error code errnum. The exception text is initialized with a copy -// of the string passed to throwErrnoExc(), where all occurrences of -// "%T" have been replaced with the output of strerror(oserror()). -// -// Example: -// -// If opening file /tmp/output failed with an ENOENT error code, -// calling -// -// throwErrnoExc (); -// -// or -// -// throwErrnoExc ("%T."); -// -// will throw an EnoentExc whose text reads -// -// No such file or directory. -// -// More detailed messages can be assembled using stringstreams: -// -// std::stringstream s; -// s << "Cannot open file " << name << " (%T)."; -// throwErrnoExc (s); -// -// The resulting exception contains the following text: -// -// Cannot open file /tmp/output (No such file or directory). -// -// Alternatively, you may want to use the THROW_ERRNO macro defined -// in IexMacros.h: -// -// THROW_ERRNO ("Cannot open file " << name << " (%T).") -// -//-------------------------------------------------------------------------- - -IEX_EXPORT void throwErrnoExc(const std::string &txt, int errnum); -IEX_EXPORT void throwErrnoExc(const std::string &txt); -IEX_EXPORT void throwErrnoExc(); - -IEX_INTERNAL_NAMESPACE_HEADER_EXIT - -#endif // INCLUDED_IEXTHROWERRNOEXC_H diff --git a/3rdparty/openexr/IlmBaseConfig.h.cmakein b/3rdparty/openexr/IlmBaseConfig.h.cmakein deleted file mode 100644 index b1f94db8a8..0000000000 --- a/3rdparty/openexr/IlmBaseConfig.h.cmakein +++ /dev/null @@ -1,83 +0,0 @@ -#cmakedefine PLATFORM_WINDOWS - -// -// Define and set to 1 if the target system has c++11/14 support -// and you want IlmBase to NOT use it's features -// - -#cmakedefine01 ILMBASE_FORCE_CXX03 -#if ILMBASE_FORCE_CXX03 == 0 -#undef ILMBASE_FORCE_CXX03 -#endif - -// -// Define and set to 1 if the target system has POSIX thread support -// and you want IlmBase to use it for multithreaded file I/O. -// - -#cmakedefine01 HAVE_PTHREAD - -// -// Define and set to 1 if the target system supports POSIX semaphores -// and you want OpenEXR to use them; otherwise, OpenEXR will use its -// own semaphore implementation. -// - -#cmakedefine01 HAVE_POSIX_SEMAPHORES - - -#cmakedefine HAVE_UCONTEXT_H - - -// -// Dealing with FPEs -// -#cmakedefine01 ILMBASE_HAVE_CONTROL_REGISTER_SUPPORT - - -// -// Define and set to 1 if the target system has support for large -// stack sizes. -// - -#cmakedefine ILMBASE_HAVE_LARGE_STACK - -// -// Current (internal) library namepace name and corresponding public -// client namespaces. -// -#define ILMBASE_INTERNAL_NAMESPACE_CUSTOM @ILMBASE_INTERNAL_NAMESPACE_CUSTOM@ -#define IMATH_INTERNAL_NAMESPACE @IMATH_INTERNAL_NAMESPACE@ -#define IEX_INTERNAL_NAMESPACE @IEX_INTERNAL_NAMESPACE@ -#define ILMTHREAD_INTERNAL_NAMESPACE @ILMTHREAD_INTERNAL_NAMESPACE@ - -#define ILMBASE_NAMESPACE_CUSTOM @ILMBASE_NAMESPACE_CUSTOM@ -#define IMATH_NAMESPACE @IMATH_NAMESPACE@ -#define IEX_NAMESPACE @IEX_NAMESPACE@ -#define ILMTHREAD_NAMESPACE @ILMTHREAD_NAMESPACE@ - - -// -// Define and set to 1 if the target system has support for large -// stack sizes. -// - -#cmakedefine ILMBASE_HAVE_LARGE_STACK - - -// -// Version information -// -#define ILMBASE_VERSION_STRING @ILMBASE_VERSION_STRING@ -#define ILMBASE_PACKAGE_STRING @ILMBASE_PACKAGE_STRING@ - -#define ILMBASE_VERSION_MAJOR @ILMBASE_VERSION_MAJOR@ -#define ILMBASE_VERSION_MINOR @ILMBASE_VERSION_MINOR@ -#define ILMBASE_VERSION_PATCH @ILMBASE_VERSION_PATCH@ - -// Version as a single hex number, e.g. 0x01000300 == 1.0.3 -#define ILMBASE_VERSION_HEX ((ILMBASE_VERSION_MAJOR << 24) | \ - (ILMBASE_VERSION_MINOR << 16) | \ - (ILMBASE_VERSION_PATCH << 8)) - - diff --git a/3rdparty/openexr/IlmImf/ImfAcesFile.cpp b/3rdparty/openexr/IlmImf/ImfAcesFile.cpp deleted file mode 100644 index 8f33fb0df7..0000000000 --- a/3rdparty/openexr/IlmImf/ImfAcesFile.cpp +++ /dev/null @@ -1,633 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2007, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - -//----------------------------------------------------------------------------- -// -// ACES image file I/O. -// -//----------------------------------------------------------------------------- - -#include -#include -#include -#include -#include - -using namespace std; -using namespace IMATH_NAMESPACE; -using namespace IEX_NAMESPACE; -#include "ImfNamespace.h" - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_ENTER - - -const Chromaticities & -acesChromaticities () -{ - static const Chromaticities acesChr - (V2f (0.73470, 0.26530), // red - V2f (0.00000, 1.00000), // green - V2f (0.00010, -0.07700), // blue - V2f (0.32168, 0.33767)); // white - - return acesChr; -} - - -class AcesOutputFile::Data -{ - public: - - Data(); - ~Data(); - - RgbaOutputFile * rgbaFile; -}; - - -AcesOutputFile::Data::Data (): - rgbaFile (0) -{ - // empty -} - - -AcesOutputFile::Data::~Data () -{ - delete rgbaFile; -} - - -namespace { - -void -checkCompression (Compression compression) -{ - // - // Not all compression methods are allowed in ACES files. - // - - switch (compression) - { - case NO_COMPRESSION: - case PIZ_COMPRESSION: - case B44A_COMPRESSION: - break; - - default: - throw ArgExc ("Invalid compression type for ACES file."); - } -} - -} // namespace - - -AcesOutputFile::AcesOutputFile - (const std::string &name, - const Header &header, - RgbaChannels rgbaChannels, - int numThreads) -: - _data (new Data) -{ - checkCompression (header.compression()); - - Header newHeader = header; - addChromaticities (newHeader, acesChromaticities()); - addAdoptedNeutral (newHeader, acesChromaticities().white); - - _data->rgbaFile = new RgbaOutputFile (name.c_str(), - newHeader, - rgbaChannels, - numThreads); - - _data->rgbaFile->setYCRounding (7, 6); -} - - -AcesOutputFile::AcesOutputFile - (OPENEXR_IMF_INTERNAL_NAMESPACE::OStream &os, - const Header &header, - RgbaChannels rgbaChannels, - int numThreads) -: - _data (new Data) -{ - checkCompression (header.compression()); - - Header newHeader = header; - addChromaticities (newHeader, acesChromaticities()); - addAdoptedNeutral (newHeader, acesChromaticities().white); - - _data->rgbaFile = new RgbaOutputFile (os, - header, - rgbaChannels, - numThreads); - - _data->rgbaFile->setYCRounding (7, 6); -} - - -AcesOutputFile::AcesOutputFile - (const std::string &name, - const IMATH_NAMESPACE::Box2i &displayWindow, - const IMATH_NAMESPACE::Box2i &dataWindow, - RgbaChannels rgbaChannels, - float pixelAspectRatio, - const IMATH_NAMESPACE::V2f screenWindowCenter, - float screenWindowWidth, - LineOrder lineOrder, - Compression compression, - int numThreads) -: - _data (new Data) -{ - checkCompression (compression); - - Header newHeader (displayWindow, - dataWindow.isEmpty()? displayWindow: dataWindow, - pixelAspectRatio, - screenWindowCenter, - screenWindowWidth, - lineOrder, - compression); - - addChromaticities (newHeader, acesChromaticities()); - addAdoptedNeutral (newHeader, acesChromaticities().white); - - _data->rgbaFile = new RgbaOutputFile (name.c_str(), - newHeader, - rgbaChannels, - numThreads); - - _data->rgbaFile->setYCRounding (7, 6); -} - - -AcesOutputFile::AcesOutputFile - (const std::string &name, - int width, - int height, - RgbaChannels rgbaChannels, - float pixelAspectRatio, - const IMATH_NAMESPACE::V2f screenWindowCenter, - float screenWindowWidth, - LineOrder lineOrder, - Compression compression, - int numThreads) -: - _data (new Data) -{ - checkCompression (compression); - - Header newHeader (width, - height, - pixelAspectRatio, - screenWindowCenter, - screenWindowWidth, - lineOrder, - compression); - - addChromaticities (newHeader, acesChromaticities()); - addAdoptedNeutral (newHeader, acesChromaticities().white); - - _data->rgbaFile = new RgbaOutputFile (name.c_str(), - newHeader, - rgbaChannels, - numThreads); - - _data->rgbaFile->setYCRounding (7, 6); -} - - -AcesOutputFile::~AcesOutputFile () -{ - delete _data; -} - - -void -AcesOutputFile::setFrameBuffer - (const Rgba *base, - size_t xStride, - size_t yStride) -{ - _data->rgbaFile->setFrameBuffer (base, xStride, yStride); -} - - -void -AcesOutputFile::writePixels (int numScanLines) -{ - _data->rgbaFile->writePixels (numScanLines); -} - - -int -AcesOutputFile::currentScanLine () const -{ - return _data->rgbaFile->currentScanLine(); -} - - -const Header & -AcesOutputFile::header () const -{ - return _data->rgbaFile->header(); -} - - -const IMATH_NAMESPACE::Box2i & -AcesOutputFile::displayWindow () const -{ - return _data->rgbaFile->displayWindow(); -} - - -const IMATH_NAMESPACE::Box2i & -AcesOutputFile::dataWindow () const -{ - return _data->rgbaFile->dataWindow(); -} - - -float -AcesOutputFile::pixelAspectRatio () const -{ - return _data->rgbaFile->pixelAspectRatio(); -} - - -const IMATH_NAMESPACE::V2f -AcesOutputFile::screenWindowCenter () const -{ - return _data->rgbaFile->screenWindowCenter(); -} - - -float -AcesOutputFile::screenWindowWidth () const -{ - return _data->rgbaFile->screenWindowWidth(); -} - - -LineOrder -AcesOutputFile::lineOrder () const -{ - return _data->rgbaFile->lineOrder(); -} - - -Compression -AcesOutputFile::compression () const -{ - return _data->rgbaFile->compression(); -} - - -RgbaChannels -AcesOutputFile::channels () const -{ - return _data->rgbaFile->channels(); -} - - -void -AcesOutputFile::updatePreviewImage (const PreviewRgba pixels[]) -{ - _data->rgbaFile->updatePreviewImage (pixels); -} - - -class AcesInputFile::Data -{ - public: - - Data(); - ~Data(); - - void initColorConversion (); - - RgbaInputFile * rgbaFile; - - Rgba * fbBase; - size_t fbXStride; - size_t fbYStride; - int minX; - int maxX; - - bool mustConvertColor; - M44f fileToAces; -}; - - -AcesInputFile::Data::Data (): - rgbaFile (0), - fbBase (0), - fbXStride (0), - fbYStride (0), - minX (0), - maxX (0), - mustConvertColor (false) -{ - // empty -} - - -AcesInputFile::Data::~Data () -{ - delete rgbaFile; -} - - -void -AcesInputFile::Data::initColorConversion () -{ - const Header &header = rgbaFile->header(); - - Chromaticities fileChr; - - if (hasChromaticities (header)) - fileChr = chromaticities (header); - - V2f fileNeutral = fileChr.white; - - if (hasAdoptedNeutral (header)) - fileNeutral = adoptedNeutral (header); - - const Chromaticities acesChr = acesChromaticities(); - - V2f acesNeutral = acesChr.white; - - if (fileChr.red == acesChr.red && - fileChr.green == acesChr.green && - fileChr.blue == acesChr.blue && - fileChr.white == acesChr.white && - fileNeutral == acesNeutral) - { - // - // The file already contains ACES data, - // color conversion is not necessary. - - return; - } - - mustConvertColor = true; - minX = header.dataWindow().min.x; - maxX = header.dataWindow().max.x; - - // - // Create a matrix that transforms colors from the - // RGB space of the input file into the ACES space - // using a color adaptation transform to move the - // white point. - // - - // - // We'll need the Bradford cone primary matrix and its inverse - // - - static const M44f bradfordCPM - (0.895100, -0.750200, 0.038900, 0.000000, - 0.266400, 1.713500, -0.068500, 0.000000, - -0.161400, 0.036700, 1.029600, 0.000000, - 0.000000, 0.000000, 0.000000, 1.000000); - - const static M44f inverseBradfordCPM - (0.986993, 0.432305, -0.008529, 0.000000, - -0.147054, 0.518360, 0.040043, 0.000000, - 0.159963, 0.049291, 0.968487, 0.000000, - 0.000000, 0.000000, 0.000000, 1.000000); - - // - // Convert the white points of the two RGB spaces to XYZ - // - - float fx = fileNeutral.x; - float fy = fileNeutral.y; - V3f fileNeutralXYZ (fx / fy, 1, (1 - fx - fy) / fy); - - float ax = acesNeutral.x; - float ay = acesNeutral.y; - V3f acesNeutralXYZ (ax / ay, 1, (1 - ax - ay) / ay); - - // - // Compute the Bradford transformation matrix - // - - V3f ratio ((acesNeutralXYZ * bradfordCPM) / - (fileNeutralXYZ * bradfordCPM)); - - M44f ratioMat (ratio[0], 0, 0, 0, - 0, ratio[1], 0, 0, - 0, 0, ratio[2], 0, - 0, 0, 0, 1); - - M44f bradfordTrans = bradfordCPM * - ratioMat * - inverseBradfordCPM; - - // - // Build a combined file-RGB-to-ACES-RGB conversion matrix - // - - fileToAces = RGBtoXYZ (fileChr, 1) * bradfordTrans * XYZtoRGB (acesChr, 1); -} - - -AcesInputFile::AcesInputFile (const std::string &name, int numThreads): - _data (new Data) -{ - _data->rgbaFile = new RgbaInputFile (name.c_str(), numThreads); - _data->initColorConversion(); -} - - -AcesInputFile::AcesInputFile (IStream &is, int numThreads): - _data (new Data) -{ - _data->rgbaFile = new RgbaInputFile (is, numThreads); - _data->initColorConversion(); -} - - -AcesInputFile::~AcesInputFile () -{ - delete _data; -} - - -void -AcesInputFile::setFrameBuffer (Rgba *base, size_t xStride, size_t yStride) -{ - _data->rgbaFile->setFrameBuffer (base, xStride, yStride); - _data->fbBase = base; - _data->fbXStride = xStride; - _data->fbYStride = yStride; -} - - -void -AcesInputFile::readPixels (int scanLine1, int scanLine2) -{ - // - // Copy the pixels from the RgbaInputFile into the frame buffer. - // - - _data->rgbaFile->readPixels (scanLine1, scanLine2); - - // - // If the RGB space of the input file is not the same as the ACES - // RGB space, then the pixels in the frame buffer must be transformed - // into the ACES RGB space. - // - - if (!_data->mustConvertColor) - return; - - int minY = min (scanLine1, scanLine2); - int maxY = max (scanLine1, scanLine2); - - for (int y = minY; y <= maxY; ++y) - { - Rgba *base = _data->fbBase + - _data->fbXStride * _data->minX + - _data->fbYStride * y; - - for (int x = _data->minX; x <= _data->maxX; ++x) - { - V3f aces = V3f (base->r, base->g, base->b) * _data->fileToAces; - - base->r = aces[0]; - base->g = aces[1]; - base->b = aces[2]; - - base += _data->fbXStride; - } - } -} - - -void -AcesInputFile::readPixels (int scanLine) -{ - readPixels (scanLine, scanLine); -} - - -const Header & -AcesInputFile::header () const -{ - return _data->rgbaFile->header(); -} - - -const IMATH_NAMESPACE::Box2i & -AcesInputFile::displayWindow () const -{ - return _data->rgbaFile->displayWindow(); -} - - -const IMATH_NAMESPACE::Box2i & -AcesInputFile::dataWindow () const -{ - return _data->rgbaFile->dataWindow(); -} - - -float -AcesInputFile::pixelAspectRatio () const -{ - return _data->rgbaFile->pixelAspectRatio(); -} - - -const IMATH_NAMESPACE::V2f -AcesInputFile::screenWindowCenter () const -{ - return _data->rgbaFile->screenWindowCenter(); -} - - -float -AcesInputFile::screenWindowWidth () const -{ - return _data->rgbaFile->screenWindowWidth(); -} - - -LineOrder -AcesInputFile::lineOrder () const -{ - return _data->rgbaFile->lineOrder(); -} - - -Compression -AcesInputFile::compression () const -{ - return _data->rgbaFile->compression(); -} - - -RgbaChannels -AcesInputFile::channels () const -{ - return _data->rgbaFile->channels(); -} - - -const char * -AcesInputFile::fileName () const -{ - return _data->rgbaFile->fileName(); -} - - -bool -AcesInputFile::isComplete () const -{ - return _data->rgbaFile->isComplete(); -} - - -int -AcesInputFile::version () const -{ - return _data->rgbaFile->version(); -} - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_EXIT diff --git a/3rdparty/openexr/IlmImf/ImfAcesFile.h b/3rdparty/openexr/IlmImf/ImfAcesFile.h deleted file mode 100644 index f8e9323598..0000000000 --- a/3rdparty/openexr/IlmImf/ImfAcesFile.h +++ /dev/null @@ -1,358 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2007, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - - -#ifndef INCLUDED_IMF_ACES_FILE_H -#define INCLUDED_IMF_ACES_FILE_H - - -//----------------------------------------------------------------------------- -// -// ACES image file I/O. -// -// This header file declares two classes that directly support -// image file input and output according to the Academy Image -// Interchange Framework. -// -// The Academy Image Interchange file format is a subset of OpenEXR: -// -// - Images are stored as scanlines. Tiles are not allowed. -// -// - Images contain three color channels, either -// R, G, B (red, green, blue) or -// Y, RY, BY (luminance, sub-sampled chroma) -// -// - Images may optionally contain an alpha channel. -// -// - Only three compression types are allowed: -// - NO_COMPRESSION (file is not compressed) -// - PIZ_COMPRESSION (lossless) -// - B44A_COMPRESSION (lossy) -// -// - The "chromaticities" header attribute must specify -// the ACES RGB primaries and white point. -// -// class AcesOutputFile writes an OpenEXR file, enforcing the -// restrictions listed above. Pixel data supplied by application -// software must already be in the ACES RGB space. -// -// class AcesInputFile reads an OpenEXR file. Pixel data delivered -// to application software is guaranteed to be in the ACES RGB space. -// If the RGB space of the file is not the same as the ACES space, -// then the pixels are automatically converted: the pixels are -// converted to CIE XYZ, a color adaptation transform shifts the -// white point, and the result is converted to ACES RGB. -// -//----------------------------------------------------------------------------- - -#include "ImfHeader.h" -#include "ImfRgba.h" -#include "ImathVec.h" -#include "ImathBox.h" -#include "ImfThreading.h" -#include "ImfNamespace.h" -#include "ImfExport.h" -#include "ImfForward.h" - -#include - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER - - -// -// ACES red, green, blue and white-point chromaticities. -// - -const Chromaticities & acesChromaticities (); - - -// -// ACES output file. -// - -class AcesOutputFile -{ - public: - - //--------------------------------------------------- - // Constructor -- header is constructed by the caller - //--------------------------------------------------- - - IMF_EXPORT - AcesOutputFile (const std::string &name, - const Header &header, - RgbaChannels rgbaChannels = WRITE_RGBA, - int numThreads = globalThreadCount()); - - - //---------------------------------------------------- - // Constructor -- header is constructed by the caller, - // file is opened by the caller, destructor will not - // automatically close the file. - //---------------------------------------------------- - - IMF_EXPORT - AcesOutputFile (OPENEXR_IMF_INTERNAL_NAMESPACE::OStream &os, - const Header &header, - RgbaChannels rgbaChannels = WRITE_RGBA, - int numThreads = globalThreadCount()); - - - //---------------------------------------------------------------- - // Constructor -- header data are explicitly specified as function - // call arguments (empty dataWindow means "same as displayWindow") - //---------------------------------------------------------------- - - IMF_EXPORT - AcesOutputFile (const std::string &name, - const IMATH_NAMESPACE::Box2i &displayWindow, - const IMATH_NAMESPACE::Box2i &dataWindow = IMATH_NAMESPACE::Box2i(), - RgbaChannels rgbaChannels = WRITE_RGBA, - float pixelAspectRatio = 1, - const IMATH_NAMESPACE::V2f screenWindowCenter = IMATH_NAMESPACE::V2f (0, 0), - float screenWindowWidth = 1, - LineOrder lineOrder = INCREASING_Y, - Compression compression = PIZ_COMPRESSION, - int numThreads = globalThreadCount()); - - - //----------------------------------------------- - // Constructor -- like the previous one, but both - // the display window and the data window are - // Box2i (V2i (0, 0), V2i (width - 1, height -1)) - //----------------------------------------------- - - IMF_EXPORT - AcesOutputFile (const std::string &name, - int width, - int height, - RgbaChannels rgbaChannels = WRITE_RGBA, - float pixelAspectRatio = 1, - const IMATH_NAMESPACE::V2f screenWindowCenter = IMATH_NAMESPACE::V2f (0, 0), - float screenWindowWidth = 1, - LineOrder lineOrder = INCREASING_Y, - Compression compression = PIZ_COMPRESSION, - int numThreads = globalThreadCount()); - - - //----------- - // Destructor - //----------- - - IMF_EXPORT - virtual ~AcesOutputFile (); - - - //------------------------------------------------ - // Define a frame buffer as the pixel data source: - // Pixel (x, y) is at address - // - // base + x * xStride + y * yStride - // - //------------------------------------------------ - - IMF_EXPORT - void setFrameBuffer (const Rgba *base, - size_t xStride, - size_t yStride); - - - //------------------------------------------------- - // Write pixel data (see class Imf::OutputFile) - // The pixels are assumed to contain ACES RGB data. - //------------------------------------------------- - - void writePixels (int numScanLines = 1); - int currentScanLine () const; - - - //-------------------------- - // Access to the file header - //-------------------------- - - IMF_EXPORT - const Header & header () const; - IMF_EXPORT - const IMATH_NAMESPACE::Box2i & displayWindow () const; - IMF_EXPORT - const IMATH_NAMESPACE::Box2i & dataWindow () const; - IMF_EXPORT - float pixelAspectRatio () const; - IMF_EXPORT - const IMATH_NAMESPACE::V2f screenWindowCenter () const; - IMF_EXPORT - float screenWindowWidth () const; - IMF_EXPORT - LineOrder lineOrder () const; - IMF_EXPORT - Compression compression () const; - IMF_EXPORT - RgbaChannels channels () const; - - - // -------------------------------------------------------------------- - // Update the preview image (see Imf::OutputFile::updatePreviewImage()) - // -------------------------------------------------------------------- - - IMF_EXPORT - void updatePreviewImage (const PreviewRgba[]); - - - private: - - AcesOutputFile (const AcesOutputFile &); // not implemented - AcesOutputFile & operator = (const AcesOutputFile &); // not implemented - - class Data; - - Data * _data; -}; - - -// -// ACES input file -// - -class AcesInputFile -{ - public: - - //------------------------------------------------------- - // Constructor -- opens the file with the specified name, - // destructor will automatically close the file. - //------------------------------------------------------- - - IMF_EXPORT - AcesInputFile (const std::string &name, - int numThreads = globalThreadCount()); - - - //----------------------------------------------------------- - // Constructor -- attaches the new AcesInputFile object to a - // file that has already been opened by the caller. - // Destroying the AcesInputFile object will not automatically - // close the file. - //----------------------------------------------------------- - - IMF_EXPORT - AcesInputFile (OPENEXR_IMF_INTERNAL_NAMESPACE::IStream &is, - int numThreads = globalThreadCount()); - - - //----------- - // Destructor - //----------- - - IMF_EXPORT - virtual ~AcesInputFile (); - - - //----------------------------------------------------- - // Define a frame buffer as the pixel data destination: - // Pixel (x, y) is at address - // - // base + x * xStride + y * yStride - // - //----------------------------------------------------- - - IMF_EXPORT - void setFrameBuffer (Rgba *base, - size_t xStride, - size_t yStride); - - - //-------------------------------------------- - // Read pixel data (see class Imf::InputFile) - // Pixels returned will contain ACES RGB data. - //-------------------------------------------- - - IMF_EXPORT - void readPixels (int scanLine1, int scanLine2); - IMF_EXPORT - void readPixels (int scanLine); - - - //-------------------------- - // Access to the file header - //-------------------------- - - IMF_EXPORT - const Header & header () const; - IMF_EXPORT - const IMATH_NAMESPACE::Box2i & displayWindow () const; - IMF_EXPORT - const IMATH_NAMESPACE::Box2i & dataWindow () const; - IMF_EXPORT - float pixelAspectRatio () const; - IMF_EXPORT - const IMATH_NAMESPACE::V2f screenWindowCenter () const; - IMF_EXPORT - float screenWindowWidth () const; - IMF_EXPORT - LineOrder lineOrder () const; - IMF_EXPORT - Compression compression () const; - IMF_EXPORT - RgbaChannels channels () const; - IMF_EXPORT - const char * fileName () const; - IMF_EXPORT - bool isComplete () const; - - - //---------------------------------- - // Access to the file format version - //---------------------------------- - - IMF_EXPORT - int version () const; - - private: - - AcesInputFile (const AcesInputFile &); // not implemented - AcesInputFile & operator = (const AcesInputFile &); // not implemented - - class Data; - - Data * _data; -}; - - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT - - - - -#endif diff --git a/3rdparty/openexr/IlmImf/ImfArray.h b/3rdparty/openexr/IlmImf/ImfArray.h deleted file mode 100644 index 6a80d8fbad..0000000000 --- a/3rdparty/openexr/IlmImf/ImfArray.h +++ /dev/null @@ -1,285 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - - -#ifndef INCLUDED_IMF_ARRAY_H -#define INCLUDED_IMF_ARRAY_H - -#include "ImfForward.h" - -//------------------------------------------------------------------------- -// -// class Array -// class Array2D -// -// "Arrays of T" whose sizes are not known at compile time. -// When an array goes out of scope, its elements are automatically -// deleted. -// -// Usage example: -// -// struct C -// { -// C () {std::cout << "C::C (" << this << ")\n";}; -// virtual ~C () {std::cout << "C::~C (" << this << ")\n";}; -// }; -// -// int -// main () -// { -// Array a(3); -// -// C &b = a[1]; -// const C &c = a[1]; -// C *d = a + 2; -// const C *e = a; -// -// return 0; -// } -// -//------------------------------------------------------------------------- - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER - -template -class Array -{ - public: - - //----------------------------- - // Constructors and destructors - //----------------------------- - - Array () {_data = 0; _size = 0;} - Array (long size) {_data = new T[size]; _size = size;} - ~Array () {delete [] _data;} - - - //----------------------------- - // Access to the array elements - //----------------------------- - - operator T * () {return _data;} - operator const T * () const {return _data;} - - - //------------------------------------------------------ - // Resize and clear the array (the contents of the array - // are not preserved across the resize operation). - // - // resizeEraseUnsafe() is more memory efficient than - // resizeErase() because it deletes the old memory block - // before allocating a new one, but if allocating the - // new block throws an exception, resizeEraseUnsafe() - // leaves the array in an unusable state. - // - //------------------------------------------------------ - - void resizeErase (long size); - void resizeEraseUnsafe (long size); - - - //------------------------------- - // Return the size of this array. - //------------------------------- - - long size() const {return _size;} - - - private: - - Array (const Array &); // Copying and assignment - Array & operator = (const Array &); // are not implemented - - long _size; - T * _data; -}; - - -template -class Array2D -{ - public: - - //----------------------------- - // Constructors and destructors - //----------------------------- - - Array2D (); // empty array, 0 by 0 elements - Array2D (long sizeX, long sizeY); // sizeX by sizeY elements - ~Array2D (); - - - //----------------------------- - // Access to the array elements - //----------------------------- - - T * operator [] (long x); - const T * operator [] (long x) const; - - - //------------------------------------------------------ - // Resize and clear the array (the contents of the array - // are not preserved across the resize operation). - // - // resizeEraseUnsafe() is more memory efficient than - // resizeErase() because it deletes the old memory block - // before allocating a new one, but if allocating the - // new block throws an exception, resizeEraseUnsafe() - // leaves the array in an unusable state. - // - //------------------------------------------------------ - - void resizeErase (long sizeX, long sizeY); - void resizeEraseUnsafe (long sizeX, long sizeY); - - - //------------------------------- - // Return the size of this array. - //------------------------------- - - long height() const {return _sizeX;} - long width() const {return _sizeY;} - - - private: - - Array2D (const Array2D &); // Copying and assignment - Array2D & operator = (const Array2D &); // are not implemented - - long _sizeX; - long _sizeY; - T * _data; -}; - - -//--------------- -// Implementation -//--------------- - -template -inline void -Array::resizeErase (long size) -{ - T *tmp = new T[size]; - delete [] _data; - _size = size; - _data = tmp; -} - - -template -inline void -Array::resizeEraseUnsafe (long size) -{ - delete [] _data; - _data = 0; - _size = 0; - _data = new T[size]; - _size = size; -} - - -template -inline -Array2D::Array2D (): - _sizeX(0), _sizeY (0), _data (0) -{ - // emtpy -} - - -template -inline -Array2D::Array2D (long sizeX, long sizeY): - _sizeX (sizeX), _sizeY (sizeY), _data (new T[sizeX * sizeY]) -{ - // emtpy -} - - -template -inline -Array2D::~Array2D () -{ - delete [] _data; -} - - -template -inline T * -Array2D::operator [] (long x) -{ - return _data + x * _sizeY; -} - - -template -inline const T * -Array2D::operator [] (long x) const -{ - return _data + x * _sizeY; -} - - -template -inline void -Array2D::resizeErase (long sizeX, long sizeY) -{ - T *tmp = new T[sizeX * sizeY]; - delete [] _data; - _sizeX = sizeX; - _sizeY = sizeY; - _data = tmp; -} - - -template -inline void -Array2D::resizeEraseUnsafe (long sizeX, long sizeY) -{ - delete [] _data; - _data = 0; - _sizeX = 0; - _sizeY = 0; - _data = new T[sizeX * sizeY]; - _sizeX = sizeX; - _sizeY = sizeY; -} - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT - - -#endif diff --git a/3rdparty/openexr/IlmImf/ImfAttribute.cpp b/3rdparty/openexr/IlmImf/ImfAttribute.cpp deleted file mode 100644 index 02738c2679..0000000000 --- a/3rdparty/openexr/IlmImf/ImfAttribute.cpp +++ /dev/null @@ -1,164 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - - -//----------------------------------------------------------------------------- -// -// class Attribute -// -//----------------------------------------------------------------------------- - -#include -#include "IlmThreadMutex.h" -#include "Iex.h" -#include -#include - -#include "ImfNamespace.h" - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_ENTER - - -using ILMTHREAD_NAMESPACE::Mutex; -using ILMTHREAD_NAMESPACE::Lock; - - -Attribute::Attribute () {} - - -Attribute::~Attribute () {} - - -namespace { - -struct NameCompare -{ - bool - operator () (const char *x, const char *y) const - { - return strcmp (x, y) < 0; - } -}; - - -typedef Attribute* (*Constructor)(); -typedef std::map TypeMap; - - -class LockedTypeMap: public TypeMap -{ - public: - - Mutex mutex; -}; - - -LockedTypeMap & -typeMap () -{ - // c++11 requires thread-safe static variable initialization -#if __cplusplus >= 201103L - static LockedTypeMap tMap; - return tMap; -#else - static Mutex criticalSection; - Lock lock (criticalSection); - - static LockedTypeMap* typeMap = 0; - - if (typeMap == 0) - typeMap = new LockedTypeMap (); - - return *typeMap; -#endif -} - - -} // namespace - - -bool -Attribute::knownType (const char typeName[]) -{ - LockedTypeMap& tMap = typeMap(); - Lock lock (tMap.mutex); - - return tMap.find (typeName) != tMap.end(); -} - - -void -Attribute::registerAttributeType (const char typeName[], - Attribute *(*newAttribute)()) -{ - LockedTypeMap& tMap = typeMap(); - Lock lock (tMap.mutex); - - if (tMap.find (typeName) != tMap.end()) - THROW (IEX_NAMESPACE::ArgExc, "Cannot register image file attribute " - "type \"" << typeName << "\". " - "The type has already been registered."); - - tMap.insert (TypeMap::value_type (typeName, newAttribute)); -} - - -void -Attribute::unRegisterAttributeType (const char typeName[]) -{ - LockedTypeMap& tMap = typeMap(); - Lock lock (tMap.mutex); - - tMap.erase (typeName); -} - - -Attribute * -Attribute::newAttribute (const char typeName[]) -{ - LockedTypeMap& tMap = typeMap(); - Lock lock (tMap.mutex); - - TypeMap::const_iterator i = tMap.find (typeName); - - if (i == tMap.end()) - THROW (IEX_NAMESPACE::ArgExc, "Cannot create image file attribute of " - "unknown type \"" << typeName << "\"."); - - return (i->second)(); -} - - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_EXIT diff --git a/3rdparty/openexr/IlmImf/ImfAttribute.h b/3rdparty/openexr/IlmImf/ImfAttribute.h deleted file mode 100644 index b39ce788c8..0000000000 --- a/3rdparty/openexr/IlmImf/ImfAttribute.h +++ /dev/null @@ -1,413 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - - -#ifndef INCLUDED_IMF_ATTRIBUTE_H -#define INCLUDED_IMF_ATTRIBUTE_H - -//----------------------------------------------------------------------------- -// -// class Attribute -// -//----------------------------------------------------------------------------- - -#include "IexBaseExc.h" -#include "ImfIO.h" -#include "ImfXdr.h" -#include "ImfForward.h" -#include "ImfExport.h" -#include "ImfNamespace.h" - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER - - -class Attribute -{ - public: - - //--------------------------- - // Constructor and destructor - //--------------------------- - - IMF_EXPORT - Attribute (); - IMF_EXPORT - virtual ~Attribute (); - - - //------------------------------- - // Get this attribute's type name - //------------------------------- - - virtual const char * typeName () const = 0; - - - //------------------------------ - // Make a copy of this attribute - //------------------------------ - - virtual Attribute * copy () const = 0; - - - //---------------------------------------- - // Type-specific attribute I/O and copying - //---------------------------------------- - - virtual void writeValueTo (OPENEXR_IMF_INTERNAL_NAMESPACE::OStream &os, - int version) const = 0; - - virtual void readValueFrom (OPENEXR_IMF_INTERNAL_NAMESPACE::IStream &is, - int size, - int version) = 0; - - virtual void copyValueFrom (const Attribute &other) = 0; - - - //------------------ - // Attribute factory - //------------------ - - IMF_EXPORT - static Attribute * newAttribute (const char typeName[]); - - - //----------------------------------------------------------- - // Test if a given attribute type has already been registered - //----------------------------------------------------------- - - IMF_EXPORT - static bool knownType (const char typeName[]); - - - protected: - - //-------------------------------------------------- - // Register an attribute type so that newAttribute() - // knows how to make objects of this type. - //-------------------------------------------------- - - IMF_EXPORT - static void registerAttributeType (const char typeName[], - Attribute *(*newAttribute)()); - - //------------------------------------------------------ - // Un-register an attribute type so that newAttribute() - // no longer knows how to make objects of this type (for - // debugging only). - //------------------------------------------------------ - - IMF_EXPORT - static void unRegisterAttributeType (const char typeName[]); -}; - - -//------------------------------------------------- -// Class template for attributes of a specific type -//------------------------------------------------- - -template -class TypedAttribute: public Attribute -{ - public: - - //---------------------------- - // Constructors and destructor - //------------_--------------- - - TypedAttribute (); - TypedAttribute (const T &value); - TypedAttribute (const TypedAttribute &other); - virtual ~TypedAttribute (); - - - //-------------------------------- - // Access to the attribute's value - //-------------------------------- - - T & value (); - const T & value () const; - - - //-------------------------------- - // Get this attribute's type name. - //-------------------------------- - - virtual const char * typeName () const; - - - //--------------------------------------------------------- - // Static version of typeName() - // This function must be specialized for each value type T. - //--------------------------------------------------------- - - static const char * staticTypeName (); - - - //--------------------- - // Make a new attribute - //--------------------- - - static Attribute * makeNewAttribute (); - - - //------------------------------ - // Make a copy of this attribute - //------------------------------ - - virtual Attribute * copy () const; - - - //----------------------------------------------------------------- - // Type-specific attribute I/O and copying. - // Depending on type T, these functions may have to be specialized. - //----------------------------------------------------------------- - - virtual void writeValueTo (OPENEXR_IMF_INTERNAL_NAMESPACE::OStream &os, - int version) const; - - virtual void readValueFrom (OPENEXR_IMF_INTERNAL_NAMESPACE::IStream &is, - int size, - int version); - - virtual void copyValueFrom (const Attribute &other); - - - //------------------------------------------------------------ - // Dynamic casts that throw exceptions instead of returning 0. - //------------------------------------------------------------ - - static TypedAttribute * cast (Attribute *attribute); - static const TypedAttribute * cast (const Attribute *attribute); - static TypedAttribute & cast (Attribute &attribute); - static const TypedAttribute & cast (const Attribute &attribute); - - - //--------------------------------------------------------------- - // Register this attribute type so that Attribute::newAttribute() - // knows how to make objects of this type. - // - // Note that this function is not thread-safe because it modifies - // a global variable in the IlmIlm library. A thread in a multi- - // threaded program may call registerAttributeType() only when no - // other thread is accessing any functions or classes in the - // IlmImf library. - // - //--------------------------------------------------------------- - - static void registerAttributeType (); - - - //----------------------------------------------------- - // Un-register this attribute type (for debugging only) - //----------------------------------------------------- - - static void unRegisterAttributeType (); - - - private: - - T _value; -}; - -//------------------------------------ -// Implementation of TypedAttribute -//------------------------------------ -template -TypedAttribute::TypedAttribute (): - Attribute (), - _value (T()) -{ - // empty -} - - -template -TypedAttribute::TypedAttribute (const T & value): - Attribute (), - _value (value) -{ - // empty -} - - -template -TypedAttribute::TypedAttribute (const TypedAttribute &other): - Attribute (other), - _value () -{ - copyValueFrom (other); -} - - -template -TypedAttribute::~TypedAttribute () -{ - // empty -} - - -template -inline T & -TypedAttribute::value () -{ - return _value; -} - - -template -inline const T & -TypedAttribute::value () const -{ - return _value; -} - - -template -const char * -TypedAttribute::typeName () const -{ - return staticTypeName(); -} - - -template -Attribute * -TypedAttribute::makeNewAttribute () -{ - return new TypedAttribute(); -} - - -template -Attribute * -TypedAttribute::copy () const -{ - Attribute * attribute = new TypedAttribute(); - attribute->copyValueFrom (*this); - return attribute; -} - - -template -void -TypedAttribute::writeValueTo (OPENEXR_IMF_INTERNAL_NAMESPACE::OStream &os, - int version) const -{ - OPENEXR_IMF_INTERNAL_NAMESPACE::Xdr::write (os, _value); -} - - -template -void -TypedAttribute::readValueFrom (OPENEXR_IMF_INTERNAL_NAMESPACE::IStream &is, - int size, - int version) -{ - OPENEXR_IMF_INTERNAL_NAMESPACE::Xdr::read (is, _value); -} - - -template -void -TypedAttribute::copyValueFrom (const Attribute &other) -{ - _value = cast(other)._value; -} - - -template -TypedAttribute * -TypedAttribute::cast (Attribute *attribute) -{ - TypedAttribute *t = - dynamic_cast *> (attribute); - - if (t == 0) - throw IEX_NAMESPACE::TypeExc ("Unexpected attribute type."); - - return t; -} - - -template -const TypedAttribute * -TypedAttribute::cast (const Attribute *attribute) -{ - const TypedAttribute *t = - dynamic_cast *> (attribute); - - if (t == 0) - throw IEX_NAMESPACE::TypeExc ("Unexpected attribute type."); - - return t; -} - - -template -inline TypedAttribute & -TypedAttribute::cast (Attribute &attribute) -{ - return *cast (&attribute); -} - - -template -inline const TypedAttribute & -TypedAttribute::cast (const Attribute &attribute) -{ - return *cast (&attribute); -} - - -template -inline void -TypedAttribute::registerAttributeType () -{ - Attribute::registerAttributeType (staticTypeName(), makeNewAttribute); -} - - -template -inline void -TypedAttribute::unRegisterAttributeType () -{ - Attribute::unRegisterAttributeType (staticTypeName()); -} - - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT - - -#endif diff --git a/3rdparty/openexr/IlmImf/ImfAutoArray.h b/3rdparty/openexr/IlmImf/ImfAutoArray.h deleted file mode 100644 index c1ecaff14c..0000000000 --- a/3rdparty/openexr/IlmImf/ImfAutoArray.h +++ /dev/null @@ -1,95 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - - -#ifndef INCLUDED_IMF_AUTO_ARRAY_H -#define INCLUDED_IMF_AUTO_ARRAY_H - -//----------------------------------------------------------------------------- -// -// class AutoArray -- a workaround for systems with -// insufficient stack space for large auto arrays. -// -//----------------------------------------------------------------------------- - -#include "ImfNamespace.h" -#include - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER - - -#if !defined (HAVE_LARGE_STACK) - - - template - class AutoArray - { - public: - - AutoArray (): _data (new T [size]) { memset(_data, 0, size*sizeof(T)); } - ~AutoArray () {delete [] _data;} - - operator T * () {return _data;} - operator const T * () const {return _data;} - - private: - - T *_data; - }; - - -#else - - - template - class AutoArray - { - public: - - operator T * () {return _data;} - operator const T * () const {return _data;} - - private: - - T _data[size]; - }; - - -#endif - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT - - -#endif diff --git a/3rdparty/openexr/IlmImf/ImfB44Compressor.cpp b/3rdparty/openexr/IlmImf/ImfB44Compressor.cpp deleted file mode 100644 index f13e143f52..0000000000 --- a/3rdparty/openexr/IlmImf/ImfB44Compressor.cpp +++ /dev/null @@ -1,1072 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2006, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - -//----------------------------------------------------------------------------- -// -// class B44Compressor -// -// This compressor is lossy for HALF channels; the compression rate -// is fixed at 32/14 (approximately 2.28). FLOAT and UINT channels -// are not compressed; their data are preserved exactly. -// -// Each HALF channel is split into blocks of 4 by 4 pixels. An -// uncompressed block occupies 32 bytes, which are re-interpreted -// as sixteen 16-bit unsigned integers, t[0] ... t[15]. Compression -// shrinks the block to 14 bytes. The compressed 14-byte block -// contains -// -// - t[0] -// -// - a 6-bit shift value -// -// - 15 densely packed 6-bit values, r[0] ... r[14], which are -// computed by subtracting adjacent pixel values and right- -// shifting the differences according to the stored shift value. -// -// Differences between adjacent pixels are computed according -// to the following diagram: -// -// 0 --------> 1 --------> 2 --------> 3 -// | 3 7 11 -// | -// | 0 -// | -// v -// 4 --------> 5 --------> 6 --------> 7 -// | 4 8 12 -// | -// | 1 -// | -// v -// 8 --------> 9 --------> 10 --------> 11 -// | 5 9 13 -// | -// | 2 -// | -// v -// 12 --------> 13 --------> 14 --------> 15 -// 6 10 14 -// -// Here -// -// 5 ---------> 6 -// 8 -// -// means that r[8] is the difference between t[5] and t[6]. -// -// - optionally, a 4-by-4 pixel block where all pixels have the -// same value can be treated as a special case, where the -// compressed block contains only 3 instead of 14 bytes: -// t[0], followed by an "impossible" 6-bit shift value and -// two padding bits. -// -// This compressor can handle positive and negative pixel values. -// NaNs and infinities are replaced with zeroes before compression. -// -//----------------------------------------------------------------------------- - -#include "ImfB44Compressor.h" -#include "ImfHeader.h" -#include "ImfChannelList.h" -#include "ImfMisc.h" -#include "ImfCheckedArithmetic.h" -#include -#include -#include -#include -#include -#include -#include -#include -#include "ImfNamespace.h" - - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_ENTER - - -using IMATH_NAMESPACE::divp; -using IMATH_NAMESPACE::modp; -using IMATH_NAMESPACE::Box2i; -using IMATH_NAMESPACE::V2i; -using std::min; - -namespace { - -// -// Lookup tables for -// y = exp (x / 8) -// and -// x = 8 * log (y) -// - -#include "b44ExpLogTable.h" - - -inline void -convertFromLinear (unsigned short s[16]) -{ - for (int i = 0; i < 16; ++i) - s[i] = expTable[s[i]]; -} - - -inline void -convertToLinear (unsigned short s[16]) -{ - for (int i = 0; i < 16; ++i) - s[i] = logTable[s[i]]; -} - - -inline int -shiftAndRound (int x, int shift) -{ - // - // Compute - // - // y = x * pow (2, -shift), - // - // then round y to the nearest integer. - // In case of a tie, where y is exactly - // halfway between two integers, round - // to the even one. - // - - x <<= 1; - int a = (1 << shift) - 1; - shift += 1; - int b = (x >> shift) & 1; - return (x + a + b) >> shift; -} - - -int -pack (const unsigned short s[16], - unsigned char b[14], - bool optFlatFields, - bool exactMax) -{ - // - // Pack a block of 4 by 4 16-bit pixels (32 bytes) into - // either 14 or 3 bytes. - // - - // - // Integers s[0] ... s[15] represent floating-point numbers - // in what is essentially a sign-magnitude format. Convert - // s[0] .. s[15] into a new set of integers, t[0] ... t[15], - // such that if t[i] is greater than t[j], the floating-point - // number that corresponds to s[i] is always greater than - // the floating-point number that corresponds to s[j]. - // - // Also, replace any bit patterns that represent NaNs or - // infinities with bit patterns that represent floating-point - // zeroes. - // - // bit pattern floating-point bit pattern - // in s[i] value in t[i] - // - // 0x7fff NAN 0x8000 - // 0x7ffe NAN 0x8000 - // ... ... - // 0x7c01 NAN 0x8000 - // 0x7c00 +infinity 0x8000 - // 0x7bff +HALF_MAX 0xfbff - // 0x7bfe 0xfbfe - // 0x7bfd 0xfbfd - // ... ... - // 0x0002 +2 * HALF_MIN 0x8002 - // 0x0001 +HALF_MIN 0x8001 - // 0x0000 +0.0 0x8000 - // 0x8000 -0.0 0x7fff - // 0x8001 -HALF_MIN 0x7ffe - // 0x8002 -2 * HALF_MIN 0x7ffd - // ... ... - // 0xfbfd 0x0f02 - // 0xfbfe 0x0401 - // 0xfbff -HALF_MAX 0x0400 - // 0xfc00 -infinity 0x8000 - // 0xfc01 NAN 0x8000 - // ... ... - // 0xfffe NAN 0x8000 - // 0xffff NAN 0x8000 - // - - unsigned short t[16]; - - for (int i = 0; i < 16; ++i) - { - if ((s[i] & 0x7c00) == 0x7c00) - t[i] = 0x8000; - else if (s[i] & 0x8000) - t[i] = ~s[i]; - else - t[i] = s[i] | 0x8000; - } - - // - // Find the maximum, tMax, of t[0] ... t[15]. - // - - unsigned short tMax = 0; - - for (int i = 0; i < 16; ++i) - if (tMax < t[i]) - tMax = t[i]; - - // - // Compute a set of running differences, r[0] ... r[14]: - // Find a shift value such that after rounding off the - // rightmost bits and shifting all differenes are between - // -32 and +31. Then bias the differences so that they - // end up between 0 and 63. - // - - int shift = -1; - int d[16]; - int r[15]; - int rMin; - int rMax; - - const int bias = 0x20; - - do - { - shift += 1; - - // - // Compute absolute differences, d[0] ... d[15], - // between tMax and t[0] ... t[15]. - // - // Shift and round the absolute differences. - // - - for (int i = 0; i < 16; ++i) - d[i] = shiftAndRound (tMax - t[i], shift); - - // - // Convert d[0] .. d[15] into running differences - // - - r[ 0] = d[ 0] - d[ 4] + bias; - r[ 1] = d[ 4] - d[ 8] + bias; - r[ 2] = d[ 8] - d[12] + bias; - - r[ 3] = d[ 0] - d[ 1] + bias; - r[ 4] = d[ 4] - d[ 5] + bias; - r[ 5] = d[ 8] - d[ 9] + bias; - r[ 6] = d[12] - d[13] + bias; - - r[ 7] = d[ 1] - d[ 2] + bias; - r[ 8] = d[ 5] - d[ 6] + bias; - r[ 9] = d[ 9] - d[10] + bias; - r[10] = d[13] - d[14] + bias; - - r[11] = d[ 2] - d[ 3] + bias; - r[12] = d[ 6] - d[ 7] + bias; - r[13] = d[10] - d[11] + bias; - r[14] = d[14] - d[15] + bias; - - rMin = r[0]; - rMax = r[0]; - - for (int i = 1; i < 15; ++i) - { - if (rMin > r[i]) - rMin = r[i]; - - if (rMax < r[i]) - rMax = r[i]; - } - } - while (rMin < 0 || rMax > 0x3f); - - if (rMin == bias && rMax == bias && optFlatFields) - { - // - // Special case - all pixels have the same value. - // We encode this in 3 instead of 14 bytes by - // storing the value 0xfc in the third output byte, - // which cannot occur in the 14-byte encoding. - // - - b[0] = (t[0] >> 8); - b[1] = (unsigned char) t[0]; - b[2] = 0xfc; - - return 3; - } - - if (exactMax) - { - // - // Adjust t[0] so that the pixel whose value is equal - // to tMax gets represented as accurately as possible. - // - - t[0] = tMax - (d[0] << shift); - } - - // - // Pack t[0], shift and r[0] ... r[14] into 14 bytes: - // - - b[ 0] = (t[0] >> 8); - b[ 1] = (unsigned char) t[0]; - - b[ 2] = (unsigned char) ((shift << 2) | (r[ 0] >> 4)); - b[ 3] = (unsigned char) ((r[ 0] << 4) | (r[ 1] >> 2)); - b[ 4] = (unsigned char) ((r[ 1] << 6) | r[ 2] ); - - b[ 5] = (unsigned char) ((r[ 3] << 2) | (r[ 4] >> 4)); - b[ 6] = (unsigned char) ((r[ 4] << 4) | (r[ 5] >> 2)); - b[ 7] = (unsigned char) ((r[ 5] << 6) | r[ 6] ); - - b[ 8] = (unsigned char) ((r[ 7] << 2) | (r[ 8] >> 4)); - b[ 9] = (unsigned char) ((r[ 8] << 4) | (r[ 9] >> 2)); - b[10] = (unsigned char) ((r[ 9] << 6) | r[10] ); - - b[11] = (unsigned char) ((r[11] << 2) | (r[12] >> 4)); - b[12] = (unsigned char) ((r[12] << 4) | (r[13] >> 2)); - b[13] = (unsigned char) ((r[13] << 6) | r[14] ); - - return 14; -} - - -inline -void -unpack14 (const unsigned char b[14], unsigned short s[16]) -{ - // - // Unpack a 14-byte block into 4 by 4 16-bit pixels. - // - - #if defined (DEBUG) - assert (b[2] != 0xfc); - #endif - - s[ 0] = (b[0] << 8) | b[1]; - - unsigned short shift = (b[ 2] >> 2); - unsigned short bias = (0x20 << shift); - - s[ 4] = s[ 0] + ((((b[ 2] << 4) | (b[ 3] >> 4)) & 0x3f) << shift) - bias; - s[ 8] = s[ 4] + ((((b[ 3] << 2) | (b[ 4] >> 6)) & 0x3f) << shift) - bias; - s[12] = s[ 8] + ((b[ 4] & 0x3f) << shift) - bias; - - s[ 1] = s[ 0] + ((b[ 5] >> 2) << shift) - bias; - s[ 5] = s[ 4] + ((((b[ 5] << 4) | (b[ 6] >> 4)) & 0x3f) << shift) - bias; - s[ 9] = s[ 8] + ((((b[ 6] << 2) | (b[ 7] >> 6)) & 0x3f) << shift) - bias; - s[13] = s[12] + ((b[ 7] & 0x3f) << shift) - bias; - - s[ 2] = s[ 1] + ((b[ 8] >> 2) << shift) - bias; - s[ 6] = s[ 5] + ((((b[ 8] << 4) | (b[ 9] >> 4)) & 0x3f) << shift) - bias; - s[10] = s[ 9] + ((((b[ 9] << 2) | (b[10] >> 6)) & 0x3f) << shift) - bias; - s[14] = s[13] + ((b[10] & 0x3f) << shift) - bias; - - s[ 3] = s[ 2] + ((b[11] >> 2) << shift) - bias; - s[ 7] = s[ 6] + ((((b[11] << 4) | (b[12] >> 4)) & 0x3f) << shift) - bias; - s[11] = s[10] + ((((b[12] << 2) | (b[13] >> 6)) & 0x3f) << shift) - bias; - s[15] = s[14] + ((b[13] & 0x3f) << shift) - bias; - - for (int i = 0; i < 16; ++i) - { - if (s[i] & 0x8000) - s[i] &= 0x7fff; - else - s[i] = ~s[i]; - } -} - - -inline -void -unpack3 (const unsigned char b[3], unsigned short s[16]) -{ - // - // Unpack a 3-byte block into 4 by 4 identical 16-bit pixels. - // - - #if defined (DEBUG) - assert (b[2] == 0xfc); - #endif - - s[0] = (b[0] << 8) | b[1]; - - if (s[0] & 0x8000) - s[0] &= 0x7fff; - else - s[0] = ~s[0]; - - for (int i = 1; i < 16; ++i) - s[i] = s[0]; -} - - -void -notEnoughData () -{ - throw IEX_NAMESPACE::InputExc ("Error decompressing data " - "(input data are shorter than expected)."); -} - - -void -tooMuchData () -{ - throw IEX_NAMESPACE::InputExc ("Error decompressing data " - "(input data are longer than expected)."); -} - -} // namespace - - -struct B44Compressor::ChannelData -{ - unsigned short * start; - unsigned short * end; - int nx; - int ny; - int ys; - PixelType type; - bool pLinear; - int size; -}; - - -B44Compressor::B44Compressor - (const Header &hdr, - size_t maxScanLineSize, - size_t numScanLines, - bool optFlatFields) -: - Compressor (hdr), - _maxScanLineSize (maxScanLineSize), - _optFlatFields (optFlatFields), - _format (XDR), - _numScanLines (numScanLines), - _tmpBuffer (0), - _outBuffer (0), - _numChans (0), - _channels (hdr.channels()), - _channelData (0) -{ - // - // Allocate buffers for compressed an uncompressed pixel data, - // allocate a set of ChannelData structs to help speed up the - // compress() and uncompress() functions, below, and determine - // if uncompressed pixel data should be in native or Xdr format. - // - - _tmpBuffer = new unsigned short - [checkArraySize (uiMult (maxScanLineSize, numScanLines), - sizeof (unsigned short))]; - - const ChannelList &channels = header().channels(); - int numHalfChans = 0; - - for (ChannelList::ConstIterator c = channels.begin(); - c != channels.end(); - ++c) - { - assert (pixelTypeSize (c.channel().type) % pixelTypeSize (HALF) == 0); - ++_numChans; - - if (c.channel().type == HALF) - ++numHalfChans; - } - - // - // Compressed data may be larger than the input data - // - - size_t padding = 12 * numHalfChans * (numScanLines + 3) / 4; - - _outBuffer = new char - [uiAdd (uiMult (maxScanLineSize, numScanLines), padding)]; - - _channelData = new ChannelData[_numChans]; - - int i = 0; - - for (ChannelList::ConstIterator c = channels.begin(); - c != channels.end(); - ++c, ++i) - { - _channelData[i].ys = c.channel().ySampling; - _channelData[i].type = c.channel().type; - _channelData[i].pLinear = c.channel().pLinear; - _channelData[i].size = - pixelTypeSize (c.channel().type) / pixelTypeSize (HALF); - } - - const Box2i &dataWindow = hdr.dataWindow(); - - _minX = dataWindow.min.x; - _maxX = dataWindow.max.x; - _maxY = dataWindow.max.y; - - // - // We can support uncompressed data in the machine's native - // format only if all image channels are of type HALF. - // - - assert (sizeof (unsigned short) == pixelTypeSize (HALF)); - - if (_numChans == numHalfChans) - _format = NATIVE; -} - - -B44Compressor::~B44Compressor () -{ - delete [] _tmpBuffer; - delete [] _outBuffer; - delete [] _channelData; -} - - -int -B44Compressor::numScanLines () const -{ - return _numScanLines; -} - - -Compressor::Format -B44Compressor::format () const -{ - return _format; -} - - -int -B44Compressor::compress (const char *inPtr, - int inSize, - int minY, - const char *&outPtr) -{ - return compress (inPtr, - inSize, - Box2i (V2i (_minX, minY), - V2i (_maxX, minY + numScanLines() - 1)), - outPtr); -} - - -int -B44Compressor::compressTile (const char *inPtr, - int inSize, - IMATH_NAMESPACE::Box2i range, - const char *&outPtr) -{ - return compress (inPtr, inSize, range, outPtr); -} - - -int -B44Compressor::uncompress (const char *inPtr, - int inSize, - int minY, - const char *&outPtr) -{ - return uncompress (inPtr, - inSize, - Box2i (V2i (_minX, minY), - V2i (_maxX, minY + numScanLines() - 1)), - outPtr); -} - - -int -B44Compressor::uncompressTile (const char *inPtr, - int inSize, - IMATH_NAMESPACE::Box2i range, - const char *&outPtr) -{ - return uncompress (inPtr, inSize, range, outPtr); -} - - -int -B44Compressor::compress (const char *inPtr, - int inSize, - IMATH_NAMESPACE::Box2i range, - const char *&outPtr) -{ - // - // Compress a block of pixel data: First copy the input pixels - // from the input buffer into _tmpBuffer, rearranging them such - // that blocks of 4x4 pixels of a single channel can be accessed - // conveniently. Then compress each 4x4 block of HALF pixel data - // and append the result to the output buffer. Copy UINT and - // FLOAT data to the output buffer without compressing them. - // - - outPtr = _outBuffer; - - if (inSize == 0) - { - // - // Special case - empty input buffer. - // - - return 0; - } - - // - // For each channel, detemine how many pixels are stored - // in the input buffer, and where those pixels will be - // placed in _tmpBuffer. - // - - int minX = range.min.x; - int maxX = min (range.max.x, _maxX); - int minY = range.min.y; - int maxY = min (range.max.y, _maxY); - - unsigned short *tmpBufferEnd = _tmpBuffer; - int i = 0; - - for (ChannelList::ConstIterator c = _channels.begin(); - c != _channels.end(); - ++c, ++i) - { - ChannelData &cd = _channelData[i]; - - cd.start = tmpBufferEnd; - cd.end = cd.start; - - cd.nx = numSamples (c.channel().xSampling, minX, maxX); - cd.ny = numSamples (c.channel().ySampling, minY, maxY); - - tmpBufferEnd += cd.nx * cd.ny * cd.size; - } - - if (_format == XDR) - { - // - // The data in the input buffer are in the machine-independent - // Xdr format. Copy the HALF channels into _tmpBuffer and - // convert them back into native format for compression. - // Copy UINT and FLOAT channels verbatim into _tmpBuffer. - // - - for (int y = minY; y <= maxY; ++y) - { - for (int i = 0; i < _numChans; ++i) - { - ChannelData &cd = _channelData[i]; - - if (modp (y, cd.ys) != 0) - continue; - - if (cd.type == HALF) - { - for (int x = cd.nx; x > 0; --x) - { - Xdr::read (inPtr, *cd.end); - ++cd.end; - } - } - else - { - int n = cd.nx * cd.size; - memcpy (cd.end, inPtr, n * sizeof (unsigned short)); - inPtr += n * sizeof (unsigned short); - cd.end += n; - } - } - } - } - else - { - // - // The input buffer contains only HALF channels, and they - // are in native, machine-dependent format. Copy the pixels - // into _tmpBuffer. - // - - for (int y = minY; y <= maxY; ++y) - { - for (int i = 0; i < _numChans; ++i) - { - ChannelData &cd = _channelData[i]; - - #if defined (DEBUG) - assert (cd.type == HALF); - #endif - - if (modp (y, cd.ys) != 0) - continue; - - int n = cd.nx * cd.size; - memcpy (cd.end, inPtr, n * sizeof (unsigned short)); - inPtr += n * sizeof (unsigned short); - cd.end += n; - } - } - } - - // - // The pixels for each channel have been packed into a contiguous - // block in _tmpBuffer. HALF channels are in native format; UINT - // and FLOAT channels are in Xdr format. - // - - #if defined (DEBUG) - - for (int i = 1; i < _numChans; ++i) - assert (_channelData[i-1].end == _channelData[i].start); - - assert (_channelData[_numChans-1].end == tmpBufferEnd); - - #endif - - // - // For each HALF channel, split the data in _tmpBuffer into 4x4 - // pixel blocks. Compress each block and append the compressed - // data to the output buffer. - // - // UINT and FLOAT channels are copied from _tmpBuffer into the - // output buffer without further processing. - // - - char *outEnd = _outBuffer; - - for (int i = 0; i < _numChans; ++i) - { - ChannelData &cd = _channelData[i]; - - if (cd.type != HALF) - { - // - // UINT or FLOAT channel. - // - - int n = cd.nx * cd.ny * cd.size * sizeof (unsigned short); - memcpy (outEnd, cd.start, n); - outEnd += n; - - continue; - } - - // - // HALF channel - // - - for (int y = 0; y < cd.ny; y += 4) - { - // - // Copy the next 4x4 pixel block into array s. - // If the width, cd.nx, or the height, cd.ny, of - // the pixel data in _tmpBuffer is not divisible - // by 4, then pad the data by repeating the - // rightmost column and the bottom row. - // - - unsigned short *row0 = cd.start + y * cd.nx; - unsigned short *row1 = row0 + cd.nx; - unsigned short *row2 = row1 + cd.nx; - unsigned short *row3 = row2 + cd.nx; - - if (y + 3 >= cd.ny) - { - if (y + 1 >= cd.ny) - row1 = row0; - - if (y + 2 >= cd.ny) - row2 = row1; - - row3 = row2; - } - - for (int x = 0; x < cd.nx; x += 4) - { - unsigned short s[16]; - - if (x + 3 >= cd.nx) - { - int n = cd.nx - x; - - for (int i = 0; i < 4; ++i) - { - int j = min (i, n - 1); - - s[i + 0] = row0[j]; - s[i + 4] = row1[j]; - s[i + 8] = row2[j]; - s[i + 12] = row3[j]; - } - } - else - { - memcpy (&s[ 0], row0, 4 * sizeof (unsigned short)); - memcpy (&s[ 4], row1, 4 * sizeof (unsigned short)); - memcpy (&s[ 8], row2, 4 * sizeof (unsigned short)); - memcpy (&s[12], row3, 4 * sizeof (unsigned short)); - } - - row0 += 4; - row1 += 4; - row2 += 4; - row3 += 4; - - // - // Compress the contents of array s and append the - // results to the output buffer. - // - - if (cd.pLinear) - convertFromLinear (s); - - outEnd += pack (s, (unsigned char *) outEnd, - _optFlatFields, !cd.pLinear); - } - } - } - - return outEnd - _outBuffer; -} - - -int -B44Compressor::uncompress (const char *inPtr, - int inSize, - IMATH_NAMESPACE::Box2i range, - const char *&outPtr) -{ - // - // This function is the reverse of the compress() function, - // above. First all pixels are moved from the input buffer - // into _tmpBuffer. UINT and FLOAT channels are copied - // verbatim; HALF channels are uncompressed in blocks of - // 4x4 pixels. Then the pixels in _tmpBuffer are copied - // into the output buffer and rearranged such that the data - // for for each scan line form a contiguous block. - // - - outPtr = _outBuffer; - - if (inSize == 0) - { - return 0; - } - - int minX = range.min.x; - int maxX = min (range.max.x, _maxX); - int minY = range.min.y; - int maxY = min (range.max.y, _maxY); - - unsigned short *tmpBufferEnd = _tmpBuffer; - int i = 0; - - for (ChannelList::ConstIterator c = _channels.begin(); - c != _channels.end(); - ++c, ++i) - { - ChannelData &cd = _channelData[i]; - - cd.start = tmpBufferEnd; - cd.end = cd.start; - - cd.nx = numSamples (c.channel().xSampling, minX, maxX); - cd.ny = numSamples (c.channel().ySampling, minY, maxY); - - tmpBufferEnd += cd.nx * cd.ny * cd.size; - } - - for (int i = 0; i < _numChans; ++i) - { - ChannelData &cd = _channelData[i]; - - if (cd.type != HALF) - { - // - // UINT or FLOAT channel. - // - - int n = cd.nx * cd.ny * cd.size * sizeof (unsigned short); - - if (inSize < n) - notEnoughData(); - - memcpy (cd.start, inPtr, n); - inPtr += n; - inSize -= n; - - continue; - } - - // - // HALF channel - // - - for (int y = 0; y < cd.ny; y += 4) - { - unsigned short *row0 = cd.start + y * cd.nx; - unsigned short *row1 = row0 + cd.nx; - unsigned short *row2 = row1 + cd.nx; - unsigned short *row3 = row2 + cd.nx; - - for (int x = 0; x < cd.nx; x += 4) - { - unsigned short s[16]; - - if (inSize < 3) - notEnoughData(); - - if (((const unsigned char *)inPtr)[2] == 0xfc) - { - unpack3 ((const unsigned char *)inPtr, s); - inPtr += 3; - inSize -= 3; - } - else - { - if (inSize < 14) - notEnoughData(); - - unpack14 ((const unsigned char *)inPtr, s); - inPtr += 14; - inSize -= 14; - } - - if (cd.pLinear) - convertToLinear (s); - - int n = (x + 3 < cd.nx)? - 4 * sizeof (unsigned short) : - (cd.nx - x) * sizeof (unsigned short); - - if (y + 3 < cd.ny) - { - memcpy (row0, &s[ 0], n); - memcpy (row1, &s[ 4], n); - memcpy (row2, &s[ 8], n); - memcpy (row3, &s[12], n); - } - else - { - memcpy (row0, &s[ 0], n); - - if (y + 1 < cd.ny) - memcpy (row1, &s[ 4], n); - - if (y + 2 < cd.ny) - memcpy (row2, &s[ 8], n); - } - - row0 += 4; - row1 += 4; - row2 += 4; - row3 += 4; - } - } - } - - char *outEnd = _outBuffer; - - if (_format == XDR) - { - for (int y = minY; y <= maxY; ++y) - { - for (int i = 0; i < _numChans; ++i) - { - ChannelData &cd = _channelData[i]; - - if (modp (y, cd.ys) != 0) - continue; - - if (cd.type == HALF) - { - for (int x = cd.nx; x > 0; --x) - { - Xdr::write (outEnd, *cd.end); - ++cd.end; - } - } - else - { - int n = cd.nx * cd.size; - memcpy (outEnd, cd.end, n * sizeof (unsigned short)); - outEnd += n * sizeof (unsigned short); - cd.end += n; - } - } - } - } - else - { - for (int y = minY; y <= maxY; ++y) - { - for (int i = 0; i < _numChans; ++i) - { - ChannelData &cd = _channelData[i]; - - #if defined (DEBUG) - assert (cd.type == HALF); - #endif - - if (modp (y, cd.ys) != 0) - continue; - - int n = cd.nx * cd.size; - memcpy (outEnd, cd.end, n * sizeof (unsigned short)); - outEnd += n * sizeof (unsigned short); - cd.end += n; - } - } - } - - #if defined (DEBUG) - - for (int i = 1; i < _numChans; ++i) - assert (_channelData[i-1].end == _channelData[i].start); - - assert (_channelData[_numChans-1].end == tmpBufferEnd); - - #endif - - if (inSize > 0) - tooMuchData(); - - outPtr = _outBuffer; - return outEnd - _outBuffer; -} - - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_EXIT diff --git a/3rdparty/openexr/IlmImf/ImfB44Compressor.h b/3rdparty/openexr/IlmImf/ImfB44Compressor.h deleted file mode 100644 index c84eaac40e..0000000000 --- a/3rdparty/openexr/IlmImf/ImfB44Compressor.h +++ /dev/null @@ -1,126 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2006, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - -#ifndef INCLUDED_IMF_B44_COMPRESSOR_H -#define INCLUDED_IMF_B44_COMPRESSOR_H - -//----------------------------------------------------------------------------- -// -// class B44Compressor -- lossy compression of 4x4 pixel blocks -// -//----------------------------------------------------------------------------- - -#include "ImfCompressor.h" -#include "ImfNamespace.h" -#include "ImfExport.h" -#include "ImfForward.h" - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER - - -class B44Compressor: public Compressor -{ - public: - - IMF_EXPORT - B44Compressor (const Header &hdr, - size_t maxScanLineSize, - size_t numScanLines, - bool optFlatFields); - - IMF_EXPORT - virtual ~B44Compressor (); - - IMF_EXPORT - virtual int numScanLines () const; - - IMF_EXPORT - virtual Format format () const; - - IMF_EXPORT - virtual int compress (const char *inPtr, - int inSize, - int minY, - const char *&outPtr); - - IMF_EXPORT - virtual int compressTile (const char *inPtr, - int inSize, - IMATH_NAMESPACE::Box2i range, - const char *&outPtr); - - IMF_EXPORT - virtual int uncompress (const char *inPtr, - int inSize, - int minY, - const char *&outPtr); - - IMF_EXPORT - virtual int uncompressTile (const char *inPtr, - int inSize, - IMATH_NAMESPACE::Box2i range, - const char *&outPtr); - private: - - struct ChannelData; - - int compress (const char *inPtr, - int inSize, - IMATH_NAMESPACE::Box2i range, - const char *&outPtr); - - int uncompress (const char *inPtr, - int inSize, - IMATH_NAMESPACE::Box2i range, - const char *&outPtr); - - int _maxScanLineSize; - bool _optFlatFields; - Format _format; - int _numScanLines; - unsigned short * _tmpBuffer; - char * _outBuffer; - int _numChans; - const ChannelList & _channels; - ChannelData * _channelData; - int _minX; - int _maxX; - int _maxY; -}; - - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT - -#endif diff --git a/3rdparty/openexr/IlmImf/ImfBoxAttribute.cpp b/3rdparty/openexr/IlmImf/ImfBoxAttribute.cpp deleted file mode 100644 index 6d44d0c34d..0000000000 --- a/3rdparty/openexr/IlmImf/ImfBoxAttribute.cpp +++ /dev/null @@ -1,111 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - - -//----------------------------------------------------------------------------- -// -// class Box2iAttribute -// class Box2fAttribute -// -//----------------------------------------------------------------------------- - -#include - - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_ENTER - -using namespace OPENEXR_IMF_INTERNAL_NAMESPACE; - -template <> -const char * -Box2iAttribute::staticTypeName () -{ - return "box2i"; -} - - -template <> -void -Box2iAttribute::writeValueTo (OPENEXR_IMF_INTERNAL_NAMESPACE::OStream &os, int version) const -{ - Xdr::write (os, _value.min.x); - Xdr::write (os, _value.min.y); - Xdr::write (os, _value.max.x); - Xdr::write (os, _value.max.y); -} - - -template <> -void -Box2iAttribute::readValueFrom (OPENEXR_IMF_INTERNAL_NAMESPACE::IStream &is, int size, int version) -{ - Xdr::read (is, _value.min.x); - Xdr::read (is, _value.min.y); - Xdr::read (is, _value.max.x); - Xdr::read (is, _value.max.y); -} - - -template <> -const char * -Box2fAttribute::staticTypeName () -{ - return "box2f"; -} - - -template <> -void -Box2fAttribute::writeValueTo (OPENEXR_IMF_INTERNAL_NAMESPACE::OStream &os, int version) const -{ - Xdr::write (os, _value.min.x); - Xdr::write (os, _value.min.y); - Xdr::write (os, _value.max.x); - Xdr::write (os, _value.max.y); -} - - -template <> -void -Box2fAttribute::readValueFrom (OPENEXR_IMF_INTERNAL_NAMESPACE::IStream &is, int size, int version) -{ - Xdr::read (is, _value.min.x); - Xdr::read (is, _value.min.y); - Xdr::read (is, _value.max.x); - Xdr::read (is, _value.max.y); -} - - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_EXIT diff --git a/3rdparty/openexr/IlmImf/ImfBoxAttribute.h b/3rdparty/openexr/IlmImf/ImfBoxAttribute.h deleted file mode 100644 index 7bf2585ea2..0000000000 --- a/3rdparty/openexr/IlmImf/ImfBoxAttribute.h +++ /dev/null @@ -1,87 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - - -#ifndef INCLUDED_IMF_BOX_ATTRIBUTE_H -#define INCLUDED_IMF_BOX_ATTRIBUTE_H - -//----------------------------------------------------------------------------- -// -// class Box2iAttribute -// class Box2fAttribute -// -//----------------------------------------------------------------------------- - -#include "ImfForward.h" -#include "ImfExport.h" -#include "ImfAttribute.h" -#include "ImathBox.h" -#include "ImfNamespace.h" - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER - - -typedef TypedAttribute Box2iAttribute; - -template <> -IMF_EXPORT -const char *Box2iAttribute::staticTypeName (); -template <> -IMF_EXPORT -void Box2iAttribute::writeValueTo (OPENEXR_IMF_INTERNAL_NAMESPACE::OStream &, - int) const; -template <> -IMF_EXPORT -void Box2iAttribute::readValueFrom (OPENEXR_IMF_INTERNAL_NAMESPACE::IStream &, - int, int); - - -typedef TypedAttribute Box2fAttribute; -template <> -IMF_EXPORT -const char *Box2fAttribute::staticTypeName (); -template <> -IMF_EXPORT -void Box2fAttribute::writeValueTo (OPENEXR_IMF_INTERNAL_NAMESPACE::OStream &, - int) const; -template <> -IMF_EXPORT -void Box2fAttribute::readValueFrom (OPENEXR_IMF_INTERNAL_NAMESPACE::IStream &, - int, int); - - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT - -#endif diff --git a/3rdparty/openexr/IlmImf/ImfCRgbaFile.cpp b/3rdparty/openexr/IlmImf/ImfCRgbaFile.cpp deleted file mode 100644 index 48363b4742..0000000000 --- a/3rdparty/openexr/IlmImf/ImfCRgbaFile.cpp +++ /dev/null @@ -1,1438 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - -//----------------------------------------------------------------------------- -// -// C interface to C++ classes Imf::RgbaOutputFile and Imf::RgbaInputFile -// -//----------------------------------------------------------------------------- - - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "half.h" -#include "ImfNamespace.h" -#include "ImathForward.h" - -#include - - -using IMATH_NAMESPACE::Box2i; -using IMATH_NAMESPACE::Box2f; -using IMATH_NAMESPACE::V2i; -using IMATH_NAMESPACE::V2f; -using IMATH_NAMESPACE::V3i; -using IMATH_NAMESPACE::V3f; -using IMATH_NAMESPACE::M33f; -using IMATH_NAMESPACE::M44f; - - -namespace { - - -const int MAX_ERR_LENGTH = 1024; -char errorMessage[MAX_ERR_LENGTH]; - - -void -setErrorMessage (const std::exception &e) -{ - strncpy (errorMessage, e.what(), MAX_ERR_LENGTH - 1); - errorMessage[MAX_ERR_LENGTH - 1] = 0; -} - - -inline OPENEXR_IMF_INTERNAL_NAMESPACE::Header * -header (ImfHeader *hdr) -{ - return (OPENEXR_IMF_INTERNAL_NAMESPACE::Header *)(hdr); -} - - -inline const OPENEXR_IMF_INTERNAL_NAMESPACE::Header * -header (const ImfHeader *hdr) -{ - return (const OPENEXR_IMF_INTERNAL_NAMESPACE::Header *)(hdr); -} - - -inline OPENEXR_IMF_INTERNAL_NAMESPACE::RgbaOutputFile * -outfile (ImfOutputFile *out) -{ - return (OPENEXR_IMF_INTERNAL_NAMESPACE::RgbaOutputFile *) out; -} - - -inline const OPENEXR_IMF_INTERNAL_NAMESPACE::RgbaOutputFile * -outfile (const ImfOutputFile *out) -{ - return (const OPENEXR_IMF_INTERNAL_NAMESPACE::RgbaOutputFile *) out; -} - - -inline OPENEXR_IMF_INTERNAL_NAMESPACE::TiledRgbaOutputFile * -outfile (ImfTiledOutputFile *out) -{ - return (OPENEXR_IMF_INTERNAL_NAMESPACE::TiledRgbaOutputFile *) out; -} - - -inline const OPENEXR_IMF_INTERNAL_NAMESPACE::TiledRgbaOutputFile * -outfile (const ImfTiledOutputFile *out) -{ - return (const OPENEXR_IMF_INTERNAL_NAMESPACE::TiledRgbaOutputFile *) out; -} - - -inline OPENEXR_IMF_INTERNAL_NAMESPACE::RgbaInputFile * -infile (ImfInputFile *in) -{ - return (OPENEXR_IMF_INTERNAL_NAMESPACE::RgbaInputFile *) in; -} - - -inline const OPENEXR_IMF_INTERNAL_NAMESPACE::RgbaInputFile * -infile (const ImfInputFile *in) -{ - return (const OPENEXR_IMF_INTERNAL_NAMESPACE::RgbaInputFile *) in; -} - - -inline OPENEXR_IMF_INTERNAL_NAMESPACE::TiledRgbaInputFile * -infile (ImfTiledInputFile *in) -{ - return (OPENEXR_IMF_INTERNAL_NAMESPACE::TiledRgbaInputFile *) in; -} - - -inline const OPENEXR_IMF_INTERNAL_NAMESPACE::TiledRgbaInputFile * -infile (const ImfTiledInputFile *in) -{ - return (const OPENEXR_IMF_INTERNAL_NAMESPACE::TiledRgbaInputFile *) in; -} - - -} // namespace - - -void -ImfFloatToHalf (float f, ImfHalf *h) -{ - *h = half(f).bits(); -} - - -void -ImfFloatToHalfArray (int n, const float f[/*n*/], ImfHalf h[/*n*/]) -{ - for (int i = 0; i < n; ++i) - h[i] = half(f[i]).bits(); -} - - -float -ImfHalfToFloat (ImfHalf h) -{ - return float (*((half *)&h)); -} - - -void -ImfHalfToFloatArray (int n, const ImfHalf h[/*n*/], float f[/*n*/]) -{ - for (int i = 0; i < n; ++i) - f[i] = float (*((half *)(h + i))); -} - - -ImfHeader * -ImfNewHeader (void) -{ - try - { - return (ImfHeader *) new OPENEXR_IMF_INTERNAL_NAMESPACE::Header; - } - catch (const std::exception &e) - { - setErrorMessage (e); - return 0; - } -} - - -void -ImfDeleteHeader (ImfHeader *hdr) -{ - delete header (hdr); -} - - -ImfHeader * -ImfCopyHeader (const ImfHeader *hdr) -{ - try - { - return (ImfHeader *) new OPENEXR_IMF_INTERNAL_NAMESPACE::Header (*header (hdr)); - } - catch (const std::exception &e) - { - setErrorMessage (e); - return 0; - } -} - - -void -ImfHeaderSetDisplayWindow (ImfHeader *hdr, - int xMin, int yMin, - int xMax, int yMax) -{ - header(hdr)->displayWindow() = Box2i (V2i (xMin, yMin), V2i (xMax, yMax)); -} - - -void -ImfHeaderDisplayWindow (const ImfHeader *hdr, - int *xMin, int *yMin, - int *xMax, int *yMax) -{ - const Box2i dw = header(hdr)->displayWindow(); - *xMin = dw.min.x; - *yMin = dw.min.y; - *xMax = dw.max.x; - *yMax = dw.max.y; -} - - -void -ImfHeaderSetDataWindow (ImfHeader *hdr, - int xMin, int yMin, - int xMax, int yMax) -{ - header(hdr)->dataWindow() = Box2i (V2i (xMin, yMin), V2i (xMax, yMax)); -} - - -void -ImfHeaderDataWindow (const ImfHeader *hdr, - int *xMin, int *yMin, - int *xMax, int *yMax) -{ - const Box2i dw = header(hdr)->dataWindow(); - *xMin = dw.min.x; - *yMin = dw.min.y; - *xMax = dw.max.x; - *yMax = dw.max.y; -} - - -void -ImfHeaderSetPixelAspectRatio (ImfHeader *hdr, float pixelAspectRatio) -{ - header(hdr)->pixelAspectRatio() = pixelAspectRatio; -} - - -float -ImfHeaderPixelAspectRatio (const ImfHeader *hdr) -{ - return header(hdr)->pixelAspectRatio(); -} - - -void -ImfHeaderSetScreenWindowCenter (ImfHeader *hdr, float x, float y) -{ - header(hdr)->screenWindowCenter() = V2f (x, y); -} - - -void -ImfHeaderScreenWindowCenter (const ImfHeader *hdr, float *x, float *y) -{ - const V2i &swc = header(hdr)->screenWindowCenter(); - *x = (float) swc.x; - *y = (float) swc.y; -} - - -void -ImfHeaderSetScreenWindowWidth (ImfHeader *hdr, float width) -{ - header(hdr)->screenWindowWidth() = width; -} - - -float -ImfHeaderScreenWindowWidth (const ImfHeader *hdr) -{ - return header(hdr)->screenWindowWidth(); -} - - -void -ImfHeaderSetLineOrder (ImfHeader *hdr, int lineOrder) -{ - header(hdr)->lineOrder() = OPENEXR_IMF_INTERNAL_NAMESPACE::LineOrder (lineOrder); -} - - -int -ImfHeaderLineOrder (const ImfHeader *hdr) -{ - return header(hdr)->lineOrder(); -} - - -void -ImfHeaderSetCompression (ImfHeader *hdr, int compression) -{ - header(hdr)->compression() = OPENEXR_IMF_INTERNAL_NAMESPACE::Compression (compression); -} - - -int -ImfHeaderCompression (const ImfHeader *hdr) -{ - return header(hdr)->compression(); -} - - -int -ImfHeaderSetIntAttribute (ImfHeader *hdr, const char name[], int value) -{ - try - { - if (header(hdr)->find(name) == header(hdr)->end()) - { - header(hdr)->insert (name, OPENEXR_IMF_INTERNAL_NAMESPACE::IntAttribute (value)); - } - else - { - header(hdr)->typedAttribute(name).value() = - value; - } - - return 1; - } - catch (const std::exception &e) - { - setErrorMessage (e); - return 0; - } -} - - -int -ImfHeaderIntAttribute (const ImfHeader *hdr, const char name[], int *value) -{ - try - { - *value = header(hdr)->typedAttribute(name).value(); - return 1; - } - catch (const std::exception &e) - { - setErrorMessage (e); - return 0; - } -} - - -int -ImfHeaderSetFloatAttribute (ImfHeader *hdr, const char name[], float value) -{ - try - { - if (header(hdr)->find(name) == header(hdr)->end()) - { - header(hdr)->insert (name, OPENEXR_IMF_INTERNAL_NAMESPACE::FloatAttribute (value)); - } - else - { - header(hdr)->typedAttribute(name).value() = - value; - } - - return 1; - } - catch (const std::exception &e) - { - setErrorMessage (e); - return 0; - } -} - - -int -ImfHeaderSetDoubleAttribute (ImfHeader *hdr, const char name[], double value) -{ - try - { - if (header(hdr)->find(name) == header(hdr)->end()) - { - header(hdr)->insert (name, OPENEXR_IMF_INTERNAL_NAMESPACE::DoubleAttribute (value)); - } - else - { - header(hdr)->typedAttribute(name).value() = - value; - } - - return 1; - } - catch (const std::exception &e) - { - setErrorMessage (e); - return 0; - } -} - - -int -ImfHeaderFloatAttribute (const ImfHeader *hdr, const char name[], float *value) -{ - try - { - *value = header(hdr)->typedAttribute(name).value(); - return 1; - } - catch (const std::exception &e) - { - setErrorMessage (e); - return 0; - } -} - - -int -ImfHeaderDoubleAttribute (const ImfHeader *hdr, - const char name[], - double *value) -{ - try - { - *value = header(hdr)-> - typedAttribute(name).value(); - - return 1; - } - catch (const std::exception &e) - { - setErrorMessage (e); - return 0; - } -} - - -int -ImfHeaderSetStringAttribute (ImfHeader *hdr, - const char name[], - const char value[]) -{ - try - { - if (header(hdr)->find(name) == header(hdr)->end()) - { - header(hdr)->insert (name, OPENEXR_IMF_INTERNAL_NAMESPACE::StringAttribute (value)); - } - else - { - header(hdr)->typedAttribute(name).value() = - value; - } - - return 1; - } - catch (const std::exception &e) - { - setErrorMessage (e); - return 0; - } -} - - -int -ImfHeaderStringAttribute (const ImfHeader *hdr, - const char name[], - const char **value) -{ - try - { - *value = header(hdr)-> - typedAttribute(name).value().c_str(); - - return 1; - } - catch (const std::exception &e) - { - setErrorMessage (e); - return 0; - } -} - - -int -ImfHeaderSetBox2iAttribute (ImfHeader *hdr, - const char name[], - int xMin, int yMin, - int xMax, int yMax) -{ - try - { - Box2i box (V2i (xMin, yMin), V2i (xMax, yMax)); - - if (header(hdr)->find(name) == header(hdr)->end()) - { - header(hdr)->insert (name, OPENEXR_IMF_INTERNAL_NAMESPACE::Box2iAttribute (box)); - } - else - { - header(hdr)->typedAttribute(name).value() = - box; - } - - return 1; - } - catch (const std::exception &e) - { - setErrorMessage (e); - return 0; - } -} - - -int -ImfHeaderBox2iAttribute (const ImfHeader *hdr, - const char name[], - int *xMin, int *yMin, - int *xMax, int *yMax) -{ - try - { - const Box2i &box = - header(hdr)->typedAttribute(name).value(); - - *xMin = box.min.x; - *yMin = box.min.y; - *xMax = box.max.x; - *yMax = box.max.y; - - return 1; - } - catch (const std::exception &e) - { - setErrorMessage (e); - return 0; - } -} - - -int -ImfHeaderSetBox2fAttribute (ImfHeader *hdr, - const char name[], - float xMin, float yMin, - float xMax, float yMax) -{ - try - { - Box2f box (V2f (xMin, yMin), V2f (xMax, yMax)); - - if (header(hdr)->find(name) == header(hdr)->end()) - { - header(hdr)->insert (name, OPENEXR_IMF_INTERNAL_NAMESPACE::Box2fAttribute (box)); - } - else - { - header(hdr)->typedAttribute(name).value() = - box; - } - - return 1; - } - catch (const std::exception &e) - { - setErrorMessage (e); - return 0; - } -} - - -int -ImfHeaderBox2fAttribute (const ImfHeader *hdr, - const char name[], - float *xMin, float *yMin, - float *xMax, float *yMax) -{ - try - { - const Box2f &box = - header(hdr)->typedAttribute(name).value(); - - *xMin = box.min.x; - *yMin = box.min.y; - *xMax = box.max.x; - *yMax = box.max.y; - - return 1; - } - catch (const std::exception &e) - { - setErrorMessage (e); - return 0; - } -} - - -int -ImfHeaderSetV2iAttribute (ImfHeader *hdr, - const char name[], - int x, int y) -{ - try - { - V2i v (x, y); - - if (header(hdr)->find(name) == header(hdr)->end()) - header(hdr)->insert (name, OPENEXR_IMF_INTERNAL_NAMESPACE::V2iAttribute (v)); - else - header(hdr)->typedAttribute(name).value() = v; - - return 1; - } - catch (const std::exception &e) - { - setErrorMessage (e); - return 0; - } -} - - -int -ImfHeaderV2iAttribute (const ImfHeader *hdr, - const char name[], - int *x, int *y) -{ - try - { - const V2i &v = - header(hdr)->typedAttribute(name).value(); - - *x = v.x; - *y = v.y; - - return 1; - } - catch (const std::exception &e) - { - setErrorMessage (e); - return 0; - } -} - - -int -ImfHeaderSetV2fAttribute (ImfHeader *hdr, - const char name[], - float x, float y) -{ - try - { - V2f v (x, y); - - if (header(hdr)->find(name) == header(hdr)->end()) - header(hdr)->insert (name, OPENEXR_IMF_INTERNAL_NAMESPACE::V2fAttribute (v)); - else - header(hdr)->typedAttribute(name).value() = v; - - return 1; - } - catch (const std::exception &e) - { - setErrorMessage (e); - return 0; - } -} - - -int -ImfHeaderV2fAttribute (const ImfHeader *hdr, - const char name[], - float *x, float *y) -{ - try - { - const V2f &v = - header(hdr)->typedAttribute(name).value(); - - *x = v.x; - *y = v.y; - - return 1; - } - catch (const std::exception &e) - { - setErrorMessage (e); - return 0; - } -} - - -int -ImfHeaderSetV3iAttribute (ImfHeader *hdr, - const char name[], - int x, int y, int z) -{ - try - { - V3i v (x, y, z); - - if (header(hdr)->find(name) == header(hdr)->end()) - header(hdr)->insert (name, OPENEXR_IMF_INTERNAL_NAMESPACE::V3iAttribute (v)); - else - header(hdr)->typedAttribute(name).value() = v; - - return 1; - } - catch (const std::exception &e) - { - setErrorMessage (e); - return 0; - } -} - - -int -ImfHeaderV3iAttribute (const ImfHeader *hdr, - const char name[], - int *x, int *y, int *z) -{ - try - { - const V3i &v = - header(hdr)->typedAttribute(name).value(); - - *x = v.x; - *y = v.y; - *z = v.z; - - return 1; - } - catch (const std::exception &e) - { - setErrorMessage (e); - return 0; - } -} - - -int -ImfHeaderSetV3fAttribute (ImfHeader *hdr, - const char name[], - float x, float y, float z) -{ - try - { - V3f v (x, y, z); - - if (header(hdr)->find(name) == header(hdr)->end()) - header(hdr)->insert (name, OPENEXR_IMF_INTERNAL_NAMESPACE::V3fAttribute (v)); - else - header(hdr)->typedAttribute(name).value() = v; - - return 1; - } - catch (const std::exception &e) - { - setErrorMessage (e); - return 0; - } -} - - -int -ImfHeaderV3fAttribute (const ImfHeader *hdr, - const char name[], - float *x, float *y, float *z) -{ - try - { - const V3f &v = - header(hdr)->typedAttribute(name).value(); - - *x = v.x; - *y = v.y; - *z = v.z; - - return 1; - } - catch (const std::exception &e) - { - setErrorMessage (e); - return 0; - } -} - - -int -ImfHeaderSetM33fAttribute (ImfHeader *hdr, - const char name[], - const float m[3][3]) -{ - try - { - M33f m3 (m); - - if (header(hdr)->find(name) == header(hdr)->end()) - header(hdr)->insert (name, OPENEXR_IMF_INTERNAL_NAMESPACE::M33fAttribute (m3)); - else - header(hdr)->typedAttribute(name).value() = m3; - - return 1; - } - catch (const std::exception &e) - { - setErrorMessage (e); - return 0; - } -} - - -int -ImfHeaderM33fAttribute (const ImfHeader *hdr, - const char name[], - float m[3][3]) -{ - try - { - const M33f &m3 = - header(hdr)->typedAttribute(name).value(); - - m[0][0] = m3[0][0]; - m[0][1] = m3[0][1]; - m[0][2] = m3[0][2]; - - m[1][0] = m3[1][0]; - m[1][1] = m3[1][1]; - m[1][2] = m3[1][2]; - - m[2][0] = m3[2][0]; - m[2][1] = m3[2][1]; - m[2][2] = m3[2][2]; - - return 1; - } - catch (const std::exception &e) - { - setErrorMessage (e); - return 0; - } -} - - -int -ImfHeaderSetM44fAttribute (ImfHeader *hdr, - const char name[], - const float m[4][4]) -{ - try - { - M44f m4 (m); - - if (header(hdr)->find(name) == header(hdr)->end()) - header(hdr)->insert (name, OPENEXR_IMF_INTERNAL_NAMESPACE::M44fAttribute (m4)); - else - header(hdr)->typedAttribute(name).value() = m4; - - return 1; - } - catch (const std::exception &e) - { - setErrorMessage (e); - return 0; - } -} - - -int -ImfHeaderM44fAttribute (const ImfHeader *hdr, - const char name[], - float m[4][4]) -{ - try - { - const M44f &m4 = - header(hdr)->typedAttribute(name).value(); - - m[0][0] = m4[0][0]; - m[0][1] = m4[0][1]; - m[0][2] = m4[0][2]; - m[0][3] = m4[0][3]; - - m[1][0] = m4[1][0]; - m[1][1] = m4[1][1]; - m[1][2] = m4[1][2]; - m[1][3] = m4[1][3]; - - m[2][0] = m4[2][0]; - m[2][1] = m4[2][1]; - m[2][2] = m4[2][2]; - m[2][3] = m4[2][3]; - - m[3][0] = m4[3][0]; - m[3][1] = m4[3][1]; - m[3][2] = m4[3][2]; - m[3][3] = m4[3][3]; - - return 1; - } - catch (const std::exception &e) - { - setErrorMessage (e); - return 0; - } -} - - -ImfOutputFile * -ImfOpenOutputFile (const char name[], const ImfHeader *hdr, int channels) -{ - try - { - return (ImfOutputFile *) new OPENEXR_IMF_INTERNAL_NAMESPACE::RgbaOutputFile - (name, *header(hdr), OPENEXR_IMF_INTERNAL_NAMESPACE::RgbaChannels (channels)); - } - catch (const std::exception &e) - { - setErrorMessage (e); - return 0; - } -} - - -int -ImfCloseOutputFile (ImfOutputFile *out) -{ - try - { - delete outfile (out); - return 1; - } - catch (const std::exception &e) - { - setErrorMessage (e); - return 0; - } -} - - -int -ImfOutputSetFrameBuffer (ImfOutputFile *out, - const ImfRgba *base, - size_t xStride, - size_t yStride) -{ - try - { - outfile(out)->setFrameBuffer ((OPENEXR_IMF_INTERNAL_NAMESPACE::Rgba *)base, xStride, yStride); - return 1; - } - catch (const std::exception &e) - { - setErrorMessage (e); - return 0; - } -} - - -int -ImfOutputWritePixels (ImfOutputFile *out, int numScanLines) -{ - try - { - outfile(out)->writePixels (numScanLines); - return 1; - } - catch (const std::exception &e) - { - setErrorMessage (e); - return 0; - } -} - - -int -ImfOutputCurrentScanLine (const ImfOutputFile *out) -{ - return outfile(out)->currentScanLine(); -} - - -const ImfHeader * -ImfOutputHeader (const ImfOutputFile *out) -{ - return (const ImfHeader *) &outfile(out)->header(); -} - - -int -ImfOutputChannels (const ImfOutputFile *out) -{ - return outfile(out)->channels(); -} - - -ImfTiledOutputFile * -ImfOpenTiledOutputFile (const char name[], - const ImfHeader *hdr, - int channels, - int xSize, int ySize, - int mode, int rmode) -{ - try - { - return (ImfTiledOutputFile *) new OPENEXR_IMF_INTERNAL_NAMESPACE::TiledRgbaOutputFile - (name, *header(hdr), - OPENEXR_IMF_INTERNAL_NAMESPACE::RgbaChannels (channels), - xSize, ySize, - OPENEXR_IMF_INTERNAL_NAMESPACE::LevelMode (mode), - OPENEXR_IMF_INTERNAL_NAMESPACE::LevelRoundingMode (rmode)); - } - catch (const std::exception &e) - { - setErrorMessage (e); - return 0; - } -} - - -int -ImfCloseTiledOutputFile (ImfTiledOutputFile *out) -{ - try - { - delete outfile (out); - return 1; - } - catch (const std::exception &e) - { - setErrorMessage (e); - return 0; - } -} - - -int -ImfTiledOutputSetFrameBuffer (ImfTiledOutputFile *out, - const ImfRgba *base, - size_t xStride, - size_t yStride) -{ - try - { - outfile(out)->setFrameBuffer ((OPENEXR_IMF_INTERNAL_NAMESPACE::Rgba *)base, xStride, yStride); - return 1; - } - catch (const std::exception &e) - { - setErrorMessage (e); - return 0; - } -} - - -int -ImfTiledOutputWriteTile (ImfTiledOutputFile *out, - int dx, int dy, - int lx, int ly) -{ - try - { - outfile(out)->writeTile (dx, dy, lx, ly); - return 1; - } - catch (const std::exception &e) - { - setErrorMessage (e); - return 0; - } -} - - -int -ImfTiledOutputWriteTiles (ImfTiledOutputFile *out, - int dxMin, int dxMax, - int dyMin, int dyMax, - int lx, int ly) -{ - try - { - outfile(out)->writeTiles (dxMin, dxMax, dyMin, dyMax, lx, ly); - return 1; - } - catch (const std::exception &e) - { - setErrorMessage (e); - return 0; - } -} - - -const ImfHeader * -ImfTiledOutputHeader (const ImfTiledOutputFile *out) -{ - return (const ImfHeader *) &outfile(out)->header(); -} - - -int -ImfTiledOutputChannels (const ImfTiledOutputFile *out) -{ - return outfile(out)->channels(); -} - - -int -ImfTiledOutputTileXSize (const ImfTiledOutputFile *out) -{ - return outfile(out)->tileXSize(); -} - - -int -ImfTiledOutputTileYSize (const ImfTiledOutputFile *out) -{ - return outfile(out)->tileYSize(); -} - - -int -ImfTiledOutputLevelMode (const ImfTiledOutputFile *out) -{ - return outfile(out)->levelMode(); -} - - -int -ImfTiledOutputLevelRoundingMode (const ImfTiledOutputFile *out) -{ - return outfile(out)->levelRoundingMode(); -} - - -ImfInputFile * -ImfOpenInputFile (const char name[]) -{ - try - { - return (ImfInputFile *) new OPENEXR_IMF_INTERNAL_NAMESPACE::RgbaInputFile (name); - } - catch (const std::exception &e) - { - setErrorMessage (e); - return 0; - } -} - - -int -ImfCloseInputFile (ImfInputFile *in) -{ - try - { - delete infile (in); - return 1; - } - catch (const std::exception &e) - { - setErrorMessage (e); - return 0; - } -} - - -int -ImfInputSetFrameBuffer (ImfInputFile *in, - ImfRgba *base, - size_t xStride, - size_t yStride) -{ - try - { - infile(in)->setFrameBuffer ((OPENEXR_IMF_INTERNAL_NAMESPACE::Rgba *) base, xStride, yStride); - return 1; - } - catch (const std::exception &e) - { - setErrorMessage (e); - return 0; - } -} - - -int -ImfInputReadPixels (ImfInputFile *in, int scanLine1, int scanLine2) -{ - try - { - infile(in)->readPixels (scanLine1, scanLine2); - return 1; - } - catch (const std::exception &e) - { - setErrorMessage (e); - return 0; - } -} - - -const ImfHeader * -ImfInputHeader (const ImfInputFile *in) -{ - return (const ImfHeader *) &infile(in)->header(); -} - - -int -ImfInputChannels (const ImfInputFile *in) -{ - return infile(in)->channels(); -} - - -const char * -ImfInputFileName (const ImfInputFile *in) -{ - return infile(in)->fileName(); -} - - -ImfTiledInputFile * -ImfOpenTiledInputFile (const char name[]) -{ - try - { - return (ImfTiledInputFile *) new OPENEXR_IMF_INTERNAL_NAMESPACE::TiledRgbaInputFile (name); - } - catch (const std::exception &e) - { - setErrorMessage (e); - return 0; - } -} - - -int -ImfCloseTiledInputFile (ImfTiledInputFile *in) -{ - try - { - delete infile (in); - return 1; - } - catch (const std::exception &e) - { - setErrorMessage (e); - return 0; - } -} - - -int -ImfTiledInputSetFrameBuffer (ImfTiledInputFile *in, - ImfRgba *base, - size_t xStride, - size_t yStride) -{ - try - { - infile(in)->setFrameBuffer ((OPENEXR_IMF_INTERNAL_NAMESPACE::Rgba *) base, xStride, yStride); - return 1; - } - catch (const std::exception &e) - { - setErrorMessage (e); - return 0; - } -} - - -int -ImfTiledInputReadTile (ImfTiledInputFile *in, - int dx, int dy, - int lx, int ly) -{ - try - { - infile(in)->readTile (dx, dy, lx, ly); - return 1; - } - catch (const std::exception &e) - { - setErrorMessage (e); - return 0; - } -} - - -int -ImfTiledInputReadTiles (ImfTiledInputFile *in, - int dxMin, int dxMax, - int dyMin, int dyMax, - int lx, int ly) -{ - try - { - infile(in)->readTiles (dxMin, dxMax, dyMin, dyMax, lx, ly); - return 1; - } - catch (const std::exception &e) - { - setErrorMessage (e); - return 0; - } -} - - -const ImfHeader * -ImfTiledInputHeader (const ImfTiledInputFile *in) -{ - return (const ImfHeader *) &infile(in)->header(); -} - - -int -ImfTiledInputChannels (const ImfTiledInputFile *in) -{ - return infile(in)->channels(); -} - - -const char * -ImfTiledInputFileName (const ImfTiledInputFile *in) -{ - return infile(in)->fileName(); -} - - -int -ImfTiledInputTileXSize (const ImfTiledInputFile *in) -{ - return infile(in)->tileXSize(); -} - - -int -ImfTiledInputTileYSize (const ImfTiledInputFile *in) -{ - return infile(in)->tileYSize(); -} - - -int -ImfTiledInputLevelMode (const ImfTiledInputFile *in) -{ - return infile(in)->levelMode(); -} - - -int -ImfTiledInputLevelRoundingMode (const ImfTiledInputFile *in) -{ - return infile(in)->levelRoundingMode(); -} - - -ImfLut * -ImfNewRound12logLut (int channels) -{ - try - { - return (ImfLut *) new OPENEXR_IMF_INTERNAL_NAMESPACE::RgbaLut - (OPENEXR_IMF_INTERNAL_NAMESPACE::round12log, OPENEXR_IMF_INTERNAL_NAMESPACE::RgbaChannels (channels)); - } - catch (const std::exception &e) - { - setErrorMessage (e); - return 0; - } -} - - -ImfLut * -ImfNewRoundNBitLut (unsigned int n, int channels) -{ - try - { - return (ImfLut *) new OPENEXR_IMF_INTERNAL_NAMESPACE::RgbaLut - (OPENEXR_IMF_INTERNAL_NAMESPACE::roundNBit (n), OPENEXR_IMF_INTERNAL_NAMESPACE::RgbaChannels (channels)); - } - catch (const std::exception &e) - { - setErrorMessage (e); - return 0; - } -} - - -void -ImfDeleteLut (ImfLut *lut) -{ - delete (OPENEXR_IMF_INTERNAL_NAMESPACE::RgbaLut *) lut; -} - - -void -ImfApplyLut (ImfLut *lut, ImfRgba *data, int nData, int stride) -{ - ((OPENEXR_IMF_INTERNAL_NAMESPACE::RgbaLut *)lut)->apply ((OPENEXR_IMF_INTERNAL_NAMESPACE::Rgba *)data, nData, stride); -} - - -const char * -ImfErrorMessage () -{ - return errorMessage; -} diff --git a/3rdparty/openexr/IlmImf/ImfCRgbaFile.h b/3rdparty/openexr/IlmImf/ImfCRgbaFile.h deleted file mode 100644 index db5824781a..0000000000 --- a/3rdparty/openexr/IlmImf/ImfCRgbaFile.h +++ /dev/null @@ -1,555 +0,0 @@ -/* - -Copyright (c) 2002, Industrial Light & Magic, a division of Lucas -Digital Ltd. LLC - -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: -* Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. -* Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. -* Neither the name of Industrial Light & Magic nor the names of -its contributors may be used to endorse or promote products derived -from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -*/ - -#ifndef INCLUDED_IMF_C_RGBA_FILE_H -#define INCLUDED_IMF_C_RGBA_FILE_H - -#include "ImfExport.h" - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -/* -** Interpreting unsigned shorts as 16-bit floating point numbers -*/ - -typedef unsigned short ImfHalf; - -IMF_EXPORT -void ImfFloatToHalf (float f, - ImfHalf *h); - -IMF_EXPORT -void ImfFloatToHalfArray (int n, - const float f[/*n*/], - ImfHalf h[/*n*/]); - -IMF_EXPORT -float ImfHalfToFloat (ImfHalf h); - -IMF_EXPORT -void ImfHalfToFloatArray (int n, - const ImfHalf h[/*n*/], - float f[/*n*/]); - -/* -** RGBA pixel; memory layout must be the same as struct Imf::Rgba. -*/ - -struct ImfRgba -{ - ImfHalf r; - ImfHalf g; - ImfHalf b; - ImfHalf a; -}; - -typedef struct ImfRgba ImfRgba; - -/* -** Magic number; this must be the same as Imf::MAGIC -*/ - -#define IMF_MAGIC 20000630 - -/* -** Version number; this must be the same as Imf::EXR_VERSION -*/ - -#define IMF_VERSION_NUMBER 2 - -/* -** Line order; values must the the same as in Imf::LineOrder. -*/ - -#define IMF_INCREASING_Y 0 -#define IMF_DECREASING_Y 1 -#define IMF_RANDOM_Y 2 - - -/* -** Compression types; values must be the same as in Imf::Compression. -*/ - -#define IMF_NO_COMPRESSION 0 -#define IMF_RLE_COMPRESSION 1 -#define IMF_ZIPS_COMPRESSION 2 -#define IMF_ZIP_COMPRESSION 3 -#define IMF_PIZ_COMPRESSION 4 -#define IMF_PXR24_COMPRESSION 5 -#define IMF_B44_COMPRESSION 6 -#define IMF_B44A_COMPRESSION 7 - - -/* -** Channels; values must be the same as in Imf::RgbaChannels. -*/ - -#define IMF_WRITE_R 0x01 -#define IMF_WRITE_G 0x02 -#define IMF_WRITE_B 0x04 -#define IMF_WRITE_A 0x08 -#define IMF_WRITE_Y 0x10 -#define IMF_WRITE_C 0x20 -#define IMF_WRITE_RGB 0x07 -#define IMF_WRITE_RGBA 0x0f -#define IMF_WRITE_YC 0x30 -#define IMF_WRITE_YA 0x18 -#define IMF_WRITE_YCA 0x38 - - -/* -** Level modes; values must be the same as in Imf::LevelMode -*/ - -#define IMF_ONE_LEVEL 0 -#define IMF_MIPMAP_LEVELS 1 -#define IMF_RIPMAP_LEVELS 2 - - -/* -** Level rounding modes; values must be the same as in Imf::LevelRoundingMode -*/ - -#define IMF_ROUND_DOWN 0 -#define IMF_ROUND_UP 1 - - -/* -** RGBA file header -*/ - -struct ImfHeader; -typedef struct ImfHeader ImfHeader; - -IMF_EXPORT -ImfHeader * ImfNewHeader (void); - -IMF_EXPORT -void ImfDeleteHeader (ImfHeader *hdr); - -IMF_EXPORT -ImfHeader * ImfCopyHeader (const ImfHeader *hdr); - -IMF_EXPORT -void ImfHeaderSetDisplayWindow (ImfHeader *hdr, - int xMin, int yMin, - int xMax, int yMax); - -IMF_EXPORT -void ImfHeaderDisplayWindow (const ImfHeader *hdr, - int *xMin, int *yMin, - int *xMax, int *yMax); - -IMF_EXPORT -void ImfHeaderSetDataWindow (ImfHeader *hdr, - int xMin, int yMin, - int xMax, int yMax); - -IMF_EXPORT -void ImfHeaderDataWindow (const ImfHeader *hdr, - int *xMin, int *yMin, - int *xMax, int *yMax); - -IMF_EXPORT -void ImfHeaderSetPixelAspectRatio (ImfHeader *hdr, - float pixelAspectRatio); - -IMF_EXPORT -float ImfHeaderPixelAspectRatio (const ImfHeader *hdr); - -IMF_EXPORT -void ImfHeaderSetScreenWindowCenter (ImfHeader *hdr, - float x, float y); - -IMF_EXPORT -void ImfHeaderScreenWindowCenter (const ImfHeader *hdr, - float *x, float *y); - -IMF_EXPORT -void ImfHeaderSetScreenWindowWidth (ImfHeader *hdr, - float width); - -IMF_EXPORT -float ImfHeaderScreenWindowWidth (const ImfHeader *hdr); - -IMF_EXPORT -void ImfHeaderSetLineOrder (ImfHeader *hdr, - int lineOrder); - -IMF_EXPORT -int ImfHeaderLineOrder (const ImfHeader *hdr); - -IMF_EXPORT -void ImfHeaderSetCompression (ImfHeader *hdr, - int compression); - -IMF_EXPORT -int ImfHeaderCompression (const ImfHeader *hdr); - -IMF_EXPORT -int ImfHeaderSetIntAttribute (ImfHeader *hdr, - const char name[], - int value); - -IMF_EXPORT -int ImfHeaderIntAttribute (const ImfHeader *hdr, - const char name[], - int *value); - -IMF_EXPORT -int ImfHeaderSetFloatAttribute (ImfHeader *hdr, - const char name[], - float value); - -IMF_EXPORT -int ImfHeaderSetDoubleAttribute (ImfHeader *hdr, - const char name[], - double value); - -IMF_EXPORT -int ImfHeaderFloatAttribute (const ImfHeader *hdr, - const char name[], - float *value); - -IMF_EXPORT -int ImfHeaderDoubleAttribute (const ImfHeader *hdr, - const char name[], - double *value); - -IMF_EXPORT -int ImfHeaderSetStringAttribute (ImfHeader *hdr, - const char name[], - const char value[]); - -IMF_EXPORT -int ImfHeaderStringAttribute (const ImfHeader *hdr, - const char name[], - const char **value); - -IMF_EXPORT -int ImfHeaderSetBox2iAttribute (ImfHeader *hdr, - const char name[], - int xMin, int yMin, - int xMax, int yMax); - -IMF_EXPORT -int ImfHeaderBox2iAttribute (const ImfHeader *hdr, - const char name[], - int *xMin, int *yMin, - int *xMax, int *yMax); - -IMF_EXPORT -int ImfHeaderSetBox2fAttribute (ImfHeader *hdr, - const char name[], - float xMin, float yMin, - float xMax, float yMax); - -IMF_EXPORT -int ImfHeaderBox2fAttribute (const ImfHeader *hdr, - const char name[], - float *xMin, float *yMin, - float *xMax, float *yMax); - -IMF_EXPORT -int ImfHeaderSetV2iAttribute (ImfHeader *hdr, - const char name[], - int x, int y); - -IMF_EXPORT -int ImfHeaderV2iAttribute (const ImfHeader *hdr, - const char name[], - int *x, int *y); - -IMF_EXPORT -int ImfHeaderSetV2fAttribute (ImfHeader *hdr, - const char name[], - float x, float y); - -IMF_EXPORT -int ImfHeaderV2fAttribute (const ImfHeader *hdr, - const char name[], - float *x, float *y); - -IMF_EXPORT -int ImfHeaderSetV3iAttribute (ImfHeader *hdr, - const char name[], - int x, int y, int z); - -IMF_EXPORT -int ImfHeaderV3iAttribute (const ImfHeader *hdr, - const char name[], - int *x, int *y, int *z); - -IMF_EXPORT -int ImfHeaderSetV3fAttribute (ImfHeader *hdr, - const char name[], - float x, float y, float z); - -IMF_EXPORT -int ImfHeaderV3fAttribute (const ImfHeader *hdr, - const char name[], - float *x, float *y, float *z); - -IMF_EXPORT -int ImfHeaderSetM33fAttribute (ImfHeader *hdr, - const char name[], - const float m[3][3]); - -IMF_EXPORT -int ImfHeaderM33fAttribute (const ImfHeader *hdr, - const char name[], - float m[3][3]); - -IMF_EXPORT -int ImfHeaderSetM44fAttribute (ImfHeader *hdr, - const char name[], - const float m[4][4]); - -IMF_EXPORT -int ImfHeaderM44fAttribute (const ImfHeader *hdr, - const char name[], - float m[4][4]); - -/* -** RGBA output file -*/ - -struct ImfOutputFile; -typedef struct ImfOutputFile ImfOutputFile; - -IMF_EXPORT -ImfOutputFile * ImfOpenOutputFile (const char name[], - const ImfHeader *hdr, - int channels); - -IMF_EXPORT -int ImfCloseOutputFile (ImfOutputFile *out); - -IMF_EXPORT -int ImfOutputSetFrameBuffer (ImfOutputFile *out, - const ImfRgba *base, - size_t xStride, - size_t yStride); - -IMF_EXPORT -int ImfOutputWritePixels (ImfOutputFile *out, - int numScanLines); - -IMF_EXPORT -int ImfOutputCurrentScanLine (const ImfOutputFile *out); - -IMF_EXPORT -const ImfHeader * ImfOutputHeader (const ImfOutputFile *out); - -IMF_EXPORT -int ImfOutputChannels (const ImfOutputFile *out); - - -/* -** Tiled RGBA output file -*/ - -struct ImfTiledOutputFile; -typedef struct ImfTiledOutputFile ImfTiledOutputFile; - -IMF_EXPORT -ImfTiledOutputFile * ImfOpenTiledOutputFile (const char name[], - const ImfHeader *hdr, - int channels, - int xSize, int ySize, - int mode, int rmode); - -IMF_EXPORT -int ImfCloseTiledOutputFile (ImfTiledOutputFile *out); - -IMF_EXPORT -int ImfTiledOutputSetFrameBuffer (ImfTiledOutputFile *out, - const ImfRgba *base, - size_t xStride, - size_t yStride); - -IMF_EXPORT -int ImfTiledOutputWriteTile (ImfTiledOutputFile *out, - int dx, int dy, - int lx, int ly); - -IMF_EXPORT -int ImfTiledOutputWriteTiles (ImfTiledOutputFile *out, - int dxMin, int dxMax, - int dyMin, int dyMax, - int lx, int ly); - -IMF_EXPORT -const ImfHeader * ImfTiledOutputHeader (const ImfTiledOutputFile *out); - -IMF_EXPORT -int ImfTiledOutputChannels (const ImfTiledOutputFile *out); - -IMF_EXPORT -int ImfTiledOutputTileXSize (const ImfTiledOutputFile *out); - -IMF_EXPORT -int ImfTiledOutputTileYSize (const ImfTiledOutputFile *out); - -IMF_EXPORT -int ImfTiledOutputLevelMode (const ImfTiledOutputFile *out); - -IMF_EXPORT -int ImfTiledOutputLevelRoundingMode - (const ImfTiledOutputFile *out); - - -/* -** RGBA input file -*/ - -struct ImfInputFile; -typedef struct ImfInputFile ImfInputFile; - -ImfInputFile * ImfOpenInputFile (const char name[]); - -IMF_EXPORT -int ImfCloseInputFile (ImfInputFile *in); - -IMF_EXPORT -int ImfInputSetFrameBuffer (ImfInputFile *in, - ImfRgba *base, - size_t xStride, - size_t yStride); - -IMF_EXPORT -int ImfInputReadPixels (ImfInputFile *in, - int scanLine1, - int scanLine2); - -IMF_EXPORT -const ImfHeader * ImfInputHeader (const ImfInputFile *in); - -IMF_EXPORT -int ImfInputChannels (const ImfInputFile *in); - -IMF_EXPORT -const char * ImfInputFileName (const ImfInputFile *in); - - -/* -** Tiled RGBA input file -*/ - -struct ImfTiledInputFile; -typedef struct ImfTiledInputFile ImfTiledInputFile; - -IMF_EXPORT -ImfTiledInputFile * ImfOpenTiledInputFile (const char name[]); - -IMF_EXPORT -int ImfCloseTiledInputFile (ImfTiledInputFile *in); - -IMF_EXPORT -int ImfTiledInputSetFrameBuffer (ImfTiledInputFile *in, - ImfRgba *base, - size_t xStride, - size_t yStride); - -IMF_EXPORT -int ImfTiledInputReadTile (ImfTiledInputFile *in, - int dx, int dy, - int lx, int ly); - -IMF_EXPORT -int ImfTiledInputReadTiles (ImfTiledInputFile *in, - int dxMin, int dxMax, - int dyMin, int dyMax, - int lx, int ly); - -IMF_EXPORT -const ImfHeader * ImfTiledInputHeader (const ImfTiledInputFile *in); - -IMF_EXPORT -int ImfTiledInputChannels (const ImfTiledInputFile *in); - -IMF_EXPORT -const char * ImfTiledInputFileName (const ImfTiledInputFile *in); - -IMF_EXPORT -int ImfTiledInputTileXSize (const ImfTiledInputFile *in); - -IMF_EXPORT -int ImfTiledInputTileYSize (const ImfTiledInputFile *in); - -IMF_EXPORT -int ImfTiledInputLevelMode (const ImfTiledInputFile *in); - -IMF_EXPORT -int ImfTiledInputLevelRoundingMode - (const ImfTiledInputFile *in); - -/* -** Lookup tables -*/ - -struct ImfLut; -typedef struct ImfLut ImfLut; - -IMF_EXPORT -ImfLut * ImfNewRound12logLut (int channels); - -IMF_EXPORT -ImfLut * ImfNewRoundNBitLut (unsigned int n, int channels); - -IMF_EXPORT -void ImfDeleteLut (ImfLut *lut); - -IMF_EXPORT -void ImfApplyLut (ImfLut *lut, - ImfRgba *data, - int nData, - int stride); -/* -** Most recent error message -*/ - -IMF_EXPORT -const char * ImfErrorMessage (void); - - -#ifdef __cplusplus -} /* extern "C" */ -#endif - -#endif diff --git a/3rdparty/openexr/IlmImf/ImfChannelList.cpp b/3rdparty/openexr/IlmImf/ImfChannelList.cpp deleted file mode 100644 index ae2ccaa45e..0000000000 --- a/3rdparty/openexr/IlmImf/ImfChannelList.cpp +++ /dev/null @@ -1,322 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - - -//----------------------------------------------------------------------------- -// -// class Channel -// class ChannelList -// -//----------------------------------------------------------------------------- - -#include -#include - - -using std::string; -using std::set; -#include "ImfNamespace.h" - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_ENTER - - -Channel::Channel (PixelType t, int xs, int ys, bool pl): - type (t), - xSampling (xs), - ySampling (ys), - pLinear (pl) -{ - // empty -} - - -bool -Channel::operator == (const Channel &other) const -{ - return type == other.type && - xSampling == other.xSampling && - ySampling == other.ySampling && - pLinear == other.pLinear; -} - - -void -ChannelList::insert (const char name[], const Channel &channel) -{ - if (name[0] == 0) - THROW (IEX_NAMESPACE::ArgExc, "Image channel name cannot be an empty string."); - - _map[name] = channel; -} - - -void -ChannelList::insert (const string &name, const Channel &channel) -{ - insert (name.c_str(), channel); -} - - -Channel & -ChannelList::operator [] (const char name[]) -{ - ChannelMap::iterator i = _map.find (name); - - if (i == _map.end()) - THROW (IEX_NAMESPACE::ArgExc, "Cannot find image channel \"" << name << "\"."); - - return i->second; -} - - -const Channel & -ChannelList::operator [] (const char name[]) const -{ - ChannelMap::const_iterator i = _map.find (name); - - if (i == _map.end()) - THROW (IEX_NAMESPACE::ArgExc, "Cannot find image channel \"" << name << "\"."); - - return i->second; -} - - -Channel & -ChannelList::operator [] (const string &name) -{ - return this->operator[] (name.c_str()); -} - - -const Channel & -ChannelList::operator [] (const string &name) const -{ - return this->operator[] (name.c_str()); -} - - -Channel * -ChannelList::findChannel (const char name[]) -{ - ChannelMap::iterator i = _map.find (name); - return (i == _map.end())? 0: &i->second; -} - - -const Channel * -ChannelList::findChannel (const char name[]) const -{ - ChannelMap::const_iterator i = _map.find (name); - return (i == _map.end())? 0: &i->second; -} - - -Channel * -ChannelList::findChannel (const string &name) -{ - return findChannel (name.c_str()); -} - - -const Channel * -ChannelList::findChannel (const string &name) const -{ - return findChannel (name.c_str()); -} - - -ChannelList::Iterator -ChannelList::begin () -{ - return _map.begin(); -} - - -ChannelList::ConstIterator -ChannelList::begin () const -{ - return _map.begin(); -} - - -ChannelList::Iterator -ChannelList::end () -{ - return _map.end(); -} - - -ChannelList::ConstIterator -ChannelList::end () const -{ - return _map.end(); -} - - -ChannelList::Iterator -ChannelList::find (const char name[]) -{ - return _map.find (name); -} - - -ChannelList::ConstIterator -ChannelList::find (const char name[]) const -{ - return _map.find (name); -} - - -ChannelList::Iterator -ChannelList::find (const string &name) -{ - return find (name.c_str()); -} - - -ChannelList::ConstIterator -ChannelList::find (const string &name) const -{ - return find (name.c_str()); -} - - -void -ChannelList::layers (set &layerNames) const -{ - layerNames.clear(); - - for (ConstIterator i = begin(); i != end(); ++i) - { - string layerName = i.name(); - size_t pos = layerName.rfind ('.'); - - if (pos != string::npos && pos != 0 && pos + 1 < layerName.size()) - { - layerName.erase (pos); - layerNames.insert (layerName); - } - } -} - - -void -ChannelList::channelsInLayer (const string &layerName, - Iterator &first, - Iterator &last) -{ - channelsWithPrefix (layerName + '.', first, last); -} - - -void -ChannelList::channelsInLayer (const string &layerName, - ConstIterator &first, - ConstIterator &last) const -{ - channelsWithPrefix (layerName + '.', first, last); -} - - -void -ChannelList::channelsWithPrefix (const char prefix[], - Iterator &first, - Iterator &last) -{ - first = last = _map.lower_bound (prefix); - size_t n = int(strlen (prefix)); - - while (last != Iterator (_map.end()) && - strncmp (last.name(), prefix, n) <= 0) - { - ++last; - } -} - - -void -ChannelList::channelsWithPrefix (const char prefix[], - ConstIterator &first, - ConstIterator &last) const -{ - first = last = _map.lower_bound (prefix); - size_t n = strlen (prefix); - - while (last != ConstIterator (_map.end()) && - strncmp (last.name(), prefix, n) <= 0) - { - ++last; - } -} - - -void -ChannelList::channelsWithPrefix (const string &prefix, - Iterator &first, - Iterator &last) -{ - return channelsWithPrefix (prefix.c_str(), first, last); -} - - -void -ChannelList::channelsWithPrefix (const string &prefix, - ConstIterator &first, - ConstIterator &last) const -{ - return channelsWithPrefix (prefix.c_str(), first, last); -} - - -bool -ChannelList::operator == (const ChannelList &other) const -{ - ConstIterator i = begin(); - ConstIterator j = other.begin(); - - while (i != end() && j != other.end()) - { - if (!(i.channel() == j.channel())) - return false; - - ++i; - ++j; - } - - return i == end() && j == other.end(); -} - - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_EXIT diff --git a/3rdparty/openexr/IlmImf/ImfChannelList.h b/3rdparty/openexr/IlmImf/ImfChannelList.h deleted file mode 100644 index d36e7dc56e..0000000000 --- a/3rdparty/openexr/IlmImf/ImfChannelList.h +++ /dev/null @@ -1,477 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - - -#ifndef INCLUDED_IMF_CHANNEL_LIST_H -#define INCLUDED_IMF_CHANNEL_LIST_H - -//----------------------------------------------------------------------------- -// -// class Channel -// class ChannelList -// -//----------------------------------------------------------------------------- - -#include "ImfName.h" -#include "ImfPixelType.h" - -#include "ImfNamespace.h" -#include "ImfExport.h" - -#include -#include -#include - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER - - -struct Channel -{ - //------------------------------ - // Data type; see ImfPixelType.h - //------------------------------ - - PixelType type; - - - //-------------------------------------------- - // Subsampling: pixel (x, y) is present in the - // channel only if - // - // x % xSampling == 0 && y % ySampling == 0 - // - //-------------------------------------------- - - int xSampling; - int ySampling; - - - //-------------------------------------------------------------- - // Hint to lossy compression methods that indicates whether - // human perception of the quantity represented by this channel - // is closer to linear or closer to logarithmic. Compression - // methods may optimize image quality by adjusting pixel data - // quantization acording to this hint. - // For example, perception of red, green, blue and luminance is - // approximately logarithmic; the difference between 0.1 and 0.2 - // is perceived to be roughly the same as the difference between - // 1.0 and 2.0. Perception of chroma coordinates tends to be - // closer to linear than logarithmic; the difference between 0.1 - // and 0.2 is perceived to be roughly the same as the difference - // between 1.0 and 1.1. - //-------------------------------------------------------------- - - bool pLinear; - - - //------------ - // Constructor - //------------ - - IMF_EXPORT - Channel (PixelType type = HALF, - int xSampling = 1, - int ySampling = 1, - bool pLinear = false); - - - //------------ - // Operator == - //------------ - - IMF_EXPORT - bool operator == (const Channel &other) const; -}; - - -class ChannelList -{ - public: - - //-------------- - // Add a channel - //-------------- - - IMF_EXPORT - void insert (const char name[], - const Channel &channel); - - IMF_EXPORT - void insert (const std::string &name, - const Channel &channel); - - //------------------------------------------------------------------ - // Access to existing channels: - // - // [n] Returns a reference to the channel with name n. - // If no channel with name n exists, an IEX_NAMESPACE::ArgExc - // is thrown. - // - // findChannel(n) Returns a pointer to the channel with name n, - // or 0 if no channel with name n exists. - // - //------------------------------------------------------------------ - - IMF_EXPORT - Channel & operator [] (const char name[]); - IMF_EXPORT - const Channel & operator [] (const char name[]) const; - - IMF_EXPORT - Channel & operator [] (const std::string &name); - IMF_EXPORT - const Channel & operator [] (const std::string &name) const; - - IMF_EXPORT - Channel * findChannel (const char name[]); - IMF_EXPORT - const Channel * findChannel (const char name[]) const; - - IMF_EXPORT - Channel * findChannel (const std::string &name); - IMF_EXPORT - const Channel * findChannel (const std::string &name) const; - - - //------------------------------------------- - // Iterator-style access to existing channels - //------------------------------------------- - - typedef std::map ChannelMap; - - class Iterator; - class ConstIterator; - - IMF_EXPORT - Iterator begin (); - IMF_EXPORT - ConstIterator begin () const; - - IMF_EXPORT - Iterator end (); - IMF_EXPORT - ConstIterator end () const; - - IMF_EXPORT - Iterator find (const char name[]); - IMF_EXPORT - ConstIterator find (const char name[]) const; - - IMF_EXPORT - Iterator find (const std::string &name); - IMF_EXPORT - ConstIterator find (const std::string &name) const; - - - //----------------------------------------------------------------- - // Support for image layers: - // - // In an image file with many channels it is sometimes useful to - // group the channels into "layers", that is, into sets of channels - // that logically belong together. Grouping channels into layers - // is done using a naming convention: channel C in layer L is - // called "L.C". - // - // For example, a computer graphic image may contain separate - // R, G and B channels for light that originated at each of - // several different virtual light sources. The channels in - // this image might be called "light1.R", "light1.G", "light1.B", - // "light2.R", "light2.G", "light2.B", etc. - // - // Note that this naming convention allows layers to be nested; - // for example, "light1.specular.R" identifies the "R" channel - // in the "specular" sub-layer of layer "light1". - // - // Channel names that don't contain a "." or that contain a - // "." only at the beginning or at the end are not considered - // to be part of any layer. - // - // layers(lns) sorts the channels in this ChannelList - // into layers and stores the names of - // all layers, sorted alphabetically, - // into string set lns. - // - // channelsInLayer(ln,f,l) stores a pair of iterators in f and l - // such that the loop - // - // for (ConstIterator i = f; i != l; ++i) - // ... - // - // iterates over all channels in layer ln. - // channelsInLayer (ln, l, p) calls - // channelsWithPrefix (ln + ".", l, p). - // - //----------------------------------------------------------------- - - IMF_EXPORT - void layers (std::set &layerNames) const; - - IMF_EXPORT - void channelsInLayer (const std::string &layerName, - Iterator &first, - Iterator &last); - - IMF_EXPORT - void channelsInLayer (const std::string &layerName, - ConstIterator &first, - ConstIterator &last) const; - - - //------------------------------------------------------------------- - // Find all channels whose name begins with a given prefix: - // - // channelsWithPrefix(p,f,l) stores a pair of iterators in f and l - // such that the following loop iterates over all channels whose name - // begins with string p: - // - // for (ConstIterator i = f; i != l; ++i) - // ... - // - //------------------------------------------------------------------- - - IMF_EXPORT - void channelsWithPrefix (const char prefix[], - Iterator &first, - Iterator &last); - - IMF_EXPORT - void channelsWithPrefix (const char prefix[], - ConstIterator &first, - ConstIterator &last) const; - - IMF_EXPORT - void channelsWithPrefix (const std::string &prefix, - Iterator &first, - Iterator &last); - - IMF_EXPORT - void channelsWithPrefix (const std::string &prefix, - ConstIterator &first, - ConstIterator &last) const; - - //------------ - // Operator == - //------------ - - IMF_EXPORT - bool operator == (const ChannelList &other) const; - - private: - - ChannelMap _map; -}; - - -//---------- -// Iterators -//---------- - -class ChannelList::Iterator -{ - public: - - IMF_EXPORT - Iterator (); - IMF_EXPORT - Iterator (const ChannelList::ChannelMap::iterator &i); - - IMF_EXPORT - Iterator & operator ++ (); - IMF_EXPORT - Iterator operator ++ (int); - - IMF_EXPORT - const char * name () const; - IMF_EXPORT - Channel & channel () const; - - private: - - friend class ChannelList::ConstIterator; - - ChannelList::ChannelMap::iterator _i; -}; - - -class ChannelList::ConstIterator -{ - public: - - IMF_EXPORT - ConstIterator (); - IMF_EXPORT - ConstIterator (const ChannelList::ChannelMap::const_iterator &i); - IMF_EXPORT - ConstIterator (const ChannelList::Iterator &other); - - IMF_EXPORT - ConstIterator & operator ++ (); - IMF_EXPORT - ConstIterator operator ++ (int); - - IMF_EXPORT - const char * name () const; - IMF_EXPORT - const Channel & channel () const; - - private: - - friend bool operator == (const ConstIterator &, const ConstIterator &); - friend bool operator != (const ConstIterator &, const ConstIterator &); - - ChannelList::ChannelMap::const_iterator _i; -}; - - -//----------------- -// Inline Functions -//----------------- - -inline -ChannelList::Iterator::Iterator (): _i() -{ - // empty -} - - -inline -ChannelList::Iterator::Iterator (const ChannelList::ChannelMap::iterator &i): - _i (i) -{ - // empty -} - - -inline ChannelList::Iterator & -ChannelList::Iterator::operator ++ () -{ - ++_i; - return *this; -} - - -inline ChannelList::Iterator -ChannelList::Iterator::operator ++ (int) -{ - Iterator tmp = *this; - ++_i; - return tmp; -} - - -inline const char * -ChannelList::Iterator::name () const -{ - return *_i->first; -} - - -inline Channel & -ChannelList::Iterator::channel () const -{ - return _i->second; -} - - -inline -ChannelList::ConstIterator::ConstIterator (): _i() -{ - // empty -} - -inline -ChannelList::ConstIterator::ConstIterator - (const ChannelList::ChannelMap::const_iterator &i): _i (i) -{ - // empty -} - - -inline -ChannelList::ConstIterator::ConstIterator (const ChannelList::Iterator &other): - _i (other._i) -{ - // empty -} - -inline ChannelList::ConstIterator & -ChannelList::ConstIterator::operator ++ () -{ - ++_i; - return *this; -} - - -inline ChannelList::ConstIterator -ChannelList::ConstIterator::operator ++ (int) -{ - ConstIterator tmp = *this; - ++_i; - return tmp; -} - - -inline const char * -ChannelList::ConstIterator::name () const -{ - return *_i->first; -} - -inline const Channel & -ChannelList::ConstIterator::channel () const -{ - return _i->second; -} - - -inline bool -operator == (const ChannelList::ConstIterator &x, - const ChannelList::ConstIterator &y) -{ - return x._i == y._i; -} - - -inline bool -operator != (const ChannelList::ConstIterator &x, - const ChannelList::ConstIterator &y) -{ - return !(x == y); -} - - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT - -#endif diff --git a/3rdparty/openexr/IlmImf/ImfChannelListAttribute.cpp b/3rdparty/openexr/IlmImf/ImfChannelListAttribute.cpp deleted file mode 100644 index 5549493097..0000000000 --- a/3rdparty/openexr/IlmImf/ImfChannelListAttribute.cpp +++ /dev/null @@ -1,150 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - - -//----------------------------------------------------------------------------- -// -// class ChannelListAttribute -// -//----------------------------------------------------------------------------- - -#include - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_ENTER - -namespace { - -template -void checkIsNullTerminated (const char (&str)[N], const char *what) -{ - for (size_t i = 0; i < N; ++i) { - if (str[i] == '\0') - return; - } - std::stringstream s; - s << "Invalid " << what << ": it is more than " << (N - 1) - << " characters long."; - throw IEX_NAMESPACE::InputExc(s); -} - -} // namespace - - -template <> -const char * -ChannelListAttribute::staticTypeName () -{ - return "chlist"; -} - -using namespace OPENEXR_IMF_INTERNAL_NAMESPACE; - -template <> -void -ChannelListAttribute::writeValueTo (OStream &os, int version) const -{ - for (ChannelList::ConstIterator i = _value.begin(); - i != _value.end(); - ++i) - { - // - // Write name - // - - Xdr::write (os, i.name()); - - // - // Write Channel struct - // - - Xdr::write (os, int (i.channel().type)); - Xdr::write (os, i.channel().pLinear); - Xdr::pad (os, 3); - Xdr::write (os, i.channel().xSampling); - Xdr::write (os, i.channel().ySampling); - } - - // - // Write end of list marker - // - - Xdr::write (os, ""); -} - - -template <> -void -ChannelListAttribute::readValueFrom (IStream &is, - int size, - int version) -{ - while (true) - { - // - // Read name; zero length name means end of channel list - // - - char name[Name::SIZE]; - Xdr::read (is,Name::MAX_LENGTH,name); - - if (name[0] == 0) - break; - - checkIsNullTerminated (name, "channel name"); - - // - // Read Channel struct - // - - int type; - bool pLinear; - int xSampling; - int ySampling; - - Xdr::read (is, type); - Xdr::read (is, pLinear); - Xdr::skip (is, 3); - Xdr::read (is, xSampling); - Xdr::read (is, ySampling); - - _value.insert (name, Channel (PixelType (type), - xSampling, - ySampling, - pLinear)); - } -} - - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_EXIT diff --git a/3rdparty/openexr/IlmImf/ImfChannelListAttribute.h b/3rdparty/openexr/IlmImf/ImfChannelListAttribute.h deleted file mode 100644 index 60d89078c2..0000000000 --- a/3rdparty/openexr/IlmImf/ImfChannelListAttribute.h +++ /dev/null @@ -1,74 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - - -#ifndef INCLUDED_IMF_CHANNEL_LIST_ATTRIBUTE_H -#define INCLUDED_IMF_CHANNEL_LIST_ATTRIBUTE_H - -//----------------------------------------------------------------------------- -// -// class ChannelListAttribute -// -//----------------------------------------------------------------------------- - -#include "ImfAttribute.h" -#include "ImfChannelList.h" -#include "ImfExport.h" - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER - - -typedef TypedAttribute ChannelListAttribute; - -template <> -IMF_EXPORT -const char *ChannelListAttribute::staticTypeName (); - -template <> -IMF_EXPORT -void ChannelListAttribute::writeValueTo (OPENEXR_IMF_INTERNAL_NAMESPACE::OStream &, - int) const; - -template <> -IMF_EXPORT -void ChannelListAttribute::readValueFrom (OPENEXR_IMF_INTERNAL_NAMESPACE::IStream &, - int, int); - - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT - - -#endif - diff --git a/3rdparty/openexr/IlmImf/ImfCheckedArithmetic.h b/3rdparty/openexr/IlmImf/ImfCheckedArithmetic.h deleted file mode 100644 index 6a7fc15283..0000000000 --- a/3rdparty/openexr/IlmImf/ImfCheckedArithmetic.h +++ /dev/null @@ -1,163 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2009, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - -#ifndef INCLUDED_IMF_CHECKED_ARITHMETIC_H -#define INCLUDED_IMF_CHECKED_ARITHMETIC_H - -//----------------------------------------------------------------------------- -// -// Integer arithmetic operations that throw exceptions -// on overflow, underflow or division by zero. -// -//----------------------------------------------------------------------------- - -#include -#include "IexMathExc.h" -#include "ImfNamespace.h" - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER - -template struct StaticAssertionFailed; -template <> struct StaticAssertionFailed {}; - -#define IMF_STATIC_ASSERT(x) \ - do {StaticAssertionFailed staticAssertionFailed; ((void) staticAssertionFailed);} while (false) - - -template -T -uiMult (T a, T b) -{ - // - // Unsigned integer multiplication - // - - IMF_STATIC_ASSERT (!std::numeric_limits::is_signed && - std::numeric_limits::is_integer); - - if (a > 0 && b > std::numeric_limits::max() / a) - throw IEX_NAMESPACE::OverflowExc ("Integer multiplication overflow."); - - return a * b; -} - - -template -T -uiDiv (T a, T b) -{ - // - // Unsigned integer division - // - - IMF_STATIC_ASSERT (!std::numeric_limits::is_signed && - std::numeric_limits::is_integer); - - if (b == 0) - throw IEX_NAMESPACE::DivzeroExc ("Integer division by zero."); - - return a / b; -} - - -template -T -uiAdd (T a, T b) -{ - // - // Unsigned integer addition - // - - IMF_STATIC_ASSERT (!std::numeric_limits::is_signed && - std::numeric_limits::is_integer); - - if (a > std::numeric_limits::max() - b) - throw IEX_NAMESPACE::OverflowExc ("Integer addition overflow."); - - return a + b; -} - - -template -T -uiSub (T a, T b) -{ - // - // Unsigned integer subtraction - // - - IMF_STATIC_ASSERT (!std::numeric_limits::is_signed && - std::numeric_limits::is_integer); - - if (a < b) - throw IEX_NAMESPACE::UnderflowExc ("Integer subtraction underflow."); - - return a - b; -} - - -template -size_t -checkArraySize (T n, size_t s) -{ - // - // Verify that the size, in bytes, of an array with n elements - // of size s can be computed without overflowing: - // - // If computing - // - // size_t (n) * s - // - // would overflow, then throw an IEX_NAMESPACE::OverflowExc exception. - // Otherwise return - // - // size_t (n). - // - - IMF_STATIC_ASSERT (!std::numeric_limits::is_signed && - std::numeric_limits::is_integer); - - IMF_STATIC_ASSERT (sizeof (T) <= sizeof (size_t)); - - if (size_t (n) > std::numeric_limits::max() / s) - throw IEX_NAMESPACE::OverflowExc ("Integer multiplication overflow."); - - return size_t (n); -} - - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT - - -#endif diff --git a/3rdparty/openexr/IlmImf/ImfChromaticities.cpp b/3rdparty/openexr/IlmImf/ImfChromaticities.cpp deleted file mode 100644 index f354cdfe5a..0000000000 --- a/3rdparty/openexr/IlmImf/ImfChromaticities.cpp +++ /dev/null @@ -1,151 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2003, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - -//----------------------------------------------------------------------------- -// -// CIE (x,y) chromaticities, and conversions between -// RGB tiples and CIE XYZ tristimulus values. -// -//----------------------------------------------------------------------------- - -#include -#include "ImfNamespace.h" -#include - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_ENTER - - -Chromaticities::Chromaticities (const IMATH_NAMESPACE::V2f &red, - const IMATH_NAMESPACE::V2f &green, - const IMATH_NAMESPACE::V2f &blue, - const IMATH_NAMESPACE::V2f &white) -: - red (red), - green (green), - blue (blue), - white (white) -{ - // empty -} - - -bool -Chromaticities::operator == (const Chromaticities & c) const -{ - return red == c.red && green == c.green && blue == c.blue; -} - - -bool -Chromaticities::operator != (const Chromaticities & c) const -{ - return red != c.red || green != c.green || blue != c.blue; -} - - -IMATH_NAMESPACE::M44f -RGBtoXYZ (const Chromaticities chroma, float Y) -{ - // - // For an explanation of how the color conversion matrix is derived, - // see Roy Hall, "Illumination and Color in Computer Generated Imagery", - // Springer-Verlag, 1989, chapter 3, "Perceptual Response"; and - // Charles A. Poynton, "A Technical Introduction to Digital Video", - // John Wiley & Sons, 1996, chapter 7, "Color science for video". - // - - // - // X and Z values of RGB value (1, 1, 1), or "white" - // - - float X = chroma.white.x * Y / chroma.white.y; - float Z = (1 - chroma.white.x - chroma.white.y) * Y / chroma.white.y; - - // - // Scale factors for matrix rows - // - - float d = chroma.red.x * (chroma.blue.y - chroma.green.y) + - chroma.blue.x * (chroma.green.y - chroma.red.y) + - chroma.green.x * (chroma.red.y - chroma.blue.y); - - float Sr = (X * (chroma.blue.y - chroma.green.y) - - chroma.green.x * (Y * (chroma.blue.y - 1) + - chroma.blue.y * (X + Z)) + - chroma.blue.x * (Y * (chroma.green.y - 1) + - chroma.green.y * (X + Z))) / d; - - float Sg = (X * (chroma.red.y - chroma.blue.y) + - chroma.red.x * (Y * (chroma.blue.y - 1) + - chroma.blue.y * (X + Z)) - - chroma.blue.x * (Y * (chroma.red.y - 1) + - chroma.red.y * (X + Z))) / d; - - float Sb = (X * (chroma.green.y - chroma.red.y) - - chroma.red.x * (Y * (chroma.green.y - 1) + - chroma.green.y * (X + Z)) + - chroma.green.x * (Y * (chroma.red.y - 1) + - chroma.red.y * (X + Z))) / d; - - // - // Assemble the matrix - // - - IMATH_NAMESPACE::M44f M; - - M[0][0] = Sr * chroma.red.x; - M[0][1] = Sr * chroma.red.y; - M[0][2] = Sr * (1 - chroma.red.x - chroma.red.y); - - M[1][0] = Sg * chroma.green.x; - M[1][1] = Sg * chroma.green.y; - M[1][2] = Sg * (1 - chroma.green.x - chroma.green.y); - - M[2][0] = Sb * chroma.blue.x; - M[2][1] = Sb * chroma.blue.y; - M[2][2] = Sb * (1 - chroma.blue.x - chroma.blue.y); - - return M; -} - - -IMATH_NAMESPACE::M44f -XYZtoRGB (const Chromaticities chroma, float Y) -{ - return RGBtoXYZ (chroma, Y).inverse(); -} - - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_EXIT diff --git a/3rdparty/openexr/IlmImf/ImfChromaticities.h b/3rdparty/openexr/IlmImf/ImfChromaticities.h deleted file mode 100644 index 96b09284e3..0000000000 --- a/3rdparty/openexr/IlmImf/ImfChromaticities.h +++ /dev/null @@ -1,134 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2003, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - -#ifndef INCLUDED_IMF_CHROMATICITIES_H -#define INCLUDED_IMF_CHROMATICITIES_H - -//----------------------------------------------------------------------------- -// -// CIE (x,y) chromaticities, and conversions between -// RGB tiples and CIE XYZ tristimulus values. -// -//----------------------------------------------------------------------------- - -#include "ImathVec.h" -#include "ImathMatrix.h" -#include "ImfNamespace.h" -#include "ImfExport.h" - - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER - - -struct Chromaticities -{ - //----------------------------------------------- - // The CIE x and y coordinates of the RGB triples - // (1,0,0), (0,1,0), (0,0,1) and (1,1,1). - //----------------------------------------------- - - IMATH_NAMESPACE::V2f red; - IMATH_NAMESPACE::V2f green; - IMATH_NAMESPACE::V2f blue; - IMATH_NAMESPACE::V2f white; - - //-------------------------------------------- - // Default constructor produces chromaticities - // according to Rec. ITU-R BT.709-3 - //-------------------------------------------- - - IMF_EXPORT - Chromaticities (const IMATH_NAMESPACE::V2f &red = IMATH_NAMESPACE::V2f (0.6400f, 0.3300f), - const IMATH_NAMESPACE::V2f &green = IMATH_NAMESPACE::V2f (0.3000f, 0.6000f), - const IMATH_NAMESPACE::V2f &blue = IMATH_NAMESPACE::V2f (0.1500f, 0.0600f), - const IMATH_NAMESPACE::V2f &white = IMATH_NAMESPACE::V2f (0.3127f, 0.3290f)); - - - //--------- - // Equality - //--------- - - IMF_EXPORT - bool operator == (const Chromaticities &v) const; - IMF_EXPORT - bool operator != (const Chromaticities &v) const; -}; - - -// -// Conversions between RGB and CIE XYZ -// -// RGB to XYZ: -// -// Given a set of chromaticities, c, and the luminance, Y, of the RGB -// triple (1,1,1), or "white", RGBtoXYZ(c,Y) computes a matrix, M, so -// that multiplying an RGB value, v, with M produces an equivalent -// XYZ value, w. (w == v * M) -// -// If we define that -// -// (Xr, Yr, Zr) == (1, 0, 0) * M -// (Xg, Yg, Zg) == (0, 1, 0) * M -// (Xb, Yb, Zb) == (0, 0, 1) * M -// (Xw, Yw, Zw) == (1, 1, 1) * M, -// -// then the following statements are true: -// -// Xr / (Xr + Yr + Zr) == c.red.x -// Yr / (Xr + Yr + Zr) == c.red.y -// -// Xg / (Xg + Yg + Zg) == c.red.x -// Yg / (Xg + Yg + Zg) == c.red.y -// -// Xb / (Xb + Yb + Zb) == c.red.x -// Yb / (Xb + Yb + Zb) == c.red.y -// -// Xw / (Xw + Yw + Zw) == c.red.x -// Yw / (Xw + Yw + Zw) == c.red.y -// -// Yw == Y. -// -// XYZ to RGB: -// -// YYZtoRGB(c,Y) returns RGBtoXYZ(c,Y).inverse(). -// - -IMF_EXPORT IMATH_NAMESPACE::M44f RGBtoXYZ (const Chromaticities chroma, float Y); -IMF_EXPORT IMATH_NAMESPACE::M44f XYZtoRGB (const Chromaticities chroma, float Y); - - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT - -#endif diff --git a/3rdparty/openexr/IlmImf/ImfChromaticitiesAttribute.cpp b/3rdparty/openexr/IlmImf/ImfChromaticitiesAttribute.cpp deleted file mode 100644 index 4d7b985c3f..0000000000 --- a/3rdparty/openexr/IlmImf/ImfChromaticitiesAttribute.cpp +++ /dev/null @@ -1,87 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2003, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - -//----------------------------------------------------------------------------- -// -// class ChromaticitiesAttribute -// -//----------------------------------------------------------------------------- - -#include - - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_ENTER - -using namespace OPENEXR_IMF_INTERNAL_NAMESPACE; - -template <> -const char * -ChromaticitiesAttribute::staticTypeName () -{ - return "chromaticities"; -} - - -template <> -void -ChromaticitiesAttribute::writeValueTo (OPENEXR_IMF_INTERNAL_NAMESPACE::OStream &os, int version) const -{ - Xdr::write (os, _value.red.x); - Xdr::write (os, _value.red.y); - Xdr::write (os, _value.green.x); - Xdr::write (os, _value.green.y); - Xdr::write (os, _value.blue.x); - Xdr::write (os, _value.blue.y); - Xdr::write (os, _value.white.x); - Xdr::write (os, _value.white.y); -} - - -template <> -void -ChromaticitiesAttribute::readValueFrom (OPENEXR_IMF_INTERNAL_NAMESPACE::IStream &is, int size, int version) -{ - Xdr::read (is, _value.red.x); - Xdr::read (is, _value.red.y); - Xdr::read (is, _value.green.x); - Xdr::read (is, _value.green.y); - Xdr::read (is, _value.blue.x); - Xdr::read (is, _value.blue.y); - Xdr::read (is, _value.white.x); - Xdr::read (is, _value.white.y); -} - - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_EXIT diff --git a/3rdparty/openexr/IlmImf/ImfChromaticitiesAttribute.h b/3rdparty/openexr/IlmImf/ImfChromaticitiesAttribute.h deleted file mode 100644 index 6c0c35ac7a..0000000000 --- a/3rdparty/openexr/IlmImf/ImfChromaticitiesAttribute.h +++ /dev/null @@ -1,73 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2003, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - -#ifndef INCLUDED_IMF_CHROMATICITIES_ATTRIBUTE_H -#define INCLUDED_IMF_CHROMATICITIES_ATTRIBUTE_H - - -//----------------------------------------------------------------------------- -// -// class ChromaticitiesAttribute -// -//----------------------------------------------------------------------------- - -#include "ImfAttribute.h" -#include "ImfChromaticities.h" - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER - - -typedef TypedAttribute ChromaticitiesAttribute; - -template <> -IMF_EXPORT -const char *ChromaticitiesAttribute::staticTypeName (); - -template <> -IMF_EXPORT -void ChromaticitiesAttribute::writeValueTo (OPENEXR_IMF_INTERNAL_NAMESPACE::OStream &, - int) const; - -template <> -IMF_EXPORT -void ChromaticitiesAttribute::readValueFrom (OPENEXR_IMF_INTERNAL_NAMESPACE::IStream &, - int, - int); - - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT - - -#endif diff --git a/3rdparty/openexr/IlmImf/ImfCompositeDeepScanLine.cpp b/3rdparty/openexr/IlmImf/ImfCompositeDeepScanLine.cpp deleted file mode 100644 index 7e0dac098c..0000000000 --- a/3rdparty/openexr/IlmImf/ImfCompositeDeepScanLine.cpp +++ /dev/null @@ -1,591 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2012, Weta Digital Ltd -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Weta Digital nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - -#include "ImfCompositeDeepScanLine.h" -#include "ImfDeepScanLineInputPart.h" -#include "ImfDeepScanLineInputFile.h" -#include "ImfChannelList.h" -#include "ImfFrameBuffer.h" -#include "ImfDeepFrameBuffer.h" -#include "ImfDeepCompositing.h" -#include "ImfPixelType.h" -#include "IlmThreadPool.h" - -#include -#include -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_ENTER - -using std::vector; -using std::string; -using IMATH_NAMESPACE::Box2i; -using ILMTHREAD_NAMESPACE::Task; -using ILMTHREAD_NAMESPACE::TaskGroup; -using ILMTHREAD_NAMESPACE::ThreadPool; - - - -struct CompositeDeepScanLine::Data{ - public : - vector _file; // array of files - vector _part; // array of parts - FrameBuffer _outputFrameBuffer; // output frame buffer provided - bool _zback; // true if we are using zback (otherwise channel 1 = channel 0) - vector< vector > _channeldata; // pixel values, read from the input, one array per channel - vector< int > _sampleCounts; // total per-pixel sample counts, - Box2i _dataWindow; // data window of combined inputs - DeepCompositing * _comp; // user-provided compositor - vector _channels; // names of channels that will be composited - vector _bufferMap; // entry _outputFrameBuffer[n].name() == _channels[ _bufferMap[n] ].name() - - void check_valid(const Header & header); // check newly added part/file is OK; on first good call, set _zback/_dataWindow - - // - // set up the given deep frame buffer to contain the required channels - // resize counts and pointers to the width of _dataWindow - // zero-out all counts, since the datawindow may be smaller than/not include this part - // - - void handleDeepFrameBuffer (DeepFrameBuffer & buf, - vector & counts, //per-pixel counts - vector< vector > & pointers, //per-channel-per-pixel pointers to data - const Header & header, - int start, - int end); - - Data(); -}; - -CompositeDeepScanLine::Data::Data() : _zback(false) , _comp(NULL) {} - -CompositeDeepScanLine::CompositeDeepScanLine() : _Data(new Data) {} - -CompositeDeepScanLine::~CompositeDeepScanLine() -{ - delete _Data; -} - -void -CompositeDeepScanLine::addSource(DeepScanLineInputPart* part) -{ - _Data->check_valid(part->header()); - _Data->_part.push_back(part); -} - -void -CompositeDeepScanLine::addSource(DeepScanLineInputFile* file) -{ - _Data->check_valid(file->header()); - _Data->_file.push_back(file); -} - -int -CompositeDeepScanLine::sources() const -{ - return int(_Data->_part.size())+int(_Data->_file.size()); -} - -void -CompositeDeepScanLine::Data::check_valid(const Header & header) -{ - - bool has_z=false; - bool has_alpha=false; - // check good channel names - for( ChannelList::ConstIterator i=header.channels().begin();i!=header.channels().end();++i) - { - std::string n(i.name()); - if(n=="ZBack") - { - _zback=true; - } - else if(n=="Z") - { - has_z=true; - } - else if(n=="A") - { - has_alpha=true; - } - } - - if(!has_z) - { - throw IEX_NAMESPACE::ArgExc("Deep data provided to CompositeDeepScanLine is missing a Z channel"); - } - - if(!has_alpha) - { - throw IEX_NAMESPACE::ArgExc("Deep data provided to CompositeDeepScanLine is missing an alpha channel"); - } - - - if(_part.size()==0 && _file.size()==0) - { - // first in - update and return - - _dataWindow = header.dataWindow(); - - return; - } - - - const Header * const match_header = _part.size()>0 ? &_part[0]->header() : &_file[0]->header(); - - // check the sizes match - if(match_header->displayWindow() != header.displayWindow()) - { - throw IEX_NAMESPACE::ArgExc("Deep data provided to CompositeDeepScanLine has a different displayWindow to previously provided data"); - } - - _dataWindow.extendBy(header.dataWindow()); - -} -void -CompositeDeepScanLine::Data::handleDeepFrameBuffer (DeepFrameBuffer& buf, - std::vector< unsigned int > & counts, - vector< std::vector< float* > > & pointers, - const Header& header, - int start, - int end) -{ - int width=_dataWindow.size().x+1; - size_t pixelcount = width * (end-start+1); - pointers.resize(_channels.size()); - counts.resize(pixelcount); - buf.insertSampleCountSlice (Slice (OPENEXR_IMF_INTERNAL_NAMESPACE::UINT, - (char *) (&counts[0]-_dataWindow.min.x-start*width), - sizeof(unsigned int), - sizeof(unsigned int)*width)); - - pointers[0].resize(pixelcount); - buf.insert ("Z", DeepSlice (OPENEXR_IMF_INTERNAL_NAMESPACE::FLOAT, - (char *)(&pointers[0][0]-_dataWindow.min.x-start*width), - sizeof(float *), - sizeof(float *)*width, - sizeof(float) )); - - if(_zback) - { - pointers[1].resize(pixelcount); - buf.insert ("ZBack", DeepSlice (OPENEXR_IMF_INTERNAL_NAMESPACE::FLOAT, - (char *)(&pointers[1][0]-_dataWindow.min.x-start*width), - sizeof(float *), - sizeof(float *)*width, - sizeof(float) )); - } - - pointers[2].resize(pixelcount); - buf.insert ("A", DeepSlice (OPENEXR_IMF_INTERNAL_NAMESPACE::FLOAT, - (char *)(&pointers[2][0]-_dataWindow.min.x-start*width), - sizeof(float *), - sizeof(float *)*width, - sizeof(float) )); - - - size_t i =0; - for(FrameBuffer::ConstIterator qt = _outputFrameBuffer.begin(); - qt != _outputFrameBuffer.end(); - qt++) - { - int channel_in_source = _bufferMap[i]; - if(channel_in_source>2) - { - // not dealt with yet (0,1,2 previously inserted) - pointers[channel_in_source].resize(pixelcount); - buf.insert (qt.name(), - DeepSlice (OPENEXR_IMF_INTERNAL_NAMESPACE::FLOAT, - (char *)(&pointers[channel_in_source][0]-_dataWindow.min.x-start*width), - sizeof(float *), - sizeof(float *)*width, - sizeof(float) )); - } - - i++; - } - -} - -void -CompositeDeepScanLine::setCompositing(DeepCompositing* c) -{ - _Data->_comp=c; -} - -const IMATH_NAMESPACE::Box2i& CompositeDeepScanLine::dataWindow() const -{ - return _Data->_dataWindow; -} - - -void -CompositeDeepScanLine::setFrameBuffer(const FrameBuffer& fr) -{ - - // - // count channels; build map between channels in frame buffer - // and channels in internal buffers - // - - _Data->_channels.resize(3); - _Data->_channels[0]="Z"; - _Data->_channels[1]=_Data->_zback ? "ZBack" : "Z"; - _Data->_channels[2]="A"; - _Data->_bufferMap.resize(0); - - for(FrameBuffer::ConstIterator q=fr.begin();q!=fr.end();q++) - { - string name(q.name()); - if(name=="ZBack") - { - _Data->_bufferMap.push_back(1); - }else if(name=="Z") - { - _Data->_bufferMap.push_back(0); - }else if(name=="A") - { - _Data->_bufferMap.push_back(2); - }else{ - _Data->_bufferMap.push_back(_Data->_channels.size()); - _Data->_channels.push_back(name); - } - } - - _Data->_outputFrameBuffer=fr; -} - -namespace -{ - -class LineCompositeTask : public Task -{ - public: - - LineCompositeTask ( TaskGroup* group , - CompositeDeepScanLine::Data * data, - int y, - int start, - vector* names, - vector > >* pointers, - vector* total_sizes, - vector* num_sources - ) : Task(group) , - _Data(data), - _y(y), - _start(start), - _names(names), - _pointers(pointers), - _total_sizes(total_sizes), - _num_sources(num_sources) - {} - - virtual ~LineCompositeTask () {} - - virtual void execute (); - CompositeDeepScanLine::Data* _Data; - int _y; - int _start; - vector* _names; - vector > >* _pointers; - vector* _total_sizes; - vector* _num_sources; - -}; - - -void -composite_line(int y, - int start, - CompositeDeepScanLine::Data * _Data, - vector & names, - const vector > > & pointers, - const vector & total_sizes, - const vector & num_sources - ) -{ - vector output_pixel(names.size()); //the pixel we'll output to - vector inputs(names.size()); - DeepCompositing d; // fallback compositing engine - DeepCompositing * comp= _Data->_comp ? _Data->_comp : &d; - - int pixel = (y-start)*(_Data->_dataWindow.max.x+1-_Data->_dataWindow.min.x); - - for(int x=_Data->_dataWindow.min.x;x<=_Data->_dataWindow.max.x;x++) - { - // set inputs[] to point to the first sample of the first part of each channel - // if there's a zback, set all channel independently... - - if(_Data->_zback) - { - - for(size_t channel=0;channelcomposite_pixel(&output_pixel[0], - &inputs[0], - &names[0], - names.size(), - total_sizes[pixel], - num_sources[pixel] - ); - - - size_t channel_number=0; - - - // - // write out composited value into internal frame buffer - // - for(FrameBuffer::Iterator it = _Data->_outputFrameBuffer.begin();it !=_Data->_outputFrameBuffer.end();it++) - { - - float value = output_pixel[ _Data->_bufferMap[channel_number] ]; // value to write - - - // cast to half float if necessary - if(it.slice().type==OPENEXR_IMF_INTERNAL_NAMESPACE::FLOAT) - { - * (float *)(it.slice().base + y*it.slice().yStride + x*it.slice().xStride) = value; - } - else if(it.slice().type==HALF) - { - * (half *)(it.slice().base + y*it.slice().yStride + x*it.slice().xStride) = half(value); - } - - channel_number++; - - } - - pixel++; - - }// next pixel on row -} - -void LineCompositeTask::execute() -{ - composite_line(_y,_start,_Data,*_names,*_pointers,*_total_sizes,*_num_sources); -} - - -} - -void -CompositeDeepScanLine::readPixels(int start, int end) -{ - size_t parts = _Data->_file.size() + _Data->_part.size(); // total of files+parts - - vector framebuffers(parts); - vector< vector > counts(parts); - - // - // for each part, a pointer to an array of channels - // - vector > > pointers(parts); - vector headers(parts); - - { - size_t i; - for(i=0;i<_Data->_file.size();i++) - { - headers[i] = &_Data->_file[i]->header(); - } - - for(size_t j=0;j<_Data->_part.size();j++) - { - headers[i+j] = &_Data->_part[j]->header(); - } - } - - - for(size_t i=0;ihandleDeepFrameBuffer(framebuffers[i],counts[i],pointers[i],*headers[i],start,end); - } - - // - // set frame buffers and read scanlines from all parts - // TODO what happens if SCANLINE not in data window? - // - - { - size_t i=0; - for(i=0;i<_Data->_file.size();i++) - { - _Data->_file[i]->setFrameBuffer(framebuffers[i]); - _Data->_file[i]->readPixelSampleCounts(start,end); - } - for(size_t j=0;j<_Data->_part.size();j++) - { - _Data->_part[j]->setFrameBuffer(framebuffers[i+j]); - _Data->_part[j]->readPixelSampleCounts(start,end); - } - } - - - // - // total width - // - - size_t total_width = _Data->_dataWindow.size().x+1; - size_t total_pixels = total_width*(end-start+1); - vector total_sizes(total_pixels); - vector num_sources(total_pixels); //number of parts with non-zero sample count - - size_t overall_sample_count=0; // sum of all samples in all images between start and end - - - // - // accumulate pixel counts - // - for(size_t ptr=0;ptr0) num_sources[ptr]++; - } - overall_sample_count+=total_sizes[ptr]; - - - - } - - - - - // - // allocate arrays for pixel data - // samples array accessed as in pixels[channel][sample] - // - - vector > samples( _Data->_channels.size() ); - - for(size_t channel=0;channel<_Data->_channels.size();channel++) - { - if( channel!=1 || _Data->_zback) - { - samples[channel].resize(overall_sample_count); - } - } - - for(size_t channel=0;channel_zback) - { - - samples[channel].resize(overall_sample_count); - - - // - // allocate pointers for channel data - // - - size_t offset=0; - - for(size_t pixel=0;pixel_file.size();i++) - { - _Data->_file[i]->readPixels(start,end); - } - for(size_t j=0;j<_Data->_part.size();j++) - { - _Data->_part[j]->readPixels(start,end); - } - - - - - // - // composite pixels and write back to framebuffer - // - - - // turn vector of strings into array of char * - // and make sure 'ZBack' channel is correct - vector names(_Data->_channels.size()); - for(size_t i=0;i_channels[i].c_str(); - } - - if(!_Data->_zback) names[1]=names[0]; // no zback channel, so make it point to z - - - - TaskGroup g; - for(int y=start;y<=end;y++) - { - ThreadPool::addGlobalTask(new LineCompositeTask(&g,_Data,y,start,&names,&pointers,&total_sizes,&num_sources)); - }//next row -} - -const FrameBuffer& -CompositeDeepScanLine::frameBuffer() const -{ - return _Data->_outputFrameBuffer; -} - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_EXIT diff --git a/3rdparty/openexr/IlmImf/ImfCompositeDeepScanLine.h b/3rdparty/openexr/IlmImf/ImfCompositeDeepScanLine.h deleted file mode 100644 index 13c3fbe220..0000000000 --- a/3rdparty/openexr/IlmImf/ImfCompositeDeepScanLine.h +++ /dev/null @@ -1,152 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2012, Weta Digital Ltd -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Weta Digital nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - -#ifndef INCLUDED_IMF_COMPOSITEDEEPSCANLINE_H -#define INCLUDED_IMF_COMPOSITEDEEPSCANLINE_H - -//----------------------------------------------------------------------------- -// -// Class to composite deep samples into a frame buffer -// Initialise with a deep input part or deep inputfile -// (also supports multiple files and parts, and will -// composite them together, as long as their sizes and channelmaps agree) -// -// Then call setFrameBuffer, and readPixels, exactly as for reading -// regular scanline images. -// -// Restrictions - source file(s) must contain at least Z and alpha channels -// - if multiple files/parts are provided, sizes must match -// - all requested channels will be composited as premultiplied -// - only half and float channels can be requested -// -// This object should not be considered threadsafe -// -// The default compositing engine will give spurious results with overlapping -// volumetric samples - you may derive from DeepCompositing class, override the -// sort_pixel() and composite_pixel() functions, and pass an instance to -// setCompositing(). -// -//----------------------------------------------------------------------------- - -#include "ImfForward.h" -#include "ImfNamespace.h" -#include "ImfExport.h" -#include - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER - -class CompositeDeepScanLine -{ - public: - IMF_EXPORT - CompositeDeepScanLine(); - IMF_EXPORT - virtual ~CompositeDeepScanLine(); - - /// set the source data as a part - ///@note all parts must remain valid until after last interaction with DeepComp - IMF_EXPORT - void addSource(DeepScanLineInputPart * part); - - /// set the source data as a file - ///@note all file must remain valid until after last interaction with DeepComp - IMF_EXPORT - void addSource(DeepScanLineInputFile * file); - - - ///////////////////////////////////////// - // - // set the frame buffer for output values - // the buffers specified must be large enough - // to handle the dataWindow() - // - ///////////////////////////////////////// - IMF_EXPORT - void setFrameBuffer(const FrameBuffer & fr); - - - - ///////////////////////////////////////// - // - // retrieve frameBuffer - // - //////////////////////////////////////// - IMF_EXPORT - const FrameBuffer & frameBuffer() const; - - - ////////////////////////////////////////////////// - // - // read scanlines start to end from the source(s) - // storing the result in the frame buffer provided - // - ////////////////////////////////////////////////// - - IMF_EXPORT - void readPixels(int start,int end); - - IMF_EXPORT - int sources() const; // return number of sources - - ///////////////////////////////////////////////// - // - // retrieve the datawindow - // If multiple parts are specified, this will - // be the union of the dataWindow of all parts - // - //////////////////////////////////////////////// - - IMF_EXPORT - const IMATH_NAMESPACE::Box2i & dataWindow() const; - - - // - // override default sorting/compositing operation - // (otherwise an instance of the base class will be used) - // - - IMF_EXPORT - void setCompositing(DeepCompositing *); - - struct Data; - private : - struct Data *_Data; - - CompositeDeepScanLine(const CompositeDeepScanLine &); // not implemented - const CompositeDeepScanLine & operator=(const CompositeDeepScanLine &); // not implemented -}; - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT - -#endif diff --git a/3rdparty/openexr/IlmImf/ImfCompression.h b/3rdparty/openexr/IlmImf/ImfCompression.h deleted file mode 100644 index c066d34c88..0000000000 --- a/3rdparty/openexr/IlmImf/ImfCompression.h +++ /dev/null @@ -1,84 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - - -#ifndef INCLUDED_IMF_COMPRESSION_H -#define INCLUDED_IMF_COMPRESSION_H - -//----------------------------------------------------------------------------- -// -// enum Compression -// -//----------------------------------------------------------------------------- -#include "ImfNamespace.h" - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER - -enum Compression -{ - NO_COMPRESSION = 0, // no compression - - RLE_COMPRESSION = 1, // run length encoding - - ZIPS_COMPRESSION = 2, // zlib compression, one scan line at a time - - ZIP_COMPRESSION = 3, // zlib compression, in blocks of 16 scan lines - - PIZ_COMPRESSION = 4, // piz-based wavelet compression - - PXR24_COMPRESSION = 5, // lossy 24-bit float compression - - B44_COMPRESSION = 6, // lossy 4-by-4 pixel block compression, - // fixed compression rate - - B44A_COMPRESSION = 7, // lossy 4-by-4 pixel block compression, - // flat fields are compressed more - - DWAA_COMPRESSION = 8, // lossy DCT based compression, in blocks - // of 32 scanlines. More efficient for partial - // buffer access. - - DWAB_COMPRESSION = 9, // lossy DCT based compression, in blocks - // of 256 scanlines. More efficient space - // wise and faster to decode full frames - // than DWAA_COMPRESSION. - - NUM_COMPRESSION_METHODS // number of different compression methods -}; - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT - - -#endif diff --git a/3rdparty/openexr/IlmImf/ImfCompressionAttribute.cpp b/3rdparty/openexr/IlmImf/ImfCompressionAttribute.cpp deleted file mode 100644 index a32c689358..0000000000 --- a/3rdparty/openexr/IlmImf/ImfCompressionAttribute.cpp +++ /dev/null @@ -1,78 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - - -//----------------------------------------------------------------------------- -// -// class CompressionAttribute -// -//----------------------------------------------------------------------------- - -#include "ImfCompressionAttribute.h" - - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_ENTER - -using namespace OPENEXR_IMF_INTERNAL_NAMESPACE; - - -template <> -const char * -CompressionAttribute::staticTypeName () -{ - return "compression"; -} - - -template <> -void -CompressionAttribute::writeValueTo (OPENEXR_IMF_INTERNAL_NAMESPACE::OStream &os, int version) const -{ - unsigned char tmp = _value; - Xdr::write (os, tmp); -} - - -template <> -void -CompressionAttribute::readValueFrom (OPENEXR_IMF_INTERNAL_NAMESPACE::IStream &is, int size, int version) -{ - unsigned char tmp; - Xdr::read (is, tmp); - _value = Compression (tmp); -} - - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_EXIT diff --git a/3rdparty/openexr/IlmImf/ImfCompressionAttribute.h b/3rdparty/openexr/IlmImf/ImfCompressionAttribute.h deleted file mode 100644 index eea95dd602..0000000000 --- a/3rdparty/openexr/IlmImf/ImfCompressionAttribute.h +++ /dev/null @@ -1,64 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - - -#ifndef INCLUDED_IMF_COMPRESSION_ATTRIBUTE_H -#define INCLUDED_IMF_COMPRESSION_ATTRIBUTE_H - -//----------------------------------------------------------------------------- -// -// class CompressionAttribute -// -//----------------------------------------------------------------------------- - -#include "ImfAttribute.h" -#include "ImfCompression.h" - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER - - -typedef TypedAttribute CompressionAttribute; -template <> IMF_EXPORT const char *CompressionAttribute::staticTypeName (); -template <> IMF_EXPORT void CompressionAttribute::writeValueTo (OPENEXR_IMF_INTERNAL_NAMESPACE::OStream &, - int) const; -template <> IMF_EXPORT void CompressionAttribute::readValueFrom (OPENEXR_IMF_INTERNAL_NAMESPACE::IStream &, - int, - int); - - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT - - -#endif diff --git a/3rdparty/openexr/IlmImf/ImfCompressor.cpp b/3rdparty/openexr/IlmImf/ImfCompressor.cpp deleted file mode 100644 index 1905a4d66b..0000000000 --- a/3rdparty/openexr/IlmImf/ImfCompressor.cpp +++ /dev/null @@ -1,226 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - - -//----------------------------------------------------------------------------- -// -// class Compressor -// -//----------------------------------------------------------------------------- - -#include "ImfCompressor.h" -#include "ImfRleCompressor.h" -#include "ImfZipCompressor.h" -#include "ImfPizCompressor.h" -#include "ImfPxr24Compressor.h" -#include "ImfB44Compressor.h" -#include "ImfDwaCompressor.h" -#include "ImfCheckedArithmetic.h" -#include "ImfNamespace.h" - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_ENTER - -using IMATH_NAMESPACE::Box2i; - - -Compressor::Compressor (const Header &hdr): _header (hdr) {} - - -Compressor::~Compressor () {} - - -Compressor::Format -Compressor::format () const -{ - return XDR; -} - - -int -Compressor::compressTile (const char *inPtr, - int inSize, - Box2i range, - const char *&outPtr) -{ - return compress (inPtr, inSize, range.min.y, outPtr); -} - - -int -Compressor::uncompressTile (const char *inPtr, - int inSize, - Box2i range, - const char *&outPtr) -{ - return uncompress (inPtr, inSize, range.min.y, outPtr); -} - - -bool -isValidCompression (Compression c) -{ - switch (c) - { - case NO_COMPRESSION: - case RLE_COMPRESSION: - case ZIPS_COMPRESSION: - case ZIP_COMPRESSION: - case PIZ_COMPRESSION: - case PXR24_COMPRESSION: - case B44_COMPRESSION: - case B44A_COMPRESSION: - case DWAA_COMPRESSION: - case DWAB_COMPRESSION: - - return true; - - default: - - return false; - } -} - -bool isValidDeepCompression(Compression c) -{ - switch(c) - { - case NO_COMPRESSION: - case RLE_COMPRESSION: - case ZIPS_COMPRESSION: - return true; - default : - return false; - } -} - - -Compressor * -newCompressor (Compression c, size_t maxScanLineSize, const Header &hdr) -{ - switch (c) - { - case RLE_COMPRESSION: - - return new RleCompressor (hdr, maxScanLineSize); - - case ZIPS_COMPRESSION: - - return new ZipCompressor (hdr, maxScanLineSize, 1); - - case ZIP_COMPRESSION: - - return new ZipCompressor (hdr, maxScanLineSize, 16); - - case PIZ_COMPRESSION: - - return new PizCompressor (hdr, maxScanLineSize, 32); - - case PXR24_COMPRESSION: - - return new Pxr24Compressor (hdr, maxScanLineSize, 16); - - case B44_COMPRESSION: - - return new B44Compressor (hdr, maxScanLineSize, 32, false); - - case B44A_COMPRESSION: - - return new B44Compressor (hdr, maxScanLineSize, 32, true); - - case DWAA_COMPRESSION: - - return new DwaCompressor (hdr, maxScanLineSize, 32, - DwaCompressor::STATIC_HUFFMAN); - - case DWAB_COMPRESSION: - - return new DwaCompressor (hdr, maxScanLineSize, 256, - DwaCompressor::STATIC_HUFFMAN); - - default: - - return 0; - } -} - - -Compressor * -newTileCompressor (Compression c, - size_t tileLineSize, - size_t numTileLines, - const Header &hdr) -{ - switch (c) - { - case RLE_COMPRESSION: - - return new RleCompressor (hdr, uiMult (tileLineSize, numTileLines)); - - case ZIPS_COMPRESSION: - case ZIP_COMPRESSION: - - return new ZipCompressor (hdr, tileLineSize, numTileLines); - - case PIZ_COMPRESSION: - - return new PizCompressor (hdr, tileLineSize, numTileLines); - - case PXR24_COMPRESSION: - - return new Pxr24Compressor (hdr, tileLineSize, numTileLines); - - case B44_COMPRESSION: - - return new B44Compressor (hdr, tileLineSize, numTileLines, false); - - case B44A_COMPRESSION: - - return new B44Compressor (hdr, tileLineSize, numTileLines, true); - - case DWAA_COMPRESSION: - case DWAB_COMPRESSION: - - return new DwaCompressor (hdr, tileLineSize, numTileLines, - DwaCompressor::DEFLATE); - - default: - - return 0; - } -} - - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_EXIT - diff --git a/3rdparty/openexr/IlmImf/ImfCompressor.h b/3rdparty/openexr/IlmImf/ImfCompressor.h deleted file mode 100644 index 958677865a..0000000000 --- a/3rdparty/openexr/IlmImf/ImfCompressor.h +++ /dev/null @@ -1,273 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - - -#ifndef INCLUDED_IMF_COMPRESSOR_H -#define INCLUDED_IMF_COMPRESSOR_H - -//----------------------------------------------------------------------------- -// -// class Compressor -// -//----------------------------------------------------------------------------- - -#include "ImfCompression.h" -#include "ImathBox.h" -#include "ImfNamespace.h" -#include "ImfExport.h" -#include "ImfForward.h" - -#include - - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER - - -class Compressor -{ - public: - - //--------------------------------------------- - // Constructor -- hdr is the header of the file - // that will be compressed or uncompressed - //--------------------------------------------- - - IMF_EXPORT - Compressor (const Header &hdr); - - - //----------- - // Destructor - //----------- - - IMF_EXPORT - virtual ~Compressor (); - - - //---------------------------------------------- - // Maximum number of scan lines processed by - // a single call to compress() and uncompress(). - //---------------------------------------------- - - IMF_EXPORT - virtual int numScanLines () const = 0; - - - //-------------------------------------------- - // Format of the pixel data read and written - // by the compress() and uncompress() methods. - // The default implementation of format() - // returns XDR. - //-------------------------------------------- - - enum Format - { - NATIVE, // the machine's native format - XDR // Xdr format - }; - - IMF_EXPORT - virtual Format format () const; - - - //---------------------------- - // Access to the file's header - //---------------------------- - - const Header & header () const {return _header;} - - - //------------------------------------------------------------------------- - // Compress an array of bytes that represents the contents of up to - // numScanLines() scan lines: - // - // inPtr Input buffer (uncompressed data). - // - // inSize Number of bytes in the input buffer - // - // minY Minimum y coordinate of the scan lines to - // be compressed - // - // outPtr Pointer to output buffer - // - // return value Size of compressed data in output buffer - // - // Arrangement of uncompressed pixel data in the input buffer: - // - // Before calling - // - // compress (buf, size, minY, ...); - // - // the InputFile::writePixels() method gathers pixel data from the - // frame buffer, fb, and places them in buffer buf, like this: - // - // char *endOfBuf = buf; - // - // for (int y = minY; - // y <= min (minY + numScanLines() - 1, header().dataWindow().max.y); - // ++y) - // { - // for (ChannelList::ConstIterator c = header().channels().begin(); - // c != header().channels().end(); - // ++c) - // { - // if (modp (y, c.channel().ySampling) != 0) - // continue; - // - // for (int x = header().dataWindow().min.x; - // x <= header().dataWindow().max.x; - // ++x) - // { - // if (modp (x, c.channel().xSampling) != 0) - // continue; - // - // Xdr::write (endOfBuf, fb.pixel (c, x, y)); - // } - // } - // } - // - // int size = endOfBuf - buf; - // - //------------------------------------------------------------------------- - - IMF_EXPORT - virtual int compress (const char *inPtr, - int inSize, - int minY, - const char *&outPtr) = 0; - - IMF_EXPORT - virtual int compressTile (const char *inPtr, - int inSize, - IMATH_NAMESPACE::Box2i range, - const char *&outPtr); - - //------------------------------------------------------------------------- - // Uncompress an array of bytes that has been compressed by compress(): - // - // inPtr Input buffer (compressed data). - // - // inSize Number of bytes in the input buffer - // - // minY Minimum y coordinate of the scan lines to - // be uncompressed - // - // outPtr Pointer to output buffer - // - // return value Size of uncompressed data in output buffer - // - //------------------------------------------------------------------------- - - IMF_EXPORT - virtual int uncompress (const char *inPtr, - int inSize, - int minY, - const char *&outPtr) = 0; - - IMF_EXPORT - virtual int uncompressTile (const char *inPtr, - int inSize, - IMATH_NAMESPACE::Box2i range, - const char *&outPtr); - - private: - - const Header & _header; -}; - - -//-------------------------------------- -// Test if c is a valid compression type -//-------------------------------------- - -IMF_EXPORT -bool isValidCompression (Compression c); - -//-------------------------------------- -// Test if c is valid for deep data -//-------------------------------------- - -IMF_EXPORT -bool isValidDeepCompression (Compression c); - - -//----------------------------------------------------------------- -// Construct a Compressor for compression type c: -// -// maxScanLineSize Maximum number of bytes per uncompressed -// scan line. -// -// header Header of the input or output file whose -// pixels will be compressed or uncompressed. -// -// return value A pointer to a new Compressor object (it -// is the caller's responsibility to delete -// the object), or 0 (if c is NO_COMPRESSION). -// -//----------------------------------------------------------------- - -IMF_EXPORT -Compressor * newCompressor (Compression c, - size_t maxScanLineSize, - const Header &hdr); - - -//----------------------------------------------------------------- -// Construct a Compressor for compression type c for a tiled image: -// -// tileLineSize Maximum number of bytes per uncompressed -// line in a tile. -// -// numTileLines Maximum number of lines in a tile. -// -// header Header of the input or output file whose -// pixels will be compressed or uncompressed. -// -// return value A pointer to a new Compressor object (it -// is the caller's responsibility to delete -// the object), or 0 (if c is NO_COMPRESSION). -// -//----------------------------------------------------------------- - -IMF_EXPORT -Compressor * newTileCompressor (Compression c, - size_t tileLineSize, - size_t numTileLines, - const Header &hdr); - - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT - -#endif diff --git a/3rdparty/openexr/IlmImf/ImfConvert.cpp b/3rdparty/openexr/IlmImf/ImfConvert.cpp deleted file mode 100644 index 62c0305935..0000000000 --- a/3rdparty/openexr/IlmImf/ImfConvert.cpp +++ /dev/null @@ -1,143 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - -//----------------------------------------------------------------------------- -// -// Routines for converting between pixel data types, -// with well-defined behavior for exceptional cases. -// -//----------------------------------------------------------------------------- - -#include "ImfConvert.h" -#include "ImfNamespace.h" - -#include - - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_ENTER - -namespace { - -inline bool -isNegative (float f) -{ - union {float f; int i;} u; - u.f = f; - return (u.i & 0x80000000) != 0; -} - - -inline bool -isNan (float f) -{ - union {float f; int i;} u; - u.f = f; - return (u.i & 0x7fffffff) > 0x7f800000; -} - - -inline bool -isInfinity (float f) -{ - union {float f; int i;} u; - u.f = f; - return (u.i & 0x7fffffff) == 0x7f800000; -} - - -inline bool -isFinite (float f) -{ - union {float f; int i;} u; - u.f = f; - return (u.i & 0x7f800000) != 0x7f800000; -} - -} // namespace - - -unsigned int -halfToUint (half h) -{ - if (h.isNegative() || h.isNan()) - return 0; - - if (h.isInfinity()) - return UINT_MAX; - - return (unsigned int) h; -} - - -unsigned int -floatToUint (float f) -{ - if (isNegative (f) || isNan (f)) - return 0; - - if (isInfinity (f) || f > (float)UINT_MAX) - return UINT_MAX; - - return (unsigned int) f; -} - - -half -uintToHalf (unsigned int ui) -{ - if (ui > HALF_MAX) - return half::posInf(); - - return half ((float) ui); -} - - -half -floatToHalf (float f) -{ - if (isFinite (f)) - { - if (f > HALF_MAX) - return half::posInf(); - - if (f < -HALF_MAX) - return half::negInf(); - } - - return half (f); -} - - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_EXIT diff --git a/3rdparty/openexr/IlmImf/ImfConvert.h b/3rdparty/openexr/IlmImf/ImfConvert.h deleted file mode 100644 index b0a7f47d12..0000000000 --- a/3rdparty/openexr/IlmImf/ImfConvert.h +++ /dev/null @@ -1,107 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - -#ifndef INCLUDED_IMF_CONVERT_H -#define INCLUDED_IMF_CONVERT_H - -//----------------------------------------------------------------------------- -// -// Routines for converting between pixel data types, -// with well-defined behavior for exceptional cases, -// without depending on how hardware and operating -// system handle integer overflows and floating-point -// exceptions. -// -//----------------------------------------------------------------------------- - -#include "half.h" -#include "ImfExport.h" -#include "ImfNamespace.h" - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER - - -//--------------------------------------------------------- -// Conversion from half or float to unsigned int: -// -// input result -// --------------------------------------------------- -// -// finite, >= 0 input, cast to unsigned int -// (rounds towards zero) -// -// finite, < 0 0 -// -// NaN 0 -// -// +infinity UINT_MAX -// -// -infinity 0 -// -//--------------------------------------------------------- - -IMF_EXPORT unsigned int halfToUint (half h); -IMF_EXPORT unsigned int floatToUint (float f); - - -//--------------------------------------------------------- -// Conversion from unsigned int or float to half: -// -// input result -// --------------------------------------------------- -// -// finite, closest possible half -// magnitude <= HALF_MAX -// -// finite, > HALF_MAX +infinity -// -// finite, < -HALF_MAX -infinity -// -// NaN NaN -// -// +infinity +infinity -// -// -infinity -infinity -// -//--------------------------------------------------------- - -IMF_EXPORT half uintToHalf (unsigned int ui); -IMF_EXPORT half floatToHalf (float f); - - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT - - -#endif diff --git a/3rdparty/openexr/IlmImf/ImfDeepCompositing.cpp b/3rdparty/openexr/IlmImf/ImfDeepCompositing.cpp deleted file mode 100644 index 76702c1d4b..0000000000 --- a/3rdparty/openexr/IlmImf/ImfDeepCompositing.cpp +++ /dev/null @@ -1,110 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2012, Weta Digital Ltd -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Weta Digital nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - -#include "ImfDeepCompositing.h" - -#include "ImfNamespace.h" -#include -#include - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_ENTER - -using std::sort; -using std::vector; -DeepCompositing::DeepCompositing() -{ -} - -DeepCompositing::~DeepCompositing() -{ -} - -void -DeepCompositing::composite_pixel (float outputs[], - const float* inputs[], - const char*channel_names[], - int num_channels, - int num_samples, - int sources) -{ - for(int i=0;i sort_order; - if(sources>1) - { - sort_order.resize(num_samples); - for(int i=0;i1) ? sort_order[i] : i; - float alpha=outputs[2]; - if(alpha>=1.0) return; - - for(int c=0;c inputs[0][b]) return false; - if(inputs[1][a] < inputs[1][b]) return true; - if(inputs[1][a] > inputs[1][b]) return false; - return asecond; -} - - -const DeepSlice & -DeepFrameBuffer::operator [] (const char name[]) const -{ - SliceMap::const_iterator i = _map.find (name); - - if (i == _map.end()) - { - THROW (IEX_NAMESPACE::ArgExc, - "Cannot find frame buffer slice \"" << name << "\"."); - } - - return i->second; -} - - -DeepSlice & -DeepFrameBuffer::operator [] (const string &name) -{ - return this->operator[] (name.c_str()); -} - - -const DeepSlice & -DeepFrameBuffer::operator [] (const string &name) const -{ - return this->operator[] (name.c_str()); -} - - -DeepSlice * -DeepFrameBuffer::findSlice (const char name[]) -{ - SliceMap::iterator i = _map.find (name); - return (i == _map.end())? 0: &i->second; -} - - -const DeepSlice * -DeepFrameBuffer::findSlice (const char name[]) const -{ - SliceMap::const_iterator i = _map.find (name); - return (i == _map.end())? 0: &i->second; -} - - -DeepSlice * -DeepFrameBuffer::findSlice (const string &name) -{ - return findSlice (name.c_str()); -} - - -const DeepSlice * -DeepFrameBuffer::findSlice (const string &name) const -{ - return findSlice (name.c_str()); -} - - -DeepFrameBuffer::Iterator -DeepFrameBuffer::begin () -{ - return _map.begin(); -} - - -DeepFrameBuffer::ConstIterator -DeepFrameBuffer::begin () const -{ - return _map.begin(); -} - - -DeepFrameBuffer::Iterator -DeepFrameBuffer::end () -{ - return _map.end(); -} - - -DeepFrameBuffer::ConstIterator -DeepFrameBuffer::end () const -{ - return _map.end(); -} - - -DeepFrameBuffer::Iterator -DeepFrameBuffer::find (const char name[]) -{ - return _map.find (name); -} - - -DeepFrameBuffer::ConstIterator -DeepFrameBuffer::find (const char name[]) const -{ - return _map.find (name); -} - - -DeepFrameBuffer::Iterator -DeepFrameBuffer::find (const string &name) -{ - return find (name.c_str()); -} - - -DeepFrameBuffer::ConstIterator -DeepFrameBuffer::find (const string &name) const -{ - return find (name.c_str()); -} - - -void -DeepFrameBuffer::insertSampleCountSlice(const Slice & slice) -{ - if (slice.type != UINT) - { - throw IEX_NAMESPACE::ArgExc("The type of sample count slice should be UINT."); - } - - _sampleCounts = slice; -} - - -const Slice & -DeepFrameBuffer::getSampleCountSlice() const -{ - return _sampleCounts; -} - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_EXIT diff --git a/3rdparty/openexr/IlmImf/ImfDeepFrameBuffer.h b/3rdparty/openexr/IlmImf/ImfDeepFrameBuffer.h deleted file mode 100644 index a3f062adcb..0000000000 --- a/3rdparty/openexr/IlmImf/ImfDeepFrameBuffer.h +++ /dev/null @@ -1,373 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2011, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - -#ifndef IMFDEEPFRAMEBUFFER_H_ -#define IMFDEEPFRAMEBUFFER_H_ - -#include "ImfFrameBuffer.h" -#include "ImfNamespace.h" -#include "ImfExport.h" - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER - -//-------------------------------------------------------- -// Description of a single deep slice of the frame buffer: -//-------------------------------------------------------- - -struct DeepSlice : public Slice -{ - //--------------------------------------------------------------------- - // The stride for each sample in this slice. - // - // Memory layout: The address of sample i in pixel (x, y) is - // - // base + (xp / xSampling) * xStride + (yp / ySampling) * yStride - // + i * sampleStride - // - // where xp and yp are computed as follows: - // - // * If we are reading or writing a scanline-based file: - // - // xp = x - // yp = y - // - // * If we are reading a tile whose upper left coorner is at (xt, yt): - // - // if xTileCoords is true then xp = x - xt, else xp = x - // if yTileCoords is true then yp = y - yt, else yp = y - // - //--------------------------------------------------------------------- - - int sampleStride; - - //------------ - // Constructor - //------------ - IMF_EXPORT - DeepSlice (PixelType type = HALF, - char * base = 0, - size_t xStride = 0, - size_t yStride = 0, - size_t sampleStride = 0, - int xSampling = 1, - int ySampling = 1, - double fillValue = 0.0, - bool xTileCoords = false, - bool yTileCoords = false); -}; - -//----------------- -// DeepFrameBuffer. -//----------------- - -class DeepFrameBuffer -{ - public: - - - //------------ - // Add a slice - //------------ - - IMF_EXPORT - void insert (const char name[], - const DeepSlice &slice); - - IMF_EXPORT - void insert (const std::string &name, - const DeepSlice &slice); - - //---------------------------------------------------------------- - // Access to existing slices: - // - // [n] Returns a reference to the slice with name n. - // If no slice with name n exists, an IEX_NAMESPACE::ArgExc - // is thrown. - // - // findSlice(n) Returns a pointer to the slice with name n, - // or 0 if no slice with name n exists. - // - //---------------------------------------------------------------- - - IMF_EXPORT - DeepSlice & operator [] (const char name[]); - IMF_EXPORT - const DeepSlice & operator [] (const char name[]) const; - - IMF_EXPORT - DeepSlice & operator [] (const std::string &name); - IMF_EXPORT - const DeepSlice & operator [] (const std::string &name) const; - - IMF_EXPORT - DeepSlice * findSlice (const char name[]); - IMF_EXPORT - const DeepSlice * findSlice (const char name[]) const; - - IMF_EXPORT - DeepSlice * findSlice (const std::string &name); - IMF_EXPORT - const DeepSlice * findSlice (const std::string &name) const; - - - //----------------------------------------- - // Iterator-style access to existing slices - //----------------------------------------- - - typedef std::map SliceMap; - - class Iterator; - class ConstIterator; - - IMF_EXPORT - Iterator begin (); - IMF_EXPORT - ConstIterator begin () const; - - IMF_EXPORT - Iterator end (); - IMF_EXPORT - ConstIterator end () const; - - IMF_EXPORT - Iterator find (const char name[]); - IMF_EXPORT - ConstIterator find (const char name[]) const; - - IMF_EXPORT - Iterator find (const std::string &name); - IMF_EXPORT - ConstIterator find (const std::string &name) const; - - //---------------------------------------------------- - // Public function for accessing a sample count slice. - //---------------------------------------------------- - - IMF_EXPORT - void insertSampleCountSlice(const Slice & slice); - IMF_EXPORT - const Slice & getSampleCountSlice() const; - - private: - - SliceMap _map; - Slice _sampleCounts; -}; - -//---------- -// Iterators -//---------- - -class DeepFrameBuffer::Iterator -{ - public: - - IMF_EXPORT - Iterator (); - IMF_EXPORT - Iterator (const DeepFrameBuffer::SliceMap::iterator &i); - - IMF_EXPORT - Iterator & operator ++ (); - IMF_EXPORT - Iterator operator ++ (int); - - IMF_EXPORT - const char * name () const; - IMF_EXPORT - DeepSlice & slice () const; - - private: - - friend class DeepFrameBuffer::ConstIterator; - - DeepFrameBuffer::SliceMap::iterator _i; -}; - - -class DeepFrameBuffer::ConstIterator -{ - public: - - IMF_EXPORT - ConstIterator (); - IMF_EXPORT - ConstIterator (const DeepFrameBuffer::SliceMap::const_iterator &i); - IMF_EXPORT - ConstIterator (const DeepFrameBuffer::Iterator &other); - - IMF_EXPORT - ConstIterator & operator ++ (); - IMF_EXPORT - ConstIterator operator ++ (int); - - IMF_EXPORT - const char * name () const; - IMF_EXPORT - const DeepSlice & slice () const; - - private: - - friend bool operator == (const ConstIterator &, const ConstIterator &); - friend bool operator != (const ConstIterator &, const ConstIterator &); - - DeepFrameBuffer::SliceMap::const_iterator _i; -}; - - -//----------------- -// Inline Functions -//----------------- - -inline -DeepFrameBuffer::Iterator::Iterator (): _i() -{ - // empty -} - - -inline -DeepFrameBuffer::Iterator::Iterator (const DeepFrameBuffer::SliceMap::iterator &i): - _i (i) -{ - // empty -} - - -inline DeepFrameBuffer::Iterator & -DeepFrameBuffer::Iterator::operator ++ () -{ - ++_i; - return *this; -} - - -inline DeepFrameBuffer::Iterator -DeepFrameBuffer::Iterator::operator ++ (int) -{ - Iterator tmp = *this; - ++_i; - return tmp; -} - - -inline const char * -DeepFrameBuffer::Iterator::name () const -{ - return *_i->first; -} - - -inline DeepSlice & -DeepFrameBuffer::Iterator::slice () const -{ - return _i->second; -} - - -inline -DeepFrameBuffer::ConstIterator::ConstIterator (): _i() -{ - // empty -} - -inline -DeepFrameBuffer::ConstIterator::ConstIterator - (const DeepFrameBuffer::SliceMap::const_iterator &i): _i (i) -{ - // empty -} - - -inline -DeepFrameBuffer::ConstIterator::ConstIterator (const DeepFrameBuffer::Iterator &other): - _i (other._i) -{ - // empty -} - -inline DeepFrameBuffer::ConstIterator & -DeepFrameBuffer::ConstIterator::operator ++ () -{ - ++_i; - return *this; -} - - -inline DeepFrameBuffer::ConstIterator -DeepFrameBuffer::ConstIterator::operator ++ (int) -{ - ConstIterator tmp = *this; - ++_i; - return tmp; -} - - -inline const char * -DeepFrameBuffer::ConstIterator::name () const -{ - return *_i->first; -} - -inline const DeepSlice & -DeepFrameBuffer::ConstIterator::slice () const -{ - return _i->second; -} - - -inline bool -operator == (const DeepFrameBuffer::ConstIterator &x, - const DeepFrameBuffer::ConstIterator &y) -{ - return x._i == y._i; -} - - -inline bool -operator != (const DeepFrameBuffer::ConstIterator &x, - const DeepFrameBuffer::ConstIterator &y) -{ - return !(x == y); -} - - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT - - - - - - -#endif /* IMFDEEPFRAMEBUFFER_H_ */ diff --git a/3rdparty/openexr/IlmImf/ImfDeepImageState.h b/3rdparty/openexr/IlmImf/ImfDeepImageState.h deleted file mode 100644 index a3941c46ad..0000000000 --- a/3rdparty/openexr/IlmImf/ImfDeepImageState.h +++ /dev/null @@ -1,96 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2013, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - -#ifndef INCLUDED_IMF_DEEPIMAGESTATE_H -#define INCLUDED_IMF_DEEPIMAGESTATE_H - -//----------------------------------------------------------------------------- -// -// enum DeepImageState -- describes how orderly the pixel data -// in a deep image are -// -// The samples in a deep image pixel may be sorted according to -// depth, and the sample depths or depth ranges may or may not -// overlap each other. A pixel is -// -// - SORTED if for every i and j with i < j -// -// (Z[i] < Z[j]) || (Z[i] == Z[j] && ZBack[i] < ZBack[j]), -// -// - NON_OVERLAPPING if for every i and j with i != j -// -// (Z[i] < Z[j] && ZBack[i] <= Z[j]) || -// (Z[j] < Z[i] && ZBack[j] <= Z[i]) || -// (Z[i] == Z[j] && ZBack[i] <= Z[i] & ZBack[j] > Z[j]) || -// (Z[i] == Z[j] && ZBack[j] <= Z[j] & ZBack[i] > Z[i]), -// -// - TIDY if it is SORTED and NON_OVERLAPPING, -// -// - MESSY if it is neither SORTED nor NON_OVERLAPPING. -// -// A deep image is -// -// - MESSY if at least one of its pixels is MESSY, -// - SORTED if all of its pixels are SORTED, -// - NON_OVERLAPPING if all of its pixels are NON_OVERLAPPING, -// - TIDY if all of its pixels are TIDY. -// -// Note: the rather complicated definition of NON_OVERLAPPING prohibits -// overlapping volume samples, coincident point samples and point samples -// in the middle of a volume sample, but it does allow point samples at -// the front or back of a volume sample. -// -//----------------------------------------------------------------------------- - -#include "ImfNamespace.h" -#include "ImfExport.h" - - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER - -enum DeepImageState -{ - DIS_MESSY = 0, - DIS_SORTED = 1, - DIS_NON_OVERLAPPING = 2, - DIS_TIDY = 3, - - DIS_NUMSTATES // Number of different image states -}; - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT - - -#endif diff --git a/3rdparty/openexr/IlmImf/ImfDeepImageStateAttribute.cpp b/3rdparty/openexr/IlmImf/ImfDeepImageStateAttribute.cpp deleted file mode 100644 index 86a70a6408..0000000000 --- a/3rdparty/openexr/IlmImf/ImfDeepImageStateAttribute.cpp +++ /dev/null @@ -1,78 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2013, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - -//----------------------------------------------------------------------------- -// -// class DeepImageStateAttribute -// -//----------------------------------------------------------------------------- - -#include - - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_ENTER - -using namespace OPENEXR_IMF_INTERNAL_NAMESPACE; - -template <> -const char * -DeepImageStateAttribute::staticTypeName () -{ - return "deepImageState"; -} - - -template <> -void -DeepImageStateAttribute::writeValueTo - (OPENEXR_IMF_INTERNAL_NAMESPACE::OStream &os, int version) const -{ - unsigned char tmp = _value; - Xdr::write (os, tmp); -} - - -template <> -void -DeepImageStateAttribute::readValueFrom - (OPENEXR_IMF_INTERNAL_NAMESPACE::IStream &is, int size, int version) -{ - unsigned char tmp; - Xdr::read (is, tmp); - _value = DeepImageState (tmp); -} - - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_EXIT diff --git a/3rdparty/openexr/IlmImf/ImfDeepImageStateAttribute.h b/3rdparty/openexr/IlmImf/ImfDeepImageStateAttribute.h deleted file mode 100644 index 6174e9481c..0000000000 --- a/3rdparty/openexr/IlmImf/ImfDeepImageStateAttribute.h +++ /dev/null @@ -1,68 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2013, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - -#ifndef INCLUDED_IMF_DEEPIMAGESTATE_ATTRIBUTE_H -#define INCLUDED_IMF_DEEPIMAGESTATE_ATTRIBUTE_H - - -//----------------------------------------------------------------------------- -// -// class DeepImageStateAttribute -// -//----------------------------------------------------------------------------- - -#include "ImfAttribute.h" -#include "ImfDeepImageState.h" -#include "ImfExport.h" - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER - - -typedef TypedAttribute - DeepImageStateAttribute; - -template <> IMF_EXPORT const char *DeepImageStateAttribute::staticTypeName (); - -template <> IMF_EXPORT -void DeepImageStateAttribute::writeValueTo - (OPENEXR_IMF_INTERNAL_NAMESPACE::OStream &, int) const; - -template <> IMF_EXPORT -void DeepImageStateAttribute::readValueFrom - (OPENEXR_IMF_INTERNAL_NAMESPACE::IStream &, int, int); - - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT - -#endif diff --git a/3rdparty/openexr/IlmImf/ImfDeepScanLineInputFile.cpp b/3rdparty/openexr/IlmImf/ImfDeepScanLineInputFile.cpp deleted file mode 100644 index b4246762a0..0000000000 --- a/3rdparty/openexr/IlmImf/ImfDeepScanLineInputFile.cpp +++ /dev/null @@ -1,2025 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2011, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - -//----------------------------------------------------------------------------- -// -// class DeepScanLineInputFile -// -//----------------------------------------------------------------------------- - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "ImfMultiPartInputFile.h" -#include "ImfDeepFrameBuffer.h" -#include "ImfInputStreamMutex.h" -#include "ImfInputPartData.h" - - -#include "ImathBox.h" -#include "ImathFun.h" - - -#include "IlmThreadPool.h" -#include "IlmThreadSemaphore.h" -#include "IlmThreadMutex.h" - -#include "Iex.h" - -#include -#include -#include -#include -#include - - -#include "ImfNamespace.h" -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_ENTER - -using IMATH_NAMESPACE::Box2i; -using IMATH_NAMESPACE::divp; -using IMATH_NAMESPACE::modp; -using std::string; -using std::vector; -using std::ifstream; -using std::min; -using std::max; -using ILMTHREAD_NAMESPACE::Mutex; -using ILMTHREAD_NAMESPACE::Lock; -using ILMTHREAD_NAMESPACE::Semaphore; -using ILMTHREAD_NAMESPACE::Task; -using ILMTHREAD_NAMESPACE::TaskGroup; -using ILMTHREAD_NAMESPACE::ThreadPool; - -namespace { - -struct InSliceInfo -{ - PixelType typeInFrameBuffer; - PixelType typeInFile; - char * base; - char* pointerArrayBase; - size_t xPointerStride; - size_t yPointerStride; - size_t sampleStride; - int xSampling; - int ySampling; - bool fill; - bool skip; - double fillValue; - - InSliceInfo (PixelType typeInFrameBuffer = HALF, - char * base = NULL, - PixelType typeInFile = HALF, - size_t xPointerStride = 0, - size_t yPointerStride = 0, - size_t sampleStride = 0, - int xSampling = 1, - int ySampling = 1, - bool fill = false, - bool skip = false, - double fillValue = 0.0); -}; - - -InSliceInfo::InSliceInfo (PixelType tifb, - char * b, - PixelType tifl, - size_t xpst, - size_t ypst, - size_t spst, - int xsm, int ysm, - bool f, bool s, - double fv) -: - typeInFrameBuffer (tifb), - typeInFile (tifl), - base(b), - xPointerStride (xpst), - yPointerStride (ypst), - sampleStride (spst), - xSampling (xsm), - ySampling (ysm), - fill (f), - skip (s), - fillValue (fv) -{ - // empty -} - - -struct LineBuffer -{ - const char * uncompressedData; - char * buffer; - Int64 packedDataSize; - Int64 unpackedDataSize; - - int minY; - int maxY; - Compressor * compressor; - Compressor::Format format; - int number; - bool hasException; - string exception; - - LineBuffer (); - ~LineBuffer (); - - inline void wait () {_sem.wait();} - inline void post () {_sem.post();} - - private: - - Semaphore _sem; -}; - - -LineBuffer::LineBuffer (): - uncompressedData (0), - buffer (0), - packedDataSize (0), - compressor (0), - format (defaultFormat(compressor)), - number (-1), - hasException (false), - exception (), - _sem (1) -{ - // empty -} - - -LineBuffer::~LineBuffer () -{ - if (compressor != 0) - delete compressor; -} - -} // namespace - - -struct DeepScanLineInputFile::Data: public Mutex -{ - Header header; // the image header - int version; // file's version - DeepFrameBuffer frameBuffer; // framebuffer to write into - LineOrder lineOrder; // order of the scanlines in file - int minX; // data window's min x coord - int maxX; // data window's max x coord - int minY; // data window's min y coord - int maxY; // data window's max x coord - vector lineOffsets; // stores offsets in file for - // each line - bool fileIsComplete; // True if no scanlines are missing - // in the file - int nextLineBufferMinY; // minimum y of the next linebuffer - vector bytesPerLine; // combined size of a line over all - // channels - vector offsetInLineBuffer; // offset for each scanline in its - // linebuffer - vector slices; // info about channels in file - - vector lineBuffers; // each holds one line buffer - int linesInBuffer; // number of scanlines each buffer - // holds - int partNumber; // part number - int numThreads; // number of threads - - bool multiPartBackwardSupport; // if we are reading a multipart file using single file API - MultiPartInputFile* multiPartFile; // for multipart files opened as single part - bool memoryMapped; // if the stream is memory mapped - - Array2D sampleCount; // the number of samples - // in each pixel - - Array lineSampleCount; // the number of samples - // in each line - - Array gotSampleCount; // for each scanline, indicating if - // we have got its sample count table - - char* sampleCountSliceBase; // pointer to the start of - // the sample count array - int sampleCountXStride; // x stride of the sample count array - int sampleCountYStride; // y stride of the sample count array - bool frameBufferValid; // set by setFrameBuffer: excepts if readPixelSampleCounts if false - - Array sampleCountTableBuffer; - // the buffer for sample count table - - Compressor* sampleCountTableComp; - // the decompressor for sample count table - - int combinedSampleSize; // total size of all channels combined: used to sanity check sample table size - - int maxSampleCountTableSize; - // the max size in bytes for a pixel - // sample count table - InputStreamMutex* _streamData; - bool _deleteStream; - - - Data (int numThreads); - ~Data (); - - inline LineBuffer * getLineBuffer (int number); // hash function from line - // buffer indices into our - // vector of line buffers -}; - - -DeepScanLineInputFile::Data::Data (int numThreads): - partNumber(-1), - numThreads(numThreads), - multiPartBackwardSupport(false), - multiPartFile(NULL), - memoryMapped(false), - frameBufferValid(false), - _streamData(NULL), - _deleteStream(false) -{ - // - // We need at least one lineBuffer, but if threading is used, - // to keep n threads busy we need 2*n lineBuffers - // - - lineBuffers.resize (max (1, 2 * numThreads)); - - for (size_t i = 0; i < lineBuffers.size(); i++) - lineBuffers[i] = 0; - - sampleCountTableComp = 0; -} - - -DeepScanLineInputFile::Data::~Data () -{ - for (size_t i = 0; i < lineBuffers.size(); i++) - if (lineBuffers[i] != 0) - delete lineBuffers[i]; - - for (size_t i = 0; i < slices.size(); i++) - delete slices[i]; - - if (sampleCountTableComp != 0) - delete sampleCountTableComp; - - if (multiPartBackwardSupport) - delete multiPartFile; -} - - -inline LineBuffer * -DeepScanLineInputFile::Data::getLineBuffer (int lineBufferNumber) -{ - return lineBuffers[lineBufferNumber % lineBuffers.size()]; -} - - -namespace { - - -void -reconstructLineOffsets (OPENEXR_IMF_INTERNAL_NAMESPACE::IStream &is, - LineOrder lineOrder, - vector &lineOffsets) -{ - Int64 position = is.tellg(); - - try - { - for (unsigned int i = 0; i < lineOffsets.size(); i++) - { - Int64 lineOffset = is.tellg(); - - int y; - OPENEXR_IMF_INTERNAL_NAMESPACE::Xdr::read (is, y); - - Int64 packed_offset; - Int64 packed_sample; - OPENEXR_IMF_INTERNAL_NAMESPACE::Xdr::read (is, packed_offset); - OPENEXR_IMF_INTERNAL_NAMESPACE::Xdr::read (is, packed_sample); - //next is unpacked sample table size - skip this too - Xdr::skip (is, packed_offset+packed_sample+8); - - if (lineOrder == INCREASING_Y) - lineOffsets[i] = lineOffset; - else - lineOffsets[lineOffsets.size() - i - 1] = lineOffset; - } - } - catch (...) - { - // - // Suppress all exceptions. This functions is - // called only to reconstruct the line offset - // table for incomplete files, and exceptions - // are likely. - // - } - - is.clear(); - is.seekg (position); -} - - -void -readLineOffsets (OPENEXR_IMF_INTERNAL_NAMESPACE::IStream &is, - LineOrder lineOrder, - vector &lineOffsets, - bool &complete) -{ - for (unsigned int i = 0; i < lineOffsets.size(); i++) - { - OPENEXR_IMF_INTERNAL_NAMESPACE::Xdr::read (is, lineOffsets[i]); - } - - complete = true; - - for (unsigned int i = 0; i < lineOffsets.size(); i++) - { - if (lineOffsets[i] <= 0) - { - // - // Invalid data in the line offset table mean that - // the file is probably incomplete (the table is - // the last thing written to the file). Either - // some process is still busy writing the file, - // or writing the file was aborted. - // - // We should still be able to read the existing - // parts of the file. In order to do this, we - // have to make a sequential scan over the scan - // line data to reconstruct the line offset table. - // - - complete = false; - reconstructLineOffsets (is, lineOrder, lineOffsets); - break; - } - } -} - - -void -readPixelData (InputStreamMutex *streamData, - DeepScanLineInputFile::Data *ifd, - int minY, - char *&buffer, - Int64 &packedDataSize, - Int64 &unpackedDataSize) -{ - // - // Read a single line buffer from the input file. - // - // If the input file is not memory-mapped, we copy the pixel data into - // into the array pointed to by buffer. If the file is memory-mapped, - // then we change where buffer points to instead of writing into the - // array (hence buffer needs to be a reference to a char *). - // - - int lineBufferNumber = (minY - ifd->minY) / ifd->linesInBuffer; - - Int64 lineOffset = ifd->lineOffsets[lineBufferNumber]; - - if (lineOffset == 0) - THROW (IEX_NAMESPACE::InputExc, "Scan line " << minY << " is missing."); - - // - // Seek to the start of the scan line in the file, - // if necessary. - // - - if (!isMultiPart(ifd->version)) - { - if (ifd->nextLineBufferMinY != minY) - streamData->is->seekg (lineOffset); - } - else - { - // - // In a multi-part file, the file pointer may have been moved by - // other parts, so we have to ask tellg() where we are. - // - if (streamData->is->tellg() != ifd->lineOffsets[lineBufferNumber]) - streamData->is->seekg (lineOffset); - } - - // - // Read the data block's header. - // - - int yInFile; - - // - // Read the part number when we are dealing with a multi-part file. - // - - if (isMultiPart(ifd->version)) - { - int partNumber; - OPENEXR_IMF_INTERNAL_NAMESPACE::Xdr::read (*streamData->is, partNumber); - if (partNumber != ifd->partNumber) - { - THROW (IEX_NAMESPACE::ArgExc, "Unexpected part number " << partNumber - << ", should be " << ifd->partNumber << "."); - } - } - - OPENEXR_IMF_INTERNAL_NAMESPACE::Xdr::read (*streamData->is, yInFile); - - if (yInFile != minY) - throw IEX_NAMESPACE::InputExc ("Unexpected data block y coordinate."); - - Int64 sampleCountTableSize; - OPENEXR_IMF_INTERNAL_NAMESPACE::Xdr::read (*streamData->is, sampleCountTableSize); - OPENEXR_IMF_INTERNAL_NAMESPACE::Xdr::read (*streamData->is, packedDataSize); - OPENEXR_IMF_INTERNAL_NAMESPACE::Xdr::read (*streamData->is, unpackedDataSize); - - - // - // We make a check on the data size requirements here. - // Whilst we wish to store 64bit sizes on disk, not all the compressors - // have been made to work with such data sizes and are still limited to - // using signed 32 bit (int) for the data size. As such, this version - // insists that we validate that the data size does not exceed the data - // type max limit. - // @TODO refactor the compressor code to ensure full 64-bit support. - // - - int compressorMaxDataSize = std::numeric_limits::max(); - if (packedDataSize > Int64(compressorMaxDataSize) || - unpackedDataSize > Int64(compressorMaxDataSize)) - { - THROW (IEX_NAMESPACE::ArgExc, "This version of the library does not support " - << "the allocation of data with size > " << compressorMaxDataSize - << " file unpacked size :" << unpackedDataSize - << " file packed size :" << packedDataSize << ".\n"); - } - - // - // Skip the pixel sample count table because we have read this data. - // - - Xdr::skip (*streamData->is, sampleCountTableSize); - - // - // Read the pixel data. - // - - if (streamData->is->isMemoryMapped ()) - buffer = streamData->is->readMemoryMapped (packedDataSize); - else - { - // (TODO) check if the packed data size is too big? - // (TODO) better memory management. Don't delete buffer all the time. - if (buffer != 0) delete[] buffer; - buffer = new char[packedDataSize]; - streamData->is->read (buffer, packedDataSize); - } - - // - // Keep track of which scan line is the next one in - // the file, so that we can avoid redundant seekg() - // operations (seekg() can be fairly expensive). - // - - if (ifd->lineOrder == INCREASING_Y) - ifd->nextLineBufferMinY = minY + ifd->linesInBuffer; - else - ifd->nextLineBufferMinY = minY - ifd->linesInBuffer; -} - -// -// A LineBufferTask encapsulates the task uncompressing a set of -// scanlines (line buffer) and copying them into the frame buffer. -// - -class LineBufferTask : public Task -{ - public: - - LineBufferTask (TaskGroup *group, - DeepScanLineInputFile::Data *ifd, - LineBuffer *lineBuffer, - int scanLineMin, - int scanLineMax); - - virtual ~LineBufferTask (); - - virtual void execute (); - - private: - - DeepScanLineInputFile::Data * _ifd; - LineBuffer * _lineBuffer; - int _scanLineMin; - int _scanLineMax; -}; - - -LineBufferTask::LineBufferTask - (TaskGroup *group, - DeepScanLineInputFile::Data *ifd, - LineBuffer *lineBuffer, - int scanLineMin, - int scanLineMax) -: - Task (group), - _ifd (ifd), - _lineBuffer (lineBuffer), - _scanLineMin (scanLineMin), - _scanLineMax (scanLineMax) -{ - // empty -} - - -LineBufferTask::~LineBufferTask () -{ - // - // Signal that the line buffer is now free - // - - _lineBuffer->post (); -} - - -void -LineBufferTask::execute () -{ - try - { - // - // Uncompress the data, if necessary - // - - if (_lineBuffer->uncompressedData == 0) - { - Int64 uncompressedSize = 0; - int maxY = min (_lineBuffer->maxY, _ifd->maxY); - - for (int i = _lineBuffer->minY - _ifd->minY; - i <= maxY - _ifd->minY; - ++i) - { - uncompressedSize += (int) _ifd->bytesPerLine[i]; - } - - // - // Create the compressor everytime when we want to use it, - // because we don't know maxBytesPerLine beforehand. - // (TODO) optimize this. don't do this every time. - // - - if (_lineBuffer->compressor != 0) - delete _lineBuffer->compressor; - Int64 maxBytesPerLine = 0; - for (int i = _lineBuffer->minY - _ifd->minY; - i <= maxY - _ifd->minY; - ++i) - { - if (_ifd->bytesPerLine[i] > maxBytesPerLine) - maxBytesPerLine = _ifd->bytesPerLine[i]; - } - _lineBuffer->compressor = newCompressor(_ifd->header.compression(), - maxBytesPerLine, - _ifd->header); - - if (_lineBuffer->compressor && - _lineBuffer->packedDataSize < uncompressedSize) - { - _lineBuffer->format = _lineBuffer->compressor->format(); - - _lineBuffer->packedDataSize = _lineBuffer->compressor->uncompress - (_lineBuffer->buffer, _lineBuffer->packedDataSize, - _lineBuffer->minY, _lineBuffer->uncompressedData); - } - else - { - // - // If the line is uncompressed, it's in XDR format, - // regardless of the compressor's output format. - // - - _lineBuffer->format = Compressor::XDR; - _lineBuffer->uncompressedData = _lineBuffer->buffer; - } - } - - int yStart, yStop, dy; - - if (_ifd->lineOrder == INCREASING_Y) - { - yStart = _scanLineMin; - yStop = _scanLineMax + 1; - dy = 1; - } - else - { - yStart = _scanLineMax; - yStop = _scanLineMin - 1; - dy = -1; - } - - for (int y = yStart; y != yStop; y += dy) - { - // - // Convert one scan line's worth of pixel data back - // from the machine-independent representation, and - // store the result in the frame buffer. - // - - const char *readPtr = _lineBuffer->uncompressedData + - _ifd->offsetInLineBuffer[y - _ifd->minY]; - - // - // Iterate over all image channels. - // - - for (unsigned int i = 0; i < _ifd->slices.size(); ++i) - { - // - // Test if scan line y of this channel contains any data - // (the scan line contains data only if y % ySampling == 0). - // - - InSliceInfo &slice = *_ifd->slices[i]; - - if (modp (y, slice.ySampling) != 0) - continue; - - // - // Find the x coordinates of the leftmost and rightmost - // sampled pixels (i.e. pixels within the data window - // for which x % xSampling == 0). - // - - // - // Fill the frame buffer with pixel data. - // - - if (slice.skip) - { - // - // The file contains data for this channel, but - // the frame buffer contains no slice for this channel. - // - - skipChannel (readPtr, slice.typeInFile, - _ifd->lineSampleCount[y - _ifd->minY]); - } - else - { - // - // The frame buffer contains a slice for this channel. - // - - int width = (_ifd->maxX - _ifd->minX + 1); - - copyIntoDeepFrameBuffer (readPtr, slice.base, - (char*) (&_ifd->sampleCount[0][0] - - _ifd->minX - - _ifd->minY * width), - sizeof(unsigned int) * 1, - sizeof(unsigned int) * width, - y, _ifd->minX, _ifd->maxX, - 0, 0, - 0, 0, - slice.sampleStride, - slice.xPointerStride, - slice.yPointerStride, - slice.fill, - slice.fillValue, _lineBuffer->format, - slice.typeInFrameBuffer, - slice.typeInFile); - } - } - } - } - catch (std::exception &e) - { - if (!_lineBuffer->hasException) - { - _lineBuffer->exception = e.what(); - _lineBuffer->hasException = true; - } - } - catch (...) - { - if (!_lineBuffer->hasException) - { - _lineBuffer->exception = "unrecognized exception"; - _lineBuffer->hasException = true; - } - } -} - - -LineBufferTask * -newLineBufferTask - (TaskGroup *group, - DeepScanLineInputFile::Data *ifd, - int number, - int scanLineMin, - int scanLineMax) -{ - // - // Wait for a line buffer to become available, fill the line - // buffer with raw data from the file if necessary, and create - // a new LineBufferTask whose execute() method will uncompress - // the contents of the buffer and copy the pixels into the - // frame buffer. - // - - LineBuffer *lineBuffer = ifd->getLineBuffer (number); - - try - { - lineBuffer->wait (); - - if (lineBuffer->number != number) - { - lineBuffer->minY = ifd->minY + number * ifd->linesInBuffer; - lineBuffer->maxY = lineBuffer->minY + ifd->linesInBuffer - 1; - - lineBuffer->number = number; - lineBuffer->uncompressedData = 0; - - readPixelData (ifd->_streamData, ifd, lineBuffer->minY, - lineBuffer->buffer, - lineBuffer->packedDataSize, - lineBuffer->unpackedDataSize); - } - } - catch (std::exception &e) - { - if (!lineBuffer->hasException) - { - lineBuffer->exception = e.what(); - lineBuffer->hasException = true; - } - lineBuffer->number = -1; - lineBuffer->post(); - throw; - } - catch (...) - { - // - // Reading from the file caused an exception. - // Signal that the line buffer is free, and - // re-throw the exception. - // - - lineBuffer->exception = "unrecognized exception"; - lineBuffer->hasException = true; - lineBuffer->number = -1; - lineBuffer->post(); - throw; - } - - scanLineMin = max (lineBuffer->minY, scanLineMin); - scanLineMax = min (lineBuffer->maxY, scanLineMax); - - return new LineBufferTask (group, ifd, lineBuffer, - scanLineMin, scanLineMax); -} - -} // namespace - - -void DeepScanLineInputFile::initialize(const Header& header) -{ - try - { - if (header.type() != DEEPSCANLINE) - throw IEX_NAMESPACE::ArgExc("Can't build a DeepScanLineInputFile from " - "a type-mismatched part."); - - if(header.version()!=1) - { - THROW(IEX_NAMESPACE::ArgExc, "Version " << header.version() << " not supported for deepscanline images in this version of the library"); - } - - _data->header = header; - - _data->lineOrder = _data->header.lineOrder(); - - const Box2i &dataWindow = _data->header.dataWindow(); - - _data->minX = dataWindow.min.x; - _data->maxX = dataWindow.max.x; - _data->minY = dataWindow.min.y; - _data->maxY = dataWindow.max.y; - - _data->sampleCount.resizeErase(_data->maxY - _data->minY + 1, - _data->maxX - _data->minX + 1); - _data->lineSampleCount.resizeErase(_data->maxY - _data->minY + 1); - - Compressor* compressor = newCompressor(_data->header.compression(), - 0, - _data->header); - - _data->linesInBuffer = numLinesInBuffer (compressor); - - delete compressor; - - _data->nextLineBufferMinY = _data->minY - 1; - - int lineOffsetSize = (dataWindow.max.y - dataWindow.min.y + - _data->linesInBuffer) / _data->linesInBuffer; - - _data->lineOffsets.resize (lineOffsetSize); - - for (size_t i = 0; i < _data->lineBuffers.size(); i++) - _data->lineBuffers[i] = new LineBuffer (); - - _data->gotSampleCount.resizeErase(_data->maxY - _data->minY + 1); - for (int i = 0; i < _data->maxY - _data->minY + 1; i++) - _data->gotSampleCount[i] = false; - - _data->maxSampleCountTableSize = min(_data->linesInBuffer, _data->maxY - _data->minY + 1) * - (_data->maxX - _data->minX + 1) * - sizeof(unsigned int); - - _data->sampleCountTableBuffer.resizeErase(_data->maxSampleCountTableSize); - - _data->sampleCountTableComp = newCompressor(_data->header.compression(), - _data->maxSampleCountTableSize, - _data->header); - - _data->bytesPerLine.resize (_data->maxY - _data->minY + 1); - - const ChannelList & c=header.channels(); - - _data->combinedSampleSize=0; - for(ChannelList::ConstIterator i=c.begin();i!=c.end();i++) - { - switch(i.channel().type) - { - case OPENEXR_IMF_INTERNAL_NAMESPACE::HALF : - _data->combinedSampleSize+=Xdr::size(); - break; - case OPENEXR_IMF_INTERNAL_NAMESPACE::FLOAT : - _data->combinedSampleSize+=Xdr::size(); - break; - case OPENEXR_IMF_INTERNAL_NAMESPACE::UINT : - _data->combinedSampleSize+=Xdr::size(); - break; - default : - THROW(IEX_NAMESPACE::ArgExc, "Bad type for channel " << i.name() << " initializing deepscanline reader"); - - } - } - - } - catch (...) - { - delete _data; - _data=NULL; - throw; - } -} - - -DeepScanLineInputFile::DeepScanLineInputFile(InputPartData* part) - -{ - - _data = new Data(part->numThreads); - _data->_deleteStream=false; - _data->_streamData = part->mutex; - _data->memoryMapped = _data->_streamData->is->isMemoryMapped(); - _data->version = part->version; - - initialize(part->header); - - _data->lineOffsets = part->chunkOffsets; - - _data->partNumber = part->partNumber; -} - - -DeepScanLineInputFile::DeepScanLineInputFile - (const char fileName[], int numThreads) -: - _data (new Data (numThreads)) -{ - _data->_streamData = new InputStreamMutex(); - _data->_deleteStream = true; - OPENEXR_IMF_INTERNAL_NAMESPACE::IStream* is = 0; - - try - { - is = new StdIFStream (fileName); - readMagicNumberAndVersionField(*is, _data->version); - // - // Backward compatibility to read multpart file. - // - if (isMultiPart(_data->version)) - { - compatibilityInitialize(*is); - return; - } - _data->_streamData->is = is; - _data->memoryMapped = is->isMemoryMapped(); - _data->header.readFrom (*_data->_streamData->is, _data->version); - _data->header.sanityCheck (isTiled (_data->version)); - - initialize(_data->header); - - readLineOffsets (*_data->_streamData->is, - _data->lineOrder, - _data->lineOffsets, - _data->fileIsComplete); - } - catch (IEX_NAMESPACE::BaseExc &e) - { - if (is) delete is; - if (_data && _data->_streamData) delete _data->_streamData; - if (_data) delete _data; - - REPLACE_EXC (e, "Cannot read image file " - "\"" << fileName << "\". " << e.what()); - throw; - } - catch (...) - { - if (is) delete is; - if (_data && _data->_streamData) delete _data->_streamData; - if (_data) delete _data; - - throw; - } -} - - -DeepScanLineInputFile::DeepScanLineInputFile - (const Header &header, - OPENEXR_IMF_INTERNAL_NAMESPACE::IStream *is, - int version, - int numThreads) -: - _data (new Data (numThreads)) -{ - _data->_streamData=new InputStreamMutex(); - _data->_deleteStream=false; - _data->_streamData->is = is; - - _data->memoryMapped = is->isMemoryMapped(); - - _data->version =version; - - initialize (header); - - readLineOffsets (*_data->_streamData->is, - _data->lineOrder, - _data->lineOffsets, - _data->fileIsComplete); -} - - -DeepScanLineInputFile::~DeepScanLineInputFile () -{ - if (_data->_deleteStream) - delete _data->_streamData->is; - - if (_data) - { - if (!_data->memoryMapped) - for (size_t i = 0; i < _data->lineBuffers.size(); i++) - delete [] _data->lineBuffers[i]->buffer; - - // - // Unless this file was opened via the multipart API, delete the streamdata - // object too. - // (TODO) it should be "isMultiPart(data->version)", but when there is only - // single part, - // (see the above constructor) the version field is not set. - // - // (TODO) we should have a way to tell if the stream data is owned by this - // file or by a parent multipart file. - // - - if (_data->partNumber == -1 && _data->_streamData) - delete _data->_streamData; - - delete _data; - } -} - -void -DeepScanLineInputFile::compatibilityInitialize(OPENEXR_IMF_INTERNAL_NAMESPACE::IStream& is) -{ - is.seekg(0); - // - // Construct a MultiPartInputFile, initialize TiledInputFile - // with the part 0 data. - // (TODO) maybe change the third parameter of the constructor of MultiPartInputFile later. - // - _data->multiPartBackwardSupport = true; - _data->multiPartFile = new MultiPartInputFile(is, _data->numThreads); - InputPartData* part = _data->multiPartFile->getPart(0); - - multiPartInitialize(part); -} - -void DeepScanLineInputFile::multiPartInitialize(InputPartData* part) -{ - - _data->_streamData = part->mutex; - _data->memoryMapped = _data->_streamData->is->isMemoryMapped(); - _data->version = part->version; - - initialize(part->header); - - _data->lineOffsets = part->chunkOffsets; - - _data->partNumber = part->partNumber; - -} - - -const char * -DeepScanLineInputFile::fileName () const -{ - return _data->_streamData->is->fileName(); -} - - -const Header & -DeepScanLineInputFile::header () const -{ - return _data->header; -} - - -int -DeepScanLineInputFile::version () const -{ - return _data->version; -} - - -void -DeepScanLineInputFile::setFrameBuffer (const DeepFrameBuffer &frameBuffer) -{ - Lock lock (*_data->_streamData); - - - // - // Check if the new frame buffer descriptor is - // compatible with the image file header. - // - - const ChannelList &channels = _data->header.channels(); - - for (DeepFrameBuffer::ConstIterator j = frameBuffer.begin(); - j != frameBuffer.end(); - ++j) - { - ChannelList::ConstIterator i = channels.find (j.name()); - - if (i == channels.end()) - continue; - - if (i.channel().xSampling != j.slice().xSampling || - i.channel().ySampling != j.slice().ySampling) - THROW (IEX_NAMESPACE::ArgExc, "X and/or y subsampling factors " - "of \"" << i.name() << "\" channel " - "of input file \"" << fileName() << "\" are " - "not compatible with the frame buffer's " - "subsampling factors."); - } - - // - // Store the pixel sample count table. - // (TODO) Support for different sampling rates? - // - - const Slice& sampleCountSlice = frameBuffer.getSampleCountSlice(); - if (sampleCountSlice.base == 0) - { - throw IEX_NAMESPACE::ArgExc ("Invalid base pointer, please set a proper sample count slice."); - } - else - { - _data->sampleCountSliceBase = sampleCountSlice.base; - _data->sampleCountXStride = sampleCountSlice.xStride; - _data->sampleCountYStride = sampleCountSlice.yStride; - } - - // - // Initialize the slice table for readPixels(). - // - - vector slices; - ChannelList::ConstIterator i = channels.begin(); - - for (DeepFrameBuffer::ConstIterator j = frameBuffer.begin(); - j != frameBuffer.end(); - ++j) - { - while (i != channels.end() && strcmp (i.name(), j.name()) < 0) - { - // - // Channel i is present in the file but not - // in the frame buffer; data for channel i - // will be skipped during readPixels(). - // - - slices.push_back (new InSliceInfo (i.channel().type, - NULL, - i.channel().type, - 0, - 0, - 0, // sampleStride - i.channel().xSampling, - i.channel().ySampling, - false, // fill - true, // skip - 0.0)); // fillValue - ++i; - } - - bool fill = false; - - if (i == channels.end() || strcmp (i.name(), j.name()) > 0) - { - // - // Channel i is present in the frame buffer, but not in the file. - // In the frame buffer, slice j will be filled with a default value. - // - - fill = true; - } - - slices.push_back (new InSliceInfo (j.slice().type, - j.slice().base, - fill? j.slice().type: - i.channel().type, - j.slice().xStride, - j.slice().yStride, - j.slice().sampleStride, - j.slice().xSampling, - j.slice().ySampling, - fill, - false, // skip - j.slice().fillValue)); - - - if (i != channels.end() && !fill) - ++i; - } - - // - // Client may want data to be filled in multiple arrays, - // so we reset gotSampleCount and bytesPerLine. - // - - for (long i = 0; i < _data->gotSampleCount.size(); i++) - _data->gotSampleCount[i] = false; - for (size_t i = 0; i < _data->bytesPerLine.size(); i++) - _data->bytesPerLine[i] = 0; - - // - // Store the new frame buffer. - // - - _data->frameBuffer = frameBuffer; - - for (size_t i = 0; i < _data->slices.size(); i++) - delete _data->slices[i]; - _data->slices = slices; - _data->frameBufferValid = true; -} - - -const DeepFrameBuffer & -DeepScanLineInputFile::frameBuffer () const -{ - Lock lock (*_data->_streamData); - return _data->frameBuffer; -} - - -bool -DeepScanLineInputFile::isComplete () const -{ - return _data->fileIsComplete; -} - - -void -DeepScanLineInputFile::readPixels (int scanLine1, int scanLine2) -{ - try - { - Lock lock (*_data->_streamData); - - if (_data->slices.size() == 0) - throw IEX_NAMESPACE::ArgExc ("No frame buffer specified " - "as pixel data destination."); - - int scanLineMin = min (scanLine1, scanLine2); - int scanLineMax = max (scanLine1, scanLine2); - - if (scanLineMin < _data->minY || scanLineMax > _data->maxY) - throw IEX_NAMESPACE::ArgExc ("Tried to read scan line outside " - "the image file's data window."); - - for (int i = scanLineMin; i <= scanLineMax; i++) - { - if (_data->gotSampleCount[i - _data->minY] == false) - throw IEX_NAMESPACE::ArgExc ("Tried to read scan line without " - "knowing the sample counts, please" - "read the sample counts first."); - } - - - // - // We impose a numbering scheme on the lineBuffers where the first - // scanline is contained in lineBuffer 1. - // - // Determine the first and last lineBuffer numbers in this scanline - // range. We always attempt to read the scanlines in the order that - // they are stored in the file. - // - - int start, stop, dl; - - if (_data->lineOrder == INCREASING_Y) - { - start = (scanLineMin - _data->minY) / _data->linesInBuffer; - stop = (scanLineMax - _data->minY) / _data->linesInBuffer + 1; - dl = 1; - } - else - { - start = (scanLineMax - _data->minY) / _data->linesInBuffer; - stop = (scanLineMin - _data->minY) / _data->linesInBuffer - 1; - dl = -1; - } - - // - // Create a task group for all line buffer tasks. When the - // task group goes out of scope, the destructor waits until - // all tasks are complete. - // - - { - TaskGroup taskGroup; - - // - // Add the line buffer tasks. - // - // The tasks will execute in the order that they are created - // because we lock the line buffers during construction and the - // constructors are called by the main thread. Hence, in order - // for a successive task to execute the previous task which - // used that line buffer must have completed already. - // - - for (int l = start; l != stop; l += dl) - { - ThreadPool::addGlobalTask (newLineBufferTask (&taskGroup, - _data, l, - scanLineMin, - scanLineMax)); - } - - // - // finish all tasks - // - } - - // - // Exeption handling: - // - // LineBufferTask::execute() may have encountered exceptions, but - // those exceptions occurred in another thread, not in the thread - // that is executing this call to ScanLineInputFile::readPixels(). - // LineBufferTask::execute() has caught all exceptions and stored - // the exceptions' what() strings in the line buffers. - // Now we check if any line buffer contains a stored exception; if - // this is the case then we re-throw the exception in this thread. - // (It is possible that multiple line buffers contain stored - // exceptions. We re-throw the first exception we find and - // ignore all others.) - // - - const string *exception = 0; - - for (size_t i = 0; i < _data->lineBuffers.size(); ++i) - { - LineBuffer *lineBuffer = _data->lineBuffers[i]; - - if (lineBuffer->hasException && !exception) - exception = &lineBuffer->exception; - - lineBuffer->hasException = false; - } - - if (exception) - throw IEX_NAMESPACE::IoExc (*exception); - } - catch (IEX_NAMESPACE::BaseExc &e) - { - REPLACE_EXC (e, "Error reading pixel data from image " - "file \"" << fileName() << "\". " << e.what()); - throw; - } -} - - -void -DeepScanLineInputFile::readPixels (int scanLine) -{ - readPixels (scanLine, scanLine); -} - - -void -DeepScanLineInputFile::rawPixelData (int firstScanLine, - char *pixelData, - Int64 &pixelDataSize) -{ - - - int minY = lineBufferMinY - (firstScanLine, _data->minY, _data->linesInBuffer); - int lineBufferNumber = (minY - _data->minY) / _data->linesInBuffer; - - Int64 lineOffset = _data->lineOffsets[lineBufferNumber]; - - if (lineOffset == 0) - THROW (IEX_NAMESPACE::InputExc, "Scan line " << minY << " is missing."); - - - // enter the lock here - prevent another thread reseeking the file during read - Lock lock (*_data->_streamData); - - // - // Seek to the start of the scan line in the file, - // - - if (_data->_streamData->is->tellg() != _data->lineOffsets[lineBufferNumber]) - _data->_streamData->is->seekg (lineOffset); - - // - // Read the data block's header. - // - - int yInFile; - - // - // Read the part number when we are dealing with a multi-part file. - // - - if (isMultiPart(_data->version)) - { - int partNumber; - OPENEXR_IMF_INTERNAL_NAMESPACE::Xdr::read (*_data->_streamData->is, partNumber); - if (partNumber != _data->partNumber) - { - THROW (IEX_NAMESPACE::ArgExc, "Unexpected part number " << partNumber - << ", should be " << _data->partNumber << "."); - } - } - - OPENEXR_IMF_INTERNAL_NAMESPACE::Xdr::read (*_data->_streamData->is, yInFile); - - if (yInFile != minY) - throw IEX_NAMESPACE::InputExc ("Unexpected data block y coordinate."); - - Int64 sampleCountTableSize; - Int64 packedDataSize; - OPENEXR_IMF_INTERNAL_NAMESPACE::Xdr::read (*_data->_streamData->is, sampleCountTableSize); - OPENEXR_IMF_INTERNAL_NAMESPACE::Xdr::read (*_data->_streamData->is, packedDataSize); - - // total requirement for reading all the data - - Int64 totalSizeRequired=28+sampleCountTableSize+packedDataSize; - - bool big_enough = totalSizeRequired<=pixelDataSize; - - pixelDataSize = totalSizeRequired; - - // was the block we were given big enough? - if(!big_enough || pixelData==NULL) - { - // special case: seek stream back to start if we are at the beginning (regular reading pixels assumes it doesn't need to seek - // in single part files) - if(!isMultiPart(_data->version)) - { - if (_data->nextLineBufferMinY == minY) - _data->_streamData->is->seekg (lineOffset); - } - // leave lock here - bail before reading more data - return; - } - - // copy the values we have read into the output block - *(int *) pixelData = yInFile; - *(Int64 *) (pixelData+4) =sampleCountTableSize; - *(Int64 *) (pixelData+12) = packedDataSize; - - // didn't read the unpackedsize - do that now - Xdr::read (*_data->_streamData->is, *(Int64 *) (pixelData+20)); - - // read the actual data - _data->_streamData->is->read(pixelData+28, sampleCountTableSize+packedDataSize); - - // special case: seek stream back to start if we are at the beginning (regular reading pixels assumes it doesn't need to seek - // in single part files) - if(!isMultiPart(_data->version)) - { - if (_data->nextLineBufferMinY == minY) - _data->_streamData->is->seekg (lineOffset); - } - - // leave lock here - -} - -void DeepScanLineInputFile::readPixels (const char* rawPixelData, - const DeepFrameBuffer& frameBuffer, - int scanLine1, - int scanLine2) const -{ - // - // read header from block - already converted from Xdr to native format - // - int data_scanline = *(int *) rawPixelData; - Int64 sampleCountTableDataSize=*(Int64 *) (rawPixelData+4); - Int64 packedDataSize = *(Int64 *) (rawPixelData+12); - Int64 unpackedDataSize = *(Int64 *) (rawPixelData+20); - - - - // - // Uncompress the data, if necessary - // - - - Compressor * decomp = NULL; - const char * uncompressed_data; - Compressor::Format format = Compressor::XDR; - if(packedDataSize header.compression(), - unpackedDataSize, - _data->header); - - decomp->uncompress(rawPixelData+28+sampleCountTableDataSize, - packedDataSize, - data_scanline, uncompressed_data); - format = decomp->format(); - } - else - { - // - // If the line is uncompressed, it's in XDR format, - // regardless of the compressor's output format. - // - - format = Compressor::XDR; - uncompressed_data = rawPixelData+28+sampleCountTableDataSize; - } - - - int yStart, yStop, dy; - - if (_data->lineOrder == INCREASING_Y) - { - yStart = scanLine1; - yStop = scanLine2 + 1; - dy = 1; - } - else - { - yStart = scanLine2; - yStop = scanLine1 - 1; - dy = -1; - } - - - - const char* samplecount_base = frameBuffer.getSampleCountSlice().base; - int samplecount_xstride = frameBuffer.getSampleCountSlice().xStride; - int samplecount_ystride = frameBuffer.getSampleCountSlice().yStride; - - // - // For each line within the block, get the count of bytes. - // - - int minYInLineBuffer = data_scanline; - int maxYInLineBuffer = min(minYInLineBuffer + _data->linesInBuffer - 1, _data->maxY); - - vector bytesPerLine(1+_data->maxY-_data->minY); - - - bytesPerDeepLineTable (_data->header, - minYInLineBuffer, - maxYInLineBuffer, - samplecount_base, - samplecount_xstride, - samplecount_ystride, - bytesPerLine); - - // - // For each scanline within the block, get the offset. - // - - vector offsetInLineBuffer; - offsetInLineBufferTable (bytesPerLine, - minYInLineBuffer - _data->minY, - maxYInLineBuffer - _data->minY, - _data->linesInBuffer, - offsetInLineBuffer); - - - const ChannelList & channels=header().channels(); - - - for (int y = yStart; y != yStop; y += dy) - { - - const char *readPtr =uncompressed_data + - offsetInLineBuffer[y - _data->minY]; - - // - // need to know the total number of samples on a scanline to skip channels - // compute on demand: -1 means uncomputed - // - int lineSampleCount = -1; - - - // - // Iterate over all image channels in frame buffer - // - - - ChannelList::ConstIterator i = channels.begin(); - - for (DeepFrameBuffer::ConstIterator j = frameBuffer.begin(); - j != frameBuffer.end(); - ++j) - { - while (i != channels.end() && strcmp (i.name(), j.name()) < 0) - { - // - // Channel i is present in the file but not - // in the frame buffer; skip - - if(lineSampleCount==-1) - { - lineSampleCount=0; - const char * ptr = (samplecount_base+y*samplecount_ystride + samplecount_xstride*_data->minX); - for(int x=_data->minX;x<=_data->maxX;x++) - { - - lineSampleCount+=*(const unsigned int *) ptr; - ptr+=samplecount_xstride; - } - } - - skipChannel (readPtr, i.channel().type, lineSampleCount ); - - ++i; - } - - bool fill = false; - - if (i == channels.end() || strcmp (i.name(), j.name()) > 0) - { - // - // Channel i is present in the frame buffer, but not in the file. - // In the frame buffer, slice j will be filled with a default value. - // - - fill = true; - } - if (modp (y, i.channel().ySampling) == 0) - { - - copyIntoDeepFrameBuffer (readPtr, j.slice().base, - samplecount_base, - samplecount_xstride, - samplecount_ystride, - y, _data->minX, _data->maxX, - 0, 0, - 0, 0, - j.slice().sampleStride, - j.slice().xStride, - j.slice().yStride, - fill, - j.slice().fillValue, - format, - j.slice().type, - i.channel().type); - - ++i; - - } - }//next slice in framebuffer - }//next row in image - - // - // clean up - // - - delete decomp; -} - - - -void DeepScanLineInputFile::readPixelSampleCounts (const char* rawPixelData, - const DeepFrameBuffer& frameBuffer, - int scanLine1, - int scanLine2) const -{ - // - // read header from block - already converted from Xdr to native format - // - int data_scanline = *(int *) rawPixelData; - Int64 sampleCountTableDataSize=*(Int64 *) (rawPixelData+4); - - - int maxY; - maxY = min(data_scanline + _data->linesInBuffer - 1, _data->maxY); - - if(scanLine1 != data_scanline) - { - THROW(IEX_NAMESPACE::ArgExc,"readPixelSampleCounts(rawPixelData,frameBuffer,"<< scanLine1 << ',' << scanLine2 << ") called with incorrect start scanline - should be " << data_scanline ); - } - - if(scanLine2 != maxY) - { - THROW(IEX_NAMESPACE::ArgExc,"readPixelSampleCounts(rawPixelData,frameBuffer,"<< scanLine1 << ',' << scanLine2 << ") called with incorrect end scanline - should be " << maxY ); - } - - - // - // If the sample count table is compressed, we'll uncompress it. - // - - Int64 rawSampleCountTableSize = (maxY - data_scanline + 1) * (_data->maxX - _data->minX + 1) * - Xdr::size (); - - - Compressor * decomp=NULL; - const char* readPtr; - if (sampleCountTableDataSize < rawSampleCountTableSize) - { - decomp = newCompressor(_data->header.compression(), - rawSampleCountTableSize, - _data->header); - - decomp->uncompress(rawPixelData+28, - sampleCountTableDataSize, - data_scanline, - readPtr); - } - else readPtr = rawPixelData+28; - - char* base = frameBuffer.getSampleCountSlice().base; - int xStride = frameBuffer.getSampleCountSlice().xStride; - int yStride = frameBuffer.getSampleCountSlice().yStride; - - - - for (int y = scanLine1; y <= scanLine2; y++) - { - int lastAccumulatedCount = 0; - for (int x = _data->minX; x <= _data->maxX; x++) - { - int accumulatedCount, count; - - // - // Read the sample count for pixel (x, y). - // - - Xdr::read (readPtr, accumulatedCount); - if (x == _data->minX) - count = accumulatedCount; - else - count = accumulatedCount - lastAccumulatedCount; - lastAccumulatedCount = accumulatedCount; - - // - // Store the data in both internal and external data structure. - // - - sampleCount(base, xStride, yStride, x, y) = count; - } - } - - if(decomp) - { - delete decomp; - } -} - - - -namespace -{ - -void -readSampleCountForLineBlock(InputStreamMutex* streamData, - DeepScanLineInputFile::Data* data, - int lineBlockId) -{ - streamData->is->seekg(data->lineOffsets[lineBlockId]); - - if (isMultiPart(data->version)) - { - int partNumber; - OPENEXR_IMF_INTERNAL_NAMESPACE::Xdr::read (*streamData->is, partNumber); - - if (partNumber != data->partNumber) - throw IEX_NAMESPACE::ArgExc("Unexpected part number."); - } - - int minY; - OPENEXR_IMF_INTERNAL_NAMESPACE::Xdr::read (*streamData->is, minY); - - // - // Check the correctness of minY. - // - - if (minY != data->minY + lineBlockId * data->linesInBuffer) - throw IEX_NAMESPACE::ArgExc("Unexpected data block y coordinate."); - - int maxY; - maxY = min(minY + data->linesInBuffer - 1, data->maxY); - - Int64 sampleCountTableDataSize; - OPENEXR_IMF_INTERNAL_NAMESPACE::Xdr::read (*streamData->is, sampleCountTableDataSize); - - - - if(sampleCountTableDataSize>data->maxSampleCountTableSize) - { - THROW (IEX_NAMESPACE::ArgExc, "Bad sampleCountTableDataSize read from chunk "<< lineBlockId << ": expected " << data->maxSampleCountTableSize << " or less, got "<< sampleCountTableDataSize); - } - - Int64 packedDataSize; - Int64 unpackedDataSize; - OPENEXR_IMF_INTERNAL_NAMESPACE::Xdr::read (*streamData->is, packedDataSize); - OPENEXR_IMF_INTERNAL_NAMESPACE::Xdr::read (*streamData->is, unpackedDataSize); - - - - // - // We make a check on the data size requirements here. - // Whilst we wish to store 64bit sizes on disk, not all the compressors - // have been made to work with such data sizes and are still limited to - // using signed 32 bit (int) for the data size. As such, this version - // insists that we validate that the data size does not exceed the data - // type max limit. - // @TODO refactor the compressor code to ensure full 64-bit support. - // - - int compressorMaxDataSize = std::numeric_limits::max(); - if (sampleCountTableDataSize > Int64(compressorMaxDataSize)) - { - THROW (IEX_NAMESPACE::ArgExc, "This version of the library does not " - << "support the allocation of data with size > " - << compressorMaxDataSize - << " file table size :" << sampleCountTableDataSize << ".\n"); - } - streamData->is->read(data->sampleCountTableBuffer, sampleCountTableDataSize); - - const char* readPtr; - - // - // If the sample count table is compressed, we'll uncompress it. - // - - - if (sampleCountTableDataSize < data->maxSampleCountTableSize) - { - if(!data->sampleCountTableComp) - { - THROW(IEX_NAMESPACE::ArgExc,"Deep scanline data corrupt at chunk " << lineBlockId << " (sampleCountTableDataSize error)"); - } - data->sampleCountTableComp->uncompress(data->sampleCountTableBuffer, - sampleCountTableDataSize, - minY, - readPtr); - } - else readPtr = data->sampleCountTableBuffer; - - char* base = data->sampleCountSliceBase; - int xStride = data->sampleCountXStride; - int yStride = data->sampleCountYStride; - - // total number of samples in block: used to check samplecount table doesn't - // reference more data than exists - - size_t cumulative_total_samples=0; - - for (int y = minY; y <= maxY; y++) - { - int yInDataWindow = y - data->minY; - data->lineSampleCount[yInDataWindow] = 0; - - int lastAccumulatedCount = 0; - for (int x = data->minX; x <= data->maxX; x++) - { - int accumulatedCount, count; - - // - // Read the sample count for pixel (x, y). - // - - Xdr::read (readPtr, accumulatedCount); - - // sample count table should always contain monotonically - // increasing values. - if (accumulatedCount < lastAccumulatedCount) - { - THROW(IEX_NAMESPACE::ArgExc,"Deep scanline sampleCount data corrupt at chunk " << lineBlockId << " (negative sample count detected)"); - } - - count = accumulatedCount - lastAccumulatedCount; - lastAccumulatedCount = accumulatedCount; - - // - // Store the data in both internal and external data structure. - // - - data->sampleCount[yInDataWindow][x - data->minX] = count; - data->lineSampleCount[yInDataWindow] += count; - sampleCount(base, xStride, yStride, x, y) = count; - } - cumulative_total_samples+=data->lineSampleCount[yInDataWindow]; - if(cumulative_total_samples*data->combinedSampleSize > unpackedDataSize) - { - THROW(IEX_NAMESPACE::ArgExc,"Deep scanline sampleCount data corrupt at chunk " << lineBlockId << ": pixel data only contains " << unpackedDataSize - << " bytes of data but table references at least " << cumulative_total_samples*data->combinedSampleSize << " bytes of sample data" ); - } - data->gotSampleCount[y - data->minY] = true; - } -} - - -void -fillSampleCountFromCache(int y, DeepScanLineInputFile::Data* data) -{ - int yInDataWindow = y - data->minY; - char* base = data->sampleCountSliceBase; - int xStride = data->sampleCountXStride; - int yStride = data->sampleCountYStride; - - for (int x = data->minX; x <= data->maxX; x++) - { - unsigned int count = data->sampleCount[yInDataWindow][x - data->minX]; - sampleCount(base, xStride, yStride, x, y) = count; - } -} - -} // namespace - -void -DeepScanLineInputFile::readPixelSampleCounts (int scanline1, int scanline2) -{ - Int64 savedFilePos = 0; - - if(!_data->frameBufferValid) - { - throw IEX_NAMESPACE::ArgExc("readPixelSampleCounts called with no valid frame buffer"); - } - - try - { - Lock lock (*_data->_streamData); - - savedFilePos = _data->_streamData->is->tellg(); - - int scanLineMin = min (scanline1, scanline2); - int scanLineMax = max (scanline1, scanline2); - - if (scanLineMin < _data->minY || scanLineMax > _data->maxY) - throw IEX_NAMESPACE::ArgExc ("Tried to read scan line sample counts outside " - "the image file's data window."); - - for (int i = scanLineMin; i <= scanLineMax; i++) - { - // - // if scanline is already read, it'll be in the cache - // otherwise, read from file, store in cache and in caller's framebuffer - // - if (_data->gotSampleCount[i - _data->minY]) - { - fillSampleCountFromCache(i,_data); - - }else{ - - int lineBlockId = ( i - _data->minY ) / _data->linesInBuffer; - - readSampleCountForLineBlock ( _data->_streamData, _data, lineBlockId ); - - int minYInLineBuffer = lineBlockId * _data->linesInBuffer + _data->minY; - int maxYInLineBuffer = min ( minYInLineBuffer + _data->linesInBuffer - 1, _data->maxY ); - - // - // For each line within the block, get the count of bytes. - // - - bytesPerDeepLineTable ( _data->header, - minYInLineBuffer, - maxYInLineBuffer, - _data->sampleCountSliceBase, - _data->sampleCountXStride, - _data->sampleCountYStride, - _data->bytesPerLine ); - - // - // For each scanline within the block, get the offset. - // - - offsetInLineBufferTable ( _data->bytesPerLine, - minYInLineBuffer - _data->minY, - maxYInLineBuffer - _data->minY, - _data->linesInBuffer, - _data->offsetInLineBuffer ); - } - } - - _data->_streamData->is->seekg(savedFilePos); - } - catch (IEX_NAMESPACE::BaseExc &e) - { - REPLACE_EXC (e, "Error reading sample count data from image " - "file \"" << fileName() << "\". " << e.what()); - - _data->_streamData->is->seekg(savedFilePos); - - throw; - } -} - -void -DeepScanLineInputFile::readPixelSampleCounts(int scanline) -{ - readPixelSampleCounts(scanline, scanline); -} - -int -DeepScanLineInputFile::firstScanLineInChunk(int y) const -{ - return int((y-_data->minY)/_data->linesInBuffer)*_data->linesInBuffer + _data->minY; -} - -int -DeepScanLineInputFile::lastScanLineInChunk(int y) const -{ - int minY = firstScanLineInChunk(y); - return min(minY+_data->linesInBuffer-1,_data->maxY); -} - - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_EXIT diff --git a/3rdparty/openexr/IlmImf/ImfDeepScanLineInputFile.h b/3rdparty/openexr/IlmImf/ImfDeepScanLineInputFile.h deleted file mode 100644 index 7ef9cc241f..0000000000 --- a/3rdparty/openexr/IlmImf/ImfDeepScanLineInputFile.h +++ /dev/null @@ -1,294 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2011, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - -#ifndef INCLUDED_IMF_DEEP_SCAN_LINE_INPUT_FILE_H -#define INCLUDED_IMF_DEEP_SCAN_LINE_INPUT_FILE_H - -//----------------------------------------------------------------------------- -// -// class DeepScanLineInputFile -// -//----------------------------------------------------------------------------- - -#include "ImfThreading.h" -#include "ImfGenericInputFile.h" -#include "ImfNamespace.h" -#include "ImfForward.h" -#include "ImfExport.h" -#include "ImfDeepScanLineOutputFile.h" - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER - - -class DeepScanLineInputFile : public GenericInputFile -{ - public: - - //------------ - // Constructor - //------------ - - IMF_EXPORT - DeepScanLineInputFile (const char fileName[], - int numThreads = globalThreadCount()); - - IMF_EXPORT - DeepScanLineInputFile (const Header &header, OPENEXR_IMF_INTERNAL_NAMESPACE::IStream *is, - int version, /*version field from file*/ - int numThreads = globalThreadCount()); - - - //----------------------------------------- - // Destructor -- deallocates internal data - // structures, but does not close the file. - //----------------------------------------- - - IMF_EXPORT - virtual ~DeepScanLineInputFile (); - - - //------------------------ - // Access to the file name - //------------------------ - - IMF_EXPORT - const char * fileName () const; - - - //-------------------------- - // Access to the file header - //-------------------------- - - IMF_EXPORT - const Header & header () const; - - - //---------------------------------- - // Access to the file format version - //---------------------------------- - - IMF_EXPORT - int version () const; - - - //----------------------------------------------------------- - // Set the current frame buffer -- copies the FrameBuffer - // object into the InputFile object. - // - // The current frame buffer is the destination for the pixel - // data read from the file. The current frame buffer must be - // set at least once before readPixels() is called. - // The current frame buffer can be changed after each call - // to readPixels(). - //----------------------------------------------------------- - - IMF_EXPORT - void setFrameBuffer (const DeepFrameBuffer &frameBuffer); - - - //----------------------------------- - // Access to the current frame buffer - //----------------------------------- - - IMF_EXPORT - const DeepFrameBuffer & frameBuffer () const; - - - //--------------------------------------------------------------- - // Check if the file is complete: - // - // isComplete() returns true if all pixels in the data window are - // present in the input file, or false if any pixels are missing. - // (Another program may still be busy writing the file, or file - // writing may have been aborted prematurely.) - //--------------------------------------------------------------- - - IMF_EXPORT - bool isComplete () const; - - - //--------------------------------------------------------------- - // Read pixel data: - // - // readPixels(s1,s2) reads all scan lines with y coordinates - // in the interval [min (s1, s2), max (s1, s2)] from the file, - // and stores them in the current frame buffer. - // - // Both s1 and s2 must be within the interval - // [header().dataWindow().min.y, header.dataWindow().max.y] - // - // The scan lines can be read from the file in random order, and - // individual scan lines may be skipped or read multiple times. - // For maximum efficiency, the scan lines should be read in the - // order in which they were written to the file. - // - // readPixels(s) calls readPixels(s,s). - // - // If threading is enabled, readPixels (s1, s2) tries to perform - // decopmression of multiple scanlines in parallel. - // - //--------------------------------------------------------------- - - IMF_EXPORT - void readPixels (int scanLine1, int scanLine2); - IMF_EXPORT - void readPixels (int scanLine); - - - - //--------------------------------------------------------------- - // Extract pixel data from pre-read block - // - // readPixels(rawPixelData,frameBuffer,s1,s2) reads all scan lines with y coordinates - // in the interval [min (s1, s2), max (s1, s2)] from the data provided and - // stores them in the provided frameBuffer. - // the data can be obtained from a call to rawPixelData() - // - // - // Both s1 and s2 must be within the data specified - // - // you must provide a frameBuffer with a samplecountslice, which must have been read - // and the data valid - readPixels uses your sample count buffer to compute - // offsets to the data it needs - // - // This call does not block, and is thread safe for clients with an existing - // threading model. The InputFile's frameBuffer is not used in this call. - // - // This call is only provided for clients which have an existing threading model in place - // and unpredictable access patterns to the data. - // The fastest way to read an entire image is to enable threading,use setFrameBuffer then - // readPixels(header().dataWindow().min.y, header.dataWindow().max.y) - // - //--------------------------------------------------------------- - - IMF_EXPORT - void readPixels (const char * rawPixelData, - const DeepFrameBuffer & frameBuffer, - int scanLine1, - int scanLine2) const; - - //---------------------------------------------- - // Read a block of raw pixel data from the file, - // without uncompressing it (this function is - // used to implement OutputFile::copyPixels()). - // note: returns the entire payload of the relevant chunk of data, not including part number - // including compressed and uncompressed sizes - // on entry, if pixelDataSize is insufficiently large, no bytes are read (pixelData can safely be NULL) - // on exit, pixelDataSize is the number of bytes required to read the chunk - // - //---------------------------------------------- - - IMF_EXPORT - void rawPixelData (int firstScanLine, - char * pixelData, - Int64 &pixelDataSize); - - - //------------------------------------------------- - // firstScanLineInChunk() returns the row number of the first row that's stored in the - // same chunk as scanline y. Depending on the compression mode, this may not be the same as y - // - // lastScanLineInChunk() returns the row number of the last row that's stored in the same - // chunk as scanline y. Depending on the compression mode, this may not be the same as y. - // The last chunk in the file may be smaller than all the others - // - //------------------------------------------------ - IMF_EXPORT - int firstScanLineInChunk(int y) const; - IMF_EXPORT - int lastScanLineInChunk (int y) const; - - //----------------------------------------------------------- - // Read pixel sample counts into a slice in the frame buffer. - // - // readPixelSampleCounts(s1, s2) reads all the counts of - // pixel samples with y coordinates in the interval - // [min (s1, s2), max (s1, s2)] from the file, and stores - // them in the slice naming "sample count". - // - // Both s1 and s2 must be within the interval - // [header().dataWindow().min.y, header.dataWindow().max.y] - // - // readPixelSampleCounts(s) calls readPixelSampleCounts(s,s). - // - //----------------------------------------------------------- - - IMF_EXPORT - void readPixelSampleCounts (int scanline1, - int scanline2); - IMF_EXPORT - void readPixelSampleCounts (int scanline); - - - //---------------------------------------------------------- - // Read pixel sample counts into the provided frameBuffer - // using a block read of data read by rawPixelData - // for multi-scanline compression schemes, you must decode the entire block - // so scanline1=firstScanLineInChunk(y) and scanline2=lastScanLineInChunk(y) - // - // This call does not block, and is thread safe for clients with an existing - // threading model. The InputFile's frameBuffer is not used in this call. - // - // The fastest way to read an entire image is to enable threading in OpenEXR, use setFrameBuffer then - // readPixelSampleCounts(header().dataWindow().min.y, header.dataWindow().max.y) - // - //---------------------------------------------------------- - IMF_EXPORT - void readPixelSampleCounts (const char * rawdata , - const DeepFrameBuffer & frameBuffer, - int scanLine1 , - int scanLine2) const; - - struct Data; - - private: - - Data * _data; - - DeepScanLineInputFile (InputPartData* part); - - void initialize(const Header& header); - void compatibilityInitialize(OPENEXR_IMF_INTERNAL_NAMESPACE::IStream & is); - void multiPartInitialize(InputPartData* part); - - friend class InputFile; - friend class MultiPartInputFile; - friend void DeepScanLineOutputFile::copyPixels(DeepScanLineInputFile &); -}; - - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT - -#endif diff --git a/3rdparty/openexr/IlmImf/ImfDeepScanLineInputPart.cpp b/3rdparty/openexr/IlmImf/ImfDeepScanLineInputPart.cpp deleted file mode 100644 index 068e1d4af3..0000000000 --- a/3rdparty/openexr/IlmImf/ImfDeepScanLineInputPart.cpp +++ /dev/null @@ -1,149 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - -#include "ImfDeepScanLineInputPart.h" -#include "ImfNamespace.h" - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_ENTER - -DeepScanLineInputPart::DeepScanLineInputPart(MultiPartInputFile& multiPartFile, int partNumber) -{ - file = multiPartFile.getInputPart(partNumber); -} - - -const char * -DeepScanLineInputPart::fileName () const -{ - return file->fileName(); -} - - -const Header & -DeepScanLineInputPart::header () const -{ - return file->header(); -} - - -int -DeepScanLineInputPart::version () const -{ - return file->version(); -} - - -void -DeepScanLineInputPart::setFrameBuffer (const DeepFrameBuffer &frameBuffer) -{ - file->setFrameBuffer(frameBuffer); -} - - -const DeepFrameBuffer & -DeepScanLineInputPart::frameBuffer () const -{ - return file->frameBuffer(); -} - - -bool -DeepScanLineInputPart::isComplete () const -{ - return file->isComplete(); -} - - -void -DeepScanLineInputPart::readPixels (int scanLine1, int scanLine2) -{ - file->readPixels(scanLine1, scanLine2); -} - - -void -DeepScanLineInputPart::readPixels (int scanLine) -{ - file->readPixels(scanLine); -} - - -void -DeepScanLineInputPart::rawPixelData (int firstScanLine, - char *pixelData, - Int64 &pixelDataSize) -{ - file->rawPixelData(firstScanLine, pixelData, pixelDataSize); -} - - -void -DeepScanLineInputPart::readPixelSampleCounts(int scanline1, - int scanline2) -{ - file->readPixelSampleCounts(scanline1, scanline2); -} - - -void -DeepScanLineInputPart::readPixelSampleCounts(int scanline) -{ - file->readPixelSampleCounts(scanline); -} - -int -DeepScanLineInputPart::firstScanLineInChunk(int y) const -{ - return file->firstScanLineInChunk(y); -} - -int -DeepScanLineInputPart::lastScanLineInChunk(int y) const -{ - return file->lastScanLineInChunk(y); -} - -void -DeepScanLineInputPart::readPixels(const char* rawPixelData, const DeepFrameBuffer& frameBuffer, int scanLine1, int scanLine2) const -{ - return file->readPixels(rawPixelData,frameBuffer,scanLine1,scanLine2); -} -void -DeepScanLineInputPart::readPixelSampleCounts(const char* rawdata, const DeepFrameBuffer& frameBuffer, int scanLine1, int scanLine2) const -{ - return file->readPixelSampleCounts(rawdata,frameBuffer,scanLine1,scanLine2); -} - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_EXIT diff --git a/3rdparty/openexr/IlmImf/ImfDeepScanLineInputPart.h b/3rdparty/openexr/IlmImf/ImfDeepScanLineInputPart.h deleted file mode 100644 index 89245c8656..0000000000 --- a/3rdparty/openexr/IlmImf/ImfDeepScanLineInputPart.h +++ /dev/null @@ -1,197 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2011, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - -#ifndef IMFDEEPSCANLINEINPUTPART_H_ -#define IMFDEEPSCANLINEINPUTPART_H_ - -#include "ImfMultiPartInputFile.h" -#include "ImfDeepScanLineInputFile.h" -#include "ImfDeepScanLineOutputFile.h" -#include "ImfNamespace.h" -#include "ImfExport.h" - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER - -class DeepScanLineInputPart -{ - public: - - IMF_EXPORT - DeepScanLineInputPart(MultiPartInputFile& file, int partNumber); - - //------------------------ - // Access to the file name - //------------------------ - - IMF_EXPORT - const char * fileName () const; - - - //-------------------------- - // Access to the file header - //-------------------------- - - IMF_EXPORT - const Header & header () const; - - - //---------------------------------- - // Access to the file format version - //---------------------------------- - - IMF_EXPORT - int version () const; - - - //----------------------------------------------------------- - // Set the current frame buffer -- copies the FrameBuffer - // object into the InputFile object. - // - // The current frame buffer is the destination for the pixel - // data read from the file. The current frame buffer must be - // set at least once before readPixels() is called. - // The current frame buffer can be changed after each call - // to readPixels(). - //----------------------------------------------------------- - - IMF_EXPORT - void setFrameBuffer (const DeepFrameBuffer &frameBuffer); - - - //----------------------------------- - // Access to the current frame buffer - //----------------------------------- - - IMF_EXPORT - const DeepFrameBuffer & frameBuffer () const; - - - //--------------------------------------------------------------- - // Check if the file is complete: - // - // isComplete() returns true if all pixels in the data window are - // present in the input file, or false if any pixels are missing. - // (Another program may still be busy writing the file, or file - // writing may have been aborted prematurely.) - //--------------------------------------------------------------- - - IMF_EXPORT - bool isComplete () const; - - - //--------------------------------------------------------------- - // Read pixel data: - // - // readPixels(s1,s2) reads all scan lines with y coordinates - // in the interval [min (s1, s2), max (s1, s2)] from the file, - // and stores them in the current frame buffer. - // - // Both s1 and s2 must be within the interval - // [header().dataWindow().min.y, header.dataWindow().max.y] - // - // The scan lines can be read from the file in random order, and - // individual scan lines may be skipped or read multiple times. - // For maximum efficiency, the scan lines should be read in the - // order in which they were written to the file. - // - // readPixels(s) calls readPixels(s,s). - // - // If threading is enabled, readPixels (s1, s2) tries to perform - // decopmression of multiple scanlines in parallel. - // - //--------------------------------------------------------------- - - IMF_EXPORT - void readPixels (int scanLine1, int scanLine2); - IMF_EXPORT - void readPixels (int scanLine); - IMF_EXPORT - void readPixels (const char * rawPixelData,const DeepFrameBuffer & frameBuffer, - int scanLine1,int scanLine2) const; - - //---------------------------------------------- - // Read a block of raw pixel data from the file, - // without uncompressing it (this function is - // used to implement OutputFile::copyPixels()). - //---------------------------------------------- - - IMF_EXPORT - void rawPixelData (int firstScanLine, - char * pixelData, - Int64 &pixelDataSize); - - - //----------------------------------------------------------- - // Read pixel sample counts into a slice in the frame buffer. - // - // readPixelSampleCounts(s1, s2) reads all the counts of - // pixel samples with y coordinates in the interval - // [min (s1, s2), max (s1, s2)] from the file, and stores - // them in the slice naming "sample count". - // - // Both s1 and s2 must be within the interval - // [header().dataWindow().min.y, header.dataWindow().max.y] - // - // readPixelSampleCounts(s) calls readPixelSampleCounts(s,s). - //----------------------------------------------------------- - - IMF_EXPORT - void readPixelSampleCounts(int scanline1, - int scanline2); - IMF_EXPORT - void readPixelSampleCounts(int scanline); - - IMF_EXPORT - void readPixelSampleCounts( const char * rawdata , const DeepFrameBuffer & frameBuffer, - int scanLine1 , int scanLine2) const; - - IMF_EXPORT - int firstScanLineInChunk(int y) const; - IMF_EXPORT - int lastScanLineInChunk (int y) const; - private: - DeepScanLineInputFile *file; - - // needed for copyPixels - friend void DeepScanLineOutputFile::copyPixels(DeepScanLineInputPart &); -}; - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT - - - - - -#endif /* IMFDEEPSCANLINEINPUTPART_H_ */ diff --git a/3rdparty/openexr/IlmImf/ImfDeepScanLineOutputFile.cpp b/3rdparty/openexr/IlmImf/ImfDeepScanLineOutputFile.cpp deleted file mode 100644 index 5fe0be3fda..0000000000 --- a/3rdparty/openexr/IlmImf/ImfDeepScanLineOutputFile.cpp +++ /dev/null @@ -1,1554 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2011, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - -//----------------------------------------------------------------------------- -// -// class DeepScanLineOutputFile -// -//----------------------------------------------------------------------------- - -#include -#include -#include -#include -#include -#include -#include -#include "ImathBox.h" -#include "ImathFun.h" -#include -#include -#include -#include -#include "ImfDeepFrameBuffer.h" -#include "ImfOutputStreamMutex.h" -#include "ImfOutputPartData.h" - -#include "IlmThreadPool.h" -#include "IlmThreadSemaphore.h" -#include "IlmThreadMutex.h" -#include "Iex.h" -#include -#include -#include -#include -#include - -#include "ImfNamespace.h" - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_ENTER - -using IMATH_NAMESPACE::Box2i; -using IMATH_NAMESPACE::divp; -using IMATH_NAMESPACE::modp; -using std::string; -using std::vector; -using std::ofstream; -using std::min; -using std::max; -using ILMTHREAD_NAMESPACE::Mutex; -using ILMTHREAD_NAMESPACE::Lock; -using ILMTHREAD_NAMESPACE::Semaphore; -using ILMTHREAD_NAMESPACE::Task; -using ILMTHREAD_NAMESPACE::TaskGroup; -using ILMTHREAD_NAMESPACE::ThreadPool; - -namespace { - - -struct OutSliceInfo -{ - PixelType type; - const char * base; - ptrdiff_t sampleStride; - ptrdiff_t xStride; - ptrdiff_t yStride; - int xSampling; - int ySampling; - bool zero; - - OutSliceInfo (PixelType type = HALF, - const char * base =NULL, - ptrdiff_t sampleStride = 0, - ptrdiff_t xStride = 0, - ptrdiff_t yStride =0, - int xSampling = 1, - int ySampling = 1, - bool zero = false); -}; - - -OutSliceInfo::OutSliceInfo (PixelType t, - const char * base, - ptrdiff_t spstride, - ptrdiff_t xst, - ptrdiff_t yst, - int xsm, int ysm, - bool z) -: - type (t), - base (base), - sampleStride (spstride), - xStride(xst), - yStride(yst), - xSampling (xsm), - ySampling (ysm), - zero (z) -{ - // empty -} - - -struct LineBuffer -{ - Array< Array > buffer; - Array consecutiveBuffer; - const char * dataPtr; - Int64 uncompressedDataSize; - Int64 dataSize; - Array sampleCountTableBuffer; - const char * sampleCountTablePtr; - Int64 sampleCountTableSize; - Compressor* sampleCountTableCompressor; - int minY; // the min y scanline stored - int maxY; // the max y scanline stored - int scanLineMin; // the min y scanline writing out - int scanLineMax; // the max y scanline writing out - Compressor * compressor; - bool partiallyFull; // has incomplete data - bool hasException; - string exception; - - LineBuffer (int linesInBuffer); - ~LineBuffer (); - - void wait () {_sem.wait();} - void post () {_sem.post();} - - private: - - Semaphore _sem; -}; - - -LineBuffer::LineBuffer (int linesInBuffer) : - dataPtr (0), - dataSize (0), - sampleCountTablePtr (0), - sampleCountTableCompressor (0), - compressor (0), - partiallyFull (false), - hasException (false), - exception (), - _sem (1) -{ - buffer.resizeErase(linesInBuffer); -} - - -LineBuffer::~LineBuffer () -{ - if (compressor != 0) - delete compressor; - - if (sampleCountTableCompressor != 0) - delete sampleCountTableCompressor; -} - -} // namespace - - -struct DeepScanLineOutputFile::Data -{ - Header header; // the image header - int version; // file format version - bool multipart; // from a multipart file - Int64 previewPosition; // file position for preview - DeepFrameBuffer frameBuffer; // framebuffer to write into - int currentScanLine; // next scanline to be written - int missingScanLines; // number of lines to write - LineOrder lineOrder; // the file's lineorder - int minX; // data window's min x coord - int maxX; // data window's max x coord - int minY; // data window's min y coord - int maxY; // data window's max x coord - vector lineOffsets; // stores offsets in file for - // each scanline - vector bytesPerLine; // combined size of a line over - // all channels - Compressor::Format format; // compressor's data format - vector slices; // info about channels in file - Int64 lineOffsetsPosition; // file position for line - // offset table - - vector lineBuffers; // each holds one line buffer - int linesInBuffer; // number of scanlines each - // buffer holds - int partNumber; // the output part number - - char* sampleCountSliceBase; // the pointer to the number - // of samples in each pixel - int sampleCountXStride; // the x stride for sampleCountSliceBase - int sampleCountYStride; // the y stride for sampleCountSliceBase - - Array lineSampleCount; // the number of samples - // in each line - - Int64 maxSampleCountTableSize; - // the max size in bytes for a pixel - // sample count table - OutputStreamMutex* _streamData; - bool _deleteStream; - - Data (int numThreads); - ~Data (); - - - inline LineBuffer * getLineBuffer (int number);// hash function from line - // buffer indices into our - // vector of line buffers - - inline int& getSampleCount(int x, int y); // get the number of samples - // in each pixel -}; - - -DeepScanLineOutputFile::Data::Data (int numThreads): - lineOffsetsPosition (0), - partNumber (-1) , - _streamData(NULL), - _deleteStream(false) -{ - // - // We need at least one lineBuffer, but if threading is used, - // to keep n threads busy we need 2*n lineBuffers. - // - - lineBuffers.resize (max (1, 2 * numThreads)); - for (size_t i = 0; i < lineBuffers.size(); i++) - lineBuffers[i] = 0; -} - - -DeepScanLineOutputFile::Data::~Data () -{ - for (size_t i = 0; i < lineBuffers.size(); i++) - if (lineBuffers[i] != 0) - delete lineBuffers[i]; - - for (size_t i = 0; i < slices.size(); i++) - delete slices[i]; -} - - -int& -DeepScanLineOutputFile::Data::getSampleCount(int x, int y) -{ - return sampleCount(sampleCountSliceBase, - sampleCountXStride, - sampleCountYStride, - x, y); -} - - -LineBuffer* -DeepScanLineOutputFile::Data::getLineBuffer (int number) -{ - return lineBuffers[number % lineBuffers.size()]; -} - - -namespace { - -Int64 -writeLineOffsets (OPENEXR_IMF_INTERNAL_NAMESPACE::OStream &os, const vector &lineOffsets) -{ - Int64 pos = os.tellp(); - - if (pos == -1) - IEX_NAMESPACE::throwErrnoExc ("Cannot determine current file position (%T)."); - - for (unsigned int i = 0; i < lineOffsets.size(); i++) - OPENEXR_IMF_INTERNAL_NAMESPACE::Xdr::write (os, lineOffsets[i]); - - return pos; -} - - -void -writePixelData (OutputStreamMutex *filedata, - DeepScanLineOutputFile::Data *partdata, - int lineBufferMinY, - const char pixelData[], - Int64 packedDataSize, - Int64 unpackedDataSize, - const char sampleCountTableData[], - Int64 sampleCountTableSize) -{ - // - // Store a block of pixel data in the output file, and try - // to keep track of the current writing position the file - // without calling tellp() (tellp() can be fairly expensive). - // - - Int64 currentPosition = filedata->currentPosition; - filedata->currentPosition = 0; - - if (currentPosition == 0) - currentPosition = filedata->os->tellp(); - - partdata->lineOffsets[(partdata->currentScanLine - partdata->minY) / partdata->linesInBuffer] = - currentPosition; - - #ifdef DEBUG - - assert (filedata->os->tellp() == currentPosition); - - #endif - - // - // Write the optional part number. - // - - if (partdata->multipart) - { - OPENEXR_IMF_INTERNAL_NAMESPACE::Xdr::write (*filedata->os, partdata->partNumber); - } - - // - // Write the y coordinate of the first scanline in the chunk. - // - - OPENEXR_IMF_INTERNAL_NAMESPACE::Xdr::write (*filedata->os, lineBufferMinY); - - // - // Write the packed size of the pixel sample count table. - // - - OPENEXR_IMF_INTERNAL_NAMESPACE::Xdr::write (*filedata->os, sampleCountTableSize); - - // - // Write the packed pixel data size. - // - - OPENEXR_IMF_INTERNAL_NAMESPACE::Xdr::write (*filedata->os, packedDataSize); - - // - // Write the unpacked pixel data size. - // - - OPENEXR_IMF_INTERNAL_NAMESPACE::Xdr::write (*filedata->os, unpackedDataSize); - - // - // Write the packed pixel sample count table. - // - - filedata->os->write (sampleCountTableData, sampleCountTableSize); - - // - // Write the compressed data. - // - - filedata->os->write (pixelData, packedDataSize); - - // - // Update stream position. - // - - filedata->currentPosition = currentPosition + - Xdr::size() + // y coordinate - Xdr::size() + // packed sample count table size - Xdr::size() + // packed data size - Xdr::size() + // unpacked data size - sampleCountTableSize + // pixel sample count table - packedDataSize; // pixel data - - if (partdata->multipart) - { - filedata->currentPosition += Xdr::size(); // optional part number - } -} - - -inline void -writePixelData (OutputStreamMutex* filedata, - DeepScanLineOutputFile::Data *partdata, - const LineBuffer *lineBuffer) -{ - writePixelData (filedata, partdata, - lineBuffer->minY, - lineBuffer->dataPtr, - lineBuffer->dataSize, - lineBuffer->uncompressedDataSize, - lineBuffer->sampleCountTablePtr, - lineBuffer->sampleCountTableSize); -} - - -void -convertToXdr (DeepScanLineOutputFile::Data *ofd, - Array &lineBuffer, - int lineBufferMinY, - int lineBufferMaxY, - int inSize) -{ - // - // Convert the contents of a lineBuffer from the machine's native - // representation to Xdr format. This function is called by - // CompressLineBuffer::execute(), below, if the compressor wanted - // its input pixel data in the machine's native format, but then - // failed to compress the data (most compressors will expand rather - // than compress random input data). - // - // Note that this routine assumes that the machine's native - // representation of the pixel data has the same size as the - // Xdr representation. This makes it possible to convert the - // pixel data in place, without an intermediate temporary buffer. - // - - // - // Iterate over all scanlines in the lineBuffer to convert. - // - - char* writePtr = &lineBuffer[0]; - for (int y = lineBufferMinY; y <= lineBufferMaxY; y++) - { - // - // Set these to point to the start of line y. - // We will write to writePtr from readPtr. - // - - const char *readPtr = writePtr; - - // - // Iterate over all slices in the file. - // - - for (unsigned int i = 0; i < ofd->slices.size(); ++i) - { - // - // Test if scan line y of this channel is - // contains any data (the scan line contains - // data only if y % ySampling == 0). - // - - const OutSliceInfo &slice = *ofd->slices[i]; - - if (modp (y, slice.ySampling) != 0) - continue; - - // - // Find the number of sampled pixels, dMaxX-dMinX+1, for - // slice i in scan line y (i.e. pixels within the data window - // for which x % xSampling == 0). - // - - int xSampleCount = ofd->lineSampleCount[y - ofd->minY]; - - // - // Convert the samples in place. - // - - convertInPlace (writePtr, readPtr, slice.type, xSampleCount); - } - } -} - - -// -// A LineBufferTask encapsulates the task of copying a set of scanlines -// from the user's frame buffer into a LineBuffer object, compressing -// the data if necessary. -// - -class LineBufferTask: public Task -{ - public: - - LineBufferTask (TaskGroup *group, - DeepScanLineOutputFile::Data *ofd, - int number, - int scanLineMin, - int scanLineMax); - - virtual ~LineBufferTask (); - - virtual void execute (); - - private: - - DeepScanLineOutputFile::Data * _ofd; - LineBuffer * _lineBuffer; -}; - - -LineBufferTask::LineBufferTask - (TaskGroup *group, - DeepScanLineOutputFile::Data *ofd, - int number, - int scanLineMin, - int scanLineMax) -: - Task (group), - _ofd (ofd), - _lineBuffer (_ofd->getLineBuffer(number)) -{ - // - // Wait for the lineBuffer to become available - // - - _lineBuffer->wait (); - - // - // Initialize the lineBuffer data if necessary - // - - if (!_lineBuffer->partiallyFull) - { - - _lineBuffer->minY = _ofd->minY + number * _ofd->linesInBuffer; - - _lineBuffer->maxY = min (_lineBuffer->minY + _ofd->linesInBuffer - 1, - _ofd->maxY); - - _lineBuffer->partiallyFull = true; - } - - _lineBuffer->scanLineMin = max (_lineBuffer->minY, scanLineMin); - _lineBuffer->scanLineMax = min (_lineBuffer->maxY, scanLineMax); -} - - -LineBufferTask::~LineBufferTask () -{ - // - // Signal that the line buffer is now free - // - - _lineBuffer->post (); -} - - -void -LineBufferTask::execute () -{ - try - { - // - // First copy the pixel data from the - // frame buffer into the line buffer - // - - int yStart, yStop, dy; - - if (_ofd->lineOrder == INCREASING_Y) - { - yStart = _lineBuffer->scanLineMin; - yStop = _lineBuffer->scanLineMax + 1; - dy = 1; - } - else - { - yStart = _lineBuffer->scanLineMax; - yStop = _lineBuffer->scanLineMin - 1; - dy = -1; - } - - // - // Allocate buffers for scanlines. - // And calculate the sample counts for each line. - // - - bytesPerDeepLineTable (_ofd->header, - _lineBuffer->scanLineMin, - _lineBuffer->scanLineMax, - _ofd->sampleCountSliceBase, - _ofd->sampleCountXStride, - _ofd->sampleCountYStride, - _ofd->bytesPerLine); - for (int i = _lineBuffer->scanLineMin; i <= _lineBuffer->scanLineMax; i++) - { - // (TODO) don't do this all the time. - _lineBuffer->buffer[i - _lineBuffer->minY].resizeErase( - _ofd->bytesPerLine[i - _ofd->minY]); - - for (int j = _ofd->minX; j <= _ofd->maxX; j++) - _ofd->lineSampleCount[i - _ofd->minY] += _ofd->getSampleCount(j, i); - } - - // - // Copy data from frame buffer to line buffer. - // - - int y; - - for (y = yStart; y != yStop; y += dy) - { - // - // Gather one scan line's worth of pixel data and store - // them in _ofd->lineBuffer. - // - - char *writePtr = &_lineBuffer->buffer[y - _lineBuffer->minY][0]; - // - // Iterate over all image channels. - // - - for (unsigned int i = 0; i < _ofd->slices.size(); ++i) - { - // - // Test if scan line y of this channel contains any data - // (the scan line contains data only if y % ySampling == 0). - // - - const OutSliceInfo &slice = *_ofd->slices[i]; - - if (modp (y, slice.ySampling) != 0) - continue; - - // - // Fill the line buffer with with pixel data. - // - - if (slice.zero) - { - // - // The frame buffer contains no data for this channel. - // Store zeroes in _lineBuffer->buffer. - // - - fillChannelWithZeroes (writePtr, _ofd->format, slice.type, - _ofd->lineSampleCount[y - _ofd->minY]); - } - else - { - - copyFromDeepFrameBuffer (writePtr, slice.base, - _ofd->sampleCountSliceBase, - _ofd->sampleCountXStride, - _ofd->sampleCountYStride, - y, _ofd->minX, _ofd->maxX, - 0, 0,//offsets for samplecount - 0, 0,//offsets for data - slice.sampleStride, - slice.xStride, - slice.yStride, - _ofd->format, - slice.type); - } - } - } - - // - // If the next scanline isn't past the bounds of the lineBuffer - // then we have partially filled the linebuffer, - // otherwise the whole linebuffer is filled and then - // we compress the linebuffer and write it out. - // - - if (y >= _lineBuffer->minY && y <= _lineBuffer->maxY) - return; - - // - // Copy all data into a consecutive buffer. - // - - Int64 totalBytes = 0; - Int64 maxBytesPerLine = 0; - for (int i = 0; i < _lineBuffer->maxY - _lineBuffer->minY + 1; i++) - { - totalBytes += _lineBuffer->buffer[i].size(); - if (Int64(_lineBuffer->buffer[i].size()) > maxBytesPerLine) - maxBytesPerLine = _lineBuffer->buffer[i].size(); - } - _lineBuffer->consecutiveBuffer.resizeErase(totalBytes); - - int pos = 0; - for (int i = 0; i < _lineBuffer->maxY - _lineBuffer->minY + 1; i++) - { - memcpy(_lineBuffer->consecutiveBuffer + pos, - &_lineBuffer->buffer[i][0], - _lineBuffer->buffer[i].size()); - pos += _lineBuffer->buffer[i].size(); - } - - _lineBuffer->dataPtr = _lineBuffer->consecutiveBuffer; - - _lineBuffer->dataSize = totalBytes; - _lineBuffer->uncompressedDataSize = _lineBuffer->dataSize; - - // - // Compress the pixel sample count table. - // - - char* ptr = _lineBuffer->sampleCountTableBuffer; - Int64 tableDataSize = 0; - for (int i = _lineBuffer->minY; i <= _lineBuffer->maxY; i++) - { - int count = 0; - for (int j = _ofd->minX; j <= _ofd->maxX; j++) - { - count += _ofd->getSampleCount(j, i); - Xdr::write (ptr, count); - tableDataSize += sizeof (int); - } - } - - if(_lineBuffer->sampleCountTableCompressor) - { - _lineBuffer->sampleCountTableSize = - _lineBuffer->sampleCountTableCompressor->compress ( - _lineBuffer->sampleCountTableBuffer, - tableDataSize, - _lineBuffer->minY, - _lineBuffer->sampleCountTablePtr); - } - - // - // If we can't make data shrink (or we weren't compressing), then just use the raw data. - // - - if (!_lineBuffer->sampleCountTableCompressor || - _lineBuffer->sampleCountTableSize >= tableDataSize) - { - _lineBuffer->sampleCountTableSize = tableDataSize; - _lineBuffer->sampleCountTablePtr = _lineBuffer->sampleCountTableBuffer; - } - - // - // Compress the sample data - // - - // (TODO) don't do this all the time. - if (_lineBuffer->compressor != 0) - delete _lineBuffer->compressor; - _lineBuffer->compressor = newCompressor (_ofd->header.compression(), - maxBytesPerLine, - _ofd->header); - - Compressor *compressor = _lineBuffer->compressor; - - if (compressor) - { - const char *compPtr; - - Int64 compSize = compressor->compress (_lineBuffer->dataPtr, - _lineBuffer->dataSize, - _lineBuffer->minY, compPtr); - - if (compSize < _lineBuffer->dataSize) - { - _lineBuffer->dataSize = compSize; - _lineBuffer->dataPtr = compPtr; - } - else if (_ofd->format == Compressor::NATIVE) - { - // - // The data did not shrink during compression, but - // we cannot write to the file using the machine's - // native format, so we need to convert the lineBuffer - // to Xdr. - // - - convertToXdr (_ofd, _lineBuffer->consecutiveBuffer, _lineBuffer->minY, - _lineBuffer->maxY, _lineBuffer->dataSize); - } - } - - _lineBuffer->partiallyFull = false; - } - catch (std::exception &e) - { - if (!_lineBuffer->hasException) - { - _lineBuffer->exception = e.what (); - _lineBuffer->hasException = true; - } - } - catch (...) - { - if (!_lineBuffer->hasException) - { - _lineBuffer->exception = "unrecognized exception"; - _lineBuffer->hasException = true; - } - } -} - -} // namespace - - -DeepScanLineOutputFile::DeepScanLineOutputFile - (const char fileName[], - const Header &header, - int numThreads) -: - _data (new Data (numThreads)) -{ - _data->_streamData=new OutputStreamMutex (); - _data->_deleteStream=true; - try - { - header.sanityCheck(); - _data->_streamData->os = new StdOFStream (fileName); - initialize (header); - _data->_streamData->currentPosition = _data->_streamData->os->tellp(); - - // Write header and empty offset table to the file. - writeMagicNumberAndVersionField(*_data->_streamData->os, _data->header); - _data->previewPosition = - _data->header.writeTo (*_data->_streamData->os); - _data->lineOffsetsPosition = - writeLineOffsets (*_data->_streamData->os, _data->lineOffsets); - _data->multipart=false;// not multipart; only one header - } - catch (IEX_NAMESPACE::BaseExc &e) - { - delete _data->_streamData->os; - delete _data->_streamData; - delete _data; - - REPLACE_EXC (e, "Cannot open image file " - "\"" << fileName << "\". " << e.what()); - throw; - } - catch (...) - { - delete _data->_streamData->os; - delete _data->_streamData; - delete _data; - throw; - } -} - - -DeepScanLineOutputFile::DeepScanLineOutputFile - (OPENEXR_IMF_INTERNAL_NAMESPACE::OStream &os, - const Header &header, - int numThreads) -: - _data (new Data (numThreads)) - -{ - _data->_streamData = new OutputStreamMutex (); - _data->_deleteStream = false; - try - { - header.sanityCheck(); - _data->_streamData->os = &os; - initialize (header); - _data->_streamData->currentPosition = _data->_streamData->os->tellp(); - - // Write header and empty offset table to the file. - writeMagicNumberAndVersionField(*_data->_streamData->os, _data->header); - _data->previewPosition = - _data->header.writeTo (*_data->_streamData->os); - _data->lineOffsetsPosition = - writeLineOffsets (*_data->_streamData->os, _data->lineOffsets); - _data->multipart=false; - } - catch (IEX_NAMESPACE::BaseExc &e) - { - delete _data->_streamData; - delete _data; - - REPLACE_EXC (e, "Cannot open image file " - "\"" << os.fileName() << "\". " << e.what()); - throw; - } - catch (...) - { - delete _data->_streamData; - delete _data; - throw; - } -} - -DeepScanLineOutputFile::DeepScanLineOutputFile(const OutputPartData* part) -{ - try - { - if (part->header.type() != DEEPSCANLINE) - throw IEX_NAMESPACE::ArgExc("Can't build a DeepScanLineOutputFile from a type-mismatched part."); - - _data = new Data (part->numThreads); - _data->_streamData = part->mutex; - _data->_deleteStream=false; - initialize (part->header); - _data->partNumber = part->partNumber; - _data->lineOffsetsPosition = part->chunkOffsetTablePosition; - _data->previewPosition = part->previewPosition; - _data->multipart=part->multipart; - } - catch (IEX_NAMESPACE::BaseExc &e) - { - delete _data; - - REPLACE_EXC (e, "Cannot initialize output part " - "\"" << part->partNumber << "\". " << e.what()); - throw; - } - catch (...) - { - delete _data; - throw; - } -} - -void -DeepScanLineOutputFile::initialize (const Header &header) -{ - _data->header = header; - - _data->header.setType(DEEPSCANLINE); - - const Box2i &dataWindow = header.dataWindow(); - - _data->currentScanLine = (header.lineOrder() == INCREASING_Y)? - dataWindow.min.y: dataWindow.max.y; - - _data->missingScanLines = dataWindow.max.y - dataWindow.min.y + 1; - _data->lineOrder = header.lineOrder(); - _data->minX = dataWindow.min.x; - _data->maxX = dataWindow.max.x; - _data->minY = dataWindow.min.y; - _data->maxY = dataWindow.max.y; - - _data->lineSampleCount.resizeErase(_data->maxY - _data->minY + 1); - - Compressor* compressor = newCompressor (_data->header.compression(), - 0, - _data->header); - _data->format = defaultFormat (compressor); - _data->linesInBuffer = numLinesInBuffer (compressor); - if (compressor != 0) - delete compressor; - - int lineOffsetSize = (_data->maxY - _data->minY + - _data->linesInBuffer) / _data->linesInBuffer; - - - _data->header.setChunkCount(lineOffsetSize); - - _data->lineOffsets.resize (lineOffsetSize); - - _data->bytesPerLine.resize (_data->maxY - _data->minY + 1); - - _data->maxSampleCountTableSize = min(_data->linesInBuffer, _data->maxY - _data->minY + 1) * - (_data->maxX - _data->minX + 1) * - sizeof(unsigned int); - - for (size_t i = 0; i < _data->lineBuffers.size(); ++i) - { - _data->lineBuffers[i] = new LineBuffer (_data->linesInBuffer); - _data->lineBuffers[i]->sampleCountTableBuffer.resizeErase(_data->maxSampleCountTableSize); - - _data->lineBuffers[i]->sampleCountTableCompressor = - newCompressor (_data->header.compression(), - _data->maxSampleCountTableSize, - _data->header); - } -} - - -DeepScanLineOutputFile::~DeepScanLineOutputFile () -{ - { - Lock lock(*_data->_streamData); - Int64 originalPosition = _data->_streamData->os->tellp(); - - if (_data->lineOffsetsPosition > 0) - { - try - { - _data->_streamData->os->seekp (_data->lineOffsetsPosition); - writeLineOffsets (*_data->_streamData->os, _data->lineOffsets); - - // - // Restore the original position. - // - _data->_streamData->os->seekp (originalPosition); - } - catch (...) - { - // - // We cannot safely throw any exceptions from here. - // This destructor may have been called because the - // stack is currently being unwound for another - // exception. - // - } - } - } - - if (_data->_deleteStream) - delete _data->_streamData->os; - - // - // (TODO) we should have a way to tell if the stream data is owned by this file or - // by a parent multipart file. - // - - if (_data->partNumber == -1) - delete _data->_streamData; - - delete _data; -} - - -const char * -DeepScanLineOutputFile::fileName () const -{ - return _data->_streamData->os->fileName(); -} - - -const Header & -DeepScanLineOutputFile::header () const -{ - return _data->header; -} - - -void -DeepScanLineOutputFile::setFrameBuffer (const DeepFrameBuffer &frameBuffer) -{ - Lock lock (*_data->_streamData); - - // - // Check if the new frame buffer descriptor - // is compatible with the image file header. - // - - const ChannelList &channels = _data->header.channels(); - - for (ChannelList::ConstIterator i = channels.begin(); - i != channels.end(); - ++i) - { - DeepFrameBuffer::ConstIterator j = frameBuffer.find (i.name()); - - if (j == frameBuffer.end()) - continue; - - if (i.channel().type != j.slice().type) - { - THROW (IEX_NAMESPACE::ArgExc, "Pixel type of \"" << i.name() << "\" channel " - "of output file \"" << fileName() << "\" is " - "not compatible with the frame buffer's " - "pixel type."); - } - - if (i.channel().xSampling != j.slice().xSampling || - i.channel().ySampling != j.slice().ySampling) - { - THROW (IEX_NAMESPACE::ArgExc, "X and/or y subsampling factors " - "of \"" << i.name() << "\" channel " - "of output file \"" << fileName() << "\" are " - "not compatible with the frame buffer's " - "subsampling factors."); - } - } - - // - // Store the pixel sample count table. - // (TODO) Support for different sampling rates? - // - - const Slice& sampleCountSlice = frameBuffer.getSampleCountSlice(); - if (sampleCountSlice.base == 0) - { - throw IEX_NAMESPACE::ArgExc ("Invalid base pointer, please set a proper sample count slice."); - } - else - { - _data->sampleCountSliceBase = sampleCountSlice.base; - _data->sampleCountXStride = sampleCountSlice.xStride; - _data->sampleCountYStride = sampleCountSlice.yStride; - } - - // - // Initialize slice table for writePixels(). - // Pixel sample count slice is not presented in the header, - // so it wouldn't be added here. - // Store the pixel base pointer table. - // (TODO) Support for different sampling rates? - // - - vector slices; - - for (ChannelList::ConstIterator i = channels.begin(); - i != channels.end(); - ++i) - { - DeepFrameBuffer::ConstIterator j = frameBuffer.find (i.name()); - - if (j == frameBuffer.end()) - { - // - // Channel i is not present in the frame buffer. - // In the file, channel i will contain only zeroes. - // - - slices.push_back (new OutSliceInfo (i.channel().type, - NULL,// base - 0,// sampleStride, - 0,// xStride - 0,// yStride - i.channel().xSampling, - i.channel().ySampling, - true)); // zero - } - else - { - // - // Channel i is present in the frame buffer. - // - - slices.push_back (new OutSliceInfo (j.slice().type, - j.slice().base, - j.slice().sampleStride, - j.slice().xStride, - j.slice().yStride, - j.slice().xSampling, - j.slice().ySampling, - false)); // zero - - } - } - - // - // Store the new frame buffer. - // - - _data->frameBuffer = frameBuffer; - - for (size_t i = 0; i < _data->slices.size(); i++) - delete _data->slices[i]; - _data->slices = slices; -} - - -const DeepFrameBuffer & -DeepScanLineOutputFile::frameBuffer () const -{ - Lock lock (*_data->_streamData); - return _data->frameBuffer; -} - - -void -DeepScanLineOutputFile::writePixels (int numScanLines) -{ - try - { - Lock lock (*_data->_streamData); - - if (_data->slices.size() == 0) - throw IEX_NAMESPACE::ArgExc ("No frame buffer specified " - "as pixel data source."); - - // - // Maintain two iterators: - // nextWriteBuffer: next linebuffer to be written to the file - // nextCompressBuffer: next linebuffer to compress - // - - int first = (_data->currentScanLine - _data->minY) / - _data->linesInBuffer; - - int nextWriteBuffer = first; - int nextCompressBuffer; - int stop; - int step; - int scanLineMin; - int scanLineMax; - - { - // - // Create a task group for all line buffer tasks. When the - // taskgroup goes out of scope, the destructor waits until - // all tasks are complete. - // - - TaskGroup taskGroup; - - // - // Determine the range of lineBuffers that intersect the scan - // line range. Then add the initial compression tasks to the - // thread pool. We always add in at least one task but the - // individual task might not do anything if numScanLines == 0. - // - - if (_data->lineOrder == INCREASING_Y) - { - int last = (_data->currentScanLine + (numScanLines - 1) - - _data->minY) / _data->linesInBuffer; - - scanLineMin = _data->currentScanLine; - scanLineMax = _data->currentScanLine + numScanLines - 1; - - int numTasks = max (min ((int)_data->lineBuffers.size(), - last - first + 1), - 1); - - for (int i = 0; i < numTasks; i++) - { - ThreadPool::addGlobalTask - (new LineBufferTask (&taskGroup, _data, first + i, - scanLineMin, scanLineMax)); - } - - nextCompressBuffer = first + numTasks; - stop = last + 1; - step = 1; - } - else - { - int last = (_data->currentScanLine - (numScanLines - 1) - - _data->minY) / _data->linesInBuffer; - - scanLineMax = _data->currentScanLine; - scanLineMin = _data->currentScanLine - numScanLines + 1; - - int numTasks = max (min ((int)_data->lineBuffers.size(), - first - last + 1), - 1); - - for (int i = 0; i < numTasks; i++) - { - ThreadPool::addGlobalTask - (new LineBufferTask (&taskGroup, _data, first - i, - scanLineMin, scanLineMax)); - } - - nextCompressBuffer = first - numTasks; - stop = last - 1; - step = -1; - } - - while (true) - { - if (_data->missingScanLines <= 0) - { - throw IEX_NAMESPACE::ArgExc ("Tried to write more scan lines " - "than specified by the data window."); - } - - // - // Wait until the next line buffer is ready to be written - // - - LineBuffer *writeBuffer = - _data->getLineBuffer (nextWriteBuffer); - - writeBuffer->wait(); - - int numLines = writeBuffer->scanLineMax - - writeBuffer->scanLineMin + 1; - - _data->missingScanLines -= numLines; - - // - // If the line buffer is only partially full, then it is - // not complete and we cannot write it to disk yet. - // - - if (writeBuffer->partiallyFull) - { - _data->currentScanLine = _data->currentScanLine + - step * numLines; - writeBuffer->post(); - - return; - } - - // - // Write the line buffer - // - - writePixelData (_data->_streamData, _data, writeBuffer); - nextWriteBuffer += step; - - _data->currentScanLine = _data->currentScanLine + - step * numLines; - - #ifdef DEBUG - - assert (_data->currentScanLine == - ((_data->lineOrder == INCREASING_Y) ? - writeBuffer->scanLineMax + 1: - writeBuffer->scanLineMin - 1)); - - #endif - - // - // Release the lock on the line buffer - // - - writeBuffer->post(); - - // - // If this was the last line buffer in the scanline range - // - - if (nextWriteBuffer == stop) - break; - - // - // If there are no more line buffers to compress, - // then only continue to write out remaining lineBuffers - // - - if (nextCompressBuffer == stop) - continue; - - // - // Add nextCompressBuffer as a compression task - // - - ThreadPool::addGlobalTask - (new LineBufferTask (&taskGroup, _data, nextCompressBuffer, - scanLineMin, scanLineMax)); - - // - // Update the next line buffer we need to compress - // - - nextCompressBuffer += step; - } - - // - // Finish all tasks - // - } - - // - // Exeption handling: - // - // LineBufferTask::execute() may have encountered exceptions, but - // those exceptions occurred in another thread, not in the thread - // that is executing this call to OutputFile::writePixels(). - // LineBufferTask::execute() has caught all exceptions and stored - // the exceptions' what() strings in the line buffers. - // Now we check if any line buffer contains a stored exception; if - // this is the case then we re-throw the exception in this thread. - // (It is possible that multiple line buffers contain stored - // exceptions. We re-throw the first exception we find and - // ignore all others.) - // - - const string *exception = 0; - - for (size_t i = 0; i < _data->lineBuffers.size(); ++i) - { - LineBuffer *lineBuffer = _data->lineBuffers[i]; - - if (lineBuffer->hasException && !exception) - exception = &lineBuffer->exception; - - lineBuffer->hasException = false; - } - - if (exception) - throw IEX_NAMESPACE::IoExc (*exception); - } - catch (IEX_NAMESPACE::BaseExc &e) - { - REPLACE_EXC (e, "Failed to write pixel data to image " - "file \"" << fileName() << "\". " << e.what()); - throw; - } -} - - -int -DeepScanLineOutputFile::currentScanLine () const -{ - Lock lock (*_data->_streamData); - return _data->currentScanLine; -} - - -void -DeepScanLineOutputFile::copyPixels (DeepScanLineInputPart &in) -{ - copyPixels(*in.file); -} - -void -DeepScanLineOutputFile::copyPixels (DeepScanLineInputFile &in) -{ - - Lock lock (*_data->_streamData); - - // - // Check if this file's and and the InputFile's - // headers are compatible. - // - - const Header &hdr = _data->header; - const Header &inHdr = in.header(); - - if(!inHdr.hasType() || inHdr.type()!=DEEPSCANLINE) - { - THROW (IEX_NAMESPACE::ArgExc, "Cannot copy pixels from image " - "file \"" << in.fileName() << "\" to image " - "file \"" << fileName() << "\": the input needs to be a deep scanline image"); - } - if (!(hdr.dataWindow() == inHdr.dataWindow())) - THROW (IEX_NAMESPACE::ArgExc, "Cannot copy pixels from image " - "file \"" << in.fileName() << "\" to image " - "file \"" << fileName() << "\". " - "The files have different data windows."); - - if (!(hdr.lineOrder() == inHdr.lineOrder())) - THROW (IEX_NAMESPACE::ArgExc, "Quick pixel copy from image " - "file \"" << in.fileName() << "\" to image " - "file \"" << fileName() << "\" failed. " - "The files have different line orders."); - - if (!(hdr.compression() == inHdr.compression())) - THROW (IEX_NAMESPACE::ArgExc, "Quick pixel copy from image " - "file \"" << in.fileName() << "\" to image " - "file \"" << fileName() << "\" failed. " - "The files use different compression methods."); - - if (!(hdr.channels() == inHdr.channels())) - THROW (IEX_NAMESPACE::ArgExc, "Quick pixel copy from image " - "file \"" << in.fileName() << "\" to image " - "file \"" << fileName() << "\" failed. " - "The files have different channel lists."); - - // - // Verify that no pixel data have been written to this file yet. - // - - const Box2i &dataWindow = hdr.dataWindow(); - - if (_data->missingScanLines != dataWindow.max.y - dataWindow.min.y + 1) - THROW (IEX_NAMESPACE::LogicExc, "Quick pixel copy from image " - "file \"" << in.fileName() << "\" to image " - "file \"" << fileName() << "\" failed. " - "\"" << fileName() << "\" already contains " - "pixel data."); - - // - // Copy the pixel data. - // - - vector data(4096); - - while (_data->missingScanLines > 0) - { - Int64 dataSize = (Int64) data.size(); - in.rawPixelData(_data->currentScanLine, &data[0], dataSize); - if(dataSize > data.size()) - { - // block wasn't big enough - go again with enough memory this time - data.resize(dataSize); - in.rawPixelData(_data->currentScanLine, &data[0], dataSize); - } - - // extract header from block to pass to writePixelData - - Int64 packedSampleCountSize = *(Int64 *) (&data[4]); - Int64 packedDataSize = *(Int64 *) (&data[12]); - Int64 unpackedDataSize = *(Int64 *) (&data[20]); - const char * sampleCountTable = &data[0]+28; - const char * pixelData = sampleCountTable + packedSampleCountSize; - - - writePixelData (_data->_streamData, _data, lineBufferMinY (_data->currentScanLine, - _data->minY, - _data->linesInBuffer), - pixelData, packedDataSize, unpackedDataSize,sampleCountTable,packedSampleCountSize); - - _data->currentScanLine += (_data->lineOrder == INCREASING_Y)? - _data->linesInBuffer: -_data->linesInBuffer; - - _data->missingScanLines -= _data->linesInBuffer; - } -} - - -void -DeepScanLineOutputFile::updatePreviewImage (const PreviewRgba newPixels[]) -{ - Lock lock (*_data->_streamData); - - if (_data->previewPosition <= 0) - THROW (IEX_NAMESPACE::LogicExc, "Cannot update preview image pixels. " - "File \"" << fileName() << "\" does not " - "contain a preview image."); - - // - // Store the new pixels in the header's preview image attribute. - // - - PreviewImageAttribute &pia = - _data->header.typedAttribute ("preview"); - - PreviewImage &pi = pia.value(); - PreviewRgba *pixels = pi.pixels(); - int numPixels = pi.width() * pi.height(); - - for (int i = 0; i < numPixels; ++i) - pixels[i] = newPixels[i]; - - // - // Save the current file position, jump to the position in - // the file where the preview image starts, store the new - // preview image, and jump back to the saved file position. - // - - Int64 savedPosition = _data->_streamData->os->tellp(); - - try - { - _data->_streamData->os->seekp (_data->previewPosition); - pia.writeValueTo (*_data->_streamData->os, _data->version); - _data->_streamData->os->seekp (savedPosition); - } - catch (IEX_NAMESPACE::BaseExc &e) - { - REPLACE_EXC (e, "Cannot update preview image pixels for " - "file \"" << fileName() << "\". " << e.what()); - throw; - } -} - - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_EXIT diff --git a/3rdparty/openexr/IlmImf/ImfDeepScanLineOutputFile.h b/3rdparty/openexr/IlmImf/ImfDeepScanLineOutputFile.h deleted file mode 100644 index 945b00d3b8..0000000000 --- a/3rdparty/openexr/IlmImf/ImfDeepScanLineOutputFile.h +++ /dev/null @@ -1,256 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2011, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - - -#ifndef INCLUDED_IMF_DEEP_SCAN_LINE_OUTPUT_FILE_H -#define INCLUDED_IMF_DEEP_SCAN_LINE_OUTPUT_FILE_H - -//----------------------------------------------------------------------------- -// -// class DeepScanLineOutputFile -// -//----------------------------------------------------------------------------- - -#include "ImfHeader.h" -#include "ImfFrameBuffer.h" -#include "ImfThreading.h" -#include "ImfGenericOutputFile.h" -#include "ImfNamespace.h" -#include "ImfForward.h" -#include "ImfExport.h" - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER - - -struct PreviewRgba; - -class DeepScanLineOutputFile : public GenericOutputFile -{ - public: - - //----------------------------------------------------------- - // Constructor -- opens the file and writes the file header. - // The file header is also copied into the DeepScanLineOutputFile - // object, and can later be accessed via the header() method. - // Destroying this DeepScanLineOutputFile object automatically closes - // the file. - // - // numThreads determines the number of threads that will be - // used to write the file (see ImfThreading.h). - //----------------------------------------------------------- - - IMF_EXPORT - DeepScanLineOutputFile (const char fileName[], const Header &header, - int numThreads = globalThreadCount()); - - - //------------------------------------------------------------ - // Constructor -- attaches the new DeepScanLineOutputFile object - // to a file that has already been opened, and writes the file header. - // The file header is also copied into the DeepScanLineOutputFile - // object, and can later be accessed via the header() method. - // Destroying this DeepScanLineOutputFile object does not automatically - // close the file. - // - // numThreads determines the number of threads that will be - // used to write the file (see ImfThreading.h). - //------------------------------------------------------------ - - IMF_EXPORT - DeepScanLineOutputFile (OPENEXR_IMF_INTERNAL_NAMESPACE::OStream &os, const Header &header, - int numThreads = globalThreadCount()); - - - //------------------------------------------------- - // Destructor - // - // Destroying the DeepScanLineOutputFile object - // before writing all scan lines within the data - // window results in an incomplete file. - //------------------------------------------------- - - IMF_EXPORT - virtual ~DeepScanLineOutputFile (); - - - //------------------------ - // Access to the file name - //------------------------ - - IMF_EXPORT - const char * fileName () const; - - - //-------------------------- - // Access to the file header - //-------------------------- - - IMF_EXPORT - const Header & header () const; - - - //------------------------------------------------------- - // Set the current frame buffer -- copies the FrameBuffer - // object into the OutputFile object. - // - // The current frame buffer is the source of the pixel - // data written to the file. The current frame buffer - // must be set at least once before writePixels() is - // called. The current frame buffer can be changed - // after each call to writePixels. - //------------------------------------------------------- - - IMF_EXPORT - void setFrameBuffer (const DeepFrameBuffer &frameBuffer); - - - //----------------------------------- - // Access to the current frame buffer - //----------------------------------- - - IMF_EXPORT - const DeepFrameBuffer & frameBuffer () const; - - - //------------------------------------------------------------------- - // Write pixel data: - // - // writePixels(n) retrieves the next n scan lines worth of data from - // the current frame buffer, starting with the scan line indicated by - // currentScanLine(), and stores the data in the output file, and - // progressing in the direction indicated by header.lineOrder(). - // - // To produce a complete and correct file, exactly m scan lines must - // be written, where m is equal to - // header().dataWindow().max.y - header().dataWindow().min.y + 1. - //------------------------------------------------------------------- - - IMF_EXPORT - void writePixels (int numScanLines = 1); - - - //------------------------------------------------------------------ - // Access to the current scan line: - // - // currentScanLine() returns the y coordinate of the first scan line - // that will be read from the current frame buffer during the next - // call to writePixels(). - // - // If header.lineOrder() == INCREASING_Y: - // - // The current scan line before the first call to writePixels() - // is header().dataWindow().min.y. After writing each scan line, - // the current scan line is incremented by 1. - // - // If header.lineOrder() == DECREASING_Y: - // - // The current scan line before the first call to writePixels() - // is header().dataWindow().max.y. After writing each scan line, - // the current scan line is decremented by 1. - // - //------------------------------------------------------------------ - - IMF_EXPORT - int currentScanLine () const; - - - //-------------------------------------------------------------- - // Shortcut to copy all pixels from an InputFile into this file, - // without uncompressing and then recompressing the pixel data. - // This file's header must be compatible with the InputFile's - // header: The two header's "dataWindow", "compression", - // "lineOrder" and "channels" attributes must be the same. - //-------------------------------------------------------------- - - IMF_EXPORT - void copyPixels (DeepScanLineInputFile &in); - - // -------------------------------------------------------------- - // Shortcut to copy pixels from a given part of a multipart file - // -------------------------------------------------------------- - IMF_EXPORT - void copyPixels (DeepScanLineInputPart &in); - - - //-------------------------------------------------------------- - // Updating the preview image: - // - // updatePreviewImage() supplies a new set of pixels for the - // preview image attribute in the file's header. If the header - // does not contain a preview image, updatePreviewImage() throws - // an IEX_NAMESPACE::LogicExc. - // - // Note: updatePreviewImage() is necessary because images are - // often stored in a file incrementally, a few scan lines at a - // time, while the image is being generated. Since the preview - // image is an attribute in the file's header, it gets stored in - // the file as soon as the file is opened, but we may not know - // what the preview image should look like until we have written - // the last scan line of the main image. - // - //-------------------------------------------------------------- - - IMF_EXPORT - void updatePreviewImage (const PreviewRgba newPixels[]); - - - struct Data; - - private: - - //------------------------------------------------------------ - // Constructor -- attaches the OutputStreamMutex to the - // given one from MultiPartOutputFile. Set the previewPosition - // and lineOffsetsPosition which have been acquired from - // the constructor of MultiPartOutputFile as well. - //------------------------------------------------------------ - DeepScanLineOutputFile (const OutputPartData* part); - - DeepScanLineOutputFile (const DeepScanLineOutputFile &); // not implemented - DeepScanLineOutputFile & operator = (const DeepScanLineOutputFile &); // not implemented - - void initialize (const Header &header); - void initializeLineBuffer(); - - Data * _data; - - - - friend class MultiPartOutputFile; -}; - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT - -#endif diff --git a/3rdparty/openexr/IlmImf/ImfDeepScanLineOutputPart.cpp b/3rdparty/openexr/IlmImf/ImfDeepScanLineOutputPart.cpp deleted file mode 100644 index d7a44e8eb9..0000000000 --- a/3rdparty/openexr/IlmImf/ImfDeepScanLineOutputPart.cpp +++ /dev/null @@ -1,107 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2011, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - -#include "ImfDeepScanLineOutputPart.h" -#include "ImfNamespace.h" - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_ENTER - -DeepScanLineOutputPart::DeepScanLineOutputPart(MultiPartOutputFile& multiPartFile, int partNumber) -{ - file = multiPartFile.getOutputPart(partNumber); -} - - -const char * -DeepScanLineOutputPart::fileName () const -{ - return file->fileName(); -} - - -const Header & -DeepScanLineOutputPart::header () const -{ - return file->header(); -} - - -void -DeepScanLineOutputPart::setFrameBuffer (const DeepFrameBuffer &frameBuffer) -{ - file->setFrameBuffer(frameBuffer); -} - - -const DeepFrameBuffer & -DeepScanLineOutputPart::frameBuffer () const -{ - return file->frameBuffer(); -} - - -void -DeepScanLineOutputPart::writePixels (int numScanLines) -{ - file->writePixels(numScanLines); -} - - -int -DeepScanLineOutputPart::currentScanLine () const -{ - return file->currentScanLine(); -} - - -void -DeepScanLineOutputPart::copyPixels (DeepScanLineInputFile &in) -{ - file->copyPixels(in); -} - -void -DeepScanLineOutputPart::copyPixels (DeepScanLineInputPart &in) -{ - file->copyPixels(in); -} - -void -DeepScanLineOutputPart::updatePreviewImage (const PreviewRgba newPixels[]) -{ - file->updatePreviewImage(newPixels); -} - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_EXIT - diff --git a/3rdparty/openexr/IlmImf/ImfDeepScanLineOutputPart.h b/3rdparty/openexr/IlmImf/ImfDeepScanLineOutputPart.h deleted file mode 100644 index 22faa2562a..0000000000 --- a/3rdparty/openexr/IlmImf/ImfDeepScanLineOutputPart.h +++ /dev/null @@ -1,178 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2011, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - -#ifndef IMFDEEPSCANLINEOUTPUTPART_H_ -#define IMFDEEPSCANLINEOUTPUTPART_H_ - -#include "ImfDeepScanLineOutputFile.h" -#include "ImfMultiPartOutputFile.h" -#include "ImfNamespace.h" -#include "ImfExport.h" - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER - -class DeepScanLineOutputPart -{ - public: - - IMF_EXPORT - DeepScanLineOutputPart(MultiPartOutputFile& multiPartFile, int partNumber); - - //------------------------ - // Access to the file name - //------------------------ - - IMF_EXPORT - const char * fileName () const; - - - //-------------------------- - // Access to the file header - //-------------------------- - - IMF_EXPORT - const Header & header () const; - - - //------------------------------------------------------- - // Set the current frame buffer -- copies the FrameBuffer - // object into the OutputFile object. - // - // The current frame buffer is the source of the pixel - // data written to the file. The current frame buffer - // must be set at least once before writePixels() is - // called. The current frame buffer can be changed - // after each call to writePixels. - //------------------------------------------------------- - - IMF_EXPORT - void setFrameBuffer (const DeepFrameBuffer &frameBuffer); - - - //----------------------------------- - // Access to the current frame buffer - //----------------------------------- - - IMF_EXPORT - const DeepFrameBuffer & frameBuffer () const; - - - //------------------------------------------------------------------- - // Write pixel data: - // - // writePixels(n) retrieves the next n scan lines worth of data from - // the current frame buffer, starting with the scan line indicated by - // currentScanLine(), and stores the data in the output file, and - // progressing in the direction indicated by header.lineOrder(). - // - // To produce a complete and correct file, exactly m scan lines must - // be written, where m is equal to - // header().dataWindow().max.y - header().dataWindow().min.y + 1. - //------------------------------------------------------------------- - - IMF_EXPORT - void writePixels (int numScanLines = 1); - - - //------------------------------------------------------------------ - // Access to the current scan line: - // - // currentScanLine() returns the y coordinate of the first scan line - // that will be read from the current frame buffer during the next - // call to writePixels(). - // - // If header.lineOrder() == INCREASING_Y: - // - // The current scan line before the first call to writePixels() - // is header().dataWindow().min.y. After writing each scan line, - // the current scan line is incremented by 1. - // - // If header.lineOrder() == DECREASING_Y: - // - // The current scan line before the first call to writePixels() - // is header().dataWindow().max.y. After writing each scan line, - // the current scan line is decremented by 1. - // - //------------------------------------------------------------------ - - IMF_EXPORT - int currentScanLine () const; - - - //-------------------------------------------------------------- - // Shortcut to copy all pixels from an InputFile into this file, - // without uncompressing and then recompressing the pixel data. - // This file's header must be compatible with the InputFile's - // header: The two header's "dataWindow", "compression", - // "lineOrder" and "channels" attributes must be the same. - //-------------------------------------------------------------- - - IMF_EXPORT - void copyPixels (DeepScanLineInputFile &in); - IMF_EXPORT - void copyPixels (DeepScanLineInputPart &in); - - - //-------------------------------------------------------------- - // Updating the preview image: - // - // updatePreviewImage() supplies a new set of pixels for the - // preview image attribute in the file's header. If the header - // does not contain a preview image, updatePreviewImage() throws - // an IEX_NAMESPACE::LogicExc. - // - // Note: updatePreviewImage() is necessary because images are - // often stored in a file incrementally, a few scan lines at a - // time, while the image is being generated. Since the preview - // image is an attribute in the file's header, it gets stored in - // the file as soon as the file is opened, but we may not know - // what the preview image should look like until we have written - // the last scan line of the main image. - // - //-------------------------------------------------------------- - - IMF_EXPORT - void updatePreviewImage (const PreviewRgba newPixels[]); - - private: - DeepScanLineOutputFile* file; -}; - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT - - - - - -#endif /* IMFDEEPSCANLINEOUTPUTPART_H_ */ diff --git a/3rdparty/openexr/IlmImf/ImfDeepTiledInputFile.cpp b/3rdparty/openexr/IlmImf/ImfDeepTiledInputFile.cpp deleted file mode 100644 index e34f606d95..0000000000 --- a/3rdparty/openexr/IlmImf/ImfDeepTiledInputFile.cpp +++ /dev/null @@ -1,1979 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2011, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - -//----------------------------------------------------------------------------- -// -// class DeepTiledInputFile -// -//----------------------------------------------------------------------------- - -#include -#include -#include -#include -#include -#include -#include -#include "ImathBox.h" -#include -#include -#include -#include -#include -#include -#include -#include "IlmThreadPool.h" -#include "IlmThreadSemaphore.h" -#include "IlmThreadMutex.h" -#include "ImfInputStreamMutex.h" -#include "ImfInputPartData.h" -#include "ImathVec.h" -#include "Iex.h" -#include -#include -#include -#include -#include - -#include "ImfNamespace.h" - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_ENTER - -using IMATH_NAMESPACE::Box2i; -using IMATH_NAMESPACE::V2i; -using std::string; -using std::vector; -using std::min; -using std::max; -using ILMTHREAD_NAMESPACE::Mutex; -using ILMTHREAD_NAMESPACE::Lock; -using ILMTHREAD_NAMESPACE::Semaphore; -using ILMTHREAD_NAMESPACE::Task; -using ILMTHREAD_NAMESPACE::TaskGroup; -using ILMTHREAD_NAMESPACE::ThreadPool; - -namespace { - -struct TInSliceInfo -{ - PixelType typeInFrameBuffer; - PixelType typeInFile; - char* pointerArrayBase; - size_t xStride; - size_t yStride; - ptrdiff_t sampleStride; - bool fill; - bool skip; - double fillValue; - int xTileCoords; - int yTileCoords; - - TInSliceInfo (PixelType typeInFrameBuffer = HALF, - char * base = NULL, - PixelType typeInFile = HALF, - size_t xStride = 0, - size_t yStride = 0, - ptrdiff_t sampleStride = 0, - bool fill = false, - bool skip = false, - double fillValue = 0.0, - int xTileCoords = 0, - int yTileCoords = 0); -}; - - -TInSliceInfo::TInSliceInfo (PixelType tifb, - char * b, - PixelType tifl, - size_t xs, size_t ys, - ptrdiff_t spst, - bool f, bool s, - double fv, - int xtc, - int ytc) -: - typeInFrameBuffer (tifb), - typeInFile (tifl), - pointerArrayBase (b), - xStride (xs), - yStride (ys), - sampleStride (spst), - fill (f), - skip (s), - fillValue (fv), - xTileCoords (xtc), - yTileCoords (ytc) -{ - // empty -} - - -struct TileBuffer -{ - Array2D sampleCount; - const char * uncompressedData; - char * buffer; - Int64 dataSize; - Int64 uncompressedDataSize; - Compressor * compressor; - Compressor::Format format; - int dx; - int dy; - int lx; - int ly; - bool hasException; - string exception; - - TileBuffer (); - ~TileBuffer (); - - inline void wait () {_sem.wait();} - inline void post () {_sem.post();} - - protected: - - Semaphore _sem; -}; - - -TileBuffer::TileBuffer (): - uncompressedData (0), - buffer (0), - dataSize (0), - compressor (0), - format (defaultFormat (compressor)), - dx (-1), - dy (-1), - lx (-1), - ly (-1), - hasException (false), - exception (), - _sem (1) -{ - // empty -} - - -TileBuffer::~TileBuffer () -{ - delete compressor; -} - -} // namespace - - -class MultiPartInputFile; - - -// -// struct TiledInputFile::Data stores things that will be -// needed between calls to readTile() -// - -struct DeepTiledInputFile::Data: public Mutex -{ - Header header; // the image header - TileDescription tileDesc; // describes the tile layout - int version; // file's version - DeepFrameBuffer frameBuffer; // framebuffer to write into - LineOrder lineOrder; // the file's lineorder - int minX; // data window's min x coord - int maxX; // data window's max x coord - int minY; // data window's min y coord - int maxY; // data window's max x coord - - int numXLevels; // number of x levels - int numYLevels; // number of y levels - int * numXTiles; // number of x tiles at a level - int * numYTiles; // number of y tiles at a level - - TileOffsets tileOffsets; // stores offsets in file for - // each tile - - bool fileIsComplete; // True if no tiles are missing - // in the file - - vector slices; // info about channels in file - - // ourselves? or does someone - // else do it? - - int partNumber; // part number - - bool multiPartBackwardSupport; // if we are reading a multipart file - // using OpenEXR 1.7 API - - int numThreads; // number of threads - - MultiPartInputFile* multiPartFile; // the MultiPartInputFile used to - // support backward compatibility - - vector tileBuffers; // each holds a single tile - - bool memoryMapped; // if the stream is memory mapped - - char* sampleCountSliceBase; // pointer to the start of - // the sample count array - ptrdiff_t sampleCountXStride; // x stride of the sample count array - ptrdiff_t sampleCountYStride; // y stride of the sample count array - - int sampleCountXTileCoords; // the value of xTileCoords from the - // sample count slice - int sampleCountYTileCoords; // the value of yTileCoords from the - // sample count slice - - Array sampleCountTableBuffer; // the buffer for sample count table - - Compressor* sampleCountTableComp; // the decompressor for sample count table - - Int64 maxSampleCountTableSize; // the max size in bytes for a pixel - // sample count table - int combinedSampleSize; // total size of all channels combined to check sampletable size - - InputStreamMutex * _streamData; - bool _deleteStream; // should we delete the stream - Data (int numThreads); - ~Data (); - - inline TileBuffer * getTileBuffer (int number); - // hash function from tile indices - // into our vector of tile buffers - - int& getSampleCount(int x, int y); - // get the number of samples - // in each pixel -}; - - -DeepTiledInputFile::Data::Data (int numThreads): - numXTiles (0), - numYTiles (0), - partNumber (-1), - multiPartBackwardSupport(false), - numThreads(numThreads), - memoryMapped(false), - _streamData(NULL), - _deleteStream(false) -{ - // - // We need at least one tileBuffer, but if threading is used, - // to keep n threads busy we need 2*n tileBuffers - // - - tileBuffers.resize (max (1, 2 * numThreads)); -} - - -DeepTiledInputFile::Data::~Data () -{ - delete [] numXTiles; - delete [] numYTiles; - - for (size_t i = 0; i < tileBuffers.size(); i++) - delete tileBuffers[i]; - - if (multiPartBackwardSupport) - delete multiPartFile; - - for (size_t i = 0; i < slices.size(); i++) - delete slices[i]; -} - - -TileBuffer* -DeepTiledInputFile::Data::getTileBuffer (int number) -{ - return tileBuffers[number % tileBuffers.size()]; -} - - -int& -DeepTiledInputFile::Data::getSampleCount(int x, int y) -{ - return sampleCount(sampleCountSliceBase, - sampleCountXStride, - sampleCountYStride, - x, y); -} - - -namespace { - -void -readTileData (InputStreamMutex *streamData, - DeepTiledInputFile::Data *ifd, - int dx, int dy, - int lx, int ly, - char *&buffer, - Int64 &dataSize, - Int64 &unpackedDataSize) -{ - // - // Read a single tile block from the file and into the array pointed - // to by buffer. If the file is memory-mapped, then we change where - // buffer points instead of writing into the array (hence buffer needs - // to be a reference to a char *). - // - - // - // Look up the location for this tile in the Index and - // seek to that position if necessary - // - - Int64 tileOffset = ifd->tileOffsets (dx, dy, lx, ly); - - if (tileOffset == 0) - { - THROW (IEX_NAMESPACE::InputExc, "Tile (" << dx << ", " << dy << ", " << - lx << ", " << ly << ") is missing."); - } - - // - // In a multi-part file, the next chunk does not need to - // belong to the same part, so we have to compare the - // offset here. - // - - if ( !isMultiPart(ifd->version) ) - { - if (streamData->currentPosition != tileOffset) - streamData->is->seekg(tileOffset); - } - else - { - // - // In a multi-part file, the file pointer may be moved by other - // parts, so we have to ask tellg() where we are. - // - if (streamData->is->tellg() != tileOffset) - streamData->is->seekg (tileOffset); - } - - // - // Read the first few bytes of the tile (the header). - // Verify that the tile coordinates and the level number - // are correct. - // - - int tileXCoord, tileYCoord, levelX, levelY; - - if (isMultiPart(ifd->version)) - { - int partNumber; - Xdr::read (*streamData->is, partNumber); - if (partNumber != ifd->partNumber) - { - THROW (IEX_NAMESPACE::ArgExc, "Unexpected part number " << partNumber - << ", should be " << ifd->partNumber << "."); - } - } - - Xdr::read (*streamData->is, tileXCoord); - Xdr::read (*streamData->is, tileYCoord); - Xdr::read (*streamData->is, levelX); - Xdr::read (*streamData->is, levelY); - - Int64 tableSize; - Xdr::read (*streamData->is, tableSize); - - Xdr::read (*streamData->is, dataSize); - Xdr::read (*streamData->is, unpackedDataSize); - - - // - // Skip the pixel sample count table because we have read this data. - // - - Xdr::skip (*streamData->is, tableSize); - - - if (tileXCoord != dx) - throw IEX_NAMESPACE::InputExc ("Unexpected tile x coordinate."); - - if (tileYCoord != dy) - throw IEX_NAMESPACE::InputExc ("Unexpected tile y coordinate."); - - if (levelX != lx) - throw IEX_NAMESPACE::InputExc ("Unexpected tile x level number coordinate."); - - if (levelY != ly) - throw IEX_NAMESPACE::InputExc ("Unexpected tile y level number coordinate."); - - // - // Read the pixel data. - // - - if (streamData->is->isMemoryMapped ()) - buffer = streamData->is->readMemoryMapped (dataSize); - else - { - // (TODO) check if the packed data size is too big? - // (TODO) better memory management here. Don't delete buffer everytime. - if (buffer != 0) delete[] buffer; - buffer = new char[dataSize]; - streamData->is->read (buffer, dataSize); - } - - // - // Keep track of which tile is the next one in - // the file, so that we can avoid redundant seekg() - // operations (seekg() can be fairly expensive). - // - - streamData->currentPosition = tileOffset + 4 * Xdr::size() + - 3 * Xdr::size() + - tableSize + - dataSize; -} - - -void -readNextTileData (InputStreamMutex *streamData, - DeepTiledInputFile::Data *ifd, - int &dx, int &dy, - int &lx, int &ly, - char * & buffer, - Int64 &dataSize, - Int64 &unpackedDataSize) -{ - // - // Read the next tile block from the file - // - - // - // Read the first few bytes of the tile (the header). - // - - Xdr::read (*streamData->is, dx); - Xdr::read (*streamData->is, dy); - Xdr::read (*streamData->is, lx); - Xdr::read (*streamData->is, ly); - - Int64 tableSize; - Xdr::read (*streamData->is, tableSize); - - Xdr::read (*streamData->is, dataSize); - Xdr::read (*streamData->is, unpackedDataSize); - - // - // Skip the pixel sample count table because we have read this data. - // - - Xdr::skip (*streamData->is, tableSize); - - // - // Read the pixel data. - // - - streamData->is->read (buffer, dataSize); - - // - // Keep track of which tile is the next one in - // the file, so that we can avoid redundant seekg() - // operations (seekg() can be fairly expensive). - // - - streamData->currentPosition += 4 * Xdr::size() + - 3 * Xdr::size() + - tableSize + - dataSize; -} - - -// -// A TileBufferTask encapsulates the task of uncompressing -// a single tile and copying it into the frame buffer. -// - -class TileBufferTask : public Task -{ - public: - - TileBufferTask (TaskGroup *group, - DeepTiledInputFile::Data *ifd, - TileBuffer *tileBuffer); - - virtual ~TileBufferTask (); - - virtual void execute (); - - private: - - DeepTiledInputFile::Data * _ifd; - TileBuffer * _tileBuffer; -}; - - -TileBufferTask::TileBufferTask - (TaskGroup *group, - DeepTiledInputFile::Data *ifd, - TileBuffer *tileBuffer) -: - Task (group), - _ifd (ifd), - _tileBuffer (tileBuffer) -{ - // empty -} - - -TileBufferTask::~TileBufferTask () -{ - // - // Signal that the tile buffer is now free - // - - _tileBuffer->post (); -} - - -void -TileBufferTask::execute () -{ - try - { - // - // Calculate information about the tile - // - - Box2i tileRange = OPENEXR_IMF_INTERNAL_NAMESPACE::dataWindowForTile ( - _ifd->tileDesc, - _ifd->minX, _ifd->maxX, - _ifd->minY, _ifd->maxY, - _tileBuffer->dx, - _tileBuffer->dy, - _tileBuffer->lx, - _tileBuffer->ly); - - // - // Get the size of the tile. - // - - Array numPixelsPerScanLine; - numPixelsPerScanLine.resizeErase(tileRange.max.y - tileRange.min.y + 1); - - int sizeOfTile = 0; - int maxBytesPerTileLine = 0; - - for (int y = tileRange.min.y; y <= tileRange.max.y; y++) - { - numPixelsPerScanLine[y - tileRange.min.y] = 0; - - int bytesPerLine = 0; - - for (int x = tileRange.min.x; x <= tileRange.max.x; x++) - { - int xOffset = _ifd->sampleCountXTileCoords * tileRange.min.x; - int yOffset = _ifd->sampleCountYTileCoords * tileRange.min.y; - - int count = _ifd->getSampleCount(x - xOffset, y - yOffset); - for (unsigned int c = 0; c < _ifd->slices.size(); ++c) - { - sizeOfTile += count * pixelTypeSize(_ifd->slices[c]->typeInFile); - bytesPerLine += count * pixelTypeSize(_ifd->slices[c]->typeInFile); - } - numPixelsPerScanLine[y - tileRange.min.y] += count; - } - - if (bytesPerLine > maxBytesPerTileLine) - maxBytesPerTileLine = bytesPerLine; - } - - // (TODO) don't do this every time. - if (_tileBuffer->compressor != 0) - delete _tileBuffer->compressor; - _tileBuffer->compressor = newTileCompressor - (_ifd->header.compression(), - maxBytesPerTileLine, - _ifd->tileDesc.ySize, - _ifd->header); - - // - // Uncompress the data, if necessary - // - - if (_tileBuffer->compressor && _tileBuffer->dataSize < Int64(sizeOfTile)) - { - _tileBuffer->format = _tileBuffer->compressor->format(); - - _tileBuffer->dataSize = _tileBuffer->compressor->uncompressTile - (_tileBuffer->buffer, _tileBuffer->dataSize, - tileRange, _tileBuffer->uncompressedData); - } - else - { - // - // If the line is uncompressed, it's in XDR format, - // regardless of the compressor's output format. - // - - _tileBuffer->format = Compressor::XDR; - _tileBuffer->uncompressedData = _tileBuffer->buffer; - } - - // - // Convert the tile of pixel data back from the machine-independent - // representation, and store the result in the frame buffer. - // - - const char *readPtr = _tileBuffer->uncompressedData; - // points to where we - // read from in the - // tile block - - // - // Iterate over the scan lines in the tile. - // - - for (int y = tileRange.min.y; y <= tileRange.max.y; ++y) - { - // - // Iterate over all image channels. - // - - for (unsigned int i = 0; i < _ifd->slices.size(); ++i) - { - TInSliceInfo &slice = *_ifd->slices[i]; - - // - // These offsets are used to facilitate both - // absolute and tile-relative pixel coordinates. - // - - int xOffsetForData = (slice.xTileCoords == 0) ? 0 : tileRange.min.x; - int yOffsetForData = (slice.yTileCoords == 0) ? 0 : tileRange.min.y; - int xOffsetForSampleCount = - (_ifd->sampleCountXTileCoords == 0) ? 0 : tileRange.min.x; - int yOffsetForSampleCount = - (_ifd->sampleCountYTileCoords == 0) ? 0 : tileRange.min.y; - - // - // Fill the frame buffer with pixel data. - // - - if (slice.skip) - { - // - // The file contains data for this channel, but - // the frame buffer contains no slice for this channel. - // - - skipChannel (readPtr, slice.typeInFile, - numPixelsPerScanLine[y - tileRange.min.y]); - } - else - { - // - // The frame buffer contains a slice for this channel. - // - - copyIntoDeepFrameBuffer (readPtr, slice.pointerArrayBase, - _ifd->sampleCountSliceBase, - _ifd->sampleCountXStride, - _ifd->sampleCountYStride, - y, - tileRange.min.x, - tileRange.max.x, - xOffsetForSampleCount, yOffsetForSampleCount, - xOffsetForData, yOffsetForData, - slice.sampleStride, - slice.xStride, - slice.yStride, - slice.fill, - slice.fillValue, _tileBuffer->format, - slice.typeInFrameBuffer, - slice.typeInFile); - } - } - } - } - catch (std::exception &e) - { - if (!_tileBuffer->hasException) - { - _tileBuffer->exception = e.what (); - _tileBuffer->hasException = true; - } - } - catch (...) - { - if (!_tileBuffer->hasException) - { - _tileBuffer->exception = "unrecognized exception"; - _tileBuffer->hasException = true; - } - } -} - - -TileBufferTask * -newTileBufferTask - (TaskGroup *group, - DeepTiledInputFile::Data *ifd, - int number, - int dx, int dy, - int lx, int ly) -{ - // - // Wait for a tile buffer to become available, - // fill the buffer with raw data from the file, - // and create a new TileBufferTask whose execute() - // method will uncompress the tile and copy the - // tile's pixels into the frame buffer. - // - - TileBuffer *tileBuffer = ifd->getTileBuffer (number); - - try - { - tileBuffer->wait(); - - tileBuffer->dx = dx; - tileBuffer->dy = dy; - tileBuffer->lx = lx; - tileBuffer->ly = ly; - - tileBuffer->uncompressedData = 0; - - readTileData (ifd->_streamData, ifd, dx, dy, lx, ly, - tileBuffer->buffer, - tileBuffer->dataSize, - tileBuffer->uncompressedDataSize); - } - catch (...) - { - // - // Reading from the file caused an exception. - // Signal that the tile buffer is free, and - // re-throw the exception. - // - - tileBuffer->post(); - throw; - } - - return new TileBufferTask (group, ifd, tileBuffer); -} - - -} // namespace - - -DeepTiledInputFile::DeepTiledInputFile (const char fileName[], int numThreads): - _data (new Data (numThreads)) -{ - _data->_deleteStream=true; - // - // This constructor is called when a user - // explicitly wants to read a tiled file. - // - - IStream* is = 0; - try - { - is = new StdIFStream (fileName); - readMagicNumberAndVersionField(*is, _data->version); - - // - // Compatibility to read multpart file. - // - if (isMultiPart(_data->version)) - { - compatibilityInitialize(*is); - } - else - { - _data->_streamData = new InputStreamMutex(); - _data->_streamData->is = is; - _data->header.readFrom (*_data->_streamData->is, _data->version); - initialize(); - _data->tileOffsets.readFrom (*(_data->_streamData->is), _data->fileIsComplete,false,true); - _data->_streamData->currentPosition = _data->_streamData->is->tellg(); - } - } - catch (IEX_NAMESPACE::BaseExc &e) - { - if (is) delete is; - if (_data && !_data->multiPartBackwardSupport && _data->_streamData) delete _data->_streamData; - if (_data) delete _data; - - REPLACE_EXC (e, "Cannot open image file " - "\"" << fileName << "\". " << e.what()); - throw; - } - catch (...) - { - if (is) delete is; - if (_data && !_data->multiPartBackwardSupport && _data->_streamData) delete _data->_streamData; - if (_data) delete _data; - - throw; - } -} - - -DeepTiledInputFile::DeepTiledInputFile (OPENEXR_IMF_INTERNAL_NAMESPACE::IStream &is, int numThreads): - _data (new Data (numThreads)) -{ - _data->_streamData=0; - _data->_deleteStream=false; - - // - // This constructor is called when a user - // explicitly wants to read a tiled file. - // - - try - { - readMagicNumberAndVersionField(is, _data->version); - - // - // Backward compatibility to read multpart file. - // - if (isMultiPart(_data->version)) - { - compatibilityInitialize(is); - } - else - { - _data->_streamData = new InputStreamMutex(); - _data->_streamData->is = &is; - _data->header.readFrom (*_data->_streamData->is, _data->version); - initialize(); - // file is guaranteed not to be multipart, but is deep - _data->tileOffsets.readFrom (*(_data->_streamData->is), _data->fileIsComplete, false,true); - _data->memoryMapped = _data->_streamData->is->isMemoryMapped(); - _data->_streamData->currentPosition = _data->_streamData->is->tellg(); - } - } - catch (IEX_NAMESPACE::BaseExc &e) - { - if (_data && !_data->multiPartBackwardSupport && _data->_streamData) delete _data->_streamData; - if (_data) delete _data; - - REPLACE_EXC (e, "Cannot open image file " - "\"" << is.fileName() << "\". " << e.what()); - throw; - } - catch (...) - { - if (_data && !_data->multiPartBackwardSupport && _data->_streamData) delete _data->_streamData; - if (_data) delete _data; - - throw; - } -} - - -DeepTiledInputFile::DeepTiledInputFile (const Header &header, - OPENEXR_IMF_INTERNAL_NAMESPACE::IStream *is, - int version, - int numThreads) : - _data (new Data (numThreads)) - -{ - _data->_streamData->is = is; - _data->_deleteStream=false; - - // - // This constructor called by class Imf::InputFile - // when a user wants to just read an image file, and - // doesn't care or know if the file is tiled. - // No need to have backward compatibility here, because - // we have the header. - // - - _data->header = header; - _data->version = version; - initialize(); - _data->tileOffsets.readFrom (*(_data->_streamData->is), _data->fileIsComplete,false,true); - _data->memoryMapped = is->isMemoryMapped(); - _data->_streamData->currentPosition = _data->_streamData->is->tellg(); -} - - -DeepTiledInputFile::DeepTiledInputFile (InputPartData* part) : - _data (new Data (part->numThreads)) -{ - _data->_deleteStream=false; - multiPartInitialize(part); -} - - -void -DeepTiledInputFile::compatibilityInitialize(OPENEXR_IMF_INTERNAL_NAMESPACE::IStream& is) -{ - is.seekg(0); - // - // Construct a MultiPartInputFile, initialize TiledInputFile - // with the part 0 data. - // (TODO) maybe change the third parameter of the constructor of MultiPartInputFile later. - // - _data->multiPartFile = new MultiPartInputFile(is, _data->numThreads); - _data->multiPartBackwardSupport = true; - InputPartData* part = _data->multiPartFile->getPart(0); - - multiPartInitialize(part); -} - - -void -DeepTiledInputFile::multiPartInitialize(InputPartData* part) -{ - if (isTiled(part->header.type()) == false) - THROW (IEX_NAMESPACE::ArgExc, "Can't build a DeepTiledInputFile from a part of type " << part->header.type()); - - _data->_streamData = part->mutex; - _data->header = part->header; - _data->version = part->version; - _data->partNumber = part->partNumber; - _data->memoryMapped = _data->_streamData->is->isMemoryMapped(); - initialize(); - _data->tileOffsets.readFrom(part->chunkOffsets , _data->fileIsComplete); - _data->_streamData->currentPosition = _data->_streamData->is->tellg(); -} - - -void -DeepTiledInputFile::initialize () -{ - if (_data->partNumber == -1) - if (_data->header.type() != DEEPTILE) - throw IEX_NAMESPACE::ArgExc ("Expected a deep tiled file but the file is not deep tiled."); - if(_data->header.version()!=1) - { - THROW(IEX_NAMESPACE::ArgExc, "Version " << _data->header.version() << " not supported for deeptiled images in this version of the library"); - } - - _data->header.sanityCheck (true); - - _data->tileDesc = _data->header.tileDescription(); - _data->lineOrder = _data->header.lineOrder(); - - // - // Save the dataWindow information - // - - const Box2i &dataWindow = _data->header.dataWindow(); - _data->minX = dataWindow.min.x; - _data->maxX = dataWindow.max.x; - _data->minY = dataWindow.min.y; - _data->maxY = dataWindow.max.y; - - // - // Precompute level and tile information to speed up utility functions - // - - precalculateTileInfo (_data->tileDesc, - _data->minX, _data->maxX, - _data->minY, _data->maxY, - _data->numXTiles, _data->numYTiles, - _data->numXLevels, _data->numYLevels); - - // - // Create all the TileBuffers and allocate their internal buffers - // - - _data->tileOffsets = TileOffsets (_data->tileDesc.mode, - _data->numXLevels, - _data->numYLevels, - _data->numXTiles, - _data->numYTiles); - - for (size_t i = 0; i < _data->tileBuffers.size(); i++) - _data->tileBuffers[i] = new TileBuffer (); - - _data->maxSampleCountTableSize = _data->tileDesc.ySize * - _data->tileDesc.xSize * - sizeof(int); - - _data->sampleCountTableBuffer.resizeErase(_data->maxSampleCountTableSize); - - _data->sampleCountTableComp = newCompressor(_data->header.compression(), - _data->maxSampleCountTableSize, - _data->header); - - - const ChannelList & c=_data->header.channels(); - _data->combinedSampleSize=0; - for(ChannelList::ConstIterator i=c.begin();i!=c.end();i++) - { - switch( i.channel().type ) - { - case OPENEXR_IMF_INTERNAL_NAMESPACE::HALF : - _data->combinedSampleSize+=Xdr::size(); - break; - case OPENEXR_IMF_INTERNAL_NAMESPACE::FLOAT : - _data->combinedSampleSize+=Xdr::size(); - break; - case OPENEXR_IMF_INTERNAL_NAMESPACE::UINT : - _data->combinedSampleSize+=Xdr::size(); - break; - default : - THROW(IEX_NAMESPACE::ArgExc, "Bad type for channel " << i.name() << " initializing deepscanline reader"); - } - } - -} - - -DeepTiledInputFile::~DeepTiledInputFile () -{ - if (!_data->memoryMapped) - for (size_t i = 0; i < _data->tileBuffers.size(); i++) - if (_data->tileBuffers[i]->buffer != 0) - delete [] _data->tileBuffers[i]->buffer; - - if (_data->_deleteStream) - delete _data->_streamData->is; - - // - // (TODO) we should have a way to tell if the stream data is owned by this file or - // by a parent multipart file. - // - - if (_data->partNumber == -1) - delete _data->_streamData; - - delete _data; -} - - -const char * -DeepTiledInputFile::fileName () const -{ - return _data->_streamData->is->fileName(); -} - - -const Header & -DeepTiledInputFile::header () const -{ - return _data->header; -} - - -int -DeepTiledInputFile::version () const -{ - return _data->version; -} - - -void -DeepTiledInputFile::setFrameBuffer (const DeepFrameBuffer &frameBuffer) -{ - Lock lock (*_data->_streamData); - - // - // Set the frame buffer - // - - // - // Check if the new frame buffer descriptor is - // compatible with the image file header. - // - - const ChannelList &channels = _data->header.channels(); - - for (DeepFrameBuffer::ConstIterator j = frameBuffer.begin(); - j != frameBuffer.end(); - ++j) - { - ChannelList::ConstIterator i = channels.find (j.name()); - - if (i == channels.end()) - continue; - - if (i.channel().xSampling != j.slice().xSampling || - i.channel().ySampling != j.slice().ySampling) - THROW (IEX_NAMESPACE::ArgExc, "X and/or y subsampling factors " - "of \"" << i.name() << "\" channel " - "of input file \"" << fileName() << "\" are " - "not compatible with the frame buffer's " - "subsampling factors."); - } - - // - // Store the pixel sample count table. - // (TODO) Support for different sampling rates? - // - - const Slice& sampleCountSlice = frameBuffer.getSampleCountSlice(); - if (sampleCountSlice.base == 0) - { - throw IEX_NAMESPACE::ArgExc ("Invalid base pointer, please set a proper sample count slice."); - } - else - { - _data->sampleCountSliceBase = sampleCountSlice.base; - _data->sampleCountXStride = sampleCountSlice.xStride; - _data->sampleCountYStride = sampleCountSlice.yStride; - _data->sampleCountXTileCoords = sampleCountSlice.xTileCoords; - _data->sampleCountYTileCoords = sampleCountSlice.yTileCoords; - } - - // - // Initialize the slice table for readPixels(). - // - - vector slices; - ChannelList::ConstIterator i = channels.begin(); - - for (DeepFrameBuffer::ConstIterator j = frameBuffer.begin(); - j != frameBuffer.end(); - ++j) - { - while (i != channels.end() && strcmp (i.name(), j.name()) < 0) - { - // - // Channel i is present in the file but not - // in the frame buffer; data for channel i - // will be skipped during readPixels(). - // - - slices.push_back (new TInSliceInfo (i.channel().type, - NULL, - i.channel().type, - 0, // xStride - 0, // yStride - 0, // sampleStride - false, // fill - true, // skip - 0.0)); // fillValue - ++i; - } - - bool fill = false; - - if (i == channels.end() || strcmp (i.name(), j.name()) > 0) - { - // - // Channel i is present in the frame buffer, but not in the file. - // In the frame buffer, slice j will be filled with a default value. - // - - fill = true; - } - - slices.push_back (new TInSliceInfo (j.slice().type, - j.slice().base, - fill? j.slice().type: i.channel().type, - j.slice().xStride, - j.slice().yStride, - j.slice().sampleStride, - fill, - false, // skip - j.slice().fillValue, - (j.slice().xTileCoords)? 1: 0, - (j.slice().yTileCoords)? 1: 0)); - - - if (i != channels.end() && !fill) - ++i; - } - - // (TODO) inspect the following code. It's additional to the scanline input file. - // Is this needed? - - while (i != channels.end()) - { - // - // Channel i is present in the file but not - // in the frame buffer; data for channel i - // will be skipped during readPixels(). - // - - slices.push_back (new TInSliceInfo (i.channel().type, - NULL, - i.channel().type, - 0, // xStride - 0, // yStride - 0, // sampleStride - false, // fill - true, // skip - 0.0)); // fillValue - ++i; - } - - // - // Store the new frame buffer. - // - - _data->frameBuffer = frameBuffer; - - for (size_t i = 0; i < _data->slices.size(); i++) - delete _data->slices[i]; - _data->slices = slices; -} - - -const DeepFrameBuffer & -DeepTiledInputFile::frameBuffer () const -{ - Lock lock (*_data->_streamData); - return _data->frameBuffer; -} - - -bool -DeepTiledInputFile::isComplete () const -{ - return _data->fileIsComplete; -} - - -void -DeepTiledInputFile::readTiles (int dx1, int dx2, int dy1, int dy2, int lx, int ly) -{ - // - // Read a range of tiles from the file into the framebuffer - // - - try - { - Lock lock (*_data->_streamData); - - if (_data->slices.size() == 0) - throw IEX_NAMESPACE::ArgExc ("No frame buffer specified " - "as pixel data destination."); - - if (!isValidLevel (lx, ly)) - THROW (IEX_NAMESPACE::ArgExc, - "Level coordinate " - "(" << lx << ", " << ly << ") " - "is invalid."); - - // - // Determine the first and last tile coordinates in both dimensions. - // We always attempt to read the range of tiles in the order that - // they are stored in the file. - // - - if (dx1 > dx2) - std::swap (dx1, dx2); - - if (dy1 > dy2) - std::swap (dy1, dy2); - - int dyStart = dy1; - int dyStop = dy2 + 1; - int dY = 1; - - if (_data->lineOrder == DECREASING_Y) - { - dyStart = dy2; - dyStop = dy1 - 1; - dY = -1; - } - - // - // Create a task group for all tile buffer tasks. When the - // task group goes out of scope, the destructor waits until - // all tasks are complete. - // - - { - TaskGroup taskGroup; - int tileNumber = 0; - - for (int dy = dyStart; dy != dyStop; dy += dY) - { - for (int dx = dx1; dx <= dx2; dx++) - { - if (!isValidTile (dx, dy, lx, ly)) - THROW (IEX_NAMESPACE::ArgExc, - "Tile (" << dx << ", " << dy << ", " << - lx << "," << ly << ") is not a valid tile."); - - ThreadPool::addGlobalTask (newTileBufferTask (&taskGroup, - _data, - tileNumber++, - dx, dy, - lx, ly)); - } - } - - // - // finish all tasks - // - } - - // - // Exeption handling: - // - // TileBufferTask::execute() may have encountered exceptions, but - // those exceptions occurred in another thread, not in the thread - // that is executing this call to TiledInputFile::readTiles(). - // TileBufferTask::execute() has caught all exceptions and stored - // the exceptions' what() strings in the tile buffers. - // Now we check if any tile buffer contains a stored exception; if - // this is the case then we re-throw the exception in this thread. - // (It is possible that multiple tile buffers contain stored - // exceptions. We re-throw the first exception we find and - // ignore all others.) - // - - const string *exception = 0; - - for (size_t i = 0; i < _data->tileBuffers.size(); ++i) - { - TileBuffer *tileBuffer = _data->tileBuffers[i]; - - if (tileBuffer->hasException && !exception) - exception = &tileBuffer->exception; - - tileBuffer->hasException = false; - } - - if (exception) - throw IEX_NAMESPACE::IoExc (*exception); - } - catch (IEX_NAMESPACE::BaseExc &e) - { - REPLACE_EXC (e, "Error reading pixel data from image " - "file \"" << fileName() << "\". " << e.what()); - throw; - } -} - - -void -DeepTiledInputFile::readTiles (int dx1, int dx2, int dy1, int dy2, int l) -{ - readTiles (dx1, dx2, dy1, dy2, l, l); -} - - -void -DeepTiledInputFile::readTile (int dx, int dy, int lx, int ly) -{ - readTiles (dx, dx, dy, dy, lx, ly); -} - - -void -DeepTiledInputFile::readTile (int dx, int dy, int l) -{ - readTile (dx, dy, l, l); -} - - -void -DeepTiledInputFile::rawTileData (int &dx, int &dy, - int &lx, int &ly, - char * pixelData, - Int64 &pixelDataSize) const -{ - if (!isValidTile (dx, dy, lx, ly)) - throw IEX_NAMESPACE::ArgExc ("Tried to read a tile outside " - "the image file's data window."); - - Int64 tileOffset = _data->tileOffsets (dx, dy, lx, ly); - - if(tileOffset == 0) - { - THROW (IEX_NAMESPACE::InputExc, "Tile (" << dx << ", " << dy << ", " << - lx << ", " << ly << ") is missing."); - } - - Lock lock(*_data->_streamData); - - if (_data->_streamData->is->tellg() != tileOffset) - _data->_streamData->is->seekg (tileOffset); - - - // - // Read the first few bytes of the tile (the header). - // Verify that the tile coordinates and the level number - // are correct. - // - - int tileXCoord, tileYCoord, levelX, levelY; - - if (isMultiPart(_data->version)) - { - int partNumber; - Xdr::read (*_data->_streamData->is, partNumber); - if (partNumber != _data->partNumber) - { - THROW (IEX_NAMESPACE::ArgExc, "Unexpected part number " << partNumber - << ", should be " << _data->partNumber << "."); - } - } - - Xdr::read (*_data->_streamData->is, tileXCoord); - Xdr::read (*_data->_streamData->is, tileYCoord); - Xdr::read (*_data->_streamData->is, levelX); - Xdr::read (*_data->_streamData->is, levelY); - - Int64 sampleCountTableSize; - Int64 packedDataSize; - Xdr::read (*_data->_streamData->is, sampleCountTableSize); - - Xdr::read (*_data->_streamData->is, packedDataSize); - - - - if (tileXCoord != dx) - throw IEX_NAMESPACE::InputExc ("Unexpected tile x coordinate."); - - if (tileYCoord != dy) - throw IEX_NAMESPACE::InputExc ("Unexpected tile y coordinate."); - - if (levelX != lx) - throw IEX_NAMESPACE::InputExc ("Unexpected tile x level number coordinate."); - - if (levelY != ly) - throw IEX_NAMESPACE::InputExc ("Unexpected tile y level number coordinate."); - - - // total requirement for reading all the data - - Int64 totalSizeRequired=40+sampleCountTableSize+packedDataSize; - - bool big_enough = totalSizeRequired<=pixelDataSize; - - pixelDataSize = totalSizeRequired; - - // was the block we were given big enough? - if(!big_enough || pixelData==NULL) - { - // special case: seek stream back to start if we are at the beginning (regular reading pixels assumes it doesn't need to seek - // in single part files) - if(!isMultiPart(_data->version)) - { - _data->_streamData->is->seekg(_data->_streamData->currentPosition); - } - // leave lock here - bail before reading more data - return; - } - - // copy the values we have read into the output block - *(int *) (pixelData+0) = dx; - *(int *) (pixelData+4) = dy; - *(int *) (pixelData+8) = levelX; - *(int *) (pixelData+12) = levelY; - *(Int64 *) (pixelData+16) =sampleCountTableSize; - *(Int64 *) (pixelData+24) = packedDataSize; - - // didn't read the unpackedsize - do that now - Xdr::read (*_data->_streamData->is, *(Int64 *) (pixelData+32)); - - // read the actual data - _data->_streamData->is->read(pixelData+40, sampleCountTableSize+packedDataSize); - - - if(!isMultiPart(_data->version)) - { - _data->_streamData->currentPosition+=sampleCountTableSize+packedDataSize+40; - } - - // leave lock here - - -} - - -unsigned int -DeepTiledInputFile::tileXSize () const -{ - return _data->tileDesc.xSize; -} - - -unsigned int -DeepTiledInputFile::tileYSize () const -{ - return _data->tileDesc.ySize; -} - - -LevelMode -DeepTiledInputFile::levelMode () const -{ - return _data->tileDesc.mode; -} - - -LevelRoundingMode -DeepTiledInputFile::levelRoundingMode () const -{ - return _data->tileDesc.roundingMode; -} - - -int -DeepTiledInputFile::numLevels () const -{ - if (levelMode() == RIPMAP_LEVELS) - THROW (IEX_NAMESPACE::LogicExc, "Error calling numLevels() on image " - "file \"" << fileName() << "\" " - "(numLevels() is not defined for files " - "with RIPMAP level mode)."); - - return _data->numXLevels; -} - - -int -DeepTiledInputFile::numXLevels () const -{ - return _data->numXLevels; -} - - -int -DeepTiledInputFile::numYLevels () const -{ - return _data->numYLevels; -} - - -bool -DeepTiledInputFile::isValidLevel (int lx, int ly) const -{ - if (lx < 0 || ly < 0) - return false; - - if (levelMode() == MIPMAP_LEVELS && lx != ly) - return false; - - if (lx >= numXLevels() || ly >= numYLevels()) - return false; - - return true; -} - - -int -DeepTiledInputFile::levelWidth (int lx) const -{ - try - { - return levelSize (_data->minX, _data->maxX, lx, - _data->tileDesc.roundingMode); - } - catch (IEX_NAMESPACE::BaseExc &e) - { - REPLACE_EXC (e, "Error calling levelWidth() on image " - "file \"" << fileName() << "\". " << e.what()); - throw; - } -} - - -int -DeepTiledInputFile::levelHeight (int ly) const -{ - try - { - return levelSize (_data->minY, _data->maxY, ly, - _data->tileDesc.roundingMode); - } - catch (IEX_NAMESPACE::BaseExc &e) - { - REPLACE_EXC (e, "Error calling levelHeight() on image " - "file \"" << fileName() << "\". " << e.what()); - throw; - } -} - - -int -DeepTiledInputFile::numXTiles (int lx) const -{ - if (lx < 0 || lx >= _data->numXLevels) - { - THROW (IEX_NAMESPACE::ArgExc, "Error calling numXTiles() on image " - "file \"" << _data->_streamData->is->fileName() << "\" " - "(Argument is not in valid range)."); - - } - - return _data->numXTiles[lx]; -} - - -int -DeepTiledInputFile::numYTiles (int ly) const -{ - if (ly < 0 || ly >= _data->numYLevels) - { - THROW (IEX_NAMESPACE::ArgExc, "Error calling numYTiles() on image " - "file \"" << _data->_streamData->is->fileName() << "\" " - "(Argument is not in valid range)."); - } - - return _data->numYTiles[ly]; -} - - -Box2i -DeepTiledInputFile::dataWindowForLevel (int l) const -{ - return dataWindowForLevel (l, l); -} - - -Box2i -DeepTiledInputFile::dataWindowForLevel (int lx, int ly) const -{ - try - { - return OPENEXR_IMF_INTERNAL_NAMESPACE::dataWindowForLevel ( - _data->tileDesc, - _data->minX, _data->maxX, - _data->minY, _data->maxY, - lx, ly); - } - catch (IEX_NAMESPACE::BaseExc &e) - { - REPLACE_EXC (e, "Error calling dataWindowForLevel() on image " - "file \"" << fileName() << "\". " << e.what()); - throw; - } -} - - -Box2i -DeepTiledInputFile::dataWindowForTile (int dx, int dy, int l) const -{ - return dataWindowForTile (dx, dy, l, l); -} - - -Box2i -DeepTiledInputFile::dataWindowForTile (int dx, int dy, int lx, int ly) const -{ - try - { - if (!isValidTile (dx, dy, lx, ly)) - throw IEX_NAMESPACE::ArgExc ("Arguments not in valid range."); - - return OPENEXR_IMF_INTERNAL_NAMESPACE::dataWindowForTile ( - _data->tileDesc, - _data->minX, _data->maxX, - _data->minY, _data->maxY, - dx, dy, lx, ly); - } - catch (IEX_NAMESPACE::BaseExc &e) - { - REPLACE_EXC (e, "Error calling dataWindowForTile() on image " - "file \"" << fileName() << "\". " << e.what()); - throw; - } -} - - -bool -DeepTiledInputFile::isValidTile (int dx, int dy, int lx, int ly) const -{ - return ((lx < _data->numXLevels && lx >= 0) && - (ly < _data->numYLevels && ly >= 0) && - (dx < _data->numXTiles[lx] && dx >= 0) && - (dy < _data->numYTiles[ly] && dy >= 0)); -} - - -void -DeepTiledInputFile::readPixelSampleCounts (int dx1, int dx2, - int dy1, int dy2, - int lx, int ly) -{ - Int64 savedFilePos = 0; - - try - { - Lock lock (*_data->_streamData); - - savedFilePos = _data->_streamData->is->tellg(); - - - if (!isValidLevel (lx, ly)) - { - THROW (IEX_NAMESPACE::ArgExc, - "Level coordinate " - "(" << lx << ", " << ly << ") " - "is invalid."); - } - - if (dx1 > dx2) - std::swap (dx1, dx2); - - if (dy1 > dy2) - std::swap (dy1, dy2); - - int dyStart = dy1; - int dyStop = dy2 + 1; - int dY = 1; - - if (_data->lineOrder == DECREASING_Y) - { - dyStart = dy2; - dyStop = dy1 - 1; - dY = -1; - } - - // (TODO) Check if we have read the sample counts for those tiles, - // if we have, no need to read again. - for (int dy = dyStart; dy != dyStop; dy += dY) - { - for (int dx = dx1; dx <= dx2; dx++) - { - - if (!isValidTile (dx, dy, lx, ly)) - { - THROW (IEX_NAMESPACE::ArgExc, - "Tile (" << dx << ", " << dy << ", " << - lx << "," << ly << ") is not a valid tile."); - } - - Box2i tileRange = OPENEXR_IMF_INTERNAL_NAMESPACE::dataWindowForTile ( - _data->tileDesc, - _data->minX, _data->maxX, - _data->minY, _data->maxY, - dx, dy, lx, ly); - - int xOffset = _data->sampleCountXTileCoords * tileRange.min.x; - int yOffset = _data->sampleCountYTileCoords * tileRange.min.y; - - // - // Skip and check the tile coordinates. - // - - _data->_streamData->is->seekg(_data->tileOffsets(dx, dy, lx, ly)); - - if (isMultiPart(_data->version)) - { - int partNumber; - Xdr::read (*_data->_streamData->is, partNumber); - - if (partNumber != _data->partNumber) - throw IEX_NAMESPACE::InputExc ("Unexpected part number."); - } - - int xInFile, yInFile, lxInFile, lyInFile; - Xdr::read (*_data->_streamData->is, xInFile); - Xdr::read (*_data->_streamData->is, yInFile); - Xdr::read (*_data->_streamData->is, lxInFile); - Xdr::read (*_data->_streamData->is, lyInFile); - - if (xInFile != dx) - throw IEX_NAMESPACE::InputExc ("Unexpected tile x coordinate."); - - if (yInFile != dy) - throw IEX_NAMESPACE::InputExc ("Unexpected tile y coordinate."); - - if (lxInFile != lx) - throw IEX_NAMESPACE::InputExc ("Unexpected tile x level number coordinate."); - - if (lyInFile != ly) - throw IEX_NAMESPACE::InputExc ("Unexpected tile y level number coordinate."); - - Int64 tableSize, dataSize, unpackedDataSize; - Xdr::read (*_data->_streamData->is, tableSize); - Xdr::read (*_data->_streamData->is, dataSize); - Xdr::read (*_data->_streamData->is, unpackedDataSize); - - - if(tableSize>_data->maxSampleCountTableSize) - { - THROW (IEX_NAMESPACE::ArgExc, "Bad sampleCountTableDataSize read from tile "<< dx << ',' << dy << ',' << lx << ',' << ly << ": expected " << _data->maxSampleCountTableSize << " or less, got "<< tableSize); - } - - - // - // We make a check on the data size requirements here. - // Whilst we wish to store 64bit sizes on disk, not all the compressors - // have been made to work with such data sizes and are still limited to - // using signed 32 bit (int) for the data size. As such, this version - // insists that we validate that the data size does not exceed the data - // type max limit. - // @TODO refactor the compressor code to ensure full 64-bit support. - // - - Int64 compressorMaxDataSize = Int64(std::numeric_limits::max()); - if (dataSize > compressorMaxDataSize || - unpackedDataSize > compressorMaxDataSize || - tableSize > compressorMaxDataSize) - { - THROW (IEX_NAMESPACE::ArgExc, "This version of the library does not" - << "support the allocation of data with size > " - << compressorMaxDataSize - << " file table size :" << tableSize - << " file unpacked size :" << unpackedDataSize - << " file packed size :" << dataSize << ".\n"); - } - - // - // Read and uncompress the pixel sample count table. - // - - _data->_streamData->is->read(_data->sampleCountTableBuffer, tableSize); - - const char* readPtr; - - if (tableSize < _data->maxSampleCountTableSize) - { - if(!_data->sampleCountTableComp) - { - THROW(IEX_NAMESPACE::ArgExc,"Deep scanline data corrupt at tile " << dx << ',' << dy << ',' << lx << ',' << ly << " (sampleCountTableDataSize error)"); - } - _data->sampleCountTableComp->uncompress(_data->sampleCountTableBuffer, - tableSize, - tileRange.min.y, - readPtr); - } - else - readPtr = _data->sampleCountTableBuffer; - - size_t cumulative_total_samples =0; - int lastAccumulatedCount; - for (int j = tileRange.min.y; j <= tileRange.max.y; j++) - { - lastAccumulatedCount = 0; - for (int i = tileRange.min.x; i <= tileRange.max.x; i++) - { - int accumulatedCount; - Xdr::read (readPtr, accumulatedCount); - - if (accumulatedCount < lastAccumulatedCount) - { - THROW(IEX_NAMESPACE::ArgExc,"Deep tile sampleCount data corrupt at tile " - << dx << ',' << dy << ',' << lx << ',' << ly << " (negative sample count detected)"); - } - - int count = accumulatedCount - lastAccumulatedCount; - lastAccumulatedCount = accumulatedCount; - - _data->getSampleCount(i - xOffset, j - yOffset) =count; - } - cumulative_total_samples += lastAccumulatedCount; - } - - if(cumulative_total_samples * _data->combinedSampleSize > unpackedDataSize) - { - THROW(IEX_NAMESPACE::ArgExc,"Deep scanline sampleCount data corrupt at tile " - << dx << ',' << dy << ',' << lx << ',' << ly - << ": pixel data only contains " << unpackedDataSize - << " bytes of data but table references at least " - << cumulative_total_samples*_data->combinedSampleSize << " bytes of sample data" ); - } - - } - } - - _data->_streamData->is->seekg(savedFilePos); - } - catch (IEX_NAMESPACE::BaseExc &e) - { - REPLACE_EXC (e, "Error reading sample count data from image " - "file \"" << fileName() << "\". " << e.what()); - - _data->_streamData->is->seekg(savedFilePos); - - throw; - } -} - - -void -DeepTiledInputFile::readPixelSampleCount (int dx, int dy, int l) -{ - readPixelSampleCount (dx, dy, l, l); -} - - -void -DeepTiledInputFile::readPixelSampleCount (int dx, int dy, int lx, int ly) -{ - readPixelSampleCounts (dx, dx, dy, dy, lx, ly); -} - - -void -DeepTiledInputFile::readPixelSampleCounts (int dx1, int dx2, - int dy1, int dy2, - int l) -{ - readPixelSampleCounts (dx1, dx2, dy1, dy2, l, l); -} - - -size_t -DeepTiledInputFile::totalTiles() const -{ - // - // Calculate the total number of tiles in the file - // - - int numAllTiles = 0; - - switch (levelMode ()) - { - case ONE_LEVEL: - case MIPMAP_LEVELS: - - for (int i_l = 0; i_l < numLevels (); ++i_l) - numAllTiles += numXTiles (i_l) * numYTiles (i_l); - - break; - - case RIPMAP_LEVELS: - - for (int i_ly = 0; i_ly < numYLevels (); ++i_ly) - for (int i_lx = 0; i_lx < numXLevels (); ++i_lx) - numAllTiles += numXTiles (i_lx) * numYTiles (i_ly); - - break; - - default: - - throw IEX_NAMESPACE::ArgExc ("Unknown LevelMode format."); - } - return numAllTiles; -} - - - - -void -DeepTiledInputFile::getTileOrder(int dx[],int dy[],int lx[],int ly[]) const -{ - return _data->tileOffsets.getTileOrder(dx,dy,lx,ly); - -} - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_EXIT diff --git a/3rdparty/openexr/IlmImf/ImfDeepTiledInputFile.h b/3rdparty/openexr/IlmImf/ImfDeepTiledInputFile.h deleted file mode 100644 index 2643fe553c..0000000000 --- a/3rdparty/openexr/IlmImf/ImfDeepTiledInputFile.h +++ /dev/null @@ -1,472 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2011, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - -#ifndef INCLUDED_IMF_DEEP_TILED_INPUT_FILE_H -#define INCLUDED_IMF_DEEP_TILED_INPUT_FILE_H - -//----------------------------------------------------------------------------- -// -// class DeepTiledInputFile -// -//----------------------------------------------------------------------------- - -#include "ImfHeader.h" -#include "ImfFrameBuffer.h" -#include "ImathBox.h" -#include "ImfTileDescription.h" -#include "ImfThreading.h" -#include "ImfGenericInputFile.h" -#include "ImfDeepFrameBuffer.h" -#include "ImfDeepTiledOutputFile.h" -#include "ImfForward.h" -#include "ImfNamespace.h" -#include "ImfExport.h" - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER - -class DeepTiledInputFile : public GenericInputFile -{ - public: - - //-------------------------------------------------------------------- - // A constructor that opens the file with the specified name, and - // reads the file header. The constructor throws an IEX_NAMESPACE::ArgExc - // exception if the file is not tiled. - // The numThreads parameter specifies how many worker threads this - // file will try to keep busy when decompressing individual tiles. - // Destroying TiledInputFile objects constructed with this constructor - // automatically closes the corresponding files. - //-------------------------------------------------------------------- - - IMF_EXPORT - DeepTiledInputFile (const char fileName[], - int numThreads = globalThreadCount ()); - - - // ---------------------------------------------------------- - // A constructor that attaches the new TiledInputFile object - // to a file that has already been opened. - // Destroying TiledInputFile objects constructed with this - // constructor does not automatically close the corresponding - // files. - // ---------------------------------------------------------- - - IMF_EXPORT - DeepTiledInputFile (OPENEXR_IMF_INTERNAL_NAMESPACE::IStream &is, int numThreads = globalThreadCount ()); - - - //----------- - // Destructor - //----------- - - IMF_EXPORT - virtual ~DeepTiledInputFile (); - - - //------------------------ - // Access to the file name - //------------------------ - - IMF_EXPORT - const char * fileName () const; - - - //-------------------------- - // Access to the file header - //-------------------------- - - IMF_EXPORT - const Header & header () const; - - - //---------------------------------- - // Access to the file format version - //---------------------------------- - - IMF_EXPORT - int version () const; - - - //----------------------------------------------------------- - // Set the current frame buffer -- copies the FrameBuffer - // object into the TiledInputFile object. - // - // The current frame buffer is the destination for the pixel - // data read from the file. The current frame buffer must be - // set at least once before readTile() is called. - // The current frame buffer can be changed after each call - // to readTile(). - //----------------------------------------------------------- - - IMF_EXPORT - void setFrameBuffer (const DeepFrameBuffer &frameBuffer); - - - //----------------------------------- - // Access to the current frame buffer - //----------------------------------- - - IMF_EXPORT - const DeepFrameBuffer & frameBuffer () const; - - - //------------------------------------------------------------ - // Check if the file is complete: - // - // isComplete() returns true if all pixels in the data window - // (in all levels) are present in the input file, or false if - // any pixels are missing. (Another program may still be busy - // writing the file, or file writing may have been aborted - // prematurely.) - //------------------------------------------------------------ - - IMF_EXPORT - bool isComplete () const; - - - //-------------------------------------------------- - // Utility functions: - //-------------------------------------------------- - - //--------------------------------------------------------- - // Multiresolution mode and tile size: - // The following functions return the xSize, ySize and mode - // fields of the file header's TileDescriptionAttribute. - //--------------------------------------------------------- - - IMF_EXPORT - unsigned int tileXSize () const; - IMF_EXPORT - unsigned int tileYSize () const; - IMF_EXPORT - LevelMode levelMode () const; - IMF_EXPORT - LevelRoundingMode levelRoundingMode () const; - - - //-------------------------------------------------------------------- - // Number of levels: - // - // numXLevels() returns the file's number of levels in x direction. - // - // if levelMode() == ONE_LEVEL: - // return value is: 1 - // - // if levelMode() == MIPMAP_LEVELS: - // return value is: rfunc (log (max (w, h)) / log (2)) + 1 - // - // if levelMode() == RIPMAP_LEVELS: - // return value is: rfunc (log (w) / log (2)) + 1 - // - // where - // w is the width of the image's data window, max.x - min.x + 1, - // y is the height of the image's data window, max.y - min.y + 1, - // and rfunc(x) is either floor(x), or ceil(x), depending on - // whether levelRoundingMode() returns ROUND_DOWN or ROUND_UP. - // - // numYLevels() returns the file's number of levels in y direction. - // - // if levelMode() == ONE_LEVEL or levelMode() == MIPMAP_LEVELS: - // return value is the same as for numXLevels() - // - // if levelMode() == RIPMAP_LEVELS: - // return value is: rfunc (log (h) / log (2)) + 1 - // - // - // numLevels() is a convenience function for use with - // MIPMAP_LEVELS files. - // - // if levelMode() == ONE_LEVEL or levelMode() == MIPMAP_LEVELS: - // return value is the same as for numXLevels() - // - // if levelMode() == RIPMAP_LEVELS: - // an IEX_NAMESPACE::LogicExc exception is thrown - // - // isValidLevel(lx, ly) returns true if the file contains - // a level with level number (lx, ly), false if not. - // - // totalTiles() returns the total number of tiles in the image - // - //-------------------------------------------------------------------- - - IMF_EXPORT - int numLevels () const; - IMF_EXPORT - int numXLevels () const; - IMF_EXPORT - int numYLevels () const; - IMF_EXPORT - bool isValidLevel (int lx, int ly) const; - IMF_EXPORT - size_t totalTiles() const; - - //---------------------------------------------------------- - // Dimensions of a level: - // - // levelWidth(lx) returns the width of a level with level - // number (lx, *), where * is any number. - // - // return value is: - // max (1, rfunc (w / pow (2, lx))) - // - // - // levelHeight(ly) returns the height of a level with level - // number (*, ly), where * is any number. - // - // return value is: - // max (1, rfunc (h / pow (2, ly))) - // - //---------------------------------------------------------- - - IMF_EXPORT - int levelWidth (int lx) const; - IMF_EXPORT - int levelHeight (int ly) const; - - - //-------------------------------------------------------------- - // Number of tiles: - // - // numXTiles(lx) returns the number of tiles in x direction - // that cover a level with level number (lx, *), where * is - // any number. - // - // return value is: - // (levelWidth(lx) + tileXSize() - 1) / tileXSize() - // - // - // numYTiles(ly) returns the number of tiles in y direction - // that cover a level with level number (*, ly), where * is - // any number. - // - // return value is: - // (levelHeight(ly) + tileXSize() - 1) / tileXSize() - // - //-------------------------------------------------------------- - - IMF_EXPORT - int numXTiles (int lx = 0) const; - IMF_EXPORT - int numYTiles (int ly = 0) const; - - - //--------------------------------------------------------------- - // Level pixel ranges: - // - // dataWindowForLevel(lx, ly) returns a 2-dimensional region of - // valid pixel coordinates for a level with level number (lx, ly) - // - // return value is a Box2i with min value: - // (dataWindow.min.x, dataWindow.min.y) - // - // and max value: - // (dataWindow.min.x + levelWidth(lx) - 1, - // dataWindow.min.y + levelHeight(ly) - 1) - // - // dataWindowForLevel(level) is a convenience function used - // for ONE_LEVEL and MIPMAP_LEVELS files. It returns - // dataWindowForLevel(level, level). - // - //--------------------------------------------------------------- - - IMF_EXPORT - IMATH_NAMESPACE::Box2i dataWindowForLevel (int l = 0) const; - IMF_EXPORT - IMATH_NAMESPACE::Box2i dataWindowForLevel (int lx, int ly) const; - - - //------------------------------------------------------------------- - // Tile pixel ranges: - // - // dataWindowForTile(dx, dy, lx, ly) returns a 2-dimensional - // region of valid pixel coordinates for a tile with tile coordinates - // (dx,dy) and level number (lx, ly). - // - // return value is a Box2i with min value: - // (dataWindow.min.x + dx * tileXSize(), - // dataWindow.min.y + dy * tileYSize()) - // - // and max value: - // (dataWindow.min.x + (dx + 1) * tileXSize() - 1, - // dataWindow.min.y + (dy + 1) * tileYSize() - 1) - // - // dataWindowForTile(dx, dy, level) is a convenience function - // used for ONE_LEVEL and MIPMAP_LEVELS files. It returns - // dataWindowForTile(dx, dy, level, level). - // - //------------------------------------------------------------------- - - IMF_EXPORT - IMATH_NAMESPACE::Box2i dataWindowForTile (int dx, int dy, int l = 0) const; - - IMF_EXPORT - IMATH_NAMESPACE::Box2i dataWindowForTile (int dx, int dy, - int lx, int ly) const; - - //------------------------------------------------------------ - // Read pixel data: - // - // readTile(dx, dy, lx, ly) reads the tile with tile - // coordinates (dx, dy), and level number (lx, ly), - // and stores it in the current frame buffer. - // - // dx must lie in the interval [0, numXTiles(lx)-1] - // dy must lie in the interval [0, numYTiles(ly)-1] - // - // lx must lie in the interval [0, numXLevels()-1] - // ly must lie in the inverval [0, numYLevels()-1] - // - // readTile(dx, dy, level) is a convenience function used - // for ONE_LEVEL and MIPMAP_LEVELS files. It calls - // readTile(dx, dy, level, level). - // - // The two readTiles(dx1, dx2, dy1, dy2, ...) functions allow - // reading multiple tiles at once. If multi-threading is used - // the multiple tiles are read concurrently. - // - // Pixels that are outside the pixel coordinate range for the - // tile's level, are never accessed by readTile(). - // - // Attempting to access a tile that is not present in the file - // throws an InputExc exception. - // - //------------------------------------------------------------ - - IMF_EXPORT - void readTile (int dx, int dy, int l = 0); - IMF_EXPORT - void readTile (int dx, int dy, int lx, int ly); - - IMF_EXPORT - void readTiles (int dx1, int dx2, int dy1, int dy2, - int lx, int ly); - - IMF_EXPORT - void readTiles (int dx1, int dx2, int dy1, int dy2, - int l = 0); - - - //-------------------------------------------------- - // Read a tile of raw pixel data from the file, - // without uncompressing it (this function is - // used to implement TiledOutputFile::copyPixels()). - //-------------------------------------------------- - - IMF_EXPORT - void rawTileData (int &dx, int &dy, - int &lx, int &ly, - char *pixelData, - Int64 &dataSize) const; - - //------------------------------------------------------------------ - // Read pixel sample counts into a slice in the frame buffer. - // - // readPixelSampleCount(dx, dy, lx, ly) reads the sample counts - // for tile (dx, dy) in level (lx, ly). - // - // readPixelSampleCount(dx, dy, l) calls - // readPixelSampleCount(dx, dy, lx = l, ly = l) - // - // dx must lie in the interval [0, numXTiles(lx)-1] - // dy must lie in the interval [0, numYTiles(ly)-1] - // - // lx must lie in the interval [0, numXLevels()-1] - // ly must lie in the inverval [0, numYLevels()-1] - // - // readPixelSampleCounts(dx1, dx2, dy1, dy2, lx, ly) reads all - // the sample counts for tiles within range - // [(min(dx1, dx2), min(dy1, dy2))...(max(dx1, dx2), max(dy1, dy2)], - // and on level (lx, ly) - // - // readPixelSampleCounts(dx1, dx2, dy1, dy2, l) calls - // readPixelSampleCounts(dx1, dx2, dy1, dy2, lx = l, ly = l). - //------------------------------------------------------------------ - - IMF_EXPORT - void readPixelSampleCount (int dx, int dy, int l = 0); - IMF_EXPORT - void readPixelSampleCount (int dx, int dy, int lx, int ly); - - IMF_EXPORT - void readPixelSampleCounts (int dx1, int dx2, - int dy1, int dy2, - int lx, int ly); - - IMF_EXPORT - void readPixelSampleCounts (int dx1, int dx2, - int dy1, int dy2, - int l = 0); - - struct Data; - - - - private: - - friend class InputFile; - friend class MultiPartInputFile; - - DeepTiledInputFile (InputPartData* part); - - DeepTiledInputFile (const DeepTiledInputFile &); // not implemented - DeepTiledInputFile & operator = (const DeepTiledInputFile &); // not implemented - - DeepTiledInputFile (const Header &header, OPENEXR_IMF_INTERNAL_NAMESPACE::IStream *is, int version, - int numThreads); - - void initialize (); - void multiPartInitialize(InputPartData* part); - void compatibilityInitialize(OPENEXR_IMF_INTERNAL_NAMESPACE::IStream& is); - - bool isValidTile (int dx, int dy, - int lx, int ly) const; - - size_t bytesPerLineForTile (int dx, int dy, - int lx, int ly) const; - - - void getTileOrder(int dx[],int dy[],int lx[],int ly[]) const; - - - Data * _data; - - - // needed for copyPixels - friend void DeepTiledOutputFile::copyPixels(DeepTiledInputFile &); -}; - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT - -#endif diff --git a/3rdparty/openexr/IlmImf/ImfDeepTiledInputPart.cpp b/3rdparty/openexr/IlmImf/ImfDeepTiledInputPart.cpp deleted file mode 100644 index 0f0c012a06..0000000000 --- a/3rdparty/openexr/IlmImf/ImfDeepTiledInputPart.cpp +++ /dev/null @@ -1,273 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2011, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - -#include "ImfDeepTiledInputPart.h" -#include "ImfMultiPartInputFile.h" -#include "ImfNamespace.h" - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_ENTER - -DeepTiledInputPart::DeepTiledInputPart(MultiPartInputFile& multiPartFile, int partNumber) -{ - file = multiPartFile.getInputPart(partNumber); -} - - -const char * -DeepTiledInputPart::fileName () const -{ - return file->fileName(); -} - - -const Header & -DeepTiledInputPart::header () const -{ - return file->header(); -} - - -int -DeepTiledInputPart::version () const -{ - return file->version(); -} - - -void -DeepTiledInputPart::setFrameBuffer (const DeepFrameBuffer &frameBuffer) -{ - file->setFrameBuffer(frameBuffer); -} - - -const DeepFrameBuffer & -DeepTiledInputPart::frameBuffer () const -{ - return file->frameBuffer(); -} - - -bool -DeepTiledInputPart::isComplete () const -{ - return file->isComplete(); -} - - -unsigned int -DeepTiledInputPart::tileXSize () const -{ - return file->tileXSize(); -} - - -unsigned int -DeepTiledInputPart::tileYSize () const -{ - return file->tileYSize(); -} - - -LevelMode -DeepTiledInputPart::levelMode () const -{ - return file->levelMode(); -} - - -LevelRoundingMode -DeepTiledInputPart::levelRoundingMode () const -{ - return file->levelRoundingMode(); -} - - -int -DeepTiledInputPart::numLevels () const -{ - return file->numLevels(); -} - - -int -DeepTiledInputPart::numXLevels () const -{ - return file->numXLevels(); -} - - -int -DeepTiledInputPart::numYLevels () const -{ - return file->numYLevels(); -} - - -bool -DeepTiledInputPart::isValidLevel (int lx, int ly) const -{ - return file->isValidLevel(lx, ly); -} - - -int -DeepTiledInputPart::levelWidth (int lx) const -{ - return file->levelWidth(lx); -} - - -int -DeepTiledInputPart::levelHeight (int ly) const -{ - return file->levelHeight(ly); -} - - -int -DeepTiledInputPart::numXTiles (int lx) const -{ - return file->numXTiles(lx); -} - - -int -DeepTiledInputPart::numYTiles (int ly) const -{ - return file->numYTiles(ly); -} - - -IMATH_NAMESPACE::Box2i -DeepTiledInputPart::dataWindowForLevel (int l) const -{ - return file->dataWindowForLevel(l); -} - -IMATH_NAMESPACE::Box2i -DeepTiledInputPart::dataWindowForLevel (int lx, int ly) const -{ - return file->dataWindowForLevel(lx, ly); -} - - -IMATH_NAMESPACE::Box2i -DeepTiledInputPart::dataWindowForTile (int dx, int dy, int l) const -{ - return file->dataWindowForTile(dx, dy, l); -} - - -IMATH_NAMESPACE::Box2i -DeepTiledInputPart::dataWindowForTile (int dx, int dy, - int lx, int ly) const -{ - return file->dataWindowForTile(dx, dy, lx, ly); -} - - -void -DeepTiledInputPart::readTile (int dx, int dy, int l) -{ - file->readTile(dx, dy, l); -} - - -void -DeepTiledInputPart::readTile (int dx, int dy, int lx, int ly) -{ - file->readTile(dx, dy, lx, ly); -} - - -void -DeepTiledInputPart::readTiles (int dx1, int dx2, int dy1, int dy2, - int lx, int ly) -{ - file->readTiles(dx1, dx2, dy1, dy2, lx, ly); -} - - -void -DeepTiledInputPart::readTiles (int dx1, int dx2, int dy1, int dy2, - int l) -{ - file->readTiles(dx1, dx2, dy1, dy2, l); -} - - -void -DeepTiledInputPart::rawTileData (int &dx, int &dy, - int &lx, int &ly, - char * pixelData, - Int64 & dataSize) const -{ - file->rawTileData(dx, dy, lx, ly, pixelData, dataSize ); -} - - -void -DeepTiledInputPart::readPixelSampleCount (int dx, int dy, int l) -{ - file->readPixelSampleCount(dx, dy, l); -} - - -void -DeepTiledInputPart::readPixelSampleCount (int dx, int dy, int lx, int ly) -{ - file->readPixelSampleCount(dx, dy, lx, ly); -} - - -void -DeepTiledInputPart::readPixelSampleCounts (int dx1, int dx2, - int dy1, int dy2, - int lx, int ly) -{ - file->readPixelSampleCounts(dx1, dx2, dy1, dy2, lx, ly); -} - -void -DeepTiledInputPart::readPixelSampleCounts (int dx1, int dx2, - int dy1, int dy2, - int l) -{ - file->readPixelSampleCounts(dx1, dx2, dy1, dy2, l); -} - - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_EXIT diff --git a/3rdparty/openexr/IlmImf/ImfDeepTiledInputPart.h b/3rdparty/openexr/IlmImf/ImfDeepTiledInputPart.h deleted file mode 100644 index 0e665c2316..0000000000 --- a/3rdparty/openexr/IlmImf/ImfDeepTiledInputPart.h +++ /dev/null @@ -1,394 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2011, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - -#ifndef IMFDEEPTILEDINPUTPART_H_ -#define IMFDEEPTILEDINPUTPART_H_ - -#include "ImfDeepTiledInputFile.h" -#include "ImfNamespace.h" -#include "ImfForward.h" -#include "ImfExport.h" - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER - -class DeepTiledInputPart -{ - public: - - IMF_EXPORT - DeepTiledInputPart(MultiPartInputFile& multiPartFile, int partNumber); - - //------------------------ - // Access to the file name - //------------------------ - - IMF_EXPORT - const char * fileName () const; - - - //-------------------------- - // Access to the file header - //-------------------------- - - IMF_EXPORT - const Header & header () const; - - - //---------------------------------- - // Access to the file format version - //---------------------------------- - - IMF_EXPORT - int version () const; - - - //----------------------------------------------------------- - // Set the current frame buffer -- copies the FrameBuffer - // object into the TiledInputFile object. - // - // The current frame buffer is the destination for the pixel - // data read from the file. The current frame buffer must be - // set at least once before readTile() is called. - // The current frame buffer can be changed after each call - // to readTile(). - //----------------------------------------------------------- - - IMF_EXPORT - void setFrameBuffer (const DeepFrameBuffer &frameBuffer); - - - //----------------------------------- - // Access to the current frame buffer - //----------------------------------- - - IMF_EXPORT - const DeepFrameBuffer & frameBuffer () const; - - - //------------------------------------------------------------ - // Check if the file is complete: - // - // isComplete() returns true if all pixels in the data window - // (in all levels) are present in the input file, or false if - // any pixels are missing. (Another program may still be busy - // writing the file, or file writing may have been aborted - // prematurely.) - //------------------------------------------------------------ - - IMF_EXPORT - bool isComplete () const; - - - //-------------------------------------------------- - // Utility functions: - //-------------------------------------------------- - - //--------------------------------------------------------- - // Multiresolution mode and tile size: - // The following functions return the xSize, ySize and mode - // fields of the file header's TileDescriptionAttribute. - //--------------------------------------------------------- - - IMF_EXPORT - unsigned int tileXSize () const; - IMF_EXPORT - unsigned int tileYSize () const; - IMF_EXPORT - LevelMode levelMode () const; - IMF_EXPORT - LevelRoundingMode levelRoundingMode () const; - - - //-------------------------------------------------------------------- - // Number of levels: - // - // numXLevels() returns the file's number of levels in x direction. - // - // if levelMode() == ONE_LEVEL: - // return value is: 1 - // - // if levelMode() == MIPMAP_LEVELS: - // return value is: rfunc (log (max (w, h)) / log (2)) + 1 - // - // if levelMode() == RIPMAP_LEVELS: - // return value is: rfunc (log (w) / log (2)) + 1 - // - // where - // w is the width of the image's data window, max.x - min.x + 1, - // y is the height of the image's data window, max.y - min.y + 1, - // and rfunc(x) is either floor(x), or ceil(x), depending on - // whether levelRoundingMode() returns ROUND_DOWN or ROUND_UP. - // - // numYLevels() returns the file's number of levels in y direction. - // - // if levelMode() == ONE_LEVEL or levelMode() == MIPMAP_LEVELS: - // return value is the same as for numXLevels() - // - // if levelMode() == RIPMAP_LEVELS: - // return value is: rfunc (log (h) / log (2)) + 1 - // - // - // numLevels() is a convenience function for use with - // MIPMAP_LEVELS files. - // - // if levelMode() == ONE_LEVEL or levelMode() == MIPMAP_LEVELS: - // return value is the same as for numXLevels() - // - // if levelMode() == RIPMAP_LEVELS: - // an IEX_NAMESPACE::LogicExc exception is thrown - // - // isValidLevel(lx, ly) returns true if the file contains - // a level with level number (lx, ly), false if not. - // - //-------------------------------------------------------------------- - - IMF_EXPORT - int numLevels () const; - IMF_EXPORT - int numXLevels () const; - IMF_EXPORT - int numYLevels () const; - IMF_EXPORT - bool isValidLevel (int lx, int ly) const; - - - //---------------------------------------------------------- - // Dimensions of a level: - // - // levelWidth(lx) returns the width of a level with level - // number (lx, *), where * is any number. - // - // return value is: - // max (1, rfunc (w / pow (2, lx))) - // - // - // levelHeight(ly) returns the height of a level with level - // number (*, ly), where * is any number. - // - // return value is: - // max (1, rfunc (h / pow (2, ly))) - // - //---------------------------------------------------------- - - IMF_EXPORT - int levelWidth (int lx) const; - IMF_EXPORT - int levelHeight (int ly) const; - - - //-------------------------------------------------------------- - // Number of tiles: - // - // numXTiles(lx) returns the number of tiles in x direction - // that cover a level with level number (lx, *), where * is - // any number. - // - // return value is: - // (levelWidth(lx) + tileXSize() - 1) / tileXSize() - // - // - // numYTiles(ly) returns the number of tiles in y direction - // that cover a level with level number (*, ly), where * is - // any number. - // - // return value is: - // (levelHeight(ly) + tileXSize() - 1) / tileXSize() - // - //-------------------------------------------------------------- - - IMF_EXPORT - int numXTiles (int lx = 0) const; - IMF_EXPORT - int numYTiles (int ly = 0) const; - - - //--------------------------------------------------------------- - // Level pixel ranges: - // - // dataWindowForLevel(lx, ly) returns a 2-dimensional region of - // valid pixel coordinates for a level with level number (lx, ly) - // - // return value is a Box2i with min value: - // (dataWindow.min.x, dataWindow.min.y) - // - // and max value: - // (dataWindow.min.x + levelWidth(lx) - 1, - // dataWindow.min.y + levelHeight(ly) - 1) - // - // dataWindowForLevel(level) is a convenience function used - // for ONE_LEVEL and MIPMAP_LEVELS files. It returns - // dataWindowForLevel(level, level). - // - //--------------------------------------------------------------- - - IMF_EXPORT - IMATH_NAMESPACE::Box2i dataWindowForLevel (int l = 0) const; - IMF_EXPORT - IMATH_NAMESPACE::Box2i dataWindowForLevel (int lx, int ly) const; - - - //------------------------------------------------------------------- - // Tile pixel ranges: - // - // dataWindowForTile(dx, dy, lx, ly) returns a 2-dimensional - // region of valid pixel coordinates for a tile with tile coordinates - // (dx,dy) and level number (lx, ly). - // - // return value is a Box2i with min value: - // (dataWindow.min.x + dx * tileXSize(), - // dataWindow.min.y + dy * tileYSize()) - // - // and max value: - // (dataWindow.min.x + (dx + 1) * tileXSize() - 1, - // dataWindow.min.y + (dy + 1) * tileYSize() - 1) - // - // dataWindowForTile(dx, dy, level) is a convenience function - // used for ONE_LEVEL and MIPMAP_LEVELS files. It returns - // dataWindowForTile(dx, dy, level, level). - // - //------------------------------------------------------------------- - - IMF_EXPORT - IMATH_NAMESPACE::Box2i dataWindowForTile (int dx, int dy, int l = 0) const; - - IMF_EXPORT - IMATH_NAMESPACE::Box2i dataWindowForTile (int dx, int dy, - int lx, int ly) const; - - //------------------------------------------------------------ - // Read pixel data: - // - // readTile(dx, dy, lx, ly) reads the tile with tile - // coordinates (dx, dy), and level number (lx, ly), - // and stores it in the current frame buffer. - // - // dx must lie in the interval [0, numXTiles(lx)-1] - // dy must lie in the interval [0, numYTiles(ly)-1] - // - // lx must lie in the interval [0, numXLevels()-1] - // ly must lie in the inverval [0, numYLevels()-1] - // - // readTile(dx, dy, level) is a convenience function used - // for ONE_LEVEL and MIPMAP_LEVELS files. It calls - // readTile(dx, dy, level, level). - // - // The two readTiles(dx1, dx2, dy1, dy2, ...) functions allow - // reading multiple tiles at once. If multi-threading is used - // the multiple tiles are read concurrently. - // - // Pixels that are outside the pixel coordinate range for the - // tile's level, are never accessed by readTile(). - // - // Attempting to access a tile that is not present in the file - // throws an InputExc exception. - // - //------------------------------------------------------------ - - IMF_EXPORT - void readTile (int dx, int dy, int l = 0); - IMF_EXPORT - void readTile (int dx, int dy, int lx, int ly); - - IMF_EXPORT - void readTiles (int dx1, int dx2, int dy1, int dy2, - int lx, int ly); - - IMF_EXPORT - void readTiles (int dx1, int dx2, int dy1, int dy2, - int l = 0); - - - //-------------------------------------------------- - // Read a tile of raw pixel data from the file, - // without uncompressing it (this function is - // used to implement TiledOutputFile::copyPixels()). - //-------------------------------------------------- - - IMF_EXPORT - void rawTileData (int &dx, int &dy, - int &lx, int &ly, - char *data, - Int64 &dataSize - ) const; - - //------------------------------------------------------------------ - // Read pixel sample counts into a slice in the frame buffer. - // - // readPixelSampleCount(dx, dy, lx, ly) reads the sample counts - // for tile (dx, dy) in level (lx, ly). - // - // readPixelSampleCount(dx, dy, l) calls - // readPixelSampleCount(dx, dy, lx = l, ly = l) - // - // dx must lie in the interval [0, numXTiles(lx)-1] - // dy must lie in the interval [0, numYTiles(ly)-1] - // - // lx must lie in the interval [0, numXLevels()-1] - // ly must lie in the inverval [0, numYLevels()-1] - // - // readPixelSampleCounts(dx1, dx2, dy1, dy2, lx, ly) reads all - // the sample counts for tiles within range - // [(min(dx1, dx2), min(dy1, dy2))...(max(dx1, dx2), max(dy1, dy2)], - // and on level (lx, ly) - // - // readPixelSampleCounts(dx1, dx2, dy1, dy2, l) calls - // readPixelSampleCounts(dx1, dx2, dy1, dy2, lx = l, ly = l). - //------------------------------------------------------------------ - - IMF_EXPORT - void readPixelSampleCount (int dx, int dy, int l = 0); - IMF_EXPORT - void readPixelSampleCount (int dx, int dy, int lx, int ly); - - IMF_EXPORT - void readPixelSampleCounts (int dx1, int dx2, - int dy1, int dy2, - int lx, int ly); - - IMF_EXPORT - void readPixelSampleCounts (int dx1, int dx2, - int dy1, int dy2, - int l = 0); - - private: - DeepTiledInputFile* file; - - friend void DeepTiledOutputFile::copyPixels(DeepTiledInputPart &); -}; - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT - - -#endif /* IMFDEEPTILEDINPUTPART_H_ */ diff --git a/3rdparty/openexr/IlmImf/ImfDeepTiledOutputFile.cpp b/3rdparty/openexr/IlmImf/ImfDeepTiledOutputFile.cpp deleted file mode 100644 index ef79135a42..0000000000 --- a/3rdparty/openexr/IlmImf/ImfDeepTiledOutputFile.cpp +++ /dev/null @@ -1,2055 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2011, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - -//----------------------------------------------------------------------------- -// -// class DeepTiledOutputFile -// -//----------------------------------------------------------------------------- - -#include "ImfDeepTiledOutputFile.h" -#include "ImfDeepTiledInputFile.h" -#include "ImfDeepTiledInputPart.h" -#include "ImfInputFile.h" -#include "ImfTileDescriptionAttribute.h" -#include "ImfPreviewImageAttribute.h" -#include "ImfChannelList.h" -#include "ImfMisc.h" -#include "ImfTiledMisc.h" -#include "ImfStdIO.h" -#include "ImfCompressor.h" -#include "ImfOutputStreamMutex.h" -#include "ImfOutputPartData.h" -#include "ImfArray.h" -#include "ImfXdr.h" -#include "ImfVersion.h" -#include "ImfTileOffsets.h" -#include "ImfThreading.h" -#include "ImfPartType.h" - -#include "ImathBox.h" - -#include "IlmThreadPool.h" -#include "IlmThreadSemaphore.h" -#include "IlmThreadMutex.h" - -#include "Iex.h" - -#include -#include -#include -#include -#include -#include - -#include "ImfNamespace.h" - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_ENTER - -using IMATH_NAMESPACE::Box2i; -using IMATH_NAMESPACE::V2i; -using std::string; -using std::vector; -using std::ofstream; -using std::map; -using std::min; -using std::max; -using std::swap; -using ILMTHREAD_NAMESPACE::Mutex; -using ILMTHREAD_NAMESPACE::Lock; -using ILMTHREAD_NAMESPACE::Semaphore; -using ILMTHREAD_NAMESPACE::Task; -using ILMTHREAD_NAMESPACE::TaskGroup; -using ILMTHREAD_NAMESPACE::ThreadPool; - -namespace { - -struct TOutSliceInfo -{ - PixelType type; - const char * base; - size_t sampleStride; - size_t xStride; - size_t yStride; - bool zero; - int xTileCoords; - int yTileCoords; - - TOutSliceInfo (PixelType type = HALF, - size_t sampleStride = 0, - size_t xStride = 0, - size_t yStride = 0, - bool zero = false, - int xTileCoords = 0, - int yTileCoords = 0); -}; - - -TOutSliceInfo::TOutSliceInfo (PixelType t, - size_t spst, - size_t xStride, - size_t yStride, - bool z, - int xtc, - int ytc) -: - type (t), - sampleStride (spst), - xStride(xStride), - yStride(yStride), - zero (z), - xTileCoords (xtc), - yTileCoords (ytc) -{ - // empty -} - - -struct TileCoord -{ - int dx; - int dy; - int lx; - int ly; - - - TileCoord (int xTile = 0, int yTile = 0, - int xLevel = 0, int yLevel = 0) - : - dx (xTile), dy (yTile), - lx (xLevel), ly (yLevel) - { - // empty - } - - - bool - operator < (const TileCoord &other) const - { - return (ly < other.ly) || - (ly == other.ly && lx < other.lx) || - ((ly == other.ly && lx == other.lx) && - ((dy < other.dy) || (dy == other.dy && dx < other.dx))); - } - - - bool - operator == (const TileCoord &other) const - { - return lx == other.lx && - ly == other.ly && - dx == other.dx && - dy == other.dy; - } -}; - - -struct BufferedTile -{ - char * pixelData; - Int64 pixelDataSize; - Int64 unpackedDataSize; - char * sampleCountTableData; - Int64 sampleCountTableSize; - - BufferedTile (const char *data, int size, int unpackedSize, - const char *tableData, int tableSize): - pixelData (0), - pixelDataSize(size), - unpackedDataSize(unpackedSize), - sampleCountTableData(0), - sampleCountTableSize(tableSize) - { - pixelData = new char[pixelDataSize]; - memcpy (pixelData, data, pixelDataSize); - - sampleCountTableData = new char[tableSize]; - memcpy (sampleCountTableData, tableData, tableSize); - } - - ~BufferedTile() - { - delete [] pixelData; - delete [] sampleCountTableData; - } -}; - - -typedef map TileMap; - - -struct TileBuffer -{ - Array buffer; - const char * dataPtr; - Int64 dataSize; - Int64 uncompressedSize; - Compressor * compressor; - Array sampleCountTableBuffer; - const char * sampleCountTablePtr; - Int64 sampleCountTableSize; - Compressor* sampleCountTableCompressor; - TileCoord tileCoord; - bool hasException; - string exception; - - TileBuffer (); - ~TileBuffer (); - - inline void wait () {_sem.wait();} - inline void post () {_sem.post();} - - protected: - - Semaphore _sem; -}; - - -TileBuffer::TileBuffer (): - dataPtr (0), - dataSize (0), - compressor (0), - sampleCountTablePtr (0), - sampleCountTableCompressor (0), - hasException (false), - exception (), - _sem (1) -{ - // empty -} - - -TileBuffer::~TileBuffer () -{ - if (compressor != 0) - delete compressor; - - if (sampleCountTableCompressor != 0) - delete sampleCountTableCompressor; -} - - -} // namespace - - -struct DeepTiledOutputFile::Data -{ - Header header; // the image header - int version; // file format version - bool multipart; // file is multipart - TileDescription tileDesc; // describes the tile layout - DeepFrameBuffer frameBuffer; // framebuffer to write into - Int64 previewPosition; - LineOrder lineOrder; // the file's lineorder - int minX; // data window's min x coord - int maxX; // data window's max x coord - int minY; // data window's min y coord - int maxY; // data window's max x coord - - int numXLevels; // number of x levels - int numYLevels; // number of y levels - int * numXTiles; // number of x tiles at a level - int * numYTiles; // number of y tiles at a level - - TileOffsets tileOffsets; // stores offsets in file for - // each tile - - Compressor::Format format; // compressor's data format - vector slices; // info about channels in file - - vector tileBuffers; - - Int64 tileOffsetsPosition; // position of the tile index - - TileMap tileMap; // the map of buffered tiles - TileCoord nextTileToWrite; - - int partNumber; // the output part number - - char* sampleCountSliceBase; // the pointer to the number - // of samples in each pixel - int sampleCountXStride; // the x stride for sampleCountSliceBase - int sampleCountYStride; // the y stride for sampleCountSliceBase - int sampleCountXTileCoords; // using x coordinates relative to current tile - int sampleCountYTileCoords; // using y coordinates relative to current tile - - Int64 maxSampleCountTableSize;// the max size in bytes for a pixel - // sample count table - OutputStreamMutex* _streamData; - bool _deleteStream; - - Data (int numThreads); - ~Data (); - - inline TileBuffer * getTileBuffer (int number); - // hash function from tile - // buffer coords into our - // vector of tile buffers - - int& getSampleCount(int x, int y); - // get the number of samples - // in each pixel - - TileCoord nextTileCoord (const TileCoord &a); -}; - - -DeepTiledOutputFile::Data::Data (int numThreads): - numXTiles(0), - numYTiles(0), - tileOffsetsPosition (0), - partNumber(-1), - _streamData(NULL), - _deleteStream(true) -{ - // - // We need at least one tileBuffer, but if threading is used, - // to keep n threads busy we need 2*n tileBuffers - // - - tileBuffers.resize (max (1, 2 * numThreads)); - for (size_t i = 0; i < tileBuffers.size(); i++) - tileBuffers[i] = 0; -} - - -DeepTiledOutputFile::Data::~Data () -{ - delete [] numXTiles; - delete [] numYTiles; - - // - // Delete all the tile buffers, if any still happen to exist - // - - for (TileMap::iterator i = tileMap.begin(); i != tileMap.end(); ++i) - delete i->second; - - for (size_t i = 0; i < tileBuffers.size(); i++) - if (tileBuffers[i] != 0) - delete tileBuffers[i]; - - for (size_t i = 0; i < slices.size(); i++) - delete slices[i]; -} - - -int& -DeepTiledOutputFile::Data::getSampleCount(int x, int y) -{ - return sampleCount(sampleCountSliceBase, - sampleCountXStride, - sampleCountYStride, - x, y); -} - - -TileBuffer* -DeepTiledOutputFile::Data::getTileBuffer (int number) -{ - return tileBuffers[number % tileBuffers.size()]; -} - - -TileCoord -DeepTiledOutputFile::Data::nextTileCoord (const TileCoord &a) -{ - TileCoord b = a; - - if (lineOrder == INCREASING_Y) - { - b.dx++; - - if (b.dx >= numXTiles[b.lx]) - { - b.dx = 0; - b.dy++; - - if (b.dy >= numYTiles[b.ly]) - { - // - // the next tile is in the next level - // - - b.dy = 0; - - switch (tileDesc.mode) - { - case ONE_LEVEL: - case MIPMAP_LEVELS: - - b.lx++; - b.ly++; - break; - - case RIPMAP_LEVELS: - - b.lx++; - - if (b.lx >= numXLevels) - { - b.lx = 0; - b.ly++; - - #ifdef DEBUG - assert (b.ly <= numYLevels); - #endif - } - break; - case NUM_LEVELMODES : - throw IEX_NAMESPACE::LogicExc("unknown level mode computing nextTileCoord"); - } - } - } - } - else if (lineOrder == DECREASING_Y) - { - b.dx++; - - if (b.dx >= numXTiles[b.lx]) - { - b.dx = 0; - b.dy--; - - if (b.dy < 0) - { - // - // the next tile is in the next level - // - - switch (tileDesc.mode) - { - case ONE_LEVEL: - case MIPMAP_LEVELS: - - b.lx++; - b.ly++; - break; - - case RIPMAP_LEVELS: - - b.lx++; - - if (b.lx >= numXLevels) - { - b.lx = 0; - b.ly++; - - #ifdef DEBUG - assert (b.ly <= numYLevels); - #endif - } - break; - case NUM_LEVELMODES : - throw IEX_NAMESPACE::LogicExc("unknown level mode computing nextTileCoord"); - } - - if (b.ly < numYLevels) - b.dy = numYTiles[b.ly] - 1; - } - } - }else if(lineOrder==RANDOM_Y) - { - THROW (IEX_NAMESPACE::ArgExc, - "can't compute next tile from randomly ordered image: use getTilesInOrder instead"); - - } - - return b; -} - - -namespace { - -void -writeTileData (DeepTiledOutputFile::Data *ofd, - int dx, int dy, - int lx, int ly, - const char pixelData[], - Int64 pixelDataSize, - Int64 unpackedDataSize, - const char sampleCountTableData[], - Int64 sampleCountTableSize) -{ - - // - // Store a block of pixel data in the output file, and try - // to keep track of the current writing position the file, - // without calling tellp() (tellp() can be fairly expensive). - // - - Int64 currentPosition = ofd->_streamData->currentPosition; - ofd->_streamData->currentPosition = 0; - - if (currentPosition == 0) - currentPosition = ofd->_streamData->os->tellp(); - - ofd->tileOffsets (dx, dy, lx, ly) = currentPosition; - - #ifdef DEBUG - assert (ofd->_streamData->os->tellp() == currentPosition); - #endif - - // - // Write the tile header. - // - - if (ofd->multipart) - { - Xdr::write (*ofd->_streamData->os, ofd->partNumber); - } - Xdr::write (*ofd->_streamData->os, dx); - Xdr::write (*ofd->_streamData->os, dy); - Xdr::write (*ofd->_streamData->os, lx); - Xdr::write (*ofd->_streamData->os, ly); - - // - // Write the packed size of the pixel sample count table (64 bits) - // - - Xdr::write (*ofd->_streamData->os, sampleCountTableSize); - - // - // Write the packed and unpacked data size (64 bits each) - // - - Xdr::write (*ofd->_streamData->os, pixelDataSize); - Xdr::write (*ofd->_streamData->os, unpackedDataSize); - - // - // Write the compressed pixel sample count table. - // - - ofd->_streamData->os->write (sampleCountTableData, sampleCountTableSize); - - // - // Write the compressed data. - // - - ofd->_streamData->os->write (pixelData, pixelDataSize); - - // - // Keep current position in the file so that we can avoid - // redundant seekg() operations (seekg() can be fairly expensive). - // - - ofd->_streamData->currentPosition = currentPosition + - 4 * Xdr::size() + // dx, dy, lx, ly, - 3 * Xdr::size() + // sampleCountTableSize, - // pixelDataSize, - // unpackedDataSize - sampleCountTableSize + - pixelDataSize; - - if (ofd->multipart) - { - ofd->_streamData->currentPosition += Xdr::size(); - } -} - - - -void -bufferedTileWrite ( - DeepTiledOutputFile::Data *ofd, - int dx, int dy, - int lx, int ly, - const char pixelData[], - Int64 pixelDataSize, - Int64 unpackedDataSize, - const char sampleCountTableData[], - Int64 sampleCountTableSize) -{ - // - // Check if a tile with coordinates (dx,dy,lx,ly) has already been written. - // - - if (ofd->tileOffsets (dx, dy, lx, ly)) - { - THROW (IEX_NAMESPACE::ArgExc, - "Attempt to write tile " - "(" << dx << ", " << dy << ", " << lx << ", " << ly << ") " - "more than once."); - } - - // - // If tiles can be written in random order, then don't buffer anything. - // - - if (ofd->lineOrder == RANDOM_Y) - { - writeTileData (ofd, dx, dy, lx, ly, - pixelData, pixelDataSize, unpackedDataSize, - sampleCountTableData, sampleCountTableSize); - return; - } - - // - // If the tiles cannot be written in random order, then check if a - // tile with coordinates (dx,dy,lx,ly) has already been buffered. - // - - TileCoord currentTile = TileCoord(dx, dy, lx, ly); - - if (ofd->tileMap.find (currentTile) != ofd->tileMap.end()) - { - THROW (IEX_NAMESPACE::ArgExc, - "Attempt to write tile " - "(" << dx << ", " << dy << ", " << lx << ", " << ly << ") " - "more than once."); - } - - // - // If all the tiles before this one have already been written to the file, - // then write this tile immediately and check if we have buffered tiles - // that can be written after this tile. - // - // Otherwise, buffer the tile so it can be written to file later. - // - - if (ofd->nextTileToWrite == currentTile) - { - writeTileData (ofd, dx, dy, lx, ly, - pixelData, pixelDataSize, unpackedDataSize, - sampleCountTableData, sampleCountTableSize); - ofd->nextTileToWrite = ofd->nextTileCoord (ofd->nextTileToWrite); - - TileMap::iterator i = ofd->tileMap.find (ofd->nextTileToWrite); - - // - // Step through the tiles and write all successive buffered tiles after - // the current one. - // - - while(i != ofd->tileMap.end()) - { - // - // Write the tile, and then delete the tile's buffered data - // - - writeTileData (ofd, - i->first.dx, i->first.dy, - i->first.lx, i->first.ly, - i->second->pixelData, - i->second->pixelDataSize, - i->second->unpackedDataSize, - i->second->sampleCountTableData, - i->second->sampleCountTableSize); - - delete i->second; - ofd->tileMap.erase (i); - - // - // Proceed to the next tile - // - - ofd->nextTileToWrite = ofd->nextTileCoord (ofd->nextTileToWrite); - i = ofd->tileMap.find (ofd->nextTileToWrite); - } - } - else - { - // - // Create a new BufferedTile, copy the pixelData into it, and - // insert it into the tileMap. - // - - ofd->tileMap[currentTile] = - new BufferedTile ((const char *)pixelData, pixelDataSize, unpackedDataSize, - sampleCountTableData, sampleCountTableSize); - } -} - - -void -convertToXdr (DeepTiledOutputFile::Data *ofd, - Array& tileBuffer, - int numScanLines, - vector& bytesPerLine) -{ - // - // Convert the contents of a TiledOutputFile's tileBuffer from the - // machine's native representation to Xdr format. This function is called - // by writeTile(), below, if the compressor wanted its input pixel data - // in the machine's native format, but then failed to compress the data - // (most compressors will expand rather than compress random input data). - // - // Note that this routine assumes that the machine's native representation - // of the pixel data has the same size as the Xdr representation. This - // makes it possible to convert the pixel data in place, without an - // intermediate temporary buffer. - // - - // - // Set these to point to the start of the tile. - // We will write to toPtr, and read from fromPtr. - // - - char *writePtr = tileBuffer; - const char *readPtr = writePtr; - - // - // Iterate over all scan lines in the tile. - // - - for (int y = 0; y < numScanLines; ++y) - { - // - // Iterate over all slices in the file. - // - - for (unsigned int i = 0; i < ofd->slices.size(); ++i) - { - const TOutSliceInfo &slice = *ofd->slices[i]; - - // - // Convert the samples in place. - // - - Int64 numPixelsPerScanLine = bytesPerLine[y]; - - convertInPlace (writePtr, readPtr, slice.type, - numPixelsPerScanLine); - } - } - - #ifdef DEBUG - - assert (writePtr == readPtr); - - #endif -} - - -// -// A TileBufferTask encapsulates the task of copying a tile from -// the user's framebuffer into a LineBuffer and compressing the data -// if necessary. -// - -class TileBufferTask: public Task -{ - public: - - TileBufferTask (TaskGroup *group, - DeepTiledOutputFile::Data *ofd, - int number, - int dx, int dy, - int lx, int ly); - - virtual ~TileBufferTask (); - - virtual void execute (); - - private: - - DeepTiledOutputFile::Data * _ofd; - TileBuffer * _tileBuffer; -}; - - -TileBufferTask::TileBufferTask - (TaskGroup *group, - DeepTiledOutputFile::Data *ofd, - int number, - int dx, int dy, - int lx, int ly) -: - Task (group), - _ofd (ofd), - _tileBuffer (_ofd->getTileBuffer (number)) -{ - // - // Wait for the tileBuffer to become available - // - - _tileBuffer->wait (); - _tileBuffer->tileCoord = TileCoord (dx, dy, lx, ly); -} - - -TileBufferTask::~TileBufferTask () -{ - // - // Signal that the tile buffer is now free - // - - _tileBuffer->post (); -} - - -void -TileBufferTask::execute () -{ - try - { - // - // First copy the pixel data from the frame buffer - // into the tile buffer - // - // Convert one tile's worth of pixel data to - // a machine-independent representation, and store - // the result in _tileBuffer->buffer. - // - - Box2i tileRange = OPENEXR_IMF_INTERNAL_NAMESPACE::dataWindowForTile ( - _ofd->tileDesc, - _ofd->minX, _ofd->maxX, - _ofd->minY, _ofd->maxY, - _tileBuffer->tileCoord.dx, - _tileBuffer->tileCoord.dy, - _tileBuffer->tileCoord.lx, - _tileBuffer->tileCoord.ly); - - int numScanLines = tileRange.max.y - tileRange.min.y + 1; -// int numPixelsPerScanLine = tileRange.max.x - tileRange.min.x + 1; - - // - // Get the bytes for each line. - // - - vector bytesPerLine(_ofd->tileDesc.ySize); - vector xOffsets(_ofd->slices.size()); - vector yOffsets(_ofd->slices.size()); - for (size_t i = 0; i < _ofd->slices.size(); i++) - { - const TOutSliceInfo &slice = *_ofd->slices[i]; - xOffsets[i] = slice.xTileCoords * tileRange.min.x; - yOffsets[i] = slice.yTileCoords * tileRange.min.y; - } - - calculateBytesPerLine(_ofd->header, - _ofd->sampleCountSliceBase, - _ofd->sampleCountXStride, - _ofd->sampleCountYStride, - tileRange.min.x, tileRange.max.x, - tileRange.min.y, tileRange.max.y, - xOffsets, yOffsets, - bytesPerLine); - - // - // Allocate the memory for internal buffer. - // (TODO) more efficient memory management? - // - - Int64 totalBytes = 0; - Int64 maxBytesPerTileLine = 0; - for (size_t i = 0; i < bytesPerLine.size(); i++) - { - totalBytes += bytesPerLine[i]; - if (bytesPerLine[i] > maxBytesPerTileLine) - maxBytesPerTileLine = bytesPerLine[i]; - } - _tileBuffer->buffer.resizeErase(totalBytes); - - char *writePtr = _tileBuffer->buffer; - - // - // Iterate over the scan lines in the tile. - // - - int xOffsetForSampleCount = - (_ofd->sampleCountXTileCoords == 0) ? 0 : tileRange.min.x; - int yOffsetForSampleCount = - (_ofd->sampleCountYTileCoords == 0) ? 0 : tileRange.min.y; - - for (int y = tileRange.min.y; y <= tileRange.max.y; ++y) - { - // - // Iterate over all image channels. - // - - for (unsigned int i = 0; i < _ofd->slices.size(); ++i) - { - const TOutSliceInfo &slice = *_ofd->slices[i]; - - - // - // Fill the tile buffer with pixel data. - // - - if (slice.zero) - { - // - // The frame buffer contains no data for this channel. - // Store zeroes in _data->tileBuffer. - // - - fillChannelWithZeroes (writePtr, _ofd->format, slice.type, - bytesPerLine[y - tileRange.min.y]); - } - else - { - // - // The frame buffer contains data for this channel. - // - - - int xOffsetForData = slice.xTileCoords ? tileRange.min.x : 0; - int yOffsetForData = slice.yTileCoords ? tileRange.min.y : 0; - - // (TOOD) treat sample count offsets differently. - copyFromDeepFrameBuffer (writePtr, - slice.base, - _ofd->sampleCountSliceBase, - _ofd->sampleCountXStride, - _ofd->sampleCountYStride, - y, - tileRange.min.x, - tileRange.max.x, - xOffsetForSampleCount, - yOffsetForSampleCount, - xOffsetForData, - yOffsetForData, - slice.sampleStride, - slice.xStride, - slice.yStride, - _ofd->format, - slice.type); -#if defined(DEBUG) - assert(writePtr-_tileBuffer->buffer<=totalBytes); -#endif - } - } - } - - // - // Compress the pixel sample count table. - // - - char* ptr = _tileBuffer->sampleCountTableBuffer; - Int64 tableDataSize = 0; - for (int i = tileRange.min.y; i <= tileRange.max.y; i++) - { - int count = 0; - for (int j = tileRange.min.x; j <= tileRange.max.x; j++) - { - count += _ofd->getSampleCount(j - xOffsetForSampleCount, - i - yOffsetForSampleCount); - Xdr::write (ptr, count); - tableDataSize += sizeof (int); - } - } - - if(_tileBuffer->sampleCountTableCompressor) - { - _tileBuffer->sampleCountTableSize = - _tileBuffer->sampleCountTableCompressor->compress ( - _tileBuffer->sampleCountTableBuffer, - tableDataSize, - tileRange.min.y, - _tileBuffer->sampleCountTablePtr); - } - - // - // If we can't make data shrink (or compression was disabled), then just use the raw data. - // - - if ( ! _tileBuffer->sampleCountTableCompressor || - _tileBuffer->sampleCountTableSize >= _ofd->maxSampleCountTableSize) - { - _tileBuffer->sampleCountTableSize = _ofd->maxSampleCountTableSize; - _tileBuffer->sampleCountTablePtr = _tileBuffer->sampleCountTableBuffer; - } - - // - // Compress the contents of the tileBuffer, - // and store the compressed data in the output file. - // - - _tileBuffer->dataSize = writePtr - _tileBuffer->buffer; - _tileBuffer->uncompressedSize = _tileBuffer->dataSize; - _tileBuffer->dataPtr = _tileBuffer->buffer; - - // (TODO) don't do this all the time. - if (_tileBuffer->compressor != 0) - delete _tileBuffer->compressor; - _tileBuffer->compressor = newTileCompressor - (_ofd->header.compression(), - maxBytesPerTileLine, - _ofd->tileDesc.ySize, - _ofd->header); - - if (_tileBuffer->compressor) - { - const char *compPtr; - - Int64 compSize = _tileBuffer->compressor->compressTile - (_tileBuffer->dataPtr, - _tileBuffer->dataSize, - tileRange, compPtr); - - if (compSize < _tileBuffer->dataSize) - { - _tileBuffer->dataSize = compSize; - _tileBuffer->dataPtr = compPtr; - } - else if (_ofd->format == Compressor::NATIVE) - { - // - // The data did not shrink during compression, but - // we cannot write to the file using native format, - // so we need to convert the lineBuffer to Xdr. - // - - convertToXdr (_ofd, _tileBuffer->buffer, numScanLines, - bytesPerLine); - } - } - } - catch (std::exception &e) - { - if (!_tileBuffer->hasException) - { - _tileBuffer->exception = e.what (); - _tileBuffer->hasException = true; - } - } - catch (...) - { - if (!_tileBuffer->hasException) - { - _tileBuffer->exception = "unrecognized exception"; - _tileBuffer->hasException = true; - } - } -} - -} // namespace - - -DeepTiledOutputFile::DeepTiledOutputFile - (const char fileName[], - const Header &header, - int numThreads) -: - _data (new Data (numThreads)) - -{ - _data->_streamData=new OutputStreamMutex(); - _data->_deleteStream =true; - try - { - header.sanityCheck (true); - _data->_streamData->os = new StdOFStream (fileName); - initialize (header); - _data->_streamData->currentPosition = _data->_streamData->os->tellp(); - - // Write header and empty offset table to the file. - writeMagicNumberAndVersionField(*_data->_streamData->os, _data->header); - _data->previewPosition = _data->header.writeTo (*_data->_streamData->os, true); - _data->tileOffsetsPosition = _data->tileOffsets.writeTo (*_data->_streamData->os); - _data->multipart = false; - } - catch (IEX_NAMESPACE::BaseExc &e) - { - if (_data && _data->_streamData && _data->_streamData->os) delete _data->_streamData->os; - if (_data && _data->_streamData) delete _data->_streamData; - if (_data) delete _data; - - REPLACE_EXC (e, "Cannot open image file " - "\"" << fileName << "\". " << e.what()); - throw; - } - catch (...) - { - if (_data && _data->_streamData && _data->_streamData->os) delete _data->_streamData->os; - if (_data->_streamData) delete _data->_streamData; - if (_data) delete _data; - - throw; - } -} - - -DeepTiledOutputFile::DeepTiledOutputFile - (OPENEXR_IMF_INTERNAL_NAMESPACE::OStream &os, - const Header &header, - int numThreads) -: - _data (new Data (numThreads)) -{ - _data->_streamData=new OutputStreamMutex(); - _data->_deleteStream=false; - - try - { - header.sanityCheck(true); - _data->_streamData->os = &os; - initialize (header); - _data->_streamData->currentPosition = _data->_streamData->os->tellp(); - - // Write header and empty offset table to the file. - writeMagicNumberAndVersionField(*_data->_streamData->os, _data->header); - _data->previewPosition = _data->header.writeTo (*_data->_streamData->os, true); - _data->tileOffsetsPosition = _data->tileOffsets.writeTo (*_data->_streamData->os); - _data->multipart = false; - } - catch (IEX_NAMESPACE::BaseExc &e) - { - if (_data && _data->_streamData) delete _data->_streamData; - if (_data) delete _data; - - REPLACE_EXC (e, "Cannot open image file " - "\"" << os.fileName() << "\". " << e.what()); - throw; - } - catch (...) - { - if (_data && _data->_streamData) delete _data->_streamData; - if (_data) delete _data; - - throw; - } -} - -DeepTiledOutputFile::DeepTiledOutputFile(const OutputPartData* part) -{ - - try - { - if (part->header.type() != DEEPTILE) - throw IEX_NAMESPACE::ArgExc("Can't build a DeepTiledOutputFile from " - "a type-mismatched part."); - - _data = new Data (part->numThreads); - _data->_streamData=part->mutex; - _data->_deleteStream=false; - initialize(part->header); - _data->partNumber = part->partNumber; - _data->tileOffsetsPosition = part->chunkOffsetTablePosition; - _data->previewPosition = part->previewPosition; - _data->multipart = part->multipart; - } - catch (IEX_NAMESPACE::BaseExc &e) - { - if (_data) delete _data; - - REPLACE_EXC (e, "Cannot initialize output part " - "\"" << part->partNumber << "\". " << e.what()); - throw; - } - catch (...) - { - if (_data) delete _data; - - throw; - } -} - -void -DeepTiledOutputFile::initialize (const Header &header) -{ - _data->header = header; - _data->header.setType(DEEPTILE); - _data->lineOrder = _data->header.lineOrder(); - - // - // Check that the file is indeed tiled - // - - _data->tileDesc = _data->header.tileDescription(); - - // - // Save the dataWindow information - // - - const Box2i &dataWindow = _data->header.dataWindow(); - _data->minX = dataWindow.min.x; - _data->maxX = dataWindow.max.x; - _data->minY = dataWindow.min.y; - _data->maxY = dataWindow.max.y; - - // - // Precompute level and tile information to speed up utility functions - // - - precalculateTileInfo (_data->tileDesc, - _data->minX, _data->maxX, - _data->minY, _data->maxY, - _data->numXTiles, _data->numYTiles, - _data->numXLevels, _data->numYLevels); - - // - // Determine the first tile coordinate that we will be writing - // if the file is not RANDOM_Y. - // - - _data->nextTileToWrite = (_data->lineOrder == INCREASING_Y)? - TileCoord (0, 0, 0, 0): - TileCoord (0, _data->numYTiles[0] - 1, 0, 0); - - Compressor* compressor = newTileCompressor - (_data->header.compression(), - 0, - _data->tileDesc.ySize, - _data->header); - - _data->format = defaultFormat (compressor); - - if (compressor != 0) - delete compressor; - - _data->tileOffsets = TileOffsets (_data->tileDesc.mode, - _data->numXLevels, - _data->numYLevels, - _data->numXTiles, - _data->numYTiles); - - //ignore the existing value of chunkCount - correct it if it's wrong - _data->header.setChunkCount(getChunkOffsetTableSize(_data->header,true)); - - _data->maxSampleCountTableSize = _data->tileDesc.ySize * - _data->tileDesc.xSize * - sizeof(int); - - - for (size_t i = 0; i < _data->tileBuffers.size(); i++) - { - _data->tileBuffers[i] = new TileBuffer (); - - _data->tileBuffers[i]->sampleCountTableBuffer. - resizeErase(_data->maxSampleCountTableSize); - - char * p = &(_data->tileBuffers[i]->sampleCountTableBuffer[0]); - memset (p, 0, _data->maxSampleCountTableSize); - - _data->tileBuffers[i]->sampleCountTableCompressor = - newCompressor (_data->header.compression(), - _data->maxSampleCountTableSize, - _data->header); - } -} - - -DeepTiledOutputFile::~DeepTiledOutputFile () -{ - if (_data) - { - { - Lock lock(*_data->_streamData); - Int64 originalPosition = _data->_streamData->os->tellp(); - - if (_data->tileOffsetsPosition > 0) - { - try - { - _data->_streamData->os->seekp (_data->tileOffsetsPosition); - _data->tileOffsets.writeTo (*_data->_streamData->os); - - // - // Restore the original position. - // - _data->_streamData->os->seekp (originalPosition); - } - catch (...) - { - // - // We cannot safely throw any exceptions from here. - // This destructor may have been called because the - // stack is currently being unwound for another - // exception. - // - } - } - } - - if (_data->_deleteStream && _data->_streamData) - delete _data->_streamData->os; - - // - // (TODO) we should have a way to tell if the stream data is owned by - // this file or by a parent multipart file. - // - - if (_data->partNumber == -1 && _data->_streamData) - delete _data->_streamData; - - delete _data; - } -} - - -const char * -DeepTiledOutputFile::fileName () const -{ - return _data->_streamData->os->fileName(); -} - - -const Header & -DeepTiledOutputFile::header () const -{ - return _data->header; -} - - -void -DeepTiledOutputFile::setFrameBuffer (const DeepFrameBuffer &frameBuffer) -{ - Lock lock (*_data->_streamData); - - // - // Check if the new frame buffer descriptor - // is compatible with the image file header. - // - - const ChannelList &channels = _data->header.channels(); - - for (ChannelList::ConstIterator i = channels.begin(); - i != channels.end(); - ++i) - { - DeepFrameBuffer::ConstIterator j = frameBuffer.find (i.name()); - - if (j == frameBuffer.end()) - continue; - - if (i.channel().type != j.slice().type) - THROW (IEX_NAMESPACE::ArgExc, "Pixel type of \"" << i.name() << "\" channel " - "of output file \"" << fileName() << "\" is " - "not compatible with the frame buffer's " - "pixel type."); - - if (j.slice().xSampling != 1 || j.slice().ySampling != 1) - THROW (IEX_NAMESPACE::ArgExc, "All channels in a tiled file must have" - "sampling (1,1)."); - } - - // - // Store the pixel sample count table. - // - - const Slice& sampleCountSlice = frameBuffer.getSampleCountSlice(); - if (sampleCountSlice.base == 0) - { - throw IEX_NAMESPACE::ArgExc ("Invalid base pointer, please set a proper sample count slice."); - } - else - { - _data->sampleCountSliceBase = sampleCountSlice.base; - _data->sampleCountXStride = sampleCountSlice.xStride; - _data->sampleCountYStride = sampleCountSlice.yStride; - _data->sampleCountXTileCoords = sampleCountSlice.xTileCoords; - _data->sampleCountYTileCoords = sampleCountSlice.yTileCoords; - } - - // - // Initialize slice table for writePixels(). - // Pixel sample count slice is not presented in the header, - // so it wouldn't be added here. - // Store the pixel base pointer table. - // - - vector slices; - - for (ChannelList::ConstIterator i = channels.begin(); - i != channels.end(); - ++i) - { - DeepFrameBuffer::ConstIterator j = frameBuffer.find (i.name()); - - if (j == frameBuffer.end()) - { - // - // Channel i is not present in the frame buffer. - // In the file, channel i will contain only zeroes. - // - - slices.push_back (new TOutSliceInfo (i.channel().type, - 0, // sampleStride, - 0, // xStride - 0, // yStride - true)); // zero - } - else - { - // - // Channel i is present in the frame buffer. - // - - slices.push_back (new TOutSliceInfo (j.slice().type, - j.slice().sampleStride, - j.slice().xStride, - j.slice().yStride, - false, // zero - (j.slice().xTileCoords)? 1: 0, - (j.slice().yTileCoords)? 1: 0)); - - TOutSliceInfo* slice = slices.back(); - slice->base = j.slice().base; - - } - } - - // - // Store the new frame buffer. - // - - _data->frameBuffer = frameBuffer; - - for (size_t i = 0; i < _data->slices.size(); i++) - delete _data->slices[i]; - _data->slices = slices; -} - - -const DeepFrameBuffer & -DeepTiledOutputFile::frameBuffer () const -{ - Lock lock (*_data->_streamData); - return _data->frameBuffer; -} - - -void -DeepTiledOutputFile::writeTiles (int dx1, int dx2, int dy1, int dy2, - int lx, int ly) -{ - try - { - Lock lock (*_data->_streamData); - - if (_data->slices.size() == 0) - throw IEX_NAMESPACE::ArgExc ("No frame buffer specified " - "as pixel data source."); - - if (!isValidTile (dx1, dy1, lx, ly) || !isValidTile (dx2, dy2, lx, ly)) - throw IEX_NAMESPACE::ArgExc ("Tile coordinates are invalid."); - - if (!isValidLevel (lx, ly)) - THROW (IEX_NAMESPACE::ArgExc, - "Level coordinate " - "(" << lx << ", " << ly << ") " - "is invalid."); - // - // Determine the first and last tile coordinates in both dimensions - // based on the file's lineOrder - // - - if (dx1 > dx2) - swap (dx1, dx2); - - if (dy1 > dy2) - swap (dy1, dy2); - - int dyStart = dy1; - int dyStop = dy2 + 1; - int dY = 1; - - if (_data->lineOrder == DECREASING_Y) - { - dyStart = dy2; - dyStop = dy1 - 1; - dY = -1; - } - - int numTiles = (dx2 - dx1 + 1) * (dy2 - dy1 + 1); - int numTasks = min ((int)_data->tileBuffers.size(), numTiles); - - // - // Create a task group for all tile buffer tasks. When the - // task group goes out of scope, the destructor waits until - // all tasks are complete. - // - - { - TaskGroup taskGroup; - - // - // Add in the initial compression tasks to the thread pool - // - - int nextCompBuffer = 0; - int dxComp = dx1; - int dyComp = dyStart; - - while (nextCompBuffer < numTasks) - { - ThreadPool::addGlobalTask (new TileBufferTask (&taskGroup, - _data, - nextCompBuffer++, - dxComp, dyComp, - lx, ly)); - dxComp++; - - if (dxComp > dx2) - { - dxComp = dx1; - dyComp += dY; - } - } - - // - // Write the compressed buffers and add in more compression - // tasks until done - // - - int nextWriteBuffer = 0; - int dxWrite = dx1; - int dyWrite = dyStart; - - while (nextWriteBuffer < numTiles) - { - // - // Wait until the nextWriteBuffer is ready to be written - // - - TileBuffer* writeBuffer = - _data->getTileBuffer (nextWriteBuffer); - - writeBuffer->wait(); - - // - // Write the tilebuffer - // - - bufferedTileWrite ( _data, dxWrite, dyWrite, lx, ly, - writeBuffer->dataPtr, - writeBuffer->dataSize, - writeBuffer->uncompressedSize, - writeBuffer->sampleCountTablePtr, - writeBuffer->sampleCountTableSize); - - // - // Release the lock on nextWriteBuffer - // - - writeBuffer->post(); - - // - // If there are no more tileBuffers to compress, then - // only continue to write out remaining tileBuffers, - // otherwise keep adding compression tasks. - // - - if (nextCompBuffer < numTiles) - { - // - // add nextCompBuffer as a compression Task - // - - ThreadPool::addGlobalTask - (new TileBufferTask (&taskGroup, - _data, - nextCompBuffer, - dxComp, dyComp, - lx, ly)); - } - - nextWriteBuffer++; - dxWrite++; - - if (dxWrite > dx2) - { - dxWrite = dx1; - dyWrite += dY; - } - - nextCompBuffer++; - dxComp++; - - if (dxComp > dx2) - { - dxComp = dx1; - dyComp += dY; - } - } - - // - // finish all tasks - // - } - - // - // Exeption handling: - // - // TileBufferTask::execute() may have encountered exceptions, but - // those exceptions occurred in another thread, not in the thread - // that is executing this call to TiledOutputFile::writeTiles(). - // TileBufferTask::execute() has caught all exceptions and stored - // the exceptions' what() strings in the tile buffers. - // Now we check if any tile buffer contains a stored exception; if - // this is the case then we re-throw the exception in this thread. - // (It is possible that multiple tile buffers contain stored - // exceptions. We re-throw the first exception we find and - // ignore all others.) - // - - const string *exception = 0; - - for (size_t i = 0; i < _data->tileBuffers.size(); ++i) - { - TileBuffer *tileBuffer = _data->tileBuffers[i]; - - if (tileBuffer->hasException && !exception) - exception = &tileBuffer->exception; - - tileBuffer->hasException = false; - } - - if (exception) - throw IEX_NAMESPACE::IoExc (*exception); - } - catch (IEX_NAMESPACE::BaseExc &e) - { - REPLACE_EXC (e, "Failed to write pixel data to image " - "file \"" << fileName() << "\". " << e.what()); - throw; - } -} - - -void -DeepTiledOutputFile::writeTiles (int dx1, int dxMax, int dyMin, int dyMax, int l) -{ - writeTiles (dx1, dxMax, dyMin, dyMax, l, l); -} - - -void -DeepTiledOutputFile::writeTile (int dx, int dy, int lx, int ly) -{ - writeTiles (dx, dx, dy, dy, lx, ly); -} - - -void -DeepTiledOutputFile::writeTile (int dx, int dy, int l) -{ - writeTile(dx, dy, l, l); -} - - -void -DeepTiledOutputFile::copyPixels (DeepTiledInputFile &in) -{ - - // - // Check if this file's and and the InputFile's - // headers are compatible. - // - - const Header &hdr = _data->header; - const Header &inHdr = in.header(); - - - - if (!(hdr.tileDescription() == inHdr.tileDescription())) - THROW (IEX_NAMESPACE::ArgExc, "Quick pixel copy from image " - "file \"" << in.fileName() << "\" to image " - "file \"" << fileName() << "\" failed. " - "The files have different tile descriptions."); - - if (!(hdr.dataWindow() == inHdr.dataWindow())) - THROW (IEX_NAMESPACE::ArgExc, "Cannot copy pixels from image " - "file \"" << in.fileName() << "\" to image " - "file \"" << fileName() << "\". The " - "files have different data windows."); - - if (!(hdr.lineOrder() == inHdr.lineOrder())) - THROW (IEX_NAMESPACE::ArgExc, "Quick pixel copy from image " - "file \"" << in.fileName() << "\" to image " - "file \"" << fileName() << "\" failed. " - "The files have different line orders."); - - if (!(hdr.compression() == inHdr.compression())) - THROW (IEX_NAMESPACE::ArgExc, "Quick pixel copy from image " - "file \"" << in.fileName() << "\" to image " - "file \"" << fileName() << "\" failed. " - "The files use different compression methods."); - - if (!(hdr.channels() == inHdr.channels())) - THROW (IEX_NAMESPACE::ArgExc, "Quick pixel copy from image " - "file \"" << in.fileName() << "\" to image " - "file \"" << fileName() << "\" " - "failed. The files have different channel " - "lists."); - - - // Verify that no pixel data have been written to this file yet. - // - - if (!_data->tileOffsets.isEmpty()) - THROW (IEX_NAMESPACE::LogicExc, "Quick pixel copy from image " - "file \"" << in.fileName() << "\" to image " - "file \"" << _data->_streamData->os->fileName() << "\" " - "failed. \"" << fileName() << "\" " - "already contains pixel data."); - - - int numAllTiles = in.totalTiles(); - - Lock lock (*_data->_streamData); - - // - // special handling for random tiles - // - - vector dx_list(_data->lineOrder==RANDOM_Y ? numAllTiles : 1); - vector dy_list(_data->lineOrder==RANDOM_Y ? numAllTiles : 1); - vector lx_list(_data->lineOrder==RANDOM_Y ? numAllTiles : 1); - vector ly_list(_data->lineOrder==RANDOM_Y ? numAllTiles : 1); - - if(_data->lineOrder==RANDOM_Y) - { - in.getTileOrder(&dx_list[0],&dy_list[0],&lx_list[0],&ly_list[0]); - _data->nextTileToWrite.dx=dx_list[0]; - _data->nextTileToWrite.dy=dy_list[0]; - _data->nextTileToWrite.lx=lx_list[0]; - _data->nextTileToWrite.ly=ly_list[0]; - } - - - vector data(4096); - for (int i = 0; i < numAllTiles; ++i) - { - - int dx = _data->nextTileToWrite.dx; - int dy = _data->nextTileToWrite.dy; - int lx = _data->nextTileToWrite.lx; - int ly = _data->nextTileToWrite.ly; - - Int64 dataSize = data.size(); - - in.rawTileData (dx, dy, lx, ly, &data[0], dataSize); - if(dataSize>data.size()) - { - data.resize(dataSize); - in.rawTileData (dx, dy, lx, ly, &data[0], dataSize); - } - Int64 sampleCountTableSize = *(Int64 *)(&data[0] + 16); - Int64 pixelDataSize = *(Int64 *)(&data[0] + 24); - Int64 unpackedPixelDataSize = *(Int64 *)(&data[0] + 32); - char * sampleCountTable = &data[0]+40; - char * pixelData = sampleCountTable + sampleCountTableSize; - - writeTileData (_data, dx, dy, lx, ly, pixelData, pixelDataSize,unpackedPixelDataSize,sampleCountTable,sampleCountTableSize); - - - if(_data->lineOrder==RANDOM_Y) - { - if(inextTileToWrite.dx=dx_list[i+1]; - _data->nextTileToWrite.dy=dy_list[i+1]; - _data->nextTileToWrite.lx=lx_list[i+1]; - _data->nextTileToWrite.ly=ly_list[i+1]; - } - }else{ - _data->nextTileToWrite = _data->nextTileCoord (_data->nextTileToWrite); - } - - } -} - - -void -DeepTiledOutputFile::copyPixels (DeepTiledInputPart &in) -{ - copyPixels(*in.file); -} - - -unsigned int -DeepTiledOutputFile::tileXSize () const -{ - return _data->tileDesc.xSize; -} - - -unsigned int -DeepTiledOutputFile::tileYSize () const -{ - return _data->tileDesc.ySize; -} - - -LevelMode -DeepTiledOutputFile::levelMode () const -{ - return _data->tileDesc.mode; -} - - -LevelRoundingMode -DeepTiledOutputFile::levelRoundingMode () const -{ - return _data->tileDesc.roundingMode; -} - - -int -DeepTiledOutputFile::numLevels () const -{ - if (levelMode() == RIPMAP_LEVELS) - THROW (IEX_NAMESPACE::LogicExc, "Error calling numLevels() on image " - "file \"" << fileName() << "\" " - "(numLevels() is not defined for RIPMAPs)."); - return _data->numXLevels; -} - - -int -DeepTiledOutputFile::numXLevels () const -{ - return _data->numXLevels; -} - - -int -DeepTiledOutputFile::numYLevels () const -{ - return _data->numYLevels; -} - - -bool -DeepTiledOutputFile::isValidLevel (int lx, int ly) const -{ - if (lx < 0 || ly < 0) - return false; - - if (levelMode() == MIPMAP_LEVELS && lx != ly) - return false; - - if (lx >= numXLevels() || ly >= numYLevels()) - return false; - - return true; -} - - -int -DeepTiledOutputFile::levelWidth (int lx) const -{ - try - { - int retVal = levelSize (_data->minX, _data->maxX, lx, - _data->tileDesc.roundingMode); - - return retVal; - } - catch (IEX_NAMESPACE::BaseExc &e) - { - REPLACE_EXC (e, "Error calling levelWidth() on image " - "file \"" << fileName() << "\". " << e.what()); - throw; - } -} - - -int -DeepTiledOutputFile::levelHeight (int ly) const -{ - try - { - return levelSize (_data->minY, _data->maxY, ly, - _data->tileDesc.roundingMode); - } - catch (IEX_NAMESPACE::BaseExc &e) - { - REPLACE_EXC (e, "Error calling levelHeight() on image " - "file \"" << fileName() << "\". " << e.what()); - throw; - } -} - - -int -DeepTiledOutputFile::numXTiles (int lx) const -{ - if (lx < 0 || lx >= _data->numXLevels) - THROW (IEX_NAMESPACE::LogicExc, "Error calling numXTiles() on image " - "file \"" << _data->_streamData->os->fileName() << "\" " - "(Argument is not in valid range)."); - - return _data->numXTiles[lx]; -} - - -int -DeepTiledOutputFile::numYTiles (int ly) const -{ - if (ly < 0 || ly >= _data->numYLevels) - THROW (IEX_NAMESPACE::LogicExc, "Error calling numXTiles() on image " - "file \"" << _data->_streamData->os->fileName() << "\" " - "(Argument is not in valid range)."); - - return _data->numYTiles[ly]; -} - - -Box2i -DeepTiledOutputFile::dataWindowForLevel (int l) const -{ - return dataWindowForLevel (l, l); -} - - -Box2i -DeepTiledOutputFile::dataWindowForLevel (int lx, int ly) const -{ - try - { - return OPENEXR_IMF_INTERNAL_NAMESPACE::dataWindowForLevel ( - _data->tileDesc, - _data->minX, _data->maxX, - _data->minY, _data->maxY, - lx, ly); - } - catch (IEX_NAMESPACE::BaseExc &e) - { - REPLACE_EXC (e, "Error calling dataWindowForLevel() on image " - "file \"" << fileName() << "\". " << e.what()); - throw; - } -} - - -Box2i -DeepTiledOutputFile::dataWindowForTile (int dx, int dy, int l) const -{ - return dataWindowForTile (dx, dy, l, l); -} - - -Box2i -DeepTiledOutputFile::dataWindowForTile (int dx, int dy, int lx, int ly) const -{ - try - { - if (!isValidTile (dx, dy, lx, ly)) - throw IEX_NAMESPACE::ArgExc ("Arguments not in valid range."); - - return OPENEXR_IMF_INTERNAL_NAMESPACE::dataWindowForTile ( - _data->tileDesc, - _data->minX, _data->maxX, - _data->minY, _data->maxY, - dx, dy, - lx, ly); - } - catch (IEX_NAMESPACE::BaseExc &e) - { - REPLACE_EXC (e, "Error calling dataWindowForTile() on image " - "file \"" << fileName() << "\". " << e.what()); - throw; - } -} - - -bool -DeepTiledOutputFile::isValidTile (int dx, int dy, int lx, int ly) const -{ - return ((lx < _data->numXLevels && lx >= 0) && - (ly < _data->numYLevels && ly >= 0) && - (dx < _data->numXTiles[lx] && dx >= 0) && - (dy < _data->numYTiles[ly] && dy >= 0)); -} - - -void -DeepTiledOutputFile::updatePreviewImage (const PreviewRgba newPixels[]) -{ - Lock lock (*_data->_streamData); - - if (_data->previewPosition <= 0) - THROW (IEX_NAMESPACE::LogicExc, "Cannot update preview image pixels. " - "File \"" << fileName() << "\" does not " - "contain a preview image."); - - // - // Store the new pixels in the header's preview image attribute. - // - - PreviewImageAttribute &pia = - _data->header.typedAttribute ("preview"); - - PreviewImage &pi = pia.value(); - PreviewRgba *pixels = pi.pixels(); - int numPixels = pi.width() * pi.height(); - - for (int i = 0; i < numPixels; ++i) - pixels[i] = newPixels[i]; - - // - // Save the current file position, jump to the position in - // the file where the preview image starts, store the new - // preview image, and jump back to the saved file position. - // - - Int64 savedPosition = _data->_streamData->os->tellp(); - - try - { - _data->_streamData->os->seekp (_data->previewPosition); - pia.writeValueTo (*_data->_streamData->os, _data->version); - _data->_streamData->os->seekp (savedPosition); - } - catch (IEX_NAMESPACE::BaseExc &e) - { - REPLACE_EXC (e, "Cannot update preview image pixels for " - "file \"" << fileName() << "\". " << e.what()); - throw; - } -} - - -void -DeepTiledOutputFile::breakTile - (int dx, int dy, - int lx, int ly, - int offset, - int length, - char c) -{ - Lock lock (*_data->_streamData); - - Int64 position = _data->tileOffsets (dx, dy, lx, ly); - - if (!position) - THROW (IEX_NAMESPACE::ArgExc, - "Cannot overwrite tile " - "(" << dx << ", " << dy << ", " << lx << "," << ly << "). " - "The tile has not yet been stored in " - "file \"" << fileName() << "\"."); - - _data->_streamData->currentPosition = 0; - _data->_streamData->os->seekp (position + offset); - - for (int i = 0; i < length; ++i) - _data->_streamData->os->write (&c, 1); -} - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_EXIT diff --git a/3rdparty/openexr/IlmImf/ImfDeepTiledOutputFile.h b/3rdparty/openexr/IlmImf/ImfDeepTiledOutputFile.h deleted file mode 100644 index fa76a691e6..0000000000 --- a/3rdparty/openexr/IlmImf/ImfDeepTiledOutputFile.h +++ /dev/null @@ -1,506 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2011, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - -#ifndef INCLUDED_IMF_DEEP_TILED_OUTPUT_FILE_H -#define INCLUDED_IMF_DEEP_TILED_OUTPUT_FILE_H - -//----------------------------------------------------------------------------- -// -// class DeepTiledOutputFile -// -//----------------------------------------------------------------------------- - -#include "ImfHeader.h" -#include "ImfFrameBuffer.h" -#include "ImathBox.h" -#include "ImfThreading.h" -#include "ImfGenericOutputFile.h" -#include "ImfNamespace.h" -#include "ImfForward.h" -#include "ImfExport.h" - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER - - -class DeepTiledOutputFile : public GenericOutputFile -{ - public: - - //------------------------------------------------------------------- - // A constructor that opens the file with the specified name, and - // writes the file header. The file header is also copied into the - // TiledOutputFile object, and can later be accessed via the header() - // method. - // - // Destroying TiledOutputFile constructed with this constructor - // automatically closes the corresponding files. - // - // The header must contain a TileDescriptionAttribute called "tiles". - // - // The x and y subsampling factors for all image channels must be 1; - // subsampling is not supported. - // - // Tiles can be written to the file in arbitrary order. The line - // order attribute can be used to cause the tiles to be sorted in - // the file. When the file is read later, reading the tiles in the - // same order as they are in the file tends to be significantly - // faster than reading the tiles in random order (see writeTile, - // below). - //------------------------------------------------------------------- - - IMF_EXPORT - DeepTiledOutputFile (const char fileName[], - const Header &header, - int numThreads = globalThreadCount ()); - - - // ---------------------------------------------------------------- - // A constructor that attaches the new TiledOutputFile object to - // a file that has already been opened. Destroying TiledOutputFile - // objects constructed with this constructor does not automatically - // close the corresponding files. - // ---------------------------------------------------------------- - - IMF_EXPORT - DeepTiledOutputFile (OPENEXR_IMF_INTERNAL_NAMESPACE::OStream &os, - const Header &header, - int numThreads = globalThreadCount ()); - - - //----------------------------------------------------- - // Destructor - // - // Destroying a TiledOutputFile object before all tiles - // have been written results in an incomplete file. - //----------------------------------------------------- - - IMF_EXPORT - virtual ~DeepTiledOutputFile (); - - - //------------------------ - // Access to the file name - //------------------------ - - IMF_EXPORT - const char * fileName () const; - - - //-------------------------- - // Access to the file header - //-------------------------- - - IMF_EXPORT - const Header & header () const; - - - //------------------------------------------------------- - // Set the current frame buffer -- copies the FrameBuffer - // object into the TiledOutputFile object. - // - // The current frame buffer is the source of the pixel - // data written to the file. The current frame buffer - // must be set at least once before writeTile() is - // called. The current frame buffer can be changed - // after each call to writeTile(). - //------------------------------------------------------- - - IMF_EXPORT - void setFrameBuffer (const DeepFrameBuffer &frameBuffer); - - - //----------------------------------- - // Access to the current frame buffer - //----------------------------------- - - IMF_EXPORT - const DeepFrameBuffer & frameBuffer () const; - - - //------------------- - // Utility functions: - //------------------- - - //--------------------------------------------------------- - // Multiresolution mode and tile size: - // The following functions return the xSize, ySize and mode - // fields of the file header's TileDescriptionAttribute. - //--------------------------------------------------------- - - IMF_EXPORT - unsigned int tileXSize () const; - IMF_EXPORT - unsigned int tileYSize () const; - IMF_EXPORT - LevelMode levelMode () const; - IMF_EXPORT - LevelRoundingMode levelRoundingMode () const; - - - //-------------------------------------------------------------------- - // Number of levels: - // - // numXLevels() returns the file's number of levels in x direction. - // - // if levelMode() == ONE_LEVEL: - // return value is: 1 - // - // if levelMode() == MIPMAP_LEVELS: - // return value is: rfunc (log (max (w, h)) / log (2)) + 1 - // - // if levelMode() == RIPMAP_LEVELS: - // return value is: rfunc (log (w) / log (2)) + 1 - // - // where - // w is the width of the image's data window, max.x - min.x + 1, - // y is the height of the image's data window, max.y - min.y + 1, - // and rfunc(x) is either floor(x), or ceil(x), depending on - // whether levelRoundingMode() returns ROUND_DOWN or ROUND_UP. - // - // numYLevels() returns the file's number of levels in y direction. - // - // if levelMode() == ONE_LEVEL or levelMode() == MIPMAP_LEVELS: - // return value is the same as for numXLevels() - // - // if levelMode() == RIPMAP_LEVELS: - // return value is: rfunc (log (h) / log (2)) + 1 - // - // - // numLevels() is a convenience function for use with MIPMAP_LEVELS - // files. - // - // if levelMode() == ONE_LEVEL or levelMode() == MIPMAP_LEVELS: - // return value is the same as for numXLevels() - // - // if levelMode() == RIPMAP_LEVELS: - // an IEX_NAMESPACE::LogicExc exception is thrown - // - // isValidLevel(lx, ly) returns true if the file contains - // a level with level number (lx, ly), false if not. - // - //-------------------------------------------------------------------- - - IMF_EXPORT - int numLevels () const; - IMF_EXPORT - int numXLevels () const; - IMF_EXPORT - int numYLevels () const; - IMF_EXPORT - bool isValidLevel (int lx, int ly) const; - - - //--------------------------------------------------------- - // Dimensions of a level: - // - // levelWidth(lx) returns the width of a level with level - // number (lx, *), where * is any number. - // - // return value is: - // max (1, rfunc (w / pow (2, lx))) - // - // - // levelHeight(ly) returns the height of a level with level - // number (*, ly), where * is any number. - // - // return value is: - // max (1, rfunc (h / pow (2, ly))) - // - //--------------------------------------------------------- - - IMF_EXPORT - int levelWidth (int lx) const; - IMF_EXPORT - int levelHeight (int ly) const; - - - //---------------------------------------------------------- - // Number of tiles: - // - // numXTiles(lx) returns the number of tiles in x direction - // that cover a level with level number (lx, *), where * is - // any number. - // - // return value is: - // (levelWidth(lx) + tileXSize() - 1) / tileXSize() - // - // - // numYTiles(ly) returns the number of tiles in y direction - // that cover a level with level number (*, ly), where * is - // any number. - // - // return value is: - // (levelHeight(ly) + tileXSize() - 1) / tileXSize() - // - //---------------------------------------------------------- - - IMF_EXPORT - int numXTiles (int lx = 0) const; - IMF_EXPORT - int numYTiles (int ly = 0) const; - - - //--------------------------------------------------------- - // Level pixel ranges: - // - // dataWindowForLevel(lx, ly) returns a 2-dimensional - // region of valid pixel coordinates for a level with - // level number (lx, ly) - // - // return value is a Box2i with min value: - // (dataWindow.min.x, dataWindow.min.y) - // - // and max value: - // (dataWindow.min.x + levelWidth(lx) - 1, - // dataWindow.min.y + levelHeight(ly) - 1) - // - // dataWindowForLevel(level) is a convenience function used - // for ONE_LEVEL and MIPMAP_LEVELS files. It returns - // dataWindowForLevel(level, level). - // - //--------------------------------------------------------- - - IMF_EXPORT - IMATH_NAMESPACE::Box2i dataWindowForLevel (int l = 0) const; - IMF_EXPORT - IMATH_NAMESPACE::Box2i dataWindowForLevel (int lx, int ly) const; - - - //------------------------------------------------------------------- - // Tile pixel ranges: - // - // dataWindowForTile(dx, dy, lx, ly) returns a 2-dimensional - // region of valid pixel coordinates for a tile with tile coordinates - // (dx,dy) and level number (lx, ly). - // - // return value is a Box2i with min value: - // (dataWindow.min.x + dx * tileXSize(), - // dataWindow.min.y + dy * tileYSize()) - // - // and max value: - // (dataWindow.min.x + (dx + 1) * tileXSize() - 1, - // dataWindow.min.y + (dy + 1) * tileYSize() - 1) - // - // dataWindowForTile(dx, dy, level) is a convenience function - // used for ONE_LEVEL and MIPMAP_LEVELS files. It returns - // dataWindowForTile(dx, dy, level, level). - // - //------------------------------------------------------------------- - - IMF_EXPORT - IMATH_NAMESPACE::Box2i dataWindowForTile (int dx, int dy, - int l = 0) const; - - IMF_EXPORT - IMATH_NAMESPACE::Box2i dataWindowForTile (int dx, int dy, - int lx, int ly) const; - - //------------------------------------------------------------------ - // Write pixel data: - // - // writeTile(dx, dy, lx, ly) writes the tile with tile - // coordinates (dx, dy), and level number (lx, ly) to - // the file. - // - // dx must lie in the interval [0, numXTiles(lx) - 1] - // dy must lie in the interval [0, numYTiles(ly) - 1] - // - // lx must lie in the interval [0, numXLevels() - 1] - // ly must lie in the inverval [0, numYLevels() - 1] - // - // writeTile(dx, dy, level) is a convenience function - // used for ONE_LEVEL and MIPMAP_LEVEL files. It calls - // writeTile(dx, dy, level, level). - // - // The two writeTiles(dx1, dx2, dy1, dy2, ...) functions allow - // writing multiple tiles at once. If multi-threading is used - // multiple tiles are written concurrently. The tile coordinates, - // dx1, dx2 and dy1, dy2, specify inclusive ranges of tile - // coordinates. It is valid for dx1 < dx2 or dy1 < dy2; the - // tiles are always written in the order specified by the line - // order attribute. Hence, it is not possible to specify an - // "invalid" or empty tile range. - // - // Pixels that are outside the pixel coordinate range for the tile's - // level, are never accessed by writeTile(). - // - // Each tile in the file must be written exactly once. - // - // The file's line order attribute determines the order of the tiles - // in the file: - // - // INCREASING_Y In the file, the tiles for each level are stored - // in a contiguous block. The levels are ordered - // like this: - // - // (0, 0) (1, 0) ... (nx-1, 0) - // (0, 1) (1, 1) ... (nx-1, 1) - // ... - // (0,ny-1) (1,ny-1) ... (nx-1,ny-1) - // - // where nx = numXLevels(), and ny = numYLevels(). - // In an individual level, (lx, ly), the tiles - // are stored in the following order: - // - // (0, 0) (1, 0) ... (tx-1, 0) - // (0, 1) (1, 1) ... (tx-1, 1) - // ... - // (0,ty-1) (1,ty-1) ... (tx-1,ty-1) - // - // where tx = numXTiles(lx), - // and ty = numYTiles(ly). - // - // DECREASING_Y As for INCREASING_Y, the tiles for each level - // are stored in a contiguous block. The levels - // are ordered the same way as for INCREASING_Y, - // but within an individual level, the tiles - // are stored in this order: - // - // (0,ty-1) (1,ty-1) ... (tx-1,ty-1) - // ... - // (0, 1) (1, 1) ... (tx-1, 1) - // (0, 0) (1, 0) ... (tx-1, 0) - // - // - // RANDOM_Y The order of the calls to writeTile() determines - // the order of the tiles in the file. - // - //------------------------------------------------------------------ - - IMF_EXPORT - void writeTile (int dx, int dy, int l = 0); - IMF_EXPORT - void writeTile (int dx, int dy, int lx, int ly); - - IMF_EXPORT - void writeTiles (int dx1, int dx2, int dy1, int dy2, - int lx, int ly); - - IMF_EXPORT - void writeTiles (int dx1, int dx2, int dy1, int dy2, - int l = 0); - - - //------------------------------------------------------------------ - // Shortcut to copy all pixels from a TiledInputFile into this file, - // without uncompressing and then recompressing the pixel data. - // This file's header must be compatible with the TiledInputFile's - // header: The two header's "dataWindow", "compression", - // "lineOrder", "channels", and "tiles" attributes must be the same. - //------------------------------------------------------------------ - - IMF_EXPORT - void copyPixels (DeepTiledInputFile &in); - IMF_EXPORT - void copyPixels (DeepTiledInputPart &in); - - - - //-------------------------------------------------------------- - // Updating the preview image: - // - // updatePreviewImage() supplies a new set of pixels for the - // preview image attribute in the file's header. If the header - // does not contain a preview image, updatePreviewImage() throws - // an IEX_NAMESPACE::LogicExc. - // - // Note: updatePreviewImage() is necessary because images are - // often stored in a file incrementally, a few tiles at a time, - // while the image is being generated. Since the preview image - // is an attribute in the file's header, it gets stored in the - // file as soon as the file is opened, but we may not know what - // the preview image should look like until we have written the - // last tile of the main image. - // - //-------------------------------------------------------------- - - IMF_EXPORT - void updatePreviewImage (const PreviewRgba newPixels[]); - - - //------------------------------------------------------------- - // Break a tile -- for testing and debugging only: - // - // breakTile(dx,dy,lx,ly,p,n,c) introduces an error into the - // output file by writing n copies of character c, starting - // p bytes from the beginning of the tile with tile coordinates - // (dx, dy) and level number (lx, ly). - // - // Warning: Calling this function usually results in a broken - // image file. The file or parts of it may not be readable, - // or the file may contain bad data. - // - //------------------------------------------------------------- - - IMF_EXPORT - void breakTile (int dx, int dy, - int lx, int ly, - int offset, - int length, - char c); - struct Data; - - private: - - // ---------------------------------------------------------------- - // A constructor attaches the OutputStreamMutex to the - // given one from MultiPartOutputFile. Set the previewPosition - // and lineOffsetsPosition which have been acquired from - // the constructor of MultiPartOutputFile as well. - // ---------------------------------------------------------------- - DeepTiledOutputFile (const OutputPartData* part); - - DeepTiledOutputFile (const DeepTiledOutputFile &); // not implemented - DeepTiledOutputFile & operator = (const DeepTiledOutputFile &); // not implemented - - void initialize (const Header &header); - - bool isValidTile (int dx, int dy, - int lx, int ly) const; - - size_t bytesPerLineForTile (int dx, int dy, - int lx, int ly) const; - - Data * _data; - - - friend class MultiPartOutputFile; - -}; - - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT - -#endif diff --git a/3rdparty/openexr/IlmImf/ImfDeepTiledOutputPart.cpp b/3rdparty/openexr/IlmImf/ImfDeepTiledOutputPart.cpp deleted file mode 100644 index 7239c01fe0..0000000000 --- a/3rdparty/openexr/IlmImf/ImfDeepTiledOutputPart.cpp +++ /dev/null @@ -1,250 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2011, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - -#include "ImfDeepTiledOutputPart.h" -#include "ImfMultiPartOutputFile.h" -#include "ImfNamespace.h" - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_ENTER - -DeepTiledOutputPart::DeepTiledOutputPart(MultiPartOutputFile& multiPartFile, int partNumber) -{ - file = multiPartFile.getOutputPart(partNumber); -} - -const char * -DeepTiledOutputPart::fileName () const -{ - return file->fileName(); -} - - -const Header & -DeepTiledOutputPart::header () const -{ - return file->header(); -} - - -void -DeepTiledOutputPart::setFrameBuffer (const DeepFrameBuffer &frameBuffer) -{ - file->setFrameBuffer(frameBuffer); -} - - -const DeepFrameBuffer & -DeepTiledOutputPart::frameBuffer () const -{ - return file->frameBuffer(); -} - - -unsigned int -DeepTiledOutputPart::tileXSize () const -{ - return file->tileXSize(); -} - - -unsigned int -DeepTiledOutputPart::tileYSize () const -{ - return file->tileYSize(); -} - - -LevelMode -DeepTiledOutputPart::levelMode () const -{ - return file->levelMode(); -} - - -LevelRoundingMode -DeepTiledOutputPart::levelRoundingMode () const -{ - return file->levelRoundingMode(); -} - - -int -DeepTiledOutputPart::numLevels () const -{ - return file->numLevels(); -} - - -int -DeepTiledOutputPart::numXLevels () const -{ - return file->numXLevels(); -} - - -int -DeepTiledOutputPart::numYLevels () const -{ - return file->numYLevels(); -} - - -bool -DeepTiledOutputPart::isValidLevel (int lx, int ly) const -{ - return file->isValidLevel(lx, ly); -} - - -int -DeepTiledOutputPart::levelWidth (int lx) const -{ - return file->levelWidth(lx); -} - - -int -DeepTiledOutputPart::levelHeight (int ly) const -{ - return file->levelHeight(ly); -} - - -int -DeepTiledOutputPart::numXTiles (int lx) const -{ - return file->numXTiles(lx); -} - - -int -DeepTiledOutputPart::numYTiles (int ly) const -{ - return file->numYTiles(ly); -} - - - -IMATH_NAMESPACE::Box2i -DeepTiledOutputPart::dataWindowForLevel (int l) const -{ - return file->dataWindowForLevel(l); -} - - -IMATH_NAMESPACE::Box2i -DeepTiledOutputPart::dataWindowForLevel (int lx, int ly) const -{ - return file->dataWindowForLevel(lx, ly); -} - - -IMATH_NAMESPACE::Box2i -DeepTiledOutputPart::dataWindowForTile (int dx, int dy, - int l) const -{ - return file->dataWindowForTile(dx, dy, l); -} - - -IMATH_NAMESPACE::Box2i -DeepTiledOutputPart::dataWindowForTile (int dx, int dy, - int lx, int ly) const -{ - return file->dataWindowForTile(dx, dy, lx, ly); -} - - -void -DeepTiledOutputPart::writeTile (int dx, int dy, int l) -{ - file->writeTile(dx, dy, l); -} - - -void -DeepTiledOutputPart::writeTile (int dx, int dy, int lx, int ly) -{ - file->writeTile(dx, dy, lx, ly); -} - - -void -DeepTiledOutputPart::writeTiles (int dx1, int dx2, int dy1, int dy2, - int lx, int ly) -{ - file->writeTiles(dx1, dx2, dy1, dy2, lx, ly); -} - - -void -DeepTiledOutputPart::writeTiles (int dx1, int dx2, int dy1, int dy2, - int l) -{ - file->writeTiles(dx1, dx2, dy1, dy2, l); -} - - -void -DeepTiledOutputPart::copyPixels (DeepTiledInputFile &in) -{ - file->copyPixels(in); -} - - -void -DeepTiledOutputPart::copyPixels (DeepTiledInputPart &in) -{ - file->copyPixels(in); -} - - -void -DeepTiledOutputPart::updatePreviewImage (const PreviewRgba newPixels[]) -{ - file->updatePreviewImage(newPixels); -} - - -void -DeepTiledOutputPart::breakTile (int dx, int dy, - int lx, int ly, - int offset, - int length, - char c) -{ - file->breakTile(dx, dy, lx, ly, offset, length, c); -} - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_EXIT diff --git a/3rdparty/openexr/IlmImf/ImfDeepTiledOutputPart.h b/3rdparty/openexr/IlmImf/ImfDeepTiledOutputPart.h deleted file mode 100644 index 8b436562d2..0000000000 --- a/3rdparty/openexr/IlmImf/ImfDeepTiledOutputPart.h +++ /dev/null @@ -1,423 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2011, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - -#ifndef IMFDEEPTILEDOUTPUTPART_H_ -#define IMFDEEPTILEDOUTPUTPART_H_ - -#include "ImfForward.h" -#include "ImfDeepTiledInputFile.h" -#include "ImfNamespace.h" -#include "ImfExport.h" - - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER - - -class DeepTiledOutputPart -{ - public: - - IMF_EXPORT - DeepTiledOutputPart(MultiPartOutputFile& multiPartFile, int partNumber); - - //------------------------ - // Access to the file name - //------------------------ - - IMF_EXPORT - const char * fileName () const; - - - //-------------------------- - // Access to the file header - //-------------------------- - - IMF_EXPORT - const Header & header () const; - - - //------------------------------------------------------- - // Set the current frame buffer -- copies the FrameBuffer - // object into the TiledOutputFile object. - // - // The current frame buffer is the source of the pixel - // data written to the file. The current frame buffer - // must be set at least once before writeTile() is - // called. The current frame buffer can be changed - // after each call to writeTile(). - //------------------------------------------------------- - - IMF_EXPORT - void setFrameBuffer (const DeepFrameBuffer &frameBuffer); - - - //----------------------------------- - // Access to the current frame buffer - //----------------------------------- - - IMF_EXPORT - const DeepFrameBuffer & frameBuffer () const; - - - //------------------- - // Utility functions: - //------------------- - - //--------------------------------------------------------- - // Multiresolution mode and tile size: - // The following functions return the xSize, ySize and mode - // fields of the file header's TileDescriptionAttribute. - //--------------------------------------------------------- - - IMF_EXPORT - unsigned int tileXSize () const; - IMF_EXPORT - unsigned int tileYSize () const; - IMF_EXPORT - LevelMode levelMode () const; - IMF_EXPORT - LevelRoundingMode levelRoundingMode () const; - - - //-------------------------------------------------------------------- - // Number of levels: - // - // numXLevels() returns the file's number of levels in x direction. - // - // if levelMode() == ONE_LEVEL: - // return value is: 1 - // - // if levelMode() == MIPMAP_LEVELS: - // return value is: rfunc (log (max (w, h)) / log (2)) + 1 - // - // if levelMode() == RIPMAP_LEVELS: - // return value is: rfunc (log (w) / log (2)) + 1 - // - // where - // w is the width of the image's data window, max.x - min.x + 1, - // y is the height of the image's data window, max.y - min.y + 1, - // and rfunc(x) is either floor(x), or ceil(x), depending on - // whether levelRoundingMode() returns ROUND_DOWN or ROUND_UP. - // - // numYLevels() returns the file's number of levels in y direction. - // - // if levelMode() == ONE_LEVEL or levelMode() == MIPMAP_LEVELS: - // return value is the same as for numXLevels() - // - // if levelMode() == RIPMAP_LEVELS: - // return value is: rfunc (log (h) / log (2)) + 1 - // - // - // numLevels() is a convenience function for use with MIPMAP_LEVELS - // files. - // - // if levelMode() == ONE_LEVEL or levelMode() == MIPMAP_LEVELS: - // return value is the same as for numXLevels() - // - // if levelMode() == RIPMAP_LEVELS: - // an IEX_NAMESPACE::LogicExc exception is thrown - // - // isValidLevel(lx, ly) returns true if the file contains - // a level with level number (lx, ly), false if not. - // - //-------------------------------------------------------------------- - - IMF_EXPORT - int numLevels () const; - IMF_EXPORT - int numXLevels () const; - IMF_EXPORT - int numYLevels () const; - IMF_EXPORT - bool isValidLevel (int lx, int ly) const; - - - //--------------------------------------------------------- - // Dimensions of a level: - // - // levelWidth(lx) returns the width of a level with level - // number (lx, *), where * is any number. - // - // return value is: - // max (1, rfunc (w / pow (2, lx))) - // - // - // levelHeight(ly) returns the height of a level with level - // number (*, ly), where * is any number. - // - // return value is: - // max (1, rfunc (h / pow (2, ly))) - // - //--------------------------------------------------------- - - IMF_EXPORT - int levelWidth (int lx) const; - IMF_EXPORT - int levelHeight (int ly) const; - - - //---------------------------------------------------------- - // Number of tiles: - // - // numXTiles(lx) returns the number of tiles in x direction - // that cover a level with level number (lx, *), where * is - // any number. - // - // return value is: - // (levelWidth(lx) + tileXSize() - 1) / tileXSize() - // - // - // numYTiles(ly) returns the number of tiles in y direction - // that cover a level with level number (*, ly), where * is - // any number. - // - // return value is: - // (levelHeight(ly) + tileXSize() - 1) / tileXSize() - // - //---------------------------------------------------------- - - IMF_EXPORT - int numXTiles (int lx = 0) const; - IMF_EXPORT - int numYTiles (int ly = 0) const; - - - //--------------------------------------------------------- - // Level pixel ranges: - // - // dataWindowForLevel(lx, ly) returns a 2-dimensional - // region of valid pixel coordinates for a level with - // level number (lx, ly) - // - // return value is a Box2i with min value: - // (dataWindow.min.x, dataWindow.min.y) - // - // and max value: - // (dataWindow.min.x + levelWidth(lx) - 1, - // dataWindow.min.y + levelHeight(ly) - 1) - // - // dataWindowForLevel(level) is a convenience function used - // for ONE_LEVEL and MIPMAP_LEVELS files. It returns - // dataWindowForLevel(level, level). - // - //--------------------------------------------------------- - - IMF_EXPORT - IMATH_NAMESPACE::Box2i dataWindowForLevel (int l = 0) const; - IMF_EXPORT - IMATH_NAMESPACE::Box2i dataWindowForLevel (int lx, int ly) const; - - - //------------------------------------------------------------------- - // Tile pixel ranges: - // - // dataWindowForTile(dx, dy, lx, ly) returns a 2-dimensional - // region of valid pixel coordinates for a tile with tile coordinates - // (dx,dy) and level number (lx, ly). - // - // return value is a Box2i with min value: - // (dataWindow.min.x + dx * tileXSize(), - // dataWindow.min.y + dy * tileYSize()) - // - // and max value: - // (dataWindow.min.x + (dx + 1) * tileXSize() - 1, - // dataWindow.min.y + (dy + 1) * tileYSize() - 1) - // - // dataWindowForTile(dx, dy, level) is a convenience function - // used for ONE_LEVEL and MIPMAP_LEVELS files. It returns - // dataWindowForTile(dx, dy, level, level). - // - //------------------------------------------------------------------- - - IMF_EXPORT - IMATH_NAMESPACE::Box2i dataWindowForTile (int dx, int dy, - int l = 0) const; - - IMF_EXPORT - IMATH_NAMESPACE::Box2i dataWindowForTile (int dx, int dy, - int lx, int ly) const; - - //------------------------------------------------------------------ - // Write pixel data: - // - // writeTile(dx, dy, lx, ly) writes the tile with tile - // coordinates (dx, dy), and level number (lx, ly) to - // the file. - // - // dx must lie in the interval [0, numXTiles(lx) - 1] - // dy must lie in the interval [0, numYTiles(ly) - 1] - // - // lx must lie in the interval [0, numXLevels() - 1] - // ly must lie in the inverval [0, numYLevels() - 1] - // - // writeTile(dx, dy, level) is a convenience function - // used for ONE_LEVEL and MIPMAP_LEVEL files. It calls - // writeTile(dx, dy, level, level). - // - // The two writeTiles(dx1, dx2, dy1, dy2, ...) functions allow - // writing multiple tiles at once. If multi-threading is used - // multiple tiles are written concurrently. The tile coordinates, - // dx1, dx2 and dy1, dy2, specify inclusive ranges of tile - // coordinates. It is valid for dx1 < dx2 or dy1 < dy2; the - // tiles are always written in the order specified by the line - // order attribute. Hence, it is not possible to specify an - // "invalid" or empty tile range. - // - // Pixels that are outside the pixel coordinate range for the tile's - // level, are never accessed by writeTile(). - // - // Each tile in the file must be written exactly once. - // - // The file's line order attribute determines the order of the tiles - // in the file: - // - // INCREASING_Y In the file, the tiles for each level are stored - // in a contiguous block. The levels are ordered - // like this: - // - // (0, 0) (1, 0) ... (nx-1, 0) - // (0, 1) (1, 1) ... (nx-1, 1) - // ... - // (0,ny-1) (1,ny-1) ... (nx-1,ny-1) - // - // where nx = numXLevels(), and ny = numYLevels(). - // In an individual level, (lx, ly), the tiles - // are stored in the following order: - // - // (0, 0) (1, 0) ... (tx-1, 0) - // (0, 1) (1, 1) ... (tx-1, 1) - // ... - // (0,ty-1) (1,ty-1) ... (tx-1,ty-1) - // - // where tx = numXTiles(lx), - // and ty = numYTiles(ly). - // - // DECREASING_Y As for INCREASING_Y, the tiles for each level - // are stored in a contiguous block. The levels - // are ordered the same way as for INCREASING_Y, - // but within an individual level, the tiles - // are stored in this order: - // - // (0,ty-1) (1,ty-1) ... (tx-1,ty-1) - // ... - // (0, 1) (1, 1) ... (tx-1, 1) - // (0, 0) (1, 0) ... (tx-1, 0) - // - // - // RANDOM_Y The order of the calls to writeTile() determines - // the order of the tiles in the file. - // - //------------------------------------------------------------------ - - IMF_EXPORT - void writeTile (int dx, int dy, int l = 0); - IMF_EXPORT - void writeTile (int dx, int dy, int lx, int ly); - - IMF_EXPORT - void writeTiles (int dx1, int dx2, int dy1, int dy2, - int lx, int ly); - - IMF_EXPORT - void writeTiles (int dx1, int dx2, int dy1, int dy2, - int l = 0); - - - //------------------------------------------------------------------ - // Shortcut to copy all pixels from a TiledInputFile into this file, - // without uncompressing and then recompressing the pixel data. - // This file's header must be compatible with the TiledInputFile's - // header: The two header's "dataWindow", "compression", - // "lineOrder", "channels", and "tiles" attributes must be the same. - //------------------------------------------------------------------ - - IMF_EXPORT - void copyPixels (DeepTiledInputFile &in); - IMF_EXPORT - void copyPixels (DeepTiledInputPart &in); - - - - - //-------------------------------------------------------------- - // Updating the preview image: - // - // updatePreviewImage() supplies a new set of pixels for the - // preview image attribute in the file's header. If the header - // does not contain a preview image, updatePreviewImage() throws - // an IEX_NAMESPACE::LogicExc. - // - // Note: updatePreviewImage() is necessary because images are - // often stored in a file incrementally, a few tiles at a time, - // while the image is being generated. Since the preview image - // is an attribute in the file's header, it gets stored in the - // file as soon as the file is opened, but we may not know what - // the preview image should look like until we have written the - // last tile of the main image. - // - //-------------------------------------------------------------- - - IMF_EXPORT - void updatePreviewImage (const PreviewRgba newPixels[]); - - - //------------------------------------------------------------- - // Break a tile -- for testing and debugging only: - // - // breakTile(dx,dy,lx,ly,p,n,c) introduces an error into the - // output file by writing n copies of character c, starting - // p bytes from the beginning of the tile with tile coordinates - // (dx, dy) and level number (lx, ly). - // - // Warning: Calling this function usually results in a broken - // image file. The file or parts of it may not be readable, - // or the file may contain bad data. - // - //------------------------------------------------------------- - - IMF_EXPORT - void breakTile (int dx, int dy, - int lx, int ly, - int offset, - int length, - char c); - - private: - DeepTiledOutputFile* file; - -}; - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT - -#endif /* IMFDEEPTILEDOUTPUTPART_H_ */ diff --git a/3rdparty/openexr/IlmImf/ImfDoubleAttribute.cpp b/3rdparty/openexr/IlmImf/ImfDoubleAttribute.cpp deleted file mode 100644 index cbeabe32cf..0000000000 --- a/3rdparty/openexr/IlmImf/ImfDoubleAttribute.cpp +++ /dev/null @@ -1,57 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - - -//----------------------------------------------------------------------------- -// -// class DoubleAttribute -// -//----------------------------------------------------------------------------- - -#include - - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_ENTER - - -template <> -const char * -DoubleAttribute::staticTypeName () -{ - return "double"; -} - - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_EXIT diff --git a/3rdparty/openexr/IlmImf/ImfDoubleAttribute.h b/3rdparty/openexr/IlmImf/ImfDoubleAttribute.h deleted file mode 100644 index d9a88a850e..0000000000 --- a/3rdparty/openexr/IlmImf/ImfDoubleAttribute.h +++ /dev/null @@ -1,59 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - - -#ifndef INCLUDED_IMF_DOUBLE_ATTRIBUTE_H -#define INCLUDED_IMF_DOUBLE_ATTRIBUTE_H - -//----------------------------------------------------------------------------- -// -// class DoubleAttribute -// -//----------------------------------------------------------------------------- - -#include "ImfAttribute.h" -#include "ImfExport.h" - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER - - -typedef TypedAttribute DoubleAttribute; -template <> IMF_EXPORT const char *DoubleAttribute::staticTypeName (); - - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT - - -#endif diff --git a/3rdparty/openexr/IlmImf/ImfDwaCompressor.cpp b/3rdparty/openexr/IlmImf/ImfDwaCompressor.cpp deleted file mode 100644 index 7665730a17..0000000000 --- a/3rdparty/openexr/IlmImf/ImfDwaCompressor.cpp +++ /dev/null @@ -1,3439 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2009-2014 DreamWorks Animation LLC. -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of DreamWorks Animation nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - -//--------------------------------------------------- -// -// class DwaCompressor -- Store lossy RGB data by quantizing -// DCT components. -// -// First, we try and figure out what compression strategy to take -// based in channel name. For RGB channels, we want a lossy method -// described below. But, if we have alpha, we should do something -// different (and probably using RLE). If we have depth, or velocity, -// or something else, just fall back to ZIP. The rules for deciding -// which strategy to use are setup in initializeDefaultChannelRules(). -// When writing a file, the relevant rules needed to decode are written -// into the start of the data block, making a self-contained file. -// If initializeDefaultChannelRules() doesn't quite suite your naming -// conventions, you can adjust the rules without breaking decoder -// compatability. -// -// If we're going to lossy compress R, G, or B channels, it's easier -// to toss bits in a more perceptual uniform space. One could argue -// at length as to what constitutes perceptually uniform, expecially -// when storing either scene/input/focal plane referred and output referred -// data. -// -// We'll compromise. For values <= 1, we use a traditional power function -// (without any of that straight-line business at the bottom). For values > 1, -// we want something more like a log function, since power functions blow -// up. At 1, we want a smooth blend between the functions. So, we use a -// piecewise function that does just that - see dwaLookups.cpp for -// a little more detail. -// -// Also, if we find that we have R, G, and B channels from the same layer, -// we can get a bit more compression efficiency by transforming to a Y'CbCr -// space. We use the 709 transform, but with Cb,Cr = 0 for an input of -// (0, 0, 0), instead of the traditional Cb,Cr = .5. Shifting the zero point -// makes no sense with large range data. Transforms are done to from -// the perceptual space data, not the linear-light space data (R'G'B' -> -// (Y'CbCr, not RGB -> YCbCr). -// -// Next, we forward DCT the data. This is done with a floating -// point DCT, as we don't really have control over the src range. The -// resulting values are dropped to half-float precision. -// -// Now, we need to quantize. Quantization departs from the usual way -// of dividing and rounding. Instead, we start with some floating -// point "base-error" value. From this, we can derive quantization -// error for each DCT component. Take the standard JPEG quantization -// tables and normalize them by the smallest value. Then, multiply -// the normalized quant tables by our base-error value. This gives -// a range of errors for each DCT component. -// -// For each DCT component, we want to find a quantized value that -// is within +- the per-component error. Pick the quantized value -// that has the fewest bits set in its' binary representation. -// Brute-forcing the search would make for extremly inefficient -// compression. Fortunatly, we can precompute a table to assist -// with this search. -// -// For each 16-bit float value, there are at most 15 other values with -// fewer bits set. We can precompute these values in a compact form, since -// many source values have far fewer that 15 possible quantized values. -// Now, instead of searching the entire range +- the component error, -// we can just search at most 15 quantization candidates. The search can -// be accelerated a bit more by sorting the candidates by the -// number of bits set, in increasing order. Then, the search can stop -// once a candidate is found w/i the per-component quantization -// error range. -// -// The quantization strategy has the side-benefit that there is no -// de-quantization step upon decode, so we don't bother recording -// the quantization table. -// -// Ok. So we now have quantized values. Time for entropy coding. We -// can use either static Huffman or zlib/DEFLATE. The static Huffman -// is more efficient at compacting data, but can have a greater -// overhead, especially for smaller tile/strip sizes. -// -// There is some additional fun, like ZIP compressing the DC components -// instead of Huffman/zlib, which helps make things slightly smaller. -// -// Compression level is controlled by setting an int/float/double attribute -// on the header named "dwaCompressionLevel". This is a thinly veiled name for -// the "base-error" value mentioned above. The "base-error" is just -// dwaCompressionLevel / 100000. The default value of 45.0 is generally -// pretty good at generating "visually lossless" values at reasonable -// data rates. Setting dwaCompressionLevel to 0 should result in no additional -// quantization at the quantization stage (though there may be -// quantization in practice at the CSC/DCT steps). But if you really -// want lossless compression, there are pleanty of other choices -// of compressors ;) -// -// When dealing with FLOAT source buffers, we first quantize the source -// to HALF and continue down as we would for HALF source. -// -//--------------------------------------------------- - - -#include "ImfDwaCompressor.h" -#include "ImfDwaCompressorSimd.h" - -#include "ImfChannelList.h" -#include "ImfStandardAttributes.h" -#include "ImfHeader.h" -#include "ImfHuf.h" -#include "ImfInt64.h" -#include "ImfIntAttribute.h" -#include "ImfIO.h" -#include "ImfMisc.h" -#include "ImfNamespace.h" -#include "ImfRle.h" -#include "ImfSimd.h" -#include "ImfSystemSpecific.h" -#include "ImfXdr.h" -#include "ImfZip.h" - -#include "ImathFun.h" -#include "ImathBox.h" -#include "ImathVec.h" -#include "half.h" -#include "halfLimits.h" - -#include "dwaLookups.h" - -#include -#include -#include -#include -#include - -// Windows specific addition to prevent the indirect import of the redefined min/max macros -#if defined _WIN32 || defined _WIN64 - #ifdef NOMINMAX - #undef NOMINMAX - #endif - #define NOMINMAX -#endif -#include - - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_ENTER - - -namespace { - - // - // Function pointer to dispatch to an approprate - // convertFloatToHalf64_* impl, based on runtime cpu checking. - // Should be initialized in DwaCompressor::initializeFuncs() - // - - void (*convertFloatToHalf64)(unsigned short*, float*) = - convertFloatToHalf64_scalar; - - // - // Function pointer for dispatching a fromHalfZigZag_ impl - // - - void (*fromHalfZigZag)(unsigned short*, float*) = - fromHalfZigZag_scalar; - - // - // Dispatch the inverse DCT on an 8x8 block, where the last - // n rows can be all zeros. The n=0 case converts the full block. - // - void (*dctInverse8x8_0)(float*) = dctInverse8x8_scalar<0>; - void (*dctInverse8x8_1)(float*) = dctInverse8x8_scalar<1>; - void (*dctInverse8x8_2)(float*) = dctInverse8x8_scalar<2>; - void (*dctInverse8x8_3)(float*) = dctInverse8x8_scalar<3>; - void (*dctInverse8x8_4)(float*) = dctInverse8x8_scalar<4>; - void (*dctInverse8x8_5)(float*) = dctInverse8x8_scalar<5>; - void (*dctInverse8x8_6)(float*) = dctInverse8x8_scalar<6>; - void (*dctInverse8x8_7)(float*) = dctInverse8x8_scalar<7>; - -} // namespace - - -struct DwaCompressor::ChannelData -{ - std::string name; - CompressorScheme compression; - int xSampling; - int ySampling; - PixelType type; - bool pLinear; - - int width; - int height; - - // - // Incoming and outgoing data is scanline interleaved, and it's much - // easier to operate on contiguous data. Assuming the planare unc - // buffer is to hold RLE data, we need to rearrange to make bytes - // adjacent. - // - - char *planarUncBuffer; - char *planarUncBufferEnd; - - char *planarUncRle[4]; - char *planarUncRleEnd[4]; - - PixelType planarUncType; - int planarUncSize; -}; - - -struct DwaCompressor::CscChannelSet -{ - int idx[3]; -}; - - -struct DwaCompressor::Classifier -{ - Classifier (std::string suffix, - CompressorScheme scheme, - PixelType type, - int cscIdx, - bool caseInsensitive): - _suffix(suffix), - _scheme(scheme), - _type(type), - _cscIdx(cscIdx), - _caseInsensitive(caseInsensitive) - { - if (caseInsensitive) - std::transform(_suffix.begin(), _suffix.end(), _suffix.begin(), tolower); - } - - Classifier (const char *&ptr, int size) - { - if (size <= 0) - throw IEX_NAMESPACE::InputExc("Error uncompressing DWA data" - " (truncated rule)."); - - { - char suffix[Name::SIZE]; - memset (suffix, 0, Name::SIZE); - Xdr::read (ptr, std::min(size, Name::SIZE-1), suffix); - _suffix = std::string(suffix); - } - - if (size < _suffix.length() + 1 + 2*Xdr::size()) - throw IEX_NAMESPACE::InputExc("Error uncompressing DWA data" - " (truncated rule)."); - - char value; - Xdr::read (ptr, value); - - _cscIdx = (int)(value >> 4) - 1; - if (_cscIdx < -1 || _cscIdx >= 3) - throw IEX_NAMESPACE::InputExc("Error uncompressing DWA data" - " (corrupt cscIdx rule)."); - - _scheme = (CompressorScheme)((value >> 2) & 3); - if (_scheme < 0 || _scheme >= NUM_COMPRESSOR_SCHEMES) - throw IEX_NAMESPACE::InputExc("Error uncompressing DWA data" - " (corrupt scheme rule)."); - - _caseInsensitive = (value & 1 ? true : false); - - Xdr::read (ptr, value); - if (value < 0 || value >= NUM_PIXELTYPES) - throw IEX_NAMESPACE::InputExc("Error uncompressing DWA data" - " (corrupt rule)."); - _type = (PixelType)value; - } - - bool match (const std::string &suffix, const PixelType type) const - { - if (_type != type) return false; - - if (_caseInsensitive) - { - std::string tmp(suffix); - std::transform(tmp.begin(), tmp.end(), tmp.begin(), tolower); - return tmp == _suffix; - } - - return suffix == _suffix; - } - - size_t size () const - { - // string length + \0 - size_t sizeBytes = _suffix.length() + 1; - - // 1 byte for scheme / cscIdx / caseInsensitive, and 1 byte for type - sizeBytes += 2 * Xdr::size(); - - return sizeBytes; - } - - void write (char *&ptr) const - { - Xdr::write (ptr, _suffix.c_str()); - - // Encode _cscIdx (-1-3) in the upper 4 bits, - // _scheme (0-2) in the next 2 bits - // _caseInsen in the bottom bit - unsigned char value = 0; - value |= ((unsigned char)(_cscIdx+1) & 15) << 4; - value |= ((unsigned char)_scheme & 3) << 2; - value |= (unsigned char)_caseInsensitive & 1; - - Xdr::write (ptr, value); - Xdr::write (ptr, (unsigned char)_type); - } - - std::string _suffix; - CompressorScheme _scheme; - PixelType _type; - int _cscIdx; - bool _caseInsensitive; -}; - - -// -// Base class for the LOSSY_DCT decoder classes -// - -class DwaCompressor::LossyDctDecoderBase -{ - public: - - LossyDctDecoderBase - (char *packedAc, - char *packedDc, - const unsigned short *toLinear, - int width, - int height); - - virtual ~LossyDctDecoderBase (); - - void execute(); - - // - // These return number of items, not bytes. Each item - // is an unsigned short - // - - int numAcValuesEncoded() const { return _packedAcCount; } - int numDcValuesEncoded() const { return _packedDcCount; } - - protected: - - // - // Un-RLE the packed AC components into - // a half buffer. The half block should - // be the full 8x8 block (in zig-zag order - // still), not the first AC component. - // - // currAcComp is advanced as bytes are decoded. - // - // This returns the index of the last non-zero - // value in the buffer - with the index into zig zag - // order data. If we return 0, we have DC only data. - // - - int unRleAc (unsigned short *&currAcComp, - unsigned short *halfZigBlock); - - - // - // if NATIVE and XDR are really the same values, we can - // skip some processing and speed things along - // - - bool _isNativeXdr; - - - // - // Counts of how many items have been packed into the - // AC and DC buffers - // - - int _packedAcCount; - int _packedDcCount; - - - // - // AC and DC buffers to pack - // - - char *_packedAc; - char *_packedDc; - - - // - // half -> half LUT to transform from nonlinear to linear - // - - const unsigned short *_toLinear; - - - // - // image dimensions - // - - int _width; - int _height; - - - // - // Pointers to the start of each scanlines, to be filled on decode - // Generally, these will be filled by the subclasses. - // - - std::vector< std::vector > _rowPtrs; - - - // - // The type of each data that _rowPtrs[i] is referring. Layout - // is in the same order as _rowPtrs[]. - // - - std::vector _type; - std::vector _dctData; -}; - - -// -// Used to decode a single channel of LOSSY_DCT data. -// - -class DwaCompressor::LossyDctDecoder: public LossyDctDecoderBase -{ - public: - - // - // toLinear is a half-float LUT to convert the encoded values - // back to linear light. If you want to skip this step, pass - // in NULL here. - // - - LossyDctDecoder - (std::vector &rowPtrs, - char *packedAc, - char *packedDc, - const unsigned short *toLinear, - int width, - int height, - PixelType type) - : - LossyDctDecoderBase(packedAc, packedDc, toLinear, width, height) - { - _rowPtrs.push_back(rowPtrs); - _type.push_back(type); - } - - virtual ~LossyDctDecoder () {} -}; - - -// -// Used to decode 3 channels of LOSSY_DCT data that -// are grouped together and color space converted. -// - -class DwaCompressor::LossyDctDecoderCsc: public LossyDctDecoderBase -{ - public: - - // - // toLinear is a half-float LUT to convert the encoded values - // back to linear light. If you want to skip this step, pass - // in NULL here. - // - - LossyDctDecoderCsc - (std::vector &rowPtrsR, - std::vector &rowPtrsG, - std::vector &rowPtrsB, - char *packedAc, - char *packedDc, - const unsigned short *toLinear, - int width, - int height, - PixelType typeR, - PixelType typeG, - PixelType typeB) - : - LossyDctDecoderBase(packedAc, packedDc, toLinear, width, height) - { - _rowPtrs.push_back(rowPtrsR); - _rowPtrs.push_back(rowPtrsG); - _rowPtrs.push_back(rowPtrsB); - _type.push_back(typeR); - _type.push_back(typeG); - _type.push_back(typeB); - } - - virtual ~LossyDctDecoderCsc () {} -}; - - -// -// Base class for encoding using the lossy DCT scheme -// - -class DwaCompressor::LossyDctEncoderBase -{ - public: - - LossyDctEncoderBase - (float quantBaseError, - char *packedAc, - char *packedDc, - const unsigned short *toNonlinear, - int width, - int height); - - virtual ~LossyDctEncoderBase (); - - void execute (); - - // - // These return number of items, not bytes. Each item - // is an unsigned short - // - - int numAcValuesEncoded () const {return _numAcComp;} - int numDcValuesEncoded () const {return _numDcComp;} - - protected: - - void toZigZag (half *dst, half *src); - int countSetBits (unsigned short src); - half quantize (half src, float errorTolerance); - void rleAc (half *block, unsigned short *&acPtr); - - float _quantBaseError; - - int _width, - _height; - const unsigned short *_toNonlinear; - - int _numAcComp, - _numDcComp; - - std::vector< std::vector > _rowPtrs; - std::vector _type; - std::vector _dctData; - - - // - // Pointers to the buffers where AC and DC - // DCT components should be packed for - // lossless compression downstream - // - - char *_packedAc; - char *_packedDc; - - - // - // Our "quantization tables" - the example JPEG tables, - // normalized so that the smallest value in each is 1.0. - // This gives us a relationship between error in DCT - // components - // - - float _quantTableY[64]; - float _quantTableCbCr[64]; -}; - - - -// -// Single channel lossy DCT encoder -// - -class DwaCompressor::LossyDctEncoder: public LossyDctEncoderBase -{ - public: - - LossyDctEncoder - (float quantBaseError, - std::vector &rowPtrs, - char *packedAc, - char *packedDc, - const unsigned short *toNonlinear, - int width, - int height, - PixelType type) - : - LossyDctEncoderBase - (quantBaseError, packedAc, packedDc, toNonlinear, width, height) - { - _rowPtrs.push_back(rowPtrs); - _type.push_back(type); - } - - virtual ~LossyDctEncoder () {} -}; - - -// -// RGB channel lossy DCT encoder -// - -class DwaCompressor::LossyDctEncoderCsc: public LossyDctEncoderBase -{ - public: - - LossyDctEncoderCsc - (float quantBaseError, - std::vector &rowPtrsR, - std::vector &rowPtrsG, - std::vector &rowPtrsB, - char *packedAc, - char *packedDc, - const unsigned short *toNonlinear, - int width, - int height, - PixelType typeR, - PixelType typeG, - PixelType typeB) - : - LossyDctEncoderBase - (quantBaseError, packedAc, packedDc, toNonlinear, width, height) - { - _type.push_back(typeR); - _type.push_back(typeG); - _type.push_back(typeB); - - _rowPtrs.push_back(rowPtrsR); - _rowPtrs.push_back(rowPtrsG); - _rowPtrs.push_back(rowPtrsB); - } - - virtual ~LossyDctEncoderCsc () {} -}; - - -// ============================================================== -// -// LossyDctDecoderBase -// -// -------------------------------------------------------------- - -DwaCompressor::LossyDctDecoderBase::LossyDctDecoderBase - (char *packedAc, - char *packedDc, - const unsigned short *toLinear, - int width, - int height) -: - _isNativeXdr(false), - _packedAcCount(0), - _packedDcCount(0), - _packedAc(packedAc), - _packedDc(packedDc), - _toLinear(toLinear), - _width(width), - _height(height) -{ - if (_toLinear == 0) - _toLinear = get_dwaCompressorNoOp(); - - _isNativeXdr = GLOBAL_SYSTEM_LITTLE_ENDIAN; -} - - -DwaCompressor::LossyDctDecoderBase::~LossyDctDecoderBase () {} - - -void -DwaCompressor::LossyDctDecoderBase::execute () -{ - int numComp = _rowPtrs.size(); - int lastNonZero = 0; - int numBlocksX = (int) ceil ((float)_width / 8.0f); - int numBlocksY = (int) ceil ((float)_height / 8.0f); - int leftoverX = _width - (numBlocksX-1) * 8; - int leftoverY = _height - (numBlocksY-1) * 8; - - int numFullBlocksX = (int)floor ((float)_width / 8.0f); - - unsigned short tmpShortNative = 0; - unsigned short tmpShortXdr = 0; - const char *tmpConstCharPtr = 0; - - unsigned short *currAcComp = (unsigned short *)_packedAc; - std::vector currDcComp (_rowPtrs.size()); - std::vector halfZigBlock (_rowPtrs.size()); - - if (_type.size() != _rowPtrs.size()) - throw IEX_NAMESPACE::BaseExc ("Row pointers and types mismatch in count"); - - if ((_rowPtrs.size() != 3) && (_rowPtrs.size() != 1)) - throw IEX_NAMESPACE::NoImplExc ("Only 1 and 3 channel encoding is supported"); - - _dctData.resize(numComp); - - // - // Allocate a temp aligned buffer to hold a rows worth of full - // 8x8 half-float blocks - // - - unsigned char *rowBlockHandle = new unsigned char - [numComp * numBlocksX * 64 * sizeof(unsigned short) + _SSE_ALIGNMENT]; - - unsigned short *rowBlock[3]; - - rowBlock[0] = (unsigned short*)rowBlockHandle; - - for (int i = 0; i < _SSE_ALIGNMENT; ++i) - { - if (((size_t)(rowBlockHandle + i) & _SSE_ALIGNMENT_MASK) == 0) - rowBlock[0] = (unsigned short *)(rowBlockHandle + i); - } - - for (int comp = 1; comp < numComp; ++comp) - rowBlock[comp] = rowBlock[comp - 1] + numBlocksX * 64; - - // - // Pack DC components together by common plane, so we can get - // a little more out of differencing them. We'll always have - // one component per block, so we can computed offsets. - // - - currDcComp[0] = (unsigned short *)_packedDc; - - for (unsigned int comp = 1; comp < numComp; ++comp) - currDcComp[comp] = currDcComp[comp - 1] + numBlocksX * numBlocksY; - - for (int blocky = 0; blocky < numBlocksY; ++blocky) - { - int maxY = 8; - - if (blocky == numBlocksY-1) - maxY = leftoverY; - - int maxX = 8; - - for (int blockx = 0; blockx < numBlocksX; ++blockx) - { - if (blockx == numBlocksX-1) - maxX = leftoverX; - - // - // If we can detect that the block is constant values - // (all components only have DC values, and all AC is 0), - // we can do everything only on 1 value, instead of all - // 64. - // - // This won't really help for regular images, but it is - // meant more for layers with large swaths of black - // - - bool blockIsConstant = true; - - for (unsigned int comp = 0; comp < numComp; ++comp) - { - - // - // DC component is stored separately - // - - #ifdef IMF_HAVE_SSE2 - { - __m128i *dst = (__m128i*)halfZigBlock[comp]._buffer; - - dst[7] = _mm_setzero_si128(); - dst[6] = _mm_setzero_si128(); - dst[5] = _mm_setzero_si128(); - dst[4] = _mm_setzero_si128(); - dst[3] = _mm_setzero_si128(); - dst[2] = _mm_setzero_si128(); - dst[1] = _mm_setzero_si128(); - dst[0] = _mm_insert_epi16 - (_mm_setzero_si128(), *currDcComp[comp]++, 0); - } - #else /* IMF_HAVE_SSE2 */ - - memset (halfZigBlock[comp]._buffer, 0, 64 * 2); - halfZigBlock[comp]._buffer[0] = *currDcComp[comp]++; - - #endif /* IMF_HAVE_SSE2 */ - - _packedDcCount++; - - // - // UnRLE the AC. This will modify currAcComp - // - - lastNonZero = unRleAc (currAcComp, halfZigBlock[comp]._buffer); - - // - // Convert from XDR to NATIVE - // - - if (!_isNativeXdr) - { - for (int i = 0; i < 64; ++i) - { - tmpShortXdr = halfZigBlock[comp]._buffer[i]; - tmpConstCharPtr = (const char *)&tmpShortXdr; - - Xdr::read (tmpConstCharPtr, tmpShortNative); - - halfZigBlock[comp]._buffer[i] = tmpShortNative; - } - } - - if (lastNonZero == 0) - { - // - // DC only case - AC components are all 0 - // - - half h; - - h.setBits (halfZigBlock[comp]._buffer[0]); - _dctData[comp]._buffer[0] = (float)h; - - dctInverse8x8DcOnly (_dctData[comp]._buffer); - } - else - { - // - // We have some AC components that are non-zero. - // Can't use the 'constant block' optimization - // - - blockIsConstant = false; - - // - // Un-Zig zag - // - - (*fromHalfZigZag) - (halfZigBlock[comp]._buffer, _dctData[comp]._buffer); - - // - // Zig-Zag indices in normal layout are as follows: - // - // 0 1 5 6 14 15 27 28 - // 2 4 7 13 16 26 29 42 - // 3 8 12 17 25 30 41 43 - // 9 11 18 24 31 40 44 53 - // 10 19 23 32 39 45 52 54 - // 20 22 33 38 46 51 55 60 - // 21 34 37 47 50 56 59 61 - // 35 36 48 49 57 58 62 63 - // - // If lastNonZero is less than the first item on - // each row, we know that the whole row is zero and - // can be skipped in the row-oriented part of the - // iDCT. - // - // The unrolled logic here is: - // - // if lastNonZero < rowStartIdx[i], - // zeroedRows = rowsEmpty[i] - // - // where: - // - // const int rowStartIdx[] = {2, 3, 9, 10, 20, 21, 35}; - // const int rowsEmpty[] = {7, 6, 5, 4, 3, 2, 1}; - // - - if (lastNonZero < 2) - dctInverse8x8_7(_dctData[comp]._buffer); - else if (lastNonZero < 3) - dctInverse8x8_6(_dctData[comp]._buffer); - else if (lastNonZero < 9) - dctInverse8x8_5(_dctData[comp]._buffer); - else if (lastNonZero < 10) - dctInverse8x8_4(_dctData[comp]._buffer); - else if (lastNonZero < 20) - dctInverse8x8_3(_dctData[comp]._buffer); - else if (lastNonZero < 21) - dctInverse8x8_2(_dctData[comp]._buffer); - else if (lastNonZero < 35) - dctInverse8x8_1(_dctData[comp]._buffer); - else - dctInverse8x8_0(_dctData[comp]._buffer); - } - } - - // - // Perform the CSC - // - - if (numComp == 3) - { - if (!blockIsConstant) - { - csc709Inverse64 (_dctData[0]._buffer, - _dctData[1]._buffer, - _dctData[2]._buffer); - - } - else - { - csc709Inverse (_dctData[0]._buffer[0], - _dctData[1]._buffer[0], - _dctData[2]._buffer[0]); - } - } - - // - // Float -> Half conversion. - // - // If the block has a constant value, just convert the first pixel. - // - - for (unsigned int comp = 0; comp < numComp; ++comp) - { - if (!blockIsConstant) - { - (*convertFloatToHalf64) - (&rowBlock[comp][blockx*64], _dctData[comp]._buffer); - } - else - { - #ifdef IMF_HAVE_SSE2 - - __m128i *dst = (__m128i*)&rowBlock[comp][blockx*64]; - - dst[0] = _mm_set1_epi16 - (((half)_dctData[comp]._buffer[0]).bits()); - - dst[1] = dst[0]; - dst[2] = dst[0]; - dst[3] = dst[0]; - dst[4] = dst[0]; - dst[5] = dst[0]; - dst[6] = dst[0]; - dst[7] = dst[0]; - - #else /* IMF_HAVE_SSE2 */ - - unsigned short *dst = &rowBlock[comp][blockx*64]; - - dst[0] = ((half)_dctData[comp]._buffer[0]).bits(); - - for (int i = 1; i < 64; ++i) - { - dst[i] = dst[0]; - } - - #endif /* IMF_HAVE_SSE2 */ - } // blockIsConstant - } // comp - } // blockx - - // - // At this point, we have half-float nonlinear value blocked - // in rowBlock[][]. We need to unblock the data, transfer - // back to linear, and write the results in the _rowPtrs[]. - // - // There is a fast-path for aligned rows, which helps - // things a little. Since this fast path is only valid - // for full 8-element wide blocks, the partial x blocks - // are broken into a separate loop below. - // - // At the moment, the fast path requires: - // * sse support - // * aligned row pointers - // * full 8-element wide blocks - // - - for (int comp = 0; comp < numComp; ++comp) - { - // - // Test if we can use the fast path - // - - #ifdef IMF_HAVE_SSE2 - - bool fastPath = true; - - for (int y = 8 * blocky; y < 8 * blocky + maxY; ++y) - { - if ((size_t)_rowPtrs[comp][y] & _SSE_ALIGNMENT_MASK) - fastPath = false; - } - - if (fastPath) - { - // - // Handle all the full X blocks, in a fast path with sse2 and - // aligned row pointers - // - - for (int y=8*blocky; y<8*blocky+maxY; ++y) - { - __m128i *dst = (__m128i *)_rowPtrs[comp][y]; - __m128i *src = (__m128i *)&rowBlock[comp][(y & 0x7) * 8]; - - - for (int blockx = 0; blockx < numFullBlocksX; ++blockx) - { - // - // These may need some twiddling. - // Run with multiples of 8 - // - - _mm_prefetch ((char *)(src + 16), _MM_HINT_NTA); - - unsigned short i0 = _mm_extract_epi16 (*src, 0); - unsigned short i1 = _mm_extract_epi16 (*src, 1); - unsigned short i2 = _mm_extract_epi16 (*src, 2); - unsigned short i3 = _mm_extract_epi16 (*src, 3); - - unsigned short i4 = _mm_extract_epi16 (*src, 4); - unsigned short i5 = _mm_extract_epi16 (*src, 5); - unsigned short i6 = _mm_extract_epi16 (*src, 6); - unsigned short i7 = _mm_extract_epi16 (*src, 7); - - i0 = _toLinear[i0]; - i1 = _toLinear[i1]; - i2 = _toLinear[i2]; - i3 = _toLinear[i3]; - - i4 = _toLinear[i4]; - i5 = _toLinear[i5]; - i6 = _toLinear[i6]; - i7 = _toLinear[i7]; - - *dst = _mm_insert_epi16 (_mm_setzero_si128(), i0, 0); - *dst = _mm_insert_epi16 (*dst, i1, 1); - *dst = _mm_insert_epi16 (*dst, i2, 2); - *dst = _mm_insert_epi16 (*dst, i3, 3); - - *dst = _mm_insert_epi16 (*dst, i4, 4); - *dst = _mm_insert_epi16 (*dst, i5, 5); - *dst = _mm_insert_epi16 (*dst, i6, 6); - *dst = _mm_insert_epi16 (*dst, i7, 7); - - src += 8; - dst++; - } - } - } - else - { - - #endif /* IMF_HAVE_SSE2 */ - - // - // Basic scalar kinda slow path for handling the full X blocks - // - - for (int y = 8 * blocky; y < 8 * blocky + maxY; ++y) - { - unsigned short *dst = (unsigned short *)_rowPtrs[comp][y]; - - for (int blockx = 0; blockx < numFullBlocksX; ++blockx) - { - unsigned short *src = - &rowBlock[comp][blockx * 64 + ((y & 0x7) * 8)]; - - dst[0] = _toLinear[src[0]]; - dst[1] = _toLinear[src[1]]; - dst[2] = _toLinear[src[2]]; - dst[3] = _toLinear[src[3]]; - - dst[4] = _toLinear[src[4]]; - dst[5] = _toLinear[src[5]]; - dst[6] = _toLinear[src[6]]; - dst[7] = _toLinear[src[7]]; - - dst += 8; - } - } - - #ifdef IMF_HAVE_SSE2 - - } - - #endif /* IMF_HAVE_SSE2 */ - - // - // If we have partial X blocks, deal with all those now - // Since this should be minimal work, there currently - // is only one path that should work for everyone. - // - - if (numFullBlocksX != numBlocksX) - { - for (int y = 8 * blocky; y < 8 * blocky + maxY; ++y) - { - unsigned short *src = (unsigned short *) - &rowBlock[comp][numFullBlocksX * 64 + ((y & 0x7) * 8)]; - - unsigned short *dst = (unsigned short *)_rowPtrs[comp][y]; - - dst += 8 * numFullBlocksX; - - for (int x = 0; x < maxX; ++x) - { - *dst++ = _toLinear[*src++]; - } - } - } - } // comp - } // blocky - - // - // Walk over all the channels that are of type FLOAT. - // Convert from HALF XDR back to FLOAT XDR. - // - - for (unsigned int chan = 0; chan < numComp; ++chan) - { - - if (_type[chan] != FLOAT) - continue; - - std::vector halfXdr (_width); - - for (int y=0; y<_height; ++y) - { - char *floatXdrPtr = _rowPtrs[chan][y]; - - memcpy(&halfXdr[0], floatXdrPtr, _width*sizeof(unsigned short)); - - const char *halfXdrPtr = (const char *)(&halfXdr[0]); - - for (int x=0; x<_width; ++x) - { - half tmpHalf; - - Xdr::read (halfXdrPtr, tmpHalf); - Xdr::write (floatXdrPtr, (float)tmpHalf); - - // - // Xdr::write and Xdr::read will advance the ptrs - // - } - } - } - - delete[] rowBlockHandle; -} - - -// -// Un-RLE the packed AC components into -// a half buffer. The half block should -// be the full 8x8 block (in zig-zag order -// still), not the first AC component. -// -// currAcComp is advanced as bytes are decoded. -// -// This returns the index of the last non-zero -// value in the buffer - with the index into zig zag -// order data. If we return 0, we have DC only data. -// -// This is assuminging that halfZigBlock is zero'ed -// prior to calling -// - -int -DwaCompressor::LossyDctDecoderBase::unRleAc - (unsigned short *&currAcComp, - unsigned short *halfZigBlock) -{ - // - // Un-RLE the RLE'd blocks. If we find an item whose - // high byte is 0xff, then insert the number of 0's - // as indicated by the low byte. - // - // Otherwise, just copy the number verbaitm. - // - - int lastNonZero = 0; - int dctComp = 1; - - // - // Start with a zero'ed block, so we don't have to - // write when we hit a run symbol - // - - while (dctComp < 64) - { - if (*currAcComp == 0xff00) - { - // - // End of block - // - - dctComp = 64; - - } - else if ((*currAcComp) >> 8 == 0xff) - { - // - // Run detected! Insert 0's. - // - // Since the block has been zeroed, just advance the ptr - // - - dctComp += (*currAcComp) & 0xff; - } - else - { - // - // Not a run, just copy over the value - // - - lastNonZero = dctComp; - halfZigBlock[dctComp] = *currAcComp; - - dctComp++; - } - - _packedAcCount++; - currAcComp++; - } - - return lastNonZero; -} - - -// ============================================================== -// -// LossyDctEncoderBase -// -// -------------------------------------------------------------- - -DwaCompressor::LossyDctEncoderBase::LossyDctEncoderBase - (float quantBaseError, - char *packedAc, - char *packedDc, - const unsigned short *toNonlinear, - int width, - int height) -: - _quantBaseError(quantBaseError), - _width(width), - _height(height), - _toNonlinear(toNonlinear), - _numAcComp(0), - _numDcComp(0), - _packedAc(packedAc), - _packedDc(packedDc) -{ - // - // Here, we take the generic JPEG quantization tables and - // normalize them by the smallest component in each table. - // This gives us a relationship amongst the DCT components, - // in terms of how sensitive each component is to - // error. - // - // A higher normalized value means we can quantize more, - // and a small normalized value means we can quantize less. - // - // Eventually, we will want an acceptable quantization - // error range for each component. We find this by - // multiplying some user-specified level (_quantBaseError) - // by the normalized table (_quantTableY, _quantTableCbCr) to - // find the acceptable quantization error range. - // - // The quantization table is not needed for decoding, and - // is not transmitted. So, if you want to get really fancy, - // you could derive some content-dependent quantization - // table, and the decoder would not need to be changed. But, - // for now, we'll just use statice quantization tables. - // - - int jpegQuantTableY[] = - { - 16, 11, 10, 16, 24, 40, 51, 61, - 12, 12, 14, 19, 26, 58, 60, 55, - 14, 13, 16, 24, 40, 57, 69, 56, - 14, 17, 22, 29, 51, 87, 80, 62, - 18, 22, 37, 56, 68, 109, 103, 77, - 24, 35, 55, 64, 81, 104, 113, 92, - 49, 64, 78, 87, 103, 121, 120, 101, - 72, 92, 95, 98, 112, 100, 103, 99 - }; - - int jpegQuantTableYMin = 10; - - int jpegQuantTableCbCr[] = - { - 17, 18, 24, 47, 99, 99, 99, 99, - 18, 21, 26, 66, 99, 99, 99, 99, - 24, 26, 56, 99, 99, 99, 99, 99, - 47, 66, 99, 99, 99, 99, 99, 99, - 99, 99, 99, 99, 99, 99, 99, 99, - 99, 99, 99, 99, 99, 99, 99, 99, - 99, 99, 99, 99, 99, 99, 99, 99, - 99, 99, 99, 99, 99, 99, 99, 99 - }; - - int jpegQuantTableCbCrMin = 17; - - for (int idx = 0; idx < 64; ++idx) - { - _quantTableY[idx] = static_cast (jpegQuantTableY[idx]) / - static_cast (jpegQuantTableYMin); - - _quantTableCbCr[idx] = static_cast (jpegQuantTableCbCr[idx]) / - static_cast (jpegQuantTableCbCrMin); - } - - if (_quantBaseError < 0) - quantBaseError = 0; -} - - -DwaCompressor::LossyDctEncoderBase::~LossyDctEncoderBase () -{ -} - - -// -// Given three channels of source data, encoding by first applying -// a color space conversion to a YCbCr space. Otherwise, if we only -// have one channel, just encode it as is. -// -// Other numbers of channels are somewhat unexpected at this point, -// and will throw an exception. -// - -void -DwaCompressor::LossyDctEncoderBase::execute () -{ - int numBlocksX = (int)ceil ((float)_width / 8.0f); - int numBlocksY = (int)ceil ((float)_height/ 8.0f); - - half halfZigCoef[64]; - half halfCoef[64]; - - std::vector currDcComp (_rowPtrs.size()); - unsigned short *currAcComp = (unsigned short *)_packedAc; - - _dctData.resize (_rowPtrs.size()); - _numAcComp = 0; - _numDcComp = 0; - - assert (_type.size() == _rowPtrs.size()); - assert ((_rowPtrs.size() == 3) || (_rowPtrs.size() == 1)); - - // - // Allocate a temp half buffer to quantize into for - // any FLOAT source channels. - // - - int tmpHalfBufferElements = 0; - - for (unsigned int chan = 0; chan < _rowPtrs.size(); ++chan) - if (_type[chan] == FLOAT) - tmpHalfBufferElements += _width * _height; - - std::vector tmpHalfBuffer (tmpHalfBufferElements); - - char *tmpHalfBufferPtr = 0; - - if (tmpHalfBufferElements) - tmpHalfBufferPtr = (char *)&tmpHalfBuffer[0]; - - // - // Run over all the float scanlines, quantizing, - // and re-assigning _rowPtr[y]. We need to translate - // FLOAT XDR to HALF XDR. - // - - for (unsigned int chan = 0; chan < _rowPtrs.size(); ++chan) - { - if (_type[chan] != FLOAT) - continue; - - for (int y = 0; y < _height; ++y) - { - float src = 0; - const char *srcXdr = _rowPtrs[chan][y]; - char *dstXdr = tmpHalfBufferPtr; - - for (int x = 0; x < _width; ++x) - { - - Xdr::read (srcXdr, src); - - // - // Clamp to half ranges, instead of just casting. This - // avoids introducing Infs which end up getting zeroed later - // - src = std::max ( - std::min ((float) std::numeric_limits::max(), src), - (float)-std::numeric_limits::max()); - - Xdr::write (dstXdr, ((half)src).bits()); - - // - // Xdr::read and Xdr::write will advance the ptr - // - } - - _rowPtrs[chan][y] = (const char *)tmpHalfBufferPtr; - tmpHalfBufferPtr += _width * sizeof (unsigned short); - } - } - - // - // Pack DC components together by common plane, so we can get - // a little more out of differencing them. We'll always have - // one component per block, so we can computed offsets. - // - - currDcComp[0] = (unsigned short *)_packedDc; - - for (unsigned int chan = 1; chan < _rowPtrs.size(); ++chan) - currDcComp[chan] = currDcComp[chan-1] + numBlocksX * numBlocksY; - - for (int blocky = 0; blocky < numBlocksY; ++blocky) - { - for (int blockx = 0; blockx < numBlocksX; ++blockx) - { - half h; - unsigned short tmpShortXdr, tmpShortNative; - char *tmpCharPtr; - - for (unsigned int chan = 0; chan < _rowPtrs.size(); ++chan) - { - // - // Break the source into 8x8 blocks. If we don't - // fit at the edges, mirror. - // - // Also, convert from linear to nonlinear representation. - // Our source is assumed to be XDR, and we need to convert - // to NATIVE prior to converting to float. - // - // If we're converting linear -> nonlinear, assume that the - // XDR -> NATIVE conversion is built into the lookup. Otherwise, - // we'll need to explicitly do it. - // - - for (int y = 0; y < 8; ++y) - { - for (int x = 0; x < 8; ++x) - { - int vx = 8 * blockx + x; - int vy = 8 * blocky + y; - - if (vx >= _width) - vx = _width - (vx - (_width - 1)); - - if (vx < 0) vx = _width-1; - - if (vy >=_height) - vy = _height - (vy - (_height - 1)); - - if (vy < 0) vy = _height-1; - - tmpShortXdr = - ((const unsigned short *)(_rowPtrs[chan])[vy])[vx]; - - if (_toNonlinear) - { - h.setBits (_toNonlinear[tmpShortXdr]); - } - else - { - const char *tmpConstCharPtr = - (const char *)(&tmpShortXdr); - - Xdr::read - (tmpConstCharPtr, tmpShortNative); - - h.setBits(tmpShortNative); - } - - _dctData[chan]._buffer[y * 8 + x] = (float)h; - } // x - } // y - } // chan - - // - // Color space conversion - // - - if (_rowPtrs.size() == 3) - { - csc709Forward64 (_dctData[0]._buffer, - _dctData[1]._buffer, - _dctData[2]._buffer); - } - - for (unsigned int chan = 0; chan < _rowPtrs.size(); ++chan) - { - // - // Forward DCT - // - - dctForward8x8(_dctData[chan]._buffer); - - // - // Quantize to half, and zigzag - // - - if (chan == 0) - { - for (int i = 0; i < 64; ++i) - { - halfCoef[i] = - quantize ((half)_dctData[chan]._buffer[i], - _quantBaseError*_quantTableY[i]); - } - } - else - { - for (int i = 0; i < 64; ++i) - { - halfCoef[i] = - quantize ((half)_dctData[chan]._buffer[i], - _quantBaseError*_quantTableCbCr[i]); - } - } - - toZigZag (halfZigCoef, halfCoef); - - // - // Convert from NATIVE back to XDR, before we write out - // - - for (int i = 0; i < 64; ++i) - { - tmpCharPtr = (char *)&tmpShortXdr; - Xdr::write(tmpCharPtr, halfZigCoef[i].bits()); - halfZigCoef[i].setBits(tmpShortXdr); - } - - // - // Save the DC component separately, to be compressed on - // its own. - // - - *currDcComp[chan]++ = halfZigCoef[0].bits(); - _numDcComp++; - - // - // Then RLE the AC components (which will record the count - // of the resulting number of items) - // - - rleAc (halfZigCoef, currAcComp); - } // chan - } // blockx - } // blocky -} - - -// -// Reorder from zig-zag order to normal ordering -// - -void -DwaCompressor::LossyDctEncoderBase::toZigZag (half *dst, half *src) -{ - const int remap[] = - { - 0, - 1, 8, - 16, 9, 2, - 3, 10, 17, 24, - 32, 25, 18, 11, 4, - 5, 12, 19, 26, 33, 40, - 48, 41, 34, 27, 20, 13, 6, - 7, 14, 21, 28, 35, 42, 49, 56, - 57, 50, 43, 36, 29, 22, 15, - 23, 30, 37, 44, 51, 58, - 59, 52, 45, 38, 31, - 39, 46, 53, 60, - 61, 54, 47, - 55, 62, - 63 - }; - - for (int i=0; i<64; ++i) - dst[i] = src[remap[i]]; -} - - -// -// Precomputing the bit count runs faster than using -// the builtin instruction, at least in one case.. -// -// Precomputing 8-bits is no slower than 16-bits, -// and saves a fair bit of overhead.. -// - -int -DwaCompressor::LossyDctEncoderBase::countSetBits (unsigned short src) -{ - static const unsigned short numBitsSet[256] = - { - 0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4, - 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, - 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, - 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, - 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, - 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, - 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, - 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, - 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, - 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, - 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, - 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, - 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, - 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, - 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, - 4, 5, 5, 6, 5, 6, 6, 7, 5, 6, 6, 7, 6, 7, 7, 8 - }; - - return numBitsSet[src & 0xff] + numBitsSet[src >> 8]; -} - - -// -// Take a DCT coefficient, as well as an acceptable error. Search -// nearby values within the error tolerance, that have fewer -// bits set. -// -// The list of candidates has been pre-computed and sorted -// in order of increasing numbers of bits set. This way, we -// can stop searching as soon as we find a candidate that -// is within the error tolerance. -// - -half -DwaCompressor::LossyDctEncoderBase::quantize (half src, float errorTolerance) -{ - half tmp; - float srcFloat = (float)src; - int numSetBits = countSetBits(src.bits()); - const unsigned short *closest = get_dwaClosest(src.bits()); - - for (int targetNumSetBits = numSetBits - 1; - targetNumSetBits >= 0; - --targetNumSetBits) - { - tmp.setBits (*closest); - - if (fabs ((float)tmp - srcFloat) < errorTolerance) - return tmp; - - closest++; - } - - return src; -} - - -// -// RLE the zig-zag of the AC components + copy over -// into another tmp buffer -// -// Try to do a simple RLE scheme to reduce run's of 0's. This -// differs from the jpeg EOB case, since EOB just indicates that -// the rest of the block is zero. In our case, we have lots of -// NaN symbols, which shouldn't be allowed to occur in DCT -// coefficents - so we'll use them for encoding runs. -// -// If the high byte is 0xff, then we have a run of 0's, of length -// given by the low byte. For example, 0xff03 would be a run -// of 3 0's, starting at the current location. -// -// block is our block of 64 coefficients -// acPtr a pointer to back the RLE'd values into. -// -// This will advance the counter, _numAcComp. -// - -void -DwaCompressor::LossyDctEncoderBase::rleAc - (half *block, - unsigned short *&acPtr) -{ - int dctComp = 1; - unsigned short rleSymbol = 0x0; - - while (dctComp < 64) - { - int runLen = 1; - - // - // If we don't have a 0, output verbatim - // - - if (block[dctComp].bits() != rleSymbol) - { - *acPtr++ = block[dctComp].bits(); - _numAcComp++; - - dctComp += runLen; - continue; - } - - // - // We're sitting on a 0, so see how big the run is. - // - - while ((dctComp+runLen < 64) && - (block[dctComp+runLen].bits() == rleSymbol)) - { - runLen++; - } - - // - // If the run len is too small, just output verbatim - // otherwise output our run token - // - // Originally, we wouldn't have a separate symbol for - // "end of block". But in some experimentation, it looks - // like using 0xff00 for "end of block" can save a bit - // of space. - // - - if (runLen == 1) - { - runLen = 1; - *acPtr++ = block[dctComp].bits(); - _numAcComp++; - - // - // Using 0xff00 for "end of block" - // - } - else if (runLen + dctComp == 64) - { - // - // Signal EOB - // - - *acPtr++ = 0xff00; - _numAcComp++; - } - else - { - // - // Signal normal run - // - - *acPtr++ = 0xff00 | runLen; - _numAcComp++; - } - - // - // Advance by runLen - // - - dctComp += runLen; - } -} - - -// ============================================================== -// -// DwaCompressor -// -// -------------------------------------------------------------- - -// -// DwaCompressor() -// - -DwaCompressor::DwaCompressor - (const Header &hdr, - int maxScanLineSize, - int numScanLines, - AcCompression acCompression) -: - Compressor(hdr), - _acCompression(acCompression), - _maxScanLineSize(maxScanLineSize), - _numScanLines(numScanLines), - _channels(hdr.channels()), - _packedAcBuffer(0), - _packedAcBufferSize(0), - _packedDcBuffer(0), - _packedDcBufferSize(0), - _rleBuffer(0), - _rleBufferSize(0), - _outBuffer(0), - _outBufferSize(0), - _zip(0), - _dwaCompressionLevel(45.0) -{ - _min[0] = hdr.dataWindow().min.x; - _min[1] = hdr.dataWindow().min.y; - _max[0] = hdr.dataWindow().max.x; - _max[1] = hdr.dataWindow().max.y; - - for (int i=0; i < NUM_COMPRESSOR_SCHEMES; ++i) - { - _planarUncBuffer[i] = 0; - _planarUncBufferSize[i] = 0; - } - - // - // Check the header for a quality attribute - // - - if (hasDwaCompressionLevel (hdr)) - _dwaCompressionLevel = dwaCompressionLevel (hdr); -} - - -DwaCompressor::~DwaCompressor() -{ - delete[] _packedAcBuffer; - delete[] _packedDcBuffer; - delete[] _rleBuffer; - delete[] _outBuffer; - delete _zip; - - for (int i=0; i channelRules; - if (fileVersion >= 2) - { - relevantChannelRules(channelRules); - - channelRuleSize = Xdr::size(); - for (size_t i = 0; i < channelRules.size(); ++i) - channelRuleSize += channelRules[i].size(); - } - - // - // Remember to allocate _outBuffer, if we haven't done so already. - // - - outBufferSize += channelRuleSize; - if (outBufferSize > _outBufferSize) - { - _outBufferSize = outBufferSize; - if (_outBuffer != 0) - delete[] _outBuffer; - _outBuffer = new char[outBufferSize]; - } - - char *outDataPtr = &_outBuffer[NUM_SIZES_SINGLE * sizeof(OPENEXR_IMF_NAMESPACE::Int64) + - channelRuleSize]; - - // - // We might not be dealing with any color data, in which - // case the AC buffer size will be 0, and deferencing - // a vector will not be a good thing to do. - // - - if (_packedAcBuffer) - packedAcEnd = _packedAcBuffer; - - if (_packedDcBuffer) - packedDcEnd = _packedDcBuffer; - - #define OBIDX(x) (Int64 *)&_outBuffer[x * sizeof (Int64)] - - Int64 *version = OBIDX (VERSION); - Int64 *unknownUncompressedSize = OBIDX (UNKNOWN_UNCOMPRESSED_SIZE); - Int64 *unknownCompressedSize = OBIDX (UNKNOWN_COMPRESSED_SIZE); - Int64 *acCompressedSize = OBIDX (AC_COMPRESSED_SIZE); - Int64 *dcCompressedSize = OBIDX (DC_COMPRESSED_SIZE); - Int64 *rleCompressedSize = OBIDX (RLE_COMPRESSED_SIZE); - Int64 *rleUncompressedSize = OBIDX (RLE_UNCOMPRESSED_SIZE); - Int64 *rleRawSize = OBIDX (RLE_RAW_SIZE); - - Int64 *totalAcUncompressedCount = OBIDX (AC_UNCOMPRESSED_COUNT); - Int64 *totalDcUncompressedCount = OBIDX (DC_UNCOMPRESSED_COUNT); - - Int64 *acCompression = OBIDX (AC_COMPRESSION); - - int minX = range.min.x; - int maxX = std::min(range.max.x, _max[0]); - int minY = range.min.y; - int maxY = std::min(range.max.y, _max[1]); - - // - // Zero all the numbers in the chunk header - // - - memset (_outBuffer, 0, NUM_SIZES_SINGLE * sizeof (Int64)); - - // - // Setup the AC compression strategy and the version in the data block, - // then write the relevant channel classification rules if needed - // - *version = fileVersion; - *acCompression = _acCompression; - - setupChannelData (minX, minY, maxX, maxY); - - if (fileVersion >= 2) - { - char *writePtr = &_outBuffer[NUM_SIZES_SINGLE * sizeof(OPENEXR_IMF_NAMESPACE::Int64)]; - Xdr::write (writePtr, channelRuleSize); - - for (size_t i = 0; i < channelRules.size(); ++i) - channelRules[i].write(writePtr); - } - - // - // Determine the start of each row in the input buffer - // Channels are interleaved by scanline - // - - std::vector encodedChannels (_channelData.size()); - std::vector< std::vector > rowPtrs (_channelData.size()); - - for (unsigned int chan = 0; chan < _channelData.size(); ++chan) - encodedChannels[chan] = false; - - inDataPtr = inPtr; - - for (int y = minY; y <= maxY; ++y) - { - for (unsigned int chan = 0; chan < _channelData.size(); ++chan) - { - - ChannelData *cd = &_channelData[chan]; - - if (IMATH_NAMESPACE::modp(y, cd->ySampling) != 0) - continue; - - rowPtrs[chan].push_back(inDataPtr); - inDataPtr += cd->width * OPENEXR_IMF_NAMESPACE::pixelTypeSize(cd->type); - } - } - - inDataPtr = inPtr; - - // - // Make a pass over all our CSC sets and try to encode them first - // - - for (unsigned int csc = 0; csc < _cscSets.size(); ++csc) - { - - LossyDctEncoderCsc encoder - (_dwaCompressionLevel / 100000.f, - rowPtrs[_cscSets[csc].idx[0]], - rowPtrs[_cscSets[csc].idx[1]], - rowPtrs[_cscSets[csc].idx[2]], - packedAcEnd, - packedDcEnd, - get_dwaCompressorToNonlinear(), - _channelData[_cscSets[csc].idx[0]].width, - _channelData[_cscSets[csc].idx[0]].height, - _channelData[_cscSets[csc].idx[0]].type, - _channelData[_cscSets[csc].idx[1]].type, - _channelData[_cscSets[csc].idx[2]].type); - - encoder.execute(); - - *totalAcUncompressedCount += encoder.numAcValuesEncoded(); - *totalDcUncompressedCount += encoder.numDcValuesEncoded(); - - packedAcEnd += encoder.numAcValuesEncoded() * sizeof(unsigned short); - packedDcEnd += encoder.numDcValuesEncoded() * sizeof(unsigned short); - - encodedChannels[_cscSets[csc].idx[0]] = true; - encodedChannels[_cscSets[csc].idx[1]] = true; - encodedChannels[_cscSets[csc].idx[2]] = true; - } - - for (unsigned int chan = 0; chan < _channelData.size(); ++chan) - { - ChannelData *cd = &_channelData[chan]; - - if (encodedChannels[chan]) - continue; - - switch (cd->compression) - { - case LOSSY_DCT: - - // - // For LOSSY_DCT, treat this just like the CSC'd case, - // but only operate on one channel - // - - { - const unsigned short *nonlinearLut = 0; - - if (!cd->pLinear) - nonlinearLut = get_dwaCompressorToNonlinear(); - - LossyDctEncoder encoder - (_dwaCompressionLevel / 100000.f, - rowPtrs[chan], - packedAcEnd, - packedDcEnd, - nonlinearLut, - cd->width, - cd->height, - cd->type); - - encoder.execute(); - - *totalAcUncompressedCount += encoder.numAcValuesEncoded(); - *totalDcUncompressedCount += encoder.numDcValuesEncoded(); - - packedAcEnd += - encoder.numAcValuesEncoded() * sizeof (unsigned short); - - packedDcEnd += - encoder.numDcValuesEncoded() * sizeof (unsigned short); - } - - break; - - case RLE: - - // - // For RLE, bash the bytes up so that the first bytes of each - // pixel are contingous, as are the second bytes, and so on. - // - - for (unsigned int y = 0; y < rowPtrs[chan].size(); ++y) - { - const char *row = rowPtrs[chan][y]; - - for (int x = 0; x < cd->width; ++x) - { - for (int byte = 0; - byte < OPENEXR_IMF_NAMESPACE::pixelTypeSize (cd->type); - ++byte) - { - - *cd->planarUncRleEnd[byte]++ = *row++; - } - } - - *rleRawSize += cd->width * OPENEXR_IMF_NAMESPACE::pixelTypeSize(cd->type); - } - - break; - - case UNKNOWN: - - // - // Otherwise, just copy data over verbatim - // - - { - int scanlineSize = cd->width * OPENEXR_IMF_NAMESPACE::pixelTypeSize(cd->type); - - for (unsigned int y = 0; y < rowPtrs[chan].size(); ++y) - { - memcpy (cd->planarUncBufferEnd, - rowPtrs[chan][y], - scanlineSize); - - cd->planarUncBufferEnd += scanlineSize; - } - - *unknownUncompressedSize += cd->planarUncSize; - } - - break; - - default: - - assert (false); - } - - encodedChannels[chan] = true; - } - - // - // Pack the Unknown data into the output buffer first. Instead of - // just copying it uncompressed, try zlib compression at least. - // - - if (*unknownUncompressedSize > 0) - { - uLongf inSize = (uLongf)(*unknownUncompressedSize); - uLongf outSize = compressBound (inSize); - - if (Z_OK != ::compress2 ((Bytef *)outDataPtr, - &outSize, - (const Bytef *)_planarUncBuffer[UNKNOWN], - inSize, - 9)) - { - throw IEX_NAMESPACE::BaseExc ("Data compression (zlib) failed."); - } - - outDataPtr += outSize; - *unknownCompressedSize = outSize; - } - - // - // Now, pack all the Lossy DCT coefficients into our output - // buffer, with Huffman encoding. - // - // Also, record the compressed size and the number of - // uncompressed componentns we have. - // - - if (*totalAcUncompressedCount > 0) - { - switch (_acCompression) - { - case STATIC_HUFFMAN: - - *acCompressedSize = (int) - hufCompress((unsigned short *)_packedAcBuffer, - (int)*totalAcUncompressedCount, - outDataPtr); - break; - - case DEFLATE: - - { - uLongf destLen = compressBound ( - (*totalAcUncompressedCount) * sizeof (unsigned short)); - - if (Z_OK != ::compress2 - ((Bytef *)outDataPtr, - &destLen, - (Bytef *)_packedAcBuffer, - (uLong)(*totalAcUncompressedCount - * sizeof (unsigned short)), - 9)) - { - throw IEX_NAMESPACE::InputExc ("Data compression (zlib) failed."); - } - - *acCompressedSize = destLen; - } - - break; - - default: - - assert (false); - } - - outDataPtr += *acCompressedSize; - } - - // - // Handle the DC components separately - // - - if (*totalDcUncompressedCount > 0) - { - *dcCompressedSize = _zip->compress - (_packedDcBuffer, - (int)(*totalDcUncompressedCount) * sizeof (unsigned short), - outDataPtr); - - outDataPtr += *dcCompressedSize; - } - - // - // If we have RLE data, first RLE encode it and set the uncompressed - // size. Then, deflate the results and set the compressed size. - // - - if (*rleRawSize > 0) - { - *rleUncompressedSize = rleCompress - ((int)(*rleRawSize), - _planarUncBuffer[RLE], - (signed char *)_rleBuffer); - - uLongf dstLen = compressBound ((uLongf)*rleUncompressedSize); - - if (Z_OK != ::compress2 - ((Bytef *)outDataPtr, - &dstLen, - (Bytef *)_rleBuffer, - (uLong)(*rleUncompressedSize), - 9)) - { - throw IEX_NAMESPACE::BaseExc ("Error compressing RLE'd data."); - } - - *rleCompressedSize = dstLen; - outDataPtr += *rleCompressedSize; - } - - // - // Flip the counters to XDR format - // - - for (int i = 0; i < NUM_SIZES_SINGLE; ++i) - { - Int64 src = *(((Int64 *)_outBuffer) + i); - char *dst = (char *)(((Int64 *)_outBuffer) + i); - - Xdr::write (dst, src); - } - - // - // We're done - compute the number of bytes we packed - // - - outPtr = _outBuffer; - - return static_cast(outDataPtr - _outBuffer + 1); -} - - -int -DwaCompressor::uncompress - (const char *inPtr, - int inSize, - int minY, - const char *&outPtr) -{ - return uncompress (inPtr, - inSize, - IMATH_NAMESPACE::Box2i (IMATH_NAMESPACE::V2i (_min[0], minY), - IMATH_NAMESPACE::V2i (_max[0], minY + numScanLines() - 1)), - outPtr); -} - - -int -DwaCompressor::uncompressTile - (const char *inPtr, - int inSize, - IMATH_NAMESPACE::Box2i range, - const char *&outPtr) -{ - return uncompress (inPtr, inSize, range, outPtr); -} - - -int -DwaCompressor::uncompress - (const char *inPtr, - int inSize, - IMATH_NAMESPACE::Box2i range, - const char *&outPtr) -{ - int minX = range.min.x; - int maxX = std::min (range.max.x, _max[0]); - int minY = range.min.y; - int maxY = std::min (range.max.y, _max[1]); - - int headerSize = NUM_SIZES_SINGLE*sizeof(Int64); - if (inSize < headerSize) - { - throw IEX_NAMESPACE::InputExc("Error uncompressing DWA data" - "(truncated header)."); - } - - // - // Flip the counters from XDR to NATIVE - // - - for (int i = 0; i < NUM_SIZES_SINGLE; ++i) - { - Int64 *dst = (((Int64 *)inPtr) + i); - const char *src = (char *)(((Int64 *)inPtr) + i); - - Xdr::read (src, *dst); - } - - // - // Unwind all the counter info - // - - const Int64 *inPtr64 = (const Int64*) inPtr; - - Int64 version = *(inPtr64 + VERSION); - Int64 unknownUncompressedSize = *(inPtr64 + UNKNOWN_UNCOMPRESSED_SIZE); - Int64 unknownCompressedSize = *(inPtr64 + UNKNOWN_COMPRESSED_SIZE); - Int64 acCompressedSize = *(inPtr64 + AC_COMPRESSED_SIZE); - Int64 dcCompressedSize = *(inPtr64 + DC_COMPRESSED_SIZE); - Int64 rleCompressedSize = *(inPtr64 + RLE_COMPRESSED_SIZE); - Int64 rleUncompressedSize = *(inPtr64 + RLE_UNCOMPRESSED_SIZE); - Int64 rleRawSize = *(inPtr64 + RLE_RAW_SIZE); - - Int64 totalAcUncompressedCount = *(inPtr64 + AC_UNCOMPRESSED_COUNT); - Int64 totalDcUncompressedCount = *(inPtr64 + DC_UNCOMPRESSED_COUNT); - - Int64 acCompression = *(inPtr64 + AC_COMPRESSION); - - Int64 compressedSize = unknownCompressedSize + - acCompressedSize + - dcCompressedSize + - rleCompressedSize; - - const char *dataPtr = inPtr + NUM_SIZES_SINGLE * sizeof(Int64); - - /* Both the sum and individual sizes are checked in case of overflow. */ - if (inSize < (headerSize + compressedSize) || - inSize < unknownCompressedSize || - inSize < acCompressedSize || - inSize < dcCompressedSize || - inSize < rleCompressedSize) - { - throw IEX_NAMESPACE::InputExc("Error uncompressing DWA data" - "(truncated file)."); - } - - if ((SInt64)unknownUncompressedSize < 0 || - (SInt64)unknownCompressedSize < 0 || - (SInt64)acCompressedSize < 0 || - (SInt64)dcCompressedSize < 0 || - (SInt64)rleCompressedSize < 0 || - (SInt64)rleUncompressedSize < 0 || - (SInt64)rleRawSize < 0 || - (SInt64)totalAcUncompressedCount < 0 || - (SInt64)totalDcUncompressedCount < 0) - { - throw IEX_NAMESPACE::InputExc("Error uncompressing DWA data" - " (corrupt header)."); - } - - if (version < 2) - initializeLegacyChannelRules(); - else - { - unsigned short ruleSize = 0; - Xdr::read(dataPtr, ruleSize); - - if (ruleSize < 0) - throw IEX_NAMESPACE::InputExc("Error uncompressing DWA data" - " (corrupt header file)."); - - headerSize += ruleSize; - if (inSize < headerSize + compressedSize) - throw IEX_NAMESPACE::InputExc("Error uncompressing DWA data" - " (truncated file)."); - - _channelRules.clear(); - ruleSize -= Xdr::size (); - while (ruleSize > 0) - { - Classifier rule(dataPtr, ruleSize); - - _channelRules.push_back(rule); - ruleSize -= rule.size(); - } - } - - - size_t outBufferSize = 0; - initializeBuffers(outBufferSize); - - // - // Allocate _outBuffer, if we haven't done so already - // - - if (_maxScanLineSize * numScanLines() > _outBufferSize) - { - _outBufferSize = _maxScanLineSize * numScanLines(); - if (_outBuffer != 0) - delete[] _outBuffer; - _outBuffer = new char[_maxScanLineSize * numScanLines()]; - } - - - char *outBufferEnd = _outBuffer; - - - // - // Find the start of the RLE packed AC components and - // the DC components for each channel. This will be handy - // if you want to decode the channels in parallel later on. - // - - char *packedAcBufferEnd = 0; - - if (_packedAcBuffer) - packedAcBufferEnd = _packedAcBuffer; - - char *packedDcBufferEnd = 0; - - if (_packedDcBuffer) - packedDcBufferEnd = _packedDcBuffer; - - // - // UNKNOWN data is packed first, followed by the - // Huffman-compressed AC, then the DC values, - // and then the zlib compressed RLE data. - // - - const char *compressedUnknownBuf = dataPtr; - - const char *compressedAcBuf = compressedUnknownBuf + - static_cast(unknownCompressedSize); - const char *compressedDcBuf = compressedAcBuf + - static_cast(acCompressedSize); - const char *compressedRleBuf = compressedDcBuf + - static_cast(dcCompressedSize); - - // - // Sanity check that the version is something we expect. Right now, - // we can decode version 0, 1, and 2. v1 adds 'end of block' symbols - // to the AC RLE. v2 adds channel classification rules at the - // start of the data block. - // - - if (version > 2) - throw IEX_NAMESPACE::InputExc ("Invalid version of compressed data block"); - - setupChannelData(minX, minY, maxX, maxY); - - // - // Uncompress the UNKNOWN data into _planarUncBuffer[UNKNOWN] - // - - if (unknownCompressedSize > 0) - { - if (unknownUncompressedSize > _planarUncBufferSize[UNKNOWN]) - { - throw IEX_NAMESPACE::InputExc("Error uncompressing DWA data" - "(corrupt header)."); - } - - uLongf outSize = (uLongf)unknownUncompressedSize; - - if (Z_OK != ::uncompress - ((Bytef *)_planarUncBuffer[UNKNOWN], - &outSize, - (Bytef *)compressedUnknownBuf, - (uLong)unknownCompressedSize)) - { - throw IEX_NAMESPACE::BaseExc("Error uncompressing UNKNOWN data."); - } - } - - // - // Uncompress the AC data into _packedAcBuffer - // - - if (acCompressedSize > 0) - { - if (totalAcUncompressedCount*sizeof(unsigned short) > _packedAcBufferSize) - { - throw IEX_NAMESPACE::InputExc("Error uncompressing DWA data" - "(corrupt header)."); - } - - // - // Don't trust the user to get it right, look in the file. - // - - switch (acCompression) - { - case STATIC_HUFFMAN: - - hufUncompress - (compressedAcBuf, - (int)acCompressedSize, - (unsigned short *)_packedAcBuffer, - (int)totalAcUncompressedCount); - - break; - - case DEFLATE: - { - uLongf destLen = - (int)(totalAcUncompressedCount) * sizeof (unsigned short); - - if (Z_OK != ::uncompress - ((Bytef *)_packedAcBuffer, - &destLen, - (Bytef *)compressedAcBuf, - (uLong)acCompressedSize)) - { - throw IEX_NAMESPACE::InputExc ("Data decompression (zlib) failed."); - } - - if (totalAcUncompressedCount * sizeof (unsigned short) != - destLen) - { - throw IEX_NAMESPACE::InputExc ("AC data corrupt."); - } - } - break; - - default: - - throw IEX_NAMESPACE::NoImplExc ("Unknown AC Compression"); - break; - } - } - - // - // Uncompress the DC data into _packedDcBuffer - // - - if (dcCompressedSize > 0) - { - if (totalDcUncompressedCount*sizeof(unsigned short) > _packedDcBufferSize) - { - throw IEX_NAMESPACE::InputExc("Error uncompressing DWA data" - "(corrupt header)."); - } - - if (_zip->uncompress - (compressedDcBuf, (int)dcCompressedSize, _packedDcBuffer) - != (int)totalDcUncompressedCount * sizeof (unsigned short)) - { - throw IEX_NAMESPACE::BaseExc("DC data corrupt."); - } - } - - // - // Uncompress the RLE data into _rleBuffer, then unRLE the results - // into _planarUncBuffer[RLE] - // - - if (rleRawSize > 0) - { - if (rleUncompressedSize > _rleBufferSize || - rleRawSize > _planarUncBufferSize[RLE]) - { - throw IEX_NAMESPACE::InputExc("Error uncompressing DWA data" - "(corrupt header)."); - } - - uLongf dstLen = (uLongf)rleUncompressedSize; - - if (Z_OK != ::uncompress - ((Bytef *)_rleBuffer, - &dstLen, - (Bytef *)compressedRleBuf, - (uLong)rleCompressedSize)) - { - throw IEX_NAMESPACE::BaseExc("Error uncompressing RLE data."); - } - - if (dstLen != rleUncompressedSize) - throw IEX_NAMESPACE::BaseExc("RLE data corrupted"); - - if (rleUncompress - ((int)rleUncompressedSize, - (int)rleRawSize, - (signed char *)_rleBuffer, - _planarUncBuffer[RLE]) != rleRawSize) - { - throw IEX_NAMESPACE::BaseExc("RLE data corrupted"); - } - } - - // - // Determine the start of each row in the output buffer - // - - std::vector decodedChannels (_channelData.size()); - std::vector< std::vector > rowPtrs (_channelData.size()); - - for (unsigned int chan = 0; chan < _channelData.size(); ++chan) - decodedChannels[chan] = false; - - outBufferEnd = _outBuffer; - - for (int y = minY; y <= maxY; ++y) - { - for (unsigned int chan = 0; chan < _channelData.size(); ++chan) - { - ChannelData *cd = &_channelData[chan]; - - if (IMATH_NAMESPACE::modp (y, cd->ySampling) != 0) - continue; - - rowPtrs[chan].push_back (outBufferEnd); - outBufferEnd += cd->width * OPENEXR_IMF_NAMESPACE::pixelTypeSize (cd->type); - } - } - - // - // Setup to decode each block of 3 channels that need to - // be handled together - // - - for (unsigned int csc = 0; csc < _cscSets.size(); ++csc) - { - int rChan = _cscSets[csc].idx[0]; - int gChan = _cscSets[csc].idx[1]; - int bChan = _cscSets[csc].idx[2]; - - - LossyDctDecoderCsc decoder - (rowPtrs[rChan], - rowPtrs[gChan], - rowPtrs[bChan], - packedAcBufferEnd, - packedDcBufferEnd, - get_dwaCompressorToLinear(), - _channelData[rChan].width, - _channelData[rChan].height, - _channelData[rChan].type, - _channelData[gChan].type, - _channelData[bChan].type); - - decoder.execute(); - - packedAcBufferEnd += - decoder.numAcValuesEncoded() * sizeof (unsigned short); - - packedDcBufferEnd += - decoder.numDcValuesEncoded() * sizeof (unsigned short); - - decodedChannels[rChan] = true; - decodedChannels[gChan] = true; - decodedChannels[bChan] = true; - } - - // - // Setup to handle the remaining channels by themselves - // - - for (unsigned int chan = 0; chan < _channelData.size(); ++chan) - { - if (decodedChannels[chan]) - continue; - - ChannelData *cd = &_channelData[chan]; - int pixelSize = OPENEXR_IMF_NAMESPACE::pixelTypeSize (cd->type); - - switch (cd->compression) - { - case LOSSY_DCT: - - // - // Setup a single-channel lossy DCT decoder pointing - // at the output buffer - // - - { - const unsigned short *linearLut = 0; - - if (!cd->pLinear) - linearLut = get_dwaCompressorToLinear(); - - LossyDctDecoder decoder - (rowPtrs[chan], - packedAcBufferEnd, - packedDcBufferEnd, - linearLut, - cd->width, - cd->height, - cd->type); - - decoder.execute(); - - packedAcBufferEnd += - decoder.numAcValuesEncoded() * sizeof (unsigned short); - - packedDcBufferEnd += - decoder.numDcValuesEncoded() * sizeof (unsigned short); - } - - break; - - case RLE: - - // - // For the RLE case, the data has been un-RLE'd into - // planarUncRleEnd[], but is still split out by bytes. - // We need to rearrange the bytes back into the correct - // order in the output buffer; - // - - { - int row = 0; - - for (int y = minY; y <= maxY; ++y) - { - if (IMATH_NAMESPACE::modp (y, cd->ySampling) != 0) - continue; - - char *dst = rowPtrs[chan][row]; - - if (pixelSize == 2) - { - interleaveByte2 (dst, - cd->planarUncRleEnd[0], - cd->planarUncRleEnd[1], - cd->width); - - cd->planarUncRleEnd[0] += cd->width; - cd->planarUncRleEnd[1] += cd->width; - } - else - { - for (int x = 0; x < cd->width; ++x) - { - for (int byte = 0; byte < pixelSize; ++byte) - { - *dst++ = *cd->planarUncRleEnd[byte]++; - } - } - } - - row++; - } - } - - break; - - case UNKNOWN: - - // - // In the UNKNOWN case, data is already in planarUncBufferEnd - // and just needs to copied over to the output buffer - // - - { - int row = 0; - int dstScanlineSize = cd->width * OPENEXR_IMF_NAMESPACE::pixelTypeSize (cd->type); - - for (int y = minY; y <= maxY; ++y) - { - if (IMATH_NAMESPACE::modp (y, cd->ySampling) != 0) - continue; - - memcpy (rowPtrs[chan][row], - cd->planarUncBufferEnd, - dstScanlineSize); - - cd->planarUncBufferEnd += dstScanlineSize; - row++; - } - } - - break; - - default: - - throw IEX_NAMESPACE::NoImplExc ("Unhandled compression scheme case"); - break; - } - - decodedChannels[chan] = true; - } - - // - // Return a ptr to _outBuffer - // - - outPtr = _outBuffer; - return (int)(outBufferEnd - _outBuffer); -} - - -// static -void -DwaCompressor::initializeFuncs() -{ - convertFloatToHalf64 = convertFloatToHalf64_scalar; - fromHalfZigZag = fromHalfZigZag_scalar; - - CpuId cpuId; - - // - // Setup HALF <-> FLOAT conversion implementations - // - - if (cpuId.avx && cpuId.f16c) - { - convertFloatToHalf64 = convertFloatToHalf64_f16c; - fromHalfZigZag = fromHalfZigZag_f16c; - } - - // - // Setup inverse DCT implementations - // - - dctInverse8x8_0 = dctInverse8x8_scalar<0>; - dctInverse8x8_1 = dctInverse8x8_scalar<1>; - dctInverse8x8_2 = dctInverse8x8_scalar<2>; - dctInverse8x8_3 = dctInverse8x8_scalar<3>; - dctInverse8x8_4 = dctInverse8x8_scalar<4>; - dctInverse8x8_5 = dctInverse8x8_scalar<5>; - dctInverse8x8_6 = dctInverse8x8_scalar<6>; - dctInverse8x8_7 = dctInverse8x8_scalar<7>; - - if (cpuId.avx) - { - dctInverse8x8_0 = dctInverse8x8_avx<0>; - dctInverse8x8_1 = dctInverse8x8_avx<1>; - dctInverse8x8_2 = dctInverse8x8_avx<2>; - dctInverse8x8_3 = dctInverse8x8_avx<3>; - dctInverse8x8_4 = dctInverse8x8_avx<4>; - dctInverse8x8_5 = dctInverse8x8_avx<5>; - dctInverse8x8_6 = dctInverse8x8_avx<6>; - dctInverse8x8_7 = dctInverse8x8_avx<7>; - } - else if (cpuId.sse2) - { - dctInverse8x8_0 = dctInverse8x8_sse2<0>; - dctInverse8x8_1 = dctInverse8x8_sse2<1>; - dctInverse8x8_2 = dctInverse8x8_sse2<2>; - dctInverse8x8_3 = dctInverse8x8_sse2<3>; - dctInverse8x8_4 = dctInverse8x8_sse2<4>; - dctInverse8x8_5 = dctInverse8x8_sse2<5>; - dctInverse8x8_6 = dctInverse8x8_sse2<6>; - dctInverse8x8_7 = dctInverse8x8_sse2<7>; - } -} - - -// -// Handle channel classification and buffer allocation once we know -// how to classify channels -// - -void -DwaCompressor::initializeBuffers (size_t &outBufferSize) -{ - classifyChannels (_channels, _channelData, _cscSets); - - // - // _outBuffer needs to be big enough to hold all our - // compressed data - which could vary depending on what sort - // of channels we have. - // - - int maxOutBufferSize = 0; - int numLossyDctChans = 0; - int unknownBufferSize = 0; - int rleBufferSize = 0; - - int maxLossyDctAcSize = (int)ceil ((float)numScanLines() / 8.0f) * - (int)ceil ((float)(_max[0] - _min[0] + 1) / 8.0f) * - 63 * sizeof (unsigned short); - - int maxLossyDctDcSize = (int)ceil ((float)numScanLines() / 8.0f) * - (int)ceil ((float)(_max[0] - _min[0] + 1) / 8.0f) * - sizeof (unsigned short); - - for (unsigned int chan = 0; chan < _channelData.size(); ++chan) - { - switch (_channelData[chan].compression) - { - case LOSSY_DCT: - - // - // This is the size of the number of packed - // components, plus the requirements for - // maximum Huffman encoding size (for STATIC_HUFFMAN) - // or for zlib compression (for DEFLATE) - // - - maxOutBufferSize += std::max( - (int)(2 * maxLossyDctAcSize + 65536), - (int)compressBound (maxLossyDctAcSize) ); - numLossyDctChans++; - break; - - case RLE: - { - // - // RLE, if gone horribly wrong, could double the size - // of the source data. - // - - int rleAmount = 2 * numScanLines() * (_max[0] - _min[0] + 1) * - OPENEXR_IMF_NAMESPACE::pixelTypeSize (_channelData[chan].type); - - rleBufferSize += rleAmount; - } - break; - - - case UNKNOWN: - - unknownBufferSize += numScanLines() * (_max[0] - _min[0] + 1) * - OPENEXR_IMF_NAMESPACE::pixelTypeSize (_channelData[chan].type); - break; - - default: - - throw IEX_NAMESPACE::NoImplExc ("Unhandled compression scheme case"); - break; - } - } - - // - // Also, since the results of the RLE are packed into - // the output buffer, we need the extra room there. But - // we're going to zlib compress() the data we pack, - // which could take slightly more space - // - - maxOutBufferSize += (int)compressBound ((uLongf)rleBufferSize); - - // - // And the same goes for the UNKNOWN data - // - - maxOutBufferSize += (int)compressBound ((uLongf)unknownBufferSize); - - // - // Allocate a zip/deflate compressor big enought to hold the DC data - // and include it's compressed results in the size requirements - // for our output buffer - // - - if (_zip == 0) - _zip = new Zip (maxLossyDctDcSize * numLossyDctChans); - else if (_zip->maxRawSize() < maxLossyDctDcSize * numLossyDctChans) - { - delete _zip; - _zip = new Zip (maxLossyDctDcSize * numLossyDctChans); - } - - - maxOutBufferSize += _zip->maxCompressedSize(); - - // - // We also need to reserve space at the head of the buffer to - // write out the size of our various packed and compressed data. - // - - maxOutBufferSize += NUM_SIZES_SINGLE * sizeof (Int64); - - - // - // Later, we're going to hijack outBuffer for the result of - // both encoding and decoding. So it needs to be big enough - // to hold either a buffers' worth of uncompressed or - // compressed data - // - // For encoding, we'll need _outBuffer to hold maxOutBufferSize bytes, - // but for decoding, we only need it to be maxScanLineSize*numScanLines. - // Cache the max size for now, and alloc the buffer when we either - // encode or decode. - // - - outBufferSize = maxOutBufferSize; - - - // - // _packedAcBuffer holds the quantized DCT coefficients prior - // to Huffman encoding - // - - if (maxLossyDctAcSize * numLossyDctChans > _packedAcBufferSize) - { - _packedAcBufferSize = maxLossyDctAcSize * numLossyDctChans; - if (_packedAcBuffer != 0) - delete[] _packedAcBuffer; - _packedAcBuffer = new char[_packedAcBufferSize]; - } - - // - // _packedDcBuffer holds one quantized DCT coef per 8x8 block - // - - if (maxLossyDctDcSize * numLossyDctChans > _packedDcBufferSize) - { - _packedDcBufferSize = maxLossyDctDcSize * numLossyDctChans; - if (_packedDcBuffer != 0) - delete[] _packedDcBuffer; - _packedDcBuffer = new char[_packedDcBufferSize]; - } - - if (rleBufferSize > _rleBufferSize) - { - _rleBufferSize = rleBufferSize; - if (_rleBuffer != 0) - delete[] _rleBuffer; - _rleBuffer = new char[rleBufferSize]; - } - - // - // The planar uncompressed buffer will hold float data for LOSSY_DCT - // compressed values, and whatever the native type is for other - // channels. We're going to use this to hold data in a planar - // format, as opposed to the native interleaved format we take - // into compress() and give back from uncompress(). - // - // This also makes it easier to compress the UNKNOWN and RLE data - // all in one swoop (for each compression scheme). - // - - int planarUncBufferSize[NUM_COMPRESSOR_SCHEMES]; - for (int i=0; i 0) - { - planarUncBufferSize[UNKNOWN] = - compressBound ((uLongf)planarUncBufferSize[UNKNOWN]); - } - - for (int i = 0; i < NUM_COMPRESSOR_SCHEMES; ++i) - { - if (planarUncBufferSize[i] > _planarUncBufferSize[i]) - { - _planarUncBufferSize[i] = planarUncBufferSize[i]; - if (_planarUncBuffer[i] != 0) - delete[] _planarUncBuffer[i]; - _planarUncBuffer[i] = new char[planarUncBufferSize[i]]; - } - } -} - - -// -// Setup channel classification rules to use when writing files -// - -void -DwaCompressor::initializeDefaultChannelRules () -{ - _channelRules.clear(); - - _channelRules.push_back (Classifier ("R", LOSSY_DCT, HALF, 0, false)); - _channelRules.push_back (Classifier ("R", LOSSY_DCT, FLOAT, 0, false)); - _channelRules.push_back (Classifier ("G", LOSSY_DCT, HALF, 1, false)); - _channelRules.push_back (Classifier ("G", LOSSY_DCT, FLOAT, 1, false)); - _channelRules.push_back (Classifier ("B", LOSSY_DCT, HALF, 2, false)); - _channelRules.push_back (Classifier ("B", LOSSY_DCT, FLOAT, 2, false)); - - _channelRules.push_back (Classifier ("Y", LOSSY_DCT, HALF, -1, false)); - _channelRules.push_back (Classifier ("Y", LOSSY_DCT, FLOAT, -1, false)); - _channelRules.push_back (Classifier ("BY", LOSSY_DCT, HALF, -1, false)); - _channelRules.push_back (Classifier ("BY", LOSSY_DCT, FLOAT, -1, false)); - _channelRules.push_back (Classifier ("RY", LOSSY_DCT, HALF, -1, false)); - _channelRules.push_back (Classifier ("RY", LOSSY_DCT, FLOAT, -1, false)); - - _channelRules.push_back (Classifier ("A", RLE, UINT, -1, false)); - _channelRules.push_back (Classifier ("A", RLE, HALF, -1, false)); - _channelRules.push_back (Classifier ("A", RLE, FLOAT, -1, false)); -} - - -// -// Setup channel classification rules when reading files with VERSION < 2 -// - -void -DwaCompressor::initializeLegacyChannelRules () -{ - _channelRules.clear(); - - _channelRules.push_back (Classifier ("r", LOSSY_DCT, HALF, 0, true)); - _channelRules.push_back (Classifier ("r", LOSSY_DCT, FLOAT, 0, true)); - _channelRules.push_back (Classifier ("red", LOSSY_DCT, HALF, 0, true)); - _channelRules.push_back (Classifier ("red", LOSSY_DCT, FLOAT, 0, true)); - _channelRules.push_back (Classifier ("g", LOSSY_DCT, HALF, 1, true)); - _channelRules.push_back (Classifier ("g", LOSSY_DCT, FLOAT, 1, true)); - _channelRules.push_back (Classifier ("grn", LOSSY_DCT, HALF, 1, true)); - _channelRules.push_back (Classifier ("grn", LOSSY_DCT, FLOAT, 1, true)); - _channelRules.push_back (Classifier ("green", LOSSY_DCT, HALF, 1, true)); - _channelRules.push_back (Classifier ("green", LOSSY_DCT, FLOAT, 1, true)); - _channelRules.push_back (Classifier ("b", LOSSY_DCT, HALF, 2, true)); - _channelRules.push_back (Classifier ("b", LOSSY_DCT, FLOAT, 2, true)); - _channelRules.push_back (Classifier ("blu", LOSSY_DCT, HALF, 2, true)); - _channelRules.push_back (Classifier ("blu", LOSSY_DCT, FLOAT, 2, true)); - _channelRules.push_back (Classifier ("blue", LOSSY_DCT, HALF, 2, true)); - _channelRules.push_back (Classifier ("blue", LOSSY_DCT, FLOAT, 2, true)); - - _channelRules.push_back (Classifier ("y", LOSSY_DCT, HALF, -1, true)); - _channelRules.push_back (Classifier ("y", LOSSY_DCT, FLOAT, -1, true)); - _channelRules.push_back (Classifier ("by", LOSSY_DCT, HALF, -1, true)); - _channelRules.push_back (Classifier ("by", LOSSY_DCT, FLOAT, -1, true)); - _channelRules.push_back (Classifier ("ry", LOSSY_DCT, HALF, -1, true)); - _channelRules.push_back (Classifier ("ry", LOSSY_DCT, FLOAT, -1, true)); - _channelRules.push_back (Classifier ("a", RLE, UINT, -1, true)); - _channelRules.push_back (Classifier ("a", RLE, HALF, -1, true)); - _channelRules.push_back (Classifier ("a", RLE, FLOAT, -1, true)); -} - - -// -// Given a set of rules and ChannelData, figure out which rules apply -// - -void -DwaCompressor::relevantChannelRules (std::vector &rules) const -{ - rules.clear(); - - std::vector suffixes; - - for (size_t cd = 0; cd < _channelData.size(); ++cd) - { - std::string suffix = _channelData[cd].name; - size_t lastDot = suffix.find_last_of ('.'); - - if (lastDot != std::string::npos) - suffix = suffix.substr (lastDot+1, std::string::npos); - - suffixes.push_back(suffix); - } - - - for (size_t i = 0; i < _channelRules.size(); ++i) - { - for (size_t cd = 0; cd < _channelData.size(); ++cd) - { - if (_channelRules[i].match (suffixes[cd], _channelData[cd].type )) - { - rules.push_back (_channelRules[i]); - break; - } - } - } -} - - -// -// Take our initial list of channels, and cache the contents. -// -// Determine approprate compression schemes for each channel, -// and figure out which sets should potentially be CSC'ed -// prior to lossy compression. -// - -void -DwaCompressor::classifyChannels - (ChannelList channels, - std::vector &chanData, - std::vector &cscData) -{ - // - // prefixMap used to map channel name prefixes to - // potential CSC-able sets of channels. - // - - std::map prefixMap; - std::vector tmpCscSet; - - unsigned int numChan = 0; - - for (ChannelList::Iterator c = channels.begin(); c != channels.end(); ++c) - numChan++; - - if (numChan) - chanData.resize (numChan); - - // - // Cache the relevant data from the channel structs. - // - - unsigned int offset = 0; - - for (ChannelList::Iterator c = channels.begin(); c != channels.end(); ++c) - { - chanData[offset].name = std::string (c.name()); - chanData[offset].compression = UNKNOWN; - chanData[offset].xSampling = c.channel().xSampling; - chanData[offset].ySampling = c.channel().ySampling; - chanData[offset].type = c.channel().type; - chanData[offset].pLinear = c.channel().pLinear; - - offset++; - } - - // - // Try and figure out which channels should be - // compressed by which means. - // - - for (offset = 0; offset::iterator - theSet = prefixMap.find (prefix); - - if (theSet == prefixMap.end()) - { - DwaCompressor::CscChannelSet tmpSet; - - tmpSet.idx[0] = - tmpSet.idx[1] = - tmpSet.idx[2] = -1; - - prefixMap[prefix] = tmpSet; - } - - // - // Check the suffix against the list of classifications - // we defined previously. If the _cscIdx is not negative, - // it indicates that we should be part of a CSC group. - // - - for (std::vector::iterator i = _channelRules.begin(); - i != _channelRules.end(); - ++i) - { - if ( i->match(suffix, chanData[offset].type) ) - { - chanData[offset].compression = i->_scheme; - - if ( i->_cscIdx >= 0) - prefixMap[prefix].idx[i->_cscIdx] = offset; - } - } - } - - // - // Finally, try and find RGB sets of channels which - // can be CSC'ed to a Y'CbCr space prior to loss, for - // better compression. - // - // Walk over our set of candidates, and see who has - // all three channels defined (and has common sampling - // patterns, etc). - // - - for (std::map::iterator - theItem = prefixMap.begin(); theItem != prefixMap.end(); - ++theItem) - { - int red = (*theItem).second.idx[0]; - int grn = (*theItem).second.idx[1]; - int blu = (*theItem).second.idx[2]; - - if ((red < 0) || (grn < 0) || (blu < 0)) - continue; - - if ((chanData[red].xSampling != chanData[grn].xSampling) || - (chanData[red].xSampling != chanData[blu].xSampling) || - (chanData[grn].xSampling != chanData[blu].xSampling) || - (chanData[red].ySampling != chanData[grn].ySampling) || - (chanData[red].ySampling != chanData[blu].ySampling) || - (chanData[grn].ySampling != chanData[blu].ySampling)) - { - continue; - } - - tmpCscSet.push_back ((*theItem).second); - } - - size_t numCsc = tmpCscSet.size(); - - if (numCsc) - cscData.resize(numCsc); - - for (offset = 0; offset < numCsc; ++offset) - cscData[offset] = tmpCscSet[offset]; -} - - - -// -// Setup some buffer pointers, determine channel sizes, things -// like that. -// - -void -DwaCompressor::setupChannelData (int minX, int minY, int maxX, int maxY) -{ - char *planarUncBuffer[NUM_COMPRESSOR_SCHEMES]; - - for (int i=0; iwidth = OPENEXR_IMF_NAMESPACE::numSamples (cd->xSampling, minX, maxX); - cd->height = OPENEXR_IMF_NAMESPACE::numSamples (cd->ySampling, minY, maxY); - - cd->planarUncSize = - cd->width * cd->height * OPENEXR_IMF_NAMESPACE::pixelTypeSize (cd->type); - - cd->planarUncBuffer = planarUncBuffer[cd->compression]; - cd->planarUncBufferEnd = cd->planarUncBuffer; - - cd->planarUncRle[0] = cd->planarUncBuffer; - cd->planarUncRleEnd[0] = cd->planarUncRle[0]; - - for (int byte = 1; byte < OPENEXR_IMF_NAMESPACE::pixelTypeSize(cd->type); ++byte) - { - cd->planarUncRle[byte] = - cd->planarUncRle[byte-1] + cd->width * cd->height; - - cd->planarUncRleEnd[byte] = - cd->planarUncRle[byte]; - } - - cd->planarUncType = cd->type; - - if (cd->compression == LOSSY_DCT) - { - cd->planarUncType = FLOAT; - } - else - { - planarUncBuffer[cd->compression] += - cd->width * cd->height * OPENEXR_IMF_NAMESPACE::pixelTypeSize (cd->planarUncType); - } - } -} - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_EXIT diff --git a/3rdparty/openexr/IlmImf/ImfDwaCompressor.h b/3rdparty/openexr/IlmImf/ImfDwaCompressor.h deleted file mode 100644 index 421490e903..0000000000 --- a/3rdparty/openexr/IlmImf/ImfDwaCompressor.h +++ /dev/null @@ -1,219 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2009-2014 DreamWorks Animation LLC. -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of DreamWorks Animation nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - -#ifndef INCLUDED_IMF_DWA_COMRESSOR_H -#define INCLUDED_IMF_DWA_COMRESSOR_H - -//------------------------------------------------------------------------------ -// -// class DwaCompressor -- Store lossy RGB data by quantizing DCT components. -// -//------------------------------------------------------------------------------ - -#include -#include - -#include "ImfInt64.h" -#include "ImfZip.h" -#include "ImfChannelList.h" -#include "ImfCompressor.h" -#include "ImfNamespace.h" - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER - -class DwaCompressor: public Compressor -{ - public: - - enum AcCompression - { - STATIC_HUFFMAN, - DEFLATE, - }; - - - IMF_EXPORT - DwaCompressor (const Header &hdr, - int maxScanLineSize, - int numScanLines, // ideally is a multiple of 8 - AcCompression acCompression); - - IMF_EXPORT - virtual ~DwaCompressor (); - - IMF_EXPORT - virtual int numScanLines () const; - - IMF_EXPORT - virtual OPENEXR_IMF_NAMESPACE::Compressor::Format format () const; - - IMF_EXPORT - virtual int compress (const char *inPtr, - int inSize, - int minY, - const char *&outPtr); - - IMF_EXPORT - virtual int compressTile (const char *inPtr, - int inSize, - IMATH_NAMESPACE::Box2i range, - const char *&outPtr); - - IMF_EXPORT - virtual int uncompress (const char *inPtr, - int inSize, - int minY, - const char *&outPtr); - - IMF_EXPORT - virtual int uncompressTile (const char *inPtr, - int inSize, - IMATH_NAMESPACE::Box2i range, - const char *&outPtr); - - IMF_EXPORT - static void initializeFuncs (); - - private: - - struct ChannelData; - struct CscChannelSet; - struct Classifier; - - class LossyDctDecoderBase; - class LossyDctDecoder; - class LossyDctDecoderCsc; - - class LossyDctEncoderBase; - class LossyDctEncoder; - class LossyDctEncoderCsc; - - enum CompressorScheme - { - UNKNOWN = 0, - LOSSY_DCT, - RLE, - - NUM_COMPRESSOR_SCHEMES - }; - - // - // Per-chunk compressed data sizes, one value per chunk - // - - enum DataSizesSingle - { - VERSION = 0, // Version number: - // 0: classic - // 1: adds "end of block" to the AC RLE - - UNKNOWN_UNCOMPRESSED_SIZE, // Size of leftover data, uncompressed. - UNKNOWN_COMPRESSED_SIZE, // Size of leftover data, zlib compressed. - - AC_COMPRESSED_SIZE, // AC RLE + Huffman size - DC_COMPRESSED_SIZE, // DC + Deflate size - RLE_COMPRESSED_SIZE, // RLE + Deflate data size - RLE_UNCOMPRESSED_SIZE, // RLE'd data size - RLE_RAW_SIZE, // Un-RLE'd data size - - AC_UNCOMPRESSED_COUNT, // AC RLE number of elements - DC_UNCOMPRESSED_COUNT, // DC number of elements - - AC_COMPRESSION, // AC compression strategy - NUM_SIZES_SINGLE - }; - - AcCompression _acCompression; - - int _maxScanLineSize; - int _numScanLines; - int _min[2], _max[2]; - - ChannelList _channels; - std::vector _channelData; - std::vector _cscSets; - std::vector _channelRules; - - char *_packedAcBuffer; - size_t _packedAcBufferSize; - char *_packedDcBuffer; - size_t _packedDcBufferSize; - char *_rleBuffer; - size_t _rleBufferSize; - char *_outBuffer; - size_t _outBufferSize; - char *_planarUncBuffer[NUM_COMPRESSOR_SCHEMES]; - size_t _planarUncBufferSize[NUM_COMPRESSOR_SCHEMES]; - - Zip *_zip; - float _dwaCompressionLevel; - - int compress (const char *inPtr, - int inSize, - IMATH_NAMESPACE::Box2i range, - const char *&outPtr); - - int uncompress (const char *inPtr, - int inSize, - IMATH_NAMESPACE::Box2i range, - const char *&outPtr); - - void initializeBuffers (size_t&); - void initializeDefaultChannelRules (); - void initializeLegacyChannelRules (); - - void relevantChannelRules( std::vector &) const; - - // - // Populate our cached version of the channel data with - // data from the real channel list. We want to - // copy over attributes, determine compression schemes - // releveant for the channel type, and find sets of - // channels to be compressed from Y'CbCr data instead - // of R'G'B'. - // - - void classifyChannels (ChannelList channels, - std::vector &chanData, - std::vector &cscData); - - // - // Compute various buffer pointers for each channel - // - - void setupChannelData (int minX, int minY, int maxX, int maxY); -}; - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT - -#endif diff --git a/3rdparty/openexr/IlmImf/ImfDwaCompressorSimd.h b/3rdparty/openexr/IlmImf/ImfDwaCompressorSimd.h deleted file mode 100644 index c14ae7a323..0000000000 --- a/3rdparty/openexr/IlmImf/ImfDwaCompressorSimd.h +++ /dev/null @@ -1,2172 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2009-2014 DreamWorks Animation LLC. -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of DreamWorks Animation nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - -#ifndef IMF_DWACOMPRESSORSIMD_H_HAS_BEEN_INCLUDED -#define IMF_DWACOMPRESSORSIMD_H_HAS_BEEN_INCLUDED - -// -// Various SSE accelerated functions, used by Imf::DwaCompressor. -// These have been separated into a separate .h file, as the fast -// paths are done with template specialization. -// -// Unless otherwise noted, all pointers are assumed to be 32-byte -// aligned. Unaligned pointers may risk seg-faulting. -// - -#include "ImfNamespace.h" -#include "ImfSimd.h" -#include "ImfSystemSpecific.h" -#include "OpenEXRConfig.h" - -#include -#include - -#include - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER - -#define _SSE_ALIGNMENT 32 -#define _SSE_ALIGNMENT_MASK 0x0F -#define _AVX_ALIGNMENT_MASK 0x1F - -// -// Test if we should enable GCC inline asm paths for AVX -// - -#ifdef OPENEXR_IMF_HAVE_GCC_INLINE_ASM_AVX - - #define IMF_HAVE_GCC_INLINEASM - - #ifdef __LP64__ - #define IMF_HAVE_GCC_INLINEASM_64 - #endif /* __LP64__ */ - -#endif /* OPENEXR_IMF_HAVE_GCC_INLINE_ASM_AVX */ - -// -// A simple 64-element array, aligned properly for SIMD access. -// - -template -class SimdAlignedBuffer64 -{ - public: - - SimdAlignedBuffer64(): _buffer (0), _handle (0) - { - alloc(); - } - - SimdAlignedBuffer64(const SimdAlignedBuffer64 &rhs): _handle(0) - { - alloc(); - memcpy (_buffer, rhs._buffer, 64 * sizeof (T)); - } - - SimdAlignedBuffer64 &operator=(const SimdAlignedBuffer64 &rhs) - { - memcpy (_buffer, rhs._buffer, 64 * sizeof (T)); - return *this; - } - -#if __cplusplus >= 201103L - SimdAlignedBuffer64(SimdAlignedBuffer64 &&rhs) noexcept - : _handle(rhs._handle), _buffer(rhs._buffer) - { - rhs._handle = nullptr; - rhs._buffer = nullptr; - } - - SimdAlignedBuffer64 &operator=(SimdAlignedBuffer64 &&rhs) noexcept - { - std::swap(_handle, rhs._handle); - std::swap(_buffer, rhs._buffer); - return *this; - } -#endif - ~SimdAlignedBuffer64 () - { - if (_handle) - EXRFreeAligned (_handle); - _handle = 0; - _buffer = 0; - } - - void alloc() - { - // - // Try EXRAllocAligned first - but it might fallback to - // unaligned allocs. If so, overalloc. - // - - _handle = (char *) EXRAllocAligned - (64 * sizeof(T), _SSE_ALIGNMENT); - - if (((size_t)_handle & (_SSE_ALIGNMENT - 1)) == 0) - { - _buffer = (T *)_handle; - return; - } - - EXRFreeAligned(_handle); - _handle = (char *) EXRAllocAligned - (64 * sizeof(T) + _SSE_ALIGNMENT, _SSE_ALIGNMENT); - - char *aligned = _handle; - - while ((size_t)aligned & (_SSE_ALIGNMENT - 1)) - aligned++; - - _buffer = (T *)aligned; - } - - T *_buffer; - - private: - - char *_handle; -}; - -typedef SimdAlignedBuffer64 SimdAlignedBuffer64f; -typedef SimdAlignedBuffer64 SimdAlignedBuffer64us; - -namespace { - -// -// Color space conversion, Inverse 709 CSC, Y'CbCr -> R'G'B' -// - -void -csc709Inverse (float &comp0, float &comp1, float &comp2) -{ - float src[3]; - - src[0] = comp0; - src[1] = comp1; - src[2] = comp2; - - comp0 = src[0] + 1.5747f * src[2]; - comp1 = src[0] - 0.1873f * src[1] - 0.4682f * src[2]; - comp2 = src[0] + 1.8556f * src[1]; -} - -#ifndef IMF_HAVE_SSE2 - - -// -// Scalar color space conversion, based on 709 primiary chromaticies. -// No scaling or offsets, just the matrix -// - -void -csc709Inverse64 (float *comp0, float *comp1, float *comp2) -{ - for (int i = 0; i < 64; ++i) - csc709Inverse (comp0[i], comp1[i], comp2[i]); -} - -#else /* IMF_HAVE_SSE2 */ - -// -// SSE2 color space conversion -// - -void -csc709Inverse64 (float *comp0, float *comp1, float *comp2) -{ - __m128 c0 = { 1.5747f, 1.5747f, 1.5747f, 1.5747f}; - __m128 c1 = { 1.8556f, 1.8556f, 1.8556f, 1.8556f}; - __m128 c2 = {-0.1873f, -0.1873f, -0.1873f, -0.1873f}; - __m128 c3 = {-0.4682f, -0.4682f, -0.4682f, -0.4682f}; - - __m128 *r = (__m128 *)comp0; - __m128 *g = (__m128 *)comp1; - __m128 *b = (__m128 *)comp2; - __m128 src[3]; - - #define CSC_INVERSE_709_SSE2_LOOP(i) \ - src[0] = r[i]; \ - src[1] = g[i]; \ - src[2] = b[i]; \ - \ - r[i] = _mm_add_ps (r[i], _mm_mul_ps (src[2], c0)); \ - \ - g[i] = _mm_mul_ps (g[i], c2); \ - src[2] = _mm_mul_ps (src[2], c3); \ - g[i] = _mm_add_ps (g[i], src[0]); \ - g[i] = _mm_add_ps (g[i], src[2]); \ - \ - b[i] = _mm_mul_ps (c1, src[1]); \ - b[i] = _mm_add_ps (b[i], src[0]); - - CSC_INVERSE_709_SSE2_LOOP (0) - CSC_INVERSE_709_SSE2_LOOP (1) - CSC_INVERSE_709_SSE2_LOOP (2) - CSC_INVERSE_709_SSE2_LOOP (3) - - CSC_INVERSE_709_SSE2_LOOP (4) - CSC_INVERSE_709_SSE2_LOOP (5) - CSC_INVERSE_709_SSE2_LOOP (6) - CSC_INVERSE_709_SSE2_LOOP (7) - - CSC_INVERSE_709_SSE2_LOOP (8) - CSC_INVERSE_709_SSE2_LOOP (9) - CSC_INVERSE_709_SSE2_LOOP (10) - CSC_INVERSE_709_SSE2_LOOP (11) - - CSC_INVERSE_709_SSE2_LOOP (12) - CSC_INVERSE_709_SSE2_LOOP (13) - CSC_INVERSE_709_SSE2_LOOP (14) - CSC_INVERSE_709_SSE2_LOOP (15) -} - -#endif /* IMF_HAVE_SSE2 */ - - -// -// Color space conversion, Forward 709 CSC, R'G'B' -> Y'CbCr -// -// Simple FPU color space conversion. Based on the 709 -// primary chromaticies, with no scaling or offsets. -// - -void -csc709Forward64 (float *comp0, float *comp1, float *comp2) -{ - float src[3]; - - for (int i = 0; i<64; ++i) - { - src[0] = comp0[i]; - src[1] = comp1[i]; - src[2] = comp2[i]; - - comp0[i] = 0.2126f * src[0] + 0.7152f * src[1] + 0.0722f * src[2]; - comp1[i] = -0.1146f * src[0] - 0.3854f * src[1] + 0.5000f * src[2]; - comp2[i] = 0.5000f * src[0] - 0.4542f * src[1] - 0.0458f * src[2]; - } -} - - -// -// Byte interleaving of 2 byte arrays: -// src0 = AAAA -// src1 = BBBB -// dst = ABABABAB -// -// numBytes is the size of each of the source buffers -// - -#ifndef IMF_HAVE_SSE2 - -// -// Scalar default implementation -// - -void -interleaveByte2 (char *dst, char *src0, char *src1, int numBytes) -{ - for (int x = 0; x < numBytes; ++x) - { - dst[2 * x] = src0[x]; - dst[2 * x + 1] = src1[x]; - } -} - -#else /* IMF_HAVE_SSE2 */ - -// -// SSE2 byte interleaving -// - -void -interleaveByte2 (char *dst, char *src0, char *src1, int numBytes) -{ - int dstAlignment = (size_t)dst % 16; - int src0Alignment = (size_t)src0 % 16; - int src1Alignment = (size_t)src1 % 16; - - __m128i *dst_epi8 = (__m128i*)dst; - __m128i *src0_epi8 = (__m128i*)src0; - __m128i *src1_epi8 = (__m128i*)src1; - int sseWidth = numBytes / 16; - - if ((!dstAlignment) && (!src0Alignment) && (!src1Alignment)) - { - __m128i tmp0, tmp1; - - // - // Aligned loads and stores - // - - for (int x = 0; x < sseWidth; ++x) - { - tmp0 = src0_epi8[x]; - tmp1 = src1_epi8[x]; - - _mm_stream_si128 (&dst_epi8[2 * x], - _mm_unpacklo_epi8 (tmp0, tmp1)); - - _mm_stream_si128 (&dst_epi8[2 * x + 1], - _mm_unpackhi_epi8 (tmp0, tmp1)); - } - - // - // Then do run the leftovers one at a time - // - - for (int x = 16 * sseWidth; x < numBytes; ++x) - { - dst[2 * x] = src0[x]; - dst[2 * x + 1] = src1[x]; - } - } - else if ((!dstAlignment) && (src0Alignment == 8) && (src1Alignment == 8)) - { - // - // Aligned stores, but catch up a few values so we can - // use aligned loads - // - - for (int x = 0; x < std::min (numBytes, 8); ++x) - { - dst[2 * x] = src0[x]; - dst[2 * x + 1] = src1[x]; - } - - if (numBytes > 8) - { - dst_epi8 = (__m128i*)&dst[16]; - src0_epi8 = (__m128i*)&src0[8]; - src1_epi8 = (__m128i*)&src1[8]; - sseWidth = (numBytes - 8) / 16; - - for (int x=0; x half float conversion -// -// To enable F16C based conversion, we can't rely on compile-time -// detection, hence the multiple defined versions. Pick one based -// on runtime cpuid detection. -// - -// -// Default boring conversion -// - -void -convertFloatToHalf64_scalar (unsigned short *dst, float *src) -{ - for (int i=0; i<64; ++i) - dst[i] = ((half)src[i]).bits(); -} - - -// -// F16C conversion - Assumes aligned src and dst -// - -void -convertFloatToHalf64_f16c (unsigned short *dst, float *src) -{ - // - // Ordinarly, I'd avoid using inline asm and prefer intrinsics. - // However, in order to get the intrinsics, we need to tell - // the compiler to generate VEX instructions. - // - // (On the GCC side, -mf16c goes ahead and activates -mavc, - // resulting in VEX code. Without -mf16c, no intrinsics..) - // - // Now, it's quite likely that we'll find ourselves in situations - // where we want to build *without* VEX, in order to maintain - // maximum compatability. But to get there with intrinsics, - // we'd need to break out code into a separate file. Bleh. - // I'll take the asm. - // - - #if defined IMF_HAVE_GCC_INLINEASM - __asm__ - ("vmovaps (%0), %%ymm0 \n" - "vmovaps 0x20(%0), %%ymm1 \n" - "vmovaps 0x40(%0), %%ymm2 \n" - "vmovaps 0x60(%0), %%ymm3 \n" - "vcvtps2ph $0, %%ymm0, %%xmm0 \n" - "vcvtps2ph $0, %%ymm1, %%xmm1 \n" - "vcvtps2ph $0, %%ymm2, %%xmm2 \n" - "vcvtps2ph $0, %%ymm3, %%xmm3 \n" - "vmovdqa %%xmm0, 0x00(%1) \n" - "vmovdqa %%xmm1, 0x10(%1) \n" - "vmovdqa %%xmm2, 0x20(%1) \n" - "vmovdqa %%xmm3, 0x30(%1) \n" - "vmovaps 0x80(%0), %%ymm0 \n" - "vmovaps 0xa0(%0), %%ymm1 \n" - "vmovaps 0xc0(%0), %%ymm2 \n" - "vmovaps 0xe0(%0), %%ymm3 \n" - "vcvtps2ph $0, %%ymm0, %%xmm0 \n" - "vcvtps2ph $0, %%ymm1, %%xmm1 \n" - "vcvtps2ph $0, %%ymm2, %%xmm2 \n" - "vcvtps2ph $0, %%ymm3, %%xmm3 \n" - "vmovdqa %%xmm0, 0x40(%1) \n" - "vmovdqa %%xmm1, 0x50(%1) \n" - "vmovdqa %%xmm2, 0x60(%1) \n" - "vmovdqa %%xmm3, 0x70(%1) \n" - #ifndef __AVX__ - "vzeroupper \n" - #endif /* __AVX__ */ - : /* Output */ - : /* Input */ "r"(src), "r"(dst) - #ifndef __AVX__ - : /* Clobber */ "%xmm0", "%xmm1", "%xmm2", "%xmm3", "memory" - #else - : /* Clobber */ "%ymm0", "%ymm1", "%ymm2", "%ymm3", "memory" - #endif /* __AVX__ */ - ); - #else - convertFloatToHalf64_scalar (dst, src); - #endif /* IMF_HAVE_GCC_INLINEASM */ -} - - -// -// Convert an 8x8 block of HALF from zig-zag order to -// FLOAT in normal order. The order we want is: -// -// src dst -// 0 1 2 3 4 5 6 7 0 1 5 6 14 15 27 28 -// 8 9 10 11 12 13 14 15 2 4 7 13 16 26 29 42 -// 16 17 18 19 20 21 22 23 3 8 12 17 25 30 41 43 -// 24 25 26 27 28 29 30 31 9 11 18 24 31 40 44 53 -// 32 33 34 35 36 37 38 39 10 19 23 32 39 45 52 54 -// 40 41 42 43 44 45 46 47 20 22 33 38 46 51 55 60 -// 48 49 50 51 52 53 54 55 21 34 37 47 50 56 59 61 -// 56 57 58 59 60 61 62 63 35 36 48 49 57 58 62 63 -// - -void -fromHalfZigZag_scalar (unsigned short *src, float *dst) -{ - half *srcHalf = (half *)src; - - dst[0] = (float)srcHalf[0]; - dst[1] = (float)srcHalf[1]; - dst[2] = (float)srcHalf[5]; - dst[3] = (float)srcHalf[6]; - dst[4] = (float)srcHalf[14]; - dst[5] = (float)srcHalf[15]; - dst[6] = (float)srcHalf[27]; - dst[7] = (float)srcHalf[28]; - dst[8] = (float)srcHalf[2]; - dst[9] = (float)srcHalf[4]; - - dst[10] = (float)srcHalf[7]; - dst[11] = (float)srcHalf[13]; - dst[12] = (float)srcHalf[16]; - dst[13] = (float)srcHalf[26]; - dst[14] = (float)srcHalf[29]; - dst[15] = (float)srcHalf[42]; - dst[16] = (float)srcHalf[3]; - dst[17] = (float)srcHalf[8]; - dst[18] = (float)srcHalf[12]; - dst[19] = (float)srcHalf[17]; - - dst[20] = (float)srcHalf[25]; - dst[21] = (float)srcHalf[30]; - dst[22] = (float)srcHalf[41]; - dst[23] = (float)srcHalf[43]; - dst[24] = (float)srcHalf[9]; - dst[25] = (float)srcHalf[11]; - dst[26] = (float)srcHalf[18]; - dst[27] = (float)srcHalf[24]; - dst[28] = (float)srcHalf[31]; - dst[29] = (float)srcHalf[40]; - - dst[30] = (float)srcHalf[44]; - dst[31] = (float)srcHalf[53]; - dst[32] = (float)srcHalf[10]; - dst[33] = (float)srcHalf[19]; - dst[34] = (float)srcHalf[23]; - dst[35] = (float)srcHalf[32]; - dst[36] = (float)srcHalf[39]; - dst[37] = (float)srcHalf[45]; - dst[38] = (float)srcHalf[52]; - dst[39] = (float)srcHalf[54]; - - dst[40] = (float)srcHalf[20]; - dst[41] = (float)srcHalf[22]; - dst[42] = (float)srcHalf[33]; - dst[43] = (float)srcHalf[38]; - dst[44] = (float)srcHalf[46]; - dst[45] = (float)srcHalf[51]; - dst[46] = (float)srcHalf[55]; - dst[47] = (float)srcHalf[60]; - dst[48] = (float)srcHalf[21]; - dst[49] = (float)srcHalf[34]; - - dst[50] = (float)srcHalf[37]; - dst[51] = (float)srcHalf[47]; - dst[52] = (float)srcHalf[50]; - dst[53] = (float)srcHalf[56]; - dst[54] = (float)srcHalf[59]; - dst[55] = (float)srcHalf[61]; - dst[56] = (float)srcHalf[35]; - dst[57] = (float)srcHalf[36]; - dst[58] = (float)srcHalf[48]; - dst[59] = (float)srcHalf[49]; - - dst[60] = (float)srcHalf[57]; - dst[61] = (float)srcHalf[58]; - dst[62] = (float)srcHalf[62]; - dst[63] = (float)srcHalf[63]; -} - - -// -// If we can form the correct ordering in xmm registers, -// we can use F16C to convert from HALF -> FLOAT. However, -// making the correct order isn't trivial. -// -// We want to re-order a source 8x8 matrix from: -// -// 0 1 2 3 4 5 6 7 0 1 5 6 14 15 27 28 -// 8 9 10 11 12 13 14 15 2 4 7 13 16 26 29 42 -// 16 17 18 19 20 21 22 23 3 8 12 17 25 30 41 43 -// 24 25 26 27 28 29 30 31 9 11 18 24 31 40 44 53 (A) -// 32 33 34 35 36 37 38 39 --> 10 19 23 32 39 45 52 54 -// 40 41 42 43 44 45 46 47 20 22 33 38 46 51 55 60 -// 48 49 50 51 52 53 54 55 21 34 37 47 50 56 59 61 -// 56 57 58 59 60 61 62 63 35 36 48 49 57 58 62 63 -// -// Which looks like a mess, right? -// -// Now, check out the NE/SW diagonals of (A). Along those lines, -// we have runs of contiguous values! If we rewrite (A) a bit, we get: -// -// 0 -// 1 2 -// 5 4 3 -// 6 7 8 9 -// 14 13 12 11 10 -// 15 16 17 18 19 20 -// 27 26 25 24 23 22 21 (B) -// 28 29 30 31 32 33 34 35 -// 42 41 40 39 38 37 36 -// 43 44 45 46 47 48 -// 53 52 51 50 49 -// 54 55 56 57 -// 60 59 58 -// 61 62 -// 63 -// -// In this ordering, the columns are the rows (A). If we can 'transpose' -// (B), we'll achieve our goal. But we want this to fit nicely into -// xmm registers and still be able to load large runs efficiently. -// Also, notice that the odd rows are in ascending order, while -// the even rows are in descending order. -// -// If we 'fold' the bottom half up into the top, we can preserve ordered -// runs accross rows, and still keep all the correct values in columns. -// After transposing, we'll need to rotate things back into place. -// This gives us: -// -// 0 | 42 41 40 39 38 37 36 -// 1 2 | 43 44 45 46 47 48 -// 5 4 3 | 53 52 51 50 49 -// 6 7 8 9 | 54 55 56 57 (C) -// 14 13 12 11 10 | 60 59 58 -// 15 16 17 18 19 20 | 61 62 -// 27 26 25 24 23 22 21 | 61 -// 28 29 30 31 32 33 34 35 -// -// But hang on. We still have the backwards descending rows to deal with. -// Lets reverse the even rows so that all values are in ascending order -// -// 36 37 38 39 40 41 42 | 0 -// 1 2 | 43 44 45 46 47 48 -// 49 50 51 52 53 | 3 4 5 -// 6 7 8 9 | 54 55 56 57 (D) -// 58 59 60 | 10 11 12 13 14 -// 15 16 17 18 19 20 | 61 62 -// 61 | 21 22 23 24 25 26 27 -// 28 29 30 31 32 33 34 35 -// -// If we can form (D), we will then: -// 1) Reverse the even rows -// 2) Transpose -// 3) Rotate the rows -// -// and we'll have (A). -// - -void -fromHalfZigZag_f16c (unsigned short *src, float *dst) -{ - #if defined IMF_HAVE_GCC_INLINEASM_64 - __asm__ - - /* x3 <- 0 - * x8 <- [ 0- 7] - * x6 <- [56-63] - * x9 <- [21-28] - * x7 <- [28-35] - * x3 <- [ 6- 9] (lower half) */ - - ("vpxor %%xmm3, %%xmm3, %%xmm3 \n" - "vmovdqa (%0), %%xmm8 \n" - "vmovdqa 112(%0), %%xmm6 \n" - "vmovdqu 42(%0), %%xmm9 \n" - "vmovdqu 56(%0), %%xmm7 \n" - "vmovq 12(%0), %%xmm3 \n" - - /* Setup rows 0-2 of A in xmm0-xmm2 - * x1 <- x8 >> 16 (1 value) - * x2 <- x8 << 32 (2 values) - * x0 <- alignr([35-42], x8, 2) - * x1 <- blend(x1, [41-48]) - * x2 <- blend(x2, [49-56]) */ - - "vpsrldq $2, %%xmm8, %%xmm1 \n" - "vpslldq $4, %%xmm8, %%xmm2 \n" - "vpalignr $2, 70(%0), %%xmm8, %%xmm0 \n" - "vpblendw $0xfc, 82(%0), %%xmm1, %%xmm1 \n" - "vpblendw $0x1f, 98(%0), %%xmm2, %%xmm2 \n" - - /* Setup rows 4-6 of A in xmm4-xmm6 - * x4 <- x6 >> 32 (2 values) - * x5 <- x6 << 16 (1 value) - * x6 <- alignr(x6,x9,14) - * x4 <- blend(x4, [ 7-14]) - * x5 <- blend(x5, [15-22]) */ - - "vpsrldq $4, %%xmm6, %%xmm4 \n" - "vpslldq $2, %%xmm6, %%xmm5 \n" - "vpalignr $14, %%xmm6, %%xmm9, %%xmm6 \n" - "vpblendw $0xf8, 14(%0), %%xmm4, %%xmm4 \n" - "vpblendw $0x3f, 30(%0), %%xmm5, %%xmm5 \n" - - /* Load the upper half of row 3 into xmm3 - * x3 <- [54-57] (upper half) */ - - "vpinsrq $1, 108(%0), %%xmm3, %%xmm3\n" - - /* Reverse the even rows. We're not using PSHUFB as - * that requires loading an extra constant all the time, - * and we're alreadly pretty memory bound. - */ - - "vpshuflw $0x1b, %%xmm0, %%xmm0 \n" - "vpshuflw $0x1b, %%xmm2, %%xmm2 \n" - "vpshuflw $0x1b, %%xmm4, %%xmm4 \n" - "vpshuflw $0x1b, %%xmm6, %%xmm6 \n" - - "vpshufhw $0x1b, %%xmm0, %%xmm0 \n" - "vpshufhw $0x1b, %%xmm2, %%xmm2 \n" - "vpshufhw $0x1b, %%xmm4, %%xmm4 \n" - "vpshufhw $0x1b, %%xmm6, %%xmm6 \n" - - "vpshufd $0x4e, %%xmm0, %%xmm0 \n" - "vpshufd $0x4e, %%xmm2, %%xmm2 \n" - "vpshufd $0x4e, %%xmm4, %%xmm4 \n" - "vpshufd $0x4e, %%xmm6, %%xmm6 \n" - - /* Transpose xmm0-xmm7 into xmm8-xmm15 */ - - "vpunpcklwd %%xmm1, %%xmm0, %%xmm8 \n" - "vpunpcklwd %%xmm3, %%xmm2, %%xmm9 \n" - "vpunpcklwd %%xmm5, %%xmm4, %%xmm10 \n" - "vpunpcklwd %%xmm7, %%xmm6, %%xmm11 \n" - "vpunpckhwd %%xmm1, %%xmm0, %%xmm12 \n" - "vpunpckhwd %%xmm3, %%xmm2, %%xmm13 \n" - "vpunpckhwd %%xmm5, %%xmm4, %%xmm14 \n" - "vpunpckhwd %%xmm7, %%xmm6, %%xmm15 \n" - - "vpunpckldq %%xmm9, %%xmm8, %%xmm0 \n" - "vpunpckldq %%xmm11, %%xmm10, %%xmm1 \n" - "vpunpckhdq %%xmm9, %%xmm8, %%xmm2 \n" - "vpunpckhdq %%xmm11, %%xmm10, %%xmm3 \n" - "vpunpckldq %%xmm13, %%xmm12, %%xmm4 \n" - "vpunpckldq %%xmm15, %%xmm14, %%xmm5 \n" - "vpunpckhdq %%xmm13, %%xmm12, %%xmm6 \n" - "vpunpckhdq %%xmm15, %%xmm14, %%xmm7 \n" - - "vpunpcklqdq %%xmm1, %%xmm0, %%xmm8 \n" - "vpunpckhqdq %%xmm1, %%xmm0, %%xmm9 \n" - "vpunpcklqdq %%xmm3, %%xmm2, %%xmm10 \n" - "vpunpckhqdq %%xmm3, %%xmm2, %%xmm11 \n" - "vpunpcklqdq %%xmm4, %%xmm5, %%xmm12 \n" - "vpunpckhqdq %%xmm5, %%xmm4, %%xmm13 \n" - "vpunpcklqdq %%xmm7, %%xmm6, %%xmm14 \n" - "vpunpckhqdq %%xmm7, %%xmm6, %%xmm15 \n" - - /* Rotate the rows to get the correct final order. - * Rotating xmm12 isn't needed, as we can handle - * the rotation in the PUNPCKLQDQ above. Rotating - * xmm8 isn't needed as it's already in the right order - */ - - "vpalignr $2, %%xmm9, %%xmm9, %%xmm9 \n" - "vpalignr $4, %%xmm10, %%xmm10, %%xmm10 \n" - "vpalignr $6, %%xmm11, %%xmm11, %%xmm11 \n" - "vpalignr $10, %%xmm13, %%xmm13, %%xmm13 \n" - "vpalignr $12, %%xmm14, %%xmm14, %%xmm14 \n" - "vpalignr $14, %%xmm15, %%xmm15, %%xmm15 \n" - - /* Convert from half -> float */ - - "vcvtph2ps %%xmm8, %%ymm8 \n" - "vcvtph2ps %%xmm9, %%ymm9 \n" - "vcvtph2ps %%xmm10, %%ymm10 \n" - "vcvtph2ps %%xmm11, %%ymm11 \n" - "vcvtph2ps %%xmm12, %%ymm12 \n" - "vcvtph2ps %%xmm13, %%ymm13 \n" - "vcvtph2ps %%xmm14, %%ymm14 \n" - "vcvtph2ps %%xmm15, %%ymm15 \n" - - /* Move float values to dst */ - - "vmovaps %%ymm8, (%1) \n" - "vmovaps %%ymm9, 32(%1) \n" - "vmovaps %%ymm10, 64(%1) \n" - "vmovaps %%ymm11, 96(%1) \n" - "vmovaps %%ymm12, 128(%1) \n" - "vmovaps %%ymm13, 160(%1) \n" - "vmovaps %%ymm14, 192(%1) \n" - "vmovaps %%ymm15, 224(%1) \n" - #ifndef __AVX__ - "vzeroupper \n" - #endif /* __AVX__ */ - : /* Output */ - : /* Input */ "r"(src), "r"(dst) - : /* Clobber */ "memory", - #ifndef __AVX__ - "%xmm0", "%xmm1", "%xmm2", "%xmm3", - "%xmm4", "%xmm5", "%xmm6", "%xmm7", - "%xmm8", "%xmm9", "%xmm10", "%xmm11", - "%xmm12", "%xmm13", "%xmm14", "%xmm15" - #else - "%ymm0", "%ymm1", "%ymm2", "%ymm3", - "%ymm4", "%ymm5", "%ymm6", "%ymm7", - "%ymm8", "%ymm9", "%ymm10", "%ymm11", - "%ymm12", "%ymm13", "%ymm14", "%ymm15" - #endif /* __AVX__ */ - ); - - #else - fromHalfZigZag_scalar(src, dst); - #endif /* defined IMF_HAVE_GCC_INLINEASM_64 */ -} - - -// -// Inverse 8x8 DCT, only inverting the DC. This assumes that -// all AC frequencies are 0. -// - -#ifndef IMF_HAVE_SSE2 - -void -dctInverse8x8DcOnly (float *data) -{ - float val = data[0] * 3.535536e-01f * 3.535536e-01f; - - for (int i = 0; i < 64; ++i) - data[i] = val; -} - -#else /* IMF_HAVE_SSE2 */ - -void -dctInverse8x8DcOnly (float *data) -{ - __m128 src = _mm_set1_ps (data[0] * 3.535536e-01f * 3.535536e-01f); - __m128 *dst = (__m128 *)data; - - for (int i = 0; i < 16; ++i) - dst[i] = src; -} - -#endif /* IMF_HAVE_SSE2 */ - - -// -// Full 8x8 Inverse DCT: -// -// Simple inverse DCT on an 8x8 block, with scalar ops only. -// Operates on data in-place. -// -// This is based on the iDCT formuation (y = frequency domain, -// x = spatial domain) -// -// [x0] [ ][y0] [ ][y1] -// [x1] = [ M1 ][y2] + [ M2 ][y3] -// [x2] [ ][y4] [ ][y5] -// [x3] [ ][y6] [ ][y7] -// -// [x7] [ ][y0] [ ][y1] -// [x6] = [ M1 ][y2] - [ M2 ][y3] -// [x5] [ ][y4] [ ][y5] -// [x4] [ ][y6] [ ][y7] -// -// where M1: M2: -// -// [a c a f] [b d e g] -// [a f -a -c] [d -g -b -e] -// [a -f -a c] [e -b g d] -// [a -c a -f] [g -e d -b] -// -// and the constants are as defined below.. -// -// If you know how many of the lower rows are zero, that can -// be passed in to help speed things up. If you don't know, -// just set zeroedRows=0. -// - -// -// Default implementation -// - -template -void -dctInverse8x8_scalar (float *data) -{ - const float a = .5f * cosf (3.14159f / 4.0f); - const float b = .5f * cosf (3.14159f / 16.0f); - const float c = .5f * cosf (3.14159f / 8.0f); - const float d = .5f * cosf (3.f*3.14159f / 16.0f); - const float e = .5f * cosf (5.f*3.14159f / 16.0f); - const float f = .5f * cosf (3.f*3.14159f / 8.0f); - const float g = .5f * cosf (7.f*3.14159f / 16.0f); - - float alpha[4], beta[4], theta[4], gamma[4]; - - float *rowPtr = NULL; - - // - // First pass - row wise. - // - // This looks less-compact than the description above in - // an attempt to fold together common sub-expressions. - // - - for (int row = 0; row < 8 - zeroedRows; ++row) - { - rowPtr = data + row * 8; - - alpha[0] = c * rowPtr[2]; - alpha[1] = f * rowPtr[2]; - alpha[2] = c * rowPtr[6]; - alpha[3] = f * rowPtr[6]; - - beta[0] = b * rowPtr[1] + d * rowPtr[3] + e * rowPtr[5] + g * rowPtr[7]; - beta[1] = d * rowPtr[1] - g * rowPtr[3] - b * rowPtr[5] - e * rowPtr[7]; - beta[2] = e * rowPtr[1] - b * rowPtr[3] + g * rowPtr[5] + d * rowPtr[7]; - beta[3] = g * rowPtr[1] - e * rowPtr[3] + d * rowPtr[5] - b * rowPtr[7]; - - theta[0] = a * (rowPtr[0] + rowPtr[4]); - theta[3] = a * (rowPtr[0] - rowPtr[4]); - - theta[1] = alpha[0] + alpha[3]; - theta[2] = alpha[1] - alpha[2]; - - - gamma[0] = theta[0] + theta[1]; - gamma[1] = theta[3] + theta[2]; - gamma[2] = theta[3] - theta[2]; - gamma[3] = theta[0] - theta[1]; - - - rowPtr[0] = gamma[0] + beta[0]; - rowPtr[1] = gamma[1] + beta[1]; - rowPtr[2] = gamma[2] + beta[2]; - rowPtr[3] = gamma[3] + beta[3]; - - rowPtr[4] = gamma[3] - beta[3]; - rowPtr[5] = gamma[2] - beta[2]; - rowPtr[6] = gamma[1] - beta[1]; - rowPtr[7] = gamma[0] - beta[0]; - } - - // - // Second pass - column wise. - // - - for (int column = 0; column < 8; ++column) - { - alpha[0] = c * data[16+column]; - alpha[1] = f * data[16+column]; - alpha[2] = c * data[48+column]; - alpha[3] = f * data[48+column]; - - beta[0] = b * data[8+column] + d * data[24+column] + - e * data[40+column] + g * data[56+column]; - - beta[1] = d * data[8+column] - g * data[24+column] - - b * data[40+column] - e * data[56+column]; - - beta[2] = e * data[8+column] - b * data[24+column] + - g * data[40+column] + d * data[56+column]; - - beta[3] = g * data[8+column] - e * data[24+column] + - d * data[40+column] - b * data[56+column]; - - theta[0] = a * (data[column] + data[32+column]); - theta[3] = a * (data[column] - data[32+column]); - - theta[1] = alpha[0] + alpha[3]; - theta[2] = alpha[1] - alpha[2]; - - gamma[0] = theta[0] + theta[1]; - gamma[1] = theta[3] + theta[2]; - gamma[2] = theta[3] - theta[2]; - gamma[3] = theta[0] - theta[1]; - - data[ column] = gamma[0] + beta[0]; - data[ 8 + column] = gamma[1] + beta[1]; - data[16 + column] = gamma[2] + beta[2]; - data[24 + column] = gamma[3] + beta[3]; - - data[32 + column] = gamma[3] - beta[3]; - data[40 + column] = gamma[2] - beta[2]; - data[48 + column] = gamma[1] - beta[1]; - data[56 + column] = gamma[0] - beta[0]; - } -} - - -// -// SSE2 Implementation -// - -template -void -dctInverse8x8_sse2 (float *data) -{ - #ifdef IMF_HAVE_SSE2 - __m128 a = {3.535536e-01f,3.535536e-01f,3.535536e-01f,3.535536e-01f}; - __m128 b = {4.903927e-01f,4.903927e-01f,4.903927e-01f,4.903927e-01f}; - __m128 c = {4.619398e-01f,4.619398e-01f,4.619398e-01f,4.619398e-01f}; - __m128 d = {4.157349e-01f,4.157349e-01f,4.157349e-01f,4.157349e-01f}; - __m128 e = {2.777855e-01f,2.777855e-01f,2.777855e-01f,2.777855e-01f}; - __m128 f = {1.913422e-01f,1.913422e-01f,1.913422e-01f,1.913422e-01f}; - __m128 g = {9.754573e-02f,9.754573e-02f,9.754573e-02f,9.754573e-02f}; - - __m128 c0 = {3.535536e-01f, 3.535536e-01f, 3.535536e-01f, 3.535536e-01f}; - __m128 c1 = {4.619398e-01f, 1.913422e-01f,-1.913422e-01f,-4.619398e-01f}; - __m128 c2 = {3.535536e-01f,-3.535536e-01f,-3.535536e-01f, 3.535536e-01f}; - __m128 c3 = {1.913422e-01f,-4.619398e-01f, 4.619398e-01f,-1.913422e-01f}; - - __m128 c4 = {4.903927e-01f, 4.157349e-01f, 2.777855e-01f, 9.754573e-02f}; - __m128 c5 = {4.157349e-01f,-9.754573e-02f,-4.903927e-01f,-2.777855e-01f}; - __m128 c6 = {2.777855e-01f,-4.903927e-01f, 9.754573e-02f, 4.157349e-01f}; - __m128 c7 = {9.754573e-02f,-2.777855e-01f, 4.157349e-01f,-4.903927e-01f}; - - __m128 *srcVec = (__m128 *)data; - __m128 x[8], evenSum, oddSum; - __m128 in[8], alpha[4], beta[4], theta[4], gamma[4]; - - // - // Rows - - // - // Treat this just like matrix-vector multiplication. The - // trick is to note that: - // - // [M00 M01 M02 M03][v0] [(v0 M00) + (v1 M01) + (v2 M02) + (v3 M03)] - // [M10 M11 M12 M13][v1] = [(v0 M10) + (v1 M11) + (v2 M12) + (v3 M13)] - // [M20 M21 M22 M23][v2] [(v0 M20) + (v1 M21) + (v2 M22) + (v3 M23)] - // [M30 M31 M32 M33][v3] [(v0 M30) + (v1 M31) + (v2 M32) + (v3 M33)] - // - // Then, we can fill a register with v_i and multiply by the i-th column - // of M, accumulating across all i-s. - // - // The kids refer to the populating of a register with a single value - // "broadcasting", and it can be done with a shuffle instruction. It - // seems to be the slowest part of the whole ordeal. - // - // Our matrix columns are stored above in c0-c7. c0-3 make up M1, and - // c4-7 are from M2. - // - - #define DCT_INVERSE_8x8_SS2_ROW_LOOP(i) \ - /* \ - * Broadcast the components of the row \ - */ \ - \ - x[0] = _mm_shuffle_ps (srcVec[2 * i], \ - srcVec[2 * i], \ - _MM_SHUFFLE (0, 0, 0, 0)); \ - \ - x[1] = _mm_shuffle_ps (srcVec[2 * i], \ - srcVec[2 * i], \ - _MM_SHUFFLE (1, 1, 1, 1)); \ - \ - x[2] = _mm_shuffle_ps (srcVec[2 * i], \ - srcVec[2 * i], \ - _MM_SHUFFLE (2, 2, 2, 2)); \ - \ - x[3] = _mm_shuffle_ps (srcVec[2 * i], \ - srcVec[2 * i], \ - _MM_SHUFFLE (3, 3, 3, 3)); \ - \ - x[4] = _mm_shuffle_ps (srcVec[2 * i + 1], \ - srcVec[2 * i + 1], \ - _MM_SHUFFLE (0, 0, 0, 0)); \ - \ - x[5] = _mm_shuffle_ps (srcVec[2 * i + 1], \ - srcVec[2 * i + 1], \ - _MM_SHUFFLE (1, 1, 1, 1)); \ - \ - x[6] = _mm_shuffle_ps (srcVec[2 * i + 1], \ - srcVec[2 * i + 1], \ - _MM_SHUFFLE (2, 2, 2, 2)); \ - \ - x[7] = _mm_shuffle_ps (srcVec[2 * i + 1], \ - srcVec[2 * i + 1], \ - _MM_SHUFFLE (3, 3, 3, 3)); \ - /* \ - * Multiply the components by each column of the matrix \ - */ \ - \ - x[0] = _mm_mul_ps (x[0], c0); \ - x[2] = _mm_mul_ps (x[2], c1); \ - x[4] = _mm_mul_ps (x[4], c2); \ - x[6] = _mm_mul_ps (x[6], c3); \ - \ - x[1] = _mm_mul_ps (x[1], c4); \ - x[3] = _mm_mul_ps (x[3], c5); \ - x[5] = _mm_mul_ps (x[5], c6); \ - x[7] = _mm_mul_ps (x[7], c7); \ - \ - /* \ - * Add across \ - */ \ - \ - evenSum = _mm_setzero_ps(); \ - evenSum = _mm_add_ps (evenSum, x[0]); \ - evenSum = _mm_add_ps (evenSum, x[2]); \ - evenSum = _mm_add_ps (evenSum, x[4]); \ - evenSum = _mm_add_ps (evenSum, x[6]); \ - \ - oddSum = _mm_setzero_ps(); \ - oddSum = _mm_add_ps (oddSum, x[1]); \ - oddSum = _mm_add_ps (oddSum, x[3]); \ - oddSum = _mm_add_ps (oddSum, x[5]); \ - oddSum = _mm_add_ps (oddSum, x[7]); \ - \ - /* \ - * Final Sum: \ - * out [0, 1, 2, 3] = evenSum + oddSum \ - * out [7, 6, 5, 4] = evenSum - oddSum \ - */ \ - \ - srcVec[2 * i] = _mm_add_ps (evenSum, oddSum); \ - srcVec[2 * i + 1] = _mm_sub_ps (evenSum, oddSum); \ - srcVec[2 * i + 1] = _mm_shuffle_ps (srcVec[2 * i + 1], \ - srcVec[2 * i + 1], \ - _MM_SHUFFLE (0, 1, 2, 3)); - - switch (zeroedRows) - { - case 0: - default: - DCT_INVERSE_8x8_SS2_ROW_LOOP (0) - DCT_INVERSE_8x8_SS2_ROW_LOOP (1) - DCT_INVERSE_8x8_SS2_ROW_LOOP (2) - DCT_INVERSE_8x8_SS2_ROW_LOOP (3) - DCT_INVERSE_8x8_SS2_ROW_LOOP (4) - DCT_INVERSE_8x8_SS2_ROW_LOOP (5) - DCT_INVERSE_8x8_SS2_ROW_LOOP (6) - DCT_INVERSE_8x8_SS2_ROW_LOOP (7) - break; - - case 1: - DCT_INVERSE_8x8_SS2_ROW_LOOP (0) - DCT_INVERSE_8x8_SS2_ROW_LOOP (1) - DCT_INVERSE_8x8_SS2_ROW_LOOP (2) - DCT_INVERSE_8x8_SS2_ROW_LOOP (3) - DCT_INVERSE_8x8_SS2_ROW_LOOP (4) - DCT_INVERSE_8x8_SS2_ROW_LOOP (5) - DCT_INVERSE_8x8_SS2_ROW_LOOP (6) - break; - - case 2: - DCT_INVERSE_8x8_SS2_ROW_LOOP (0) - DCT_INVERSE_8x8_SS2_ROW_LOOP (1) - DCT_INVERSE_8x8_SS2_ROW_LOOP (2) - DCT_INVERSE_8x8_SS2_ROW_LOOP (3) - DCT_INVERSE_8x8_SS2_ROW_LOOP (4) - DCT_INVERSE_8x8_SS2_ROW_LOOP (5) - break; - - case 3: - DCT_INVERSE_8x8_SS2_ROW_LOOP (0) - DCT_INVERSE_8x8_SS2_ROW_LOOP (1) - DCT_INVERSE_8x8_SS2_ROW_LOOP (2) - DCT_INVERSE_8x8_SS2_ROW_LOOP (3) - DCT_INVERSE_8x8_SS2_ROW_LOOP (4) - break; - - case 4: - DCT_INVERSE_8x8_SS2_ROW_LOOP (0) - DCT_INVERSE_8x8_SS2_ROW_LOOP (1) - DCT_INVERSE_8x8_SS2_ROW_LOOP (2) - DCT_INVERSE_8x8_SS2_ROW_LOOP (3) - break; - - case 5: - DCT_INVERSE_8x8_SS2_ROW_LOOP (0) - DCT_INVERSE_8x8_SS2_ROW_LOOP (1) - DCT_INVERSE_8x8_SS2_ROW_LOOP (2) - break; - - case 6: - DCT_INVERSE_8x8_SS2_ROW_LOOP (0) - DCT_INVERSE_8x8_SS2_ROW_LOOP (1) - break; - - case 7: - DCT_INVERSE_8x8_SS2_ROW_LOOP (0) - break; - } - - // - // Columns - - // - // This is slightly more straightforward, if less readable. Here - // we just operate on 4 columns at a time, in two batches. - // - // The slight mess is to try and cache sub-expressions, which - // we ignore in the row-wise pass. - // - - for (int col = 0; col < 2; ++col) - { - - for (int i = 0; i < 8; ++i) - in[i] = srcVec[2 * i + col]; - - alpha[0] = _mm_mul_ps (c, in[2]); - alpha[1] = _mm_mul_ps (f, in[2]); - alpha[2] = _mm_mul_ps (c, in[6]); - alpha[3] = _mm_mul_ps (f, in[6]); - - beta[0] = _mm_add_ps (_mm_add_ps (_mm_mul_ps (in[1], b), - _mm_mul_ps (in[3], d)), - _mm_add_ps (_mm_mul_ps (in[5], e), - _mm_mul_ps (in[7], g))); - - beta[1] = _mm_sub_ps (_mm_sub_ps (_mm_mul_ps (in[1], d), - _mm_mul_ps (in[3], g)), - _mm_add_ps (_mm_mul_ps (in[5], b), - _mm_mul_ps (in[7], e))); - - beta[2] = _mm_add_ps (_mm_sub_ps (_mm_mul_ps (in[1], e), - _mm_mul_ps (in[3], b)), - _mm_add_ps (_mm_mul_ps (in[5], g), - _mm_mul_ps (in[7], d))); - - beta[3] = _mm_add_ps (_mm_sub_ps (_mm_mul_ps (in[1], g), - _mm_mul_ps (in[3], e)), - _mm_sub_ps (_mm_mul_ps (in[5], d), - _mm_mul_ps (in[7], b))); - - theta[0] = _mm_mul_ps (a, _mm_add_ps (in[0], in[4])); - theta[3] = _mm_mul_ps (a, _mm_sub_ps (in[0], in[4])); - - theta[1] = _mm_add_ps (alpha[0], alpha[3]); - theta[2] = _mm_sub_ps (alpha[1], alpha[2]); - - gamma[0] = _mm_add_ps (theta[0], theta[1]); - gamma[1] = _mm_add_ps (theta[3], theta[2]); - gamma[2] = _mm_sub_ps (theta[3], theta[2]); - gamma[3] = _mm_sub_ps (theta[0], theta[1]); - - srcVec[ col] = _mm_add_ps (gamma[0], beta[0]); - srcVec[2+col] = _mm_add_ps (gamma[1], beta[1]); - srcVec[4+col] = _mm_add_ps (gamma[2], beta[2]); - srcVec[6+col] = _mm_add_ps (gamma[3], beta[3]); - - srcVec[ 8+col] = _mm_sub_ps (gamma[3], beta[3]); - srcVec[10+col] = _mm_sub_ps (gamma[2], beta[2]); - srcVec[12+col] = _mm_sub_ps (gamma[1], beta[1]); - srcVec[14+col] = _mm_sub_ps (gamma[0], beta[0]); - } - - #else /* IMF_HAVE_SSE2 */ - - dctInverse8x8_scalar (data); - - #endif /* IMF_HAVE_SSE2 */ -} - - -// -// AVX Implementation -// - -#define STR(A) #A - -#define IDCT_AVX_SETUP_2_ROWS(_DST0, _DST1, _TMP0, _TMP1, \ - _OFF00, _OFF01, _OFF10, _OFF11) \ - "vmovaps " STR(_OFF00) "(%0), %%xmm" STR(_TMP0) " \n" \ - "vmovaps " STR(_OFF01) "(%0), %%xmm" STR(_TMP1) " \n" \ - " \n" \ - "vinsertf128 $1, " STR(_OFF10) "(%0), %%ymm" STR(_TMP0) ", %%ymm" STR(_TMP0) " \n" \ - "vinsertf128 $1, " STR(_OFF11) "(%0), %%ymm" STR(_TMP1) ", %%ymm" STR(_TMP1) " \n" \ - " \n" \ - "vunpcklpd %%ymm" STR(_TMP1) ", %%ymm" STR(_TMP0) ", %%ymm" STR(_DST0) " \n" \ - "vunpckhpd %%ymm" STR(_TMP1) ", %%ymm" STR(_TMP0) ", %%ymm" STR(_DST1) " \n" \ - " \n" \ - "vunpcklps %%ymm" STR(_DST1) ", %%ymm" STR(_DST0) ", %%ymm" STR(_TMP0) " \n" \ - "vunpckhps %%ymm" STR(_DST1) ", %%ymm" STR(_DST0) ", %%ymm" STR(_TMP1) " \n" \ - " \n" \ - "vunpcklpd %%ymm" STR(_TMP1) ", %%ymm" STR(_TMP0) ", %%ymm" STR(_DST0) " \n" \ - "vunpckhpd %%ymm" STR(_TMP1) ", %%ymm" STR(_TMP0) ", %%ymm" STR(_DST1) " \n" - -#define IDCT_AVX_MMULT_ROWS(_SRC) \ - /* Broadcast the source values into y12-y15 */ \ - "vpermilps $0x00, " STR(_SRC) ", %%ymm12 \n" \ - "vpermilps $0x55, " STR(_SRC) ", %%ymm13 \n" \ - "vpermilps $0xaa, " STR(_SRC) ", %%ymm14 \n" \ - "vpermilps $0xff, " STR(_SRC) ", %%ymm15 \n" \ - \ - /* Multiple coefs and the broadcasted values */ \ - "vmulps %%ymm12, %%ymm8, %%ymm12 \n" \ - "vmulps %%ymm13, %%ymm9, %%ymm13 \n" \ - "vmulps %%ymm14, %%ymm10, %%ymm14 \n" \ - "vmulps %%ymm15, %%ymm11, %%ymm15 \n" \ - \ - /* Accumulate the result back into the source */ \ - "vaddps %%ymm13, %%ymm12, %%ymm12 \n" \ - "vaddps %%ymm15, %%ymm14, %%ymm14 \n" \ - "vaddps %%ymm14, %%ymm12, " STR(_SRC) "\n" - -#define IDCT_AVX_EO_TO_ROW_HALVES(_EVEN, _ODD, _FRONT, _BACK) \ - "vsubps " STR(_ODD) "," STR(_EVEN) "," STR(_BACK) "\n" \ - "vaddps " STR(_ODD) "," STR(_EVEN) "," STR(_FRONT) "\n" \ - /* Reverse the back half */ \ - "vpermilps $0x1b," STR(_BACK) "," STR(_BACK) "\n" - -/* In order to allow for path paths when we know certain rows - * of the 8x8 block are zero, most of the body of the DCT is - * in the following macro. Statements are wrapped in a ROWn() - * macro, where n is the lowest row in the 8x8 block in which - * they depend. - * - * This should work for the cases where we have 2-8 full rows. - * the 1-row case is special, and we'll handle it seperately. - */ -#define IDCT_AVX_BODY \ - /* ============================================== - * Row 1D DCT - * ---------------------------------------------- - */ \ - \ - /* Setup for the row-oriented 1D DCT. Assuming that (%0) holds - * the row-major 8x8 block, load ymm0-3 with the even columns - * and ymm4-7 with the odd columns. The lower half of the ymm - * holds one row, while the upper half holds the next row. - * - * If our source is: - * a0 a1 a2 a3 a4 a5 a6 a7 - * b0 b1 b2 b3 b4 b5 b6 b7 - * - * We'll be forming: - * a0 a2 a4 a6 b0 b2 b4 b6 - * a1 a3 a5 a7 b1 b3 b5 b7 - */ \ - ROW0( IDCT_AVX_SETUP_2_ROWS(0, 4, 14, 15, 0, 16, 32, 48) ) \ - ROW2( IDCT_AVX_SETUP_2_ROWS(1, 5, 12, 13, 64, 80, 96, 112) ) \ - ROW4( IDCT_AVX_SETUP_2_ROWS(2, 6, 10, 11, 128, 144, 160, 176) ) \ - ROW6( IDCT_AVX_SETUP_2_ROWS(3, 7, 8, 9, 192, 208, 224, 240) ) \ - \ - /* Multiple the even columns (ymm0-3) by the matrix M1 - * storing the results back in ymm0-3 - * - * Assume that (%1) holds the matrix in column major order - */ \ - "vbroadcastf128 (%1), %%ymm8 \n" \ - "vbroadcastf128 16(%1), %%ymm9 \n" \ - "vbroadcastf128 32(%1), %%ymm10 \n" \ - "vbroadcastf128 48(%1), %%ymm11 \n" \ - \ - ROW0( IDCT_AVX_MMULT_ROWS(%%ymm0) ) \ - ROW2( IDCT_AVX_MMULT_ROWS(%%ymm1) ) \ - ROW4( IDCT_AVX_MMULT_ROWS(%%ymm2) ) \ - ROW6( IDCT_AVX_MMULT_ROWS(%%ymm3) ) \ - \ - /* Repeat, but with the odd columns (ymm4-7) and the - * matrix M2 - */ \ - "vbroadcastf128 64(%1), %%ymm8 \n" \ - "vbroadcastf128 80(%1), %%ymm9 \n" \ - "vbroadcastf128 96(%1), %%ymm10 \n" \ - "vbroadcastf128 112(%1), %%ymm11 \n" \ - \ - ROW0( IDCT_AVX_MMULT_ROWS(%%ymm4) ) \ - ROW2( IDCT_AVX_MMULT_ROWS(%%ymm5) ) \ - ROW4( IDCT_AVX_MMULT_ROWS(%%ymm6) ) \ - ROW6( IDCT_AVX_MMULT_ROWS(%%ymm7) ) \ - \ - /* Sum the M1 (ymm0-3) and M2 (ymm4-7) results to get the - * front halves of the results, and difference to get the - * back halves. The front halfs end up in ymm0-3, the back - * halves end up in ymm12-15. - */ \ - ROW0( IDCT_AVX_EO_TO_ROW_HALVES(%%ymm0, %%ymm4, %%ymm0, %%ymm12) ) \ - ROW2( IDCT_AVX_EO_TO_ROW_HALVES(%%ymm1, %%ymm5, %%ymm1, %%ymm13) ) \ - ROW4( IDCT_AVX_EO_TO_ROW_HALVES(%%ymm2, %%ymm6, %%ymm2, %%ymm14) ) \ - ROW6( IDCT_AVX_EO_TO_ROW_HALVES(%%ymm3, %%ymm7, %%ymm3, %%ymm15) ) \ - \ - /* Reassemble the rows halves into ymm0-7 */ \ - ROW7( "vperm2f128 $0x13, %%ymm3, %%ymm15, %%ymm7 \n" ) \ - ROW6( "vperm2f128 $0x02, %%ymm3, %%ymm15, %%ymm6 \n" ) \ - ROW5( "vperm2f128 $0x13, %%ymm2, %%ymm14, %%ymm5 \n" ) \ - ROW4( "vperm2f128 $0x02, %%ymm2, %%ymm14, %%ymm4 \n" ) \ - ROW3( "vperm2f128 $0x13, %%ymm1, %%ymm13, %%ymm3 \n" ) \ - ROW2( "vperm2f128 $0x02, %%ymm1, %%ymm13, %%ymm2 \n" ) \ - ROW1( "vperm2f128 $0x13, %%ymm0, %%ymm12, %%ymm1 \n" ) \ - ROW0( "vperm2f128 $0x02, %%ymm0, %%ymm12, %%ymm0 \n" ) \ - \ - \ - /* ============================================== - * Column 1D DCT - * ---------------------------------------------- - */ \ - \ - /* Rows should be in ymm0-7, and M2 columns should still be - * preserved in ymm8-11. M2 has 4 unique values (and +- - * versions of each), and all (positive) values appear in - * the first column (and row), which is in ymm8. - * - * For the column-wise DCT, we need to: - * 1) Broadcast each element a row of M2 into 4 vectors - * 2) Multiple the odd rows (ymm1,3,5,7) by the broadcasts. - * 3) Accumulate into ymm12-15 for the odd outputs. - * - * Instead of doing 16 broadcasts for each element in M2, - * do 4, filling y8-11 with: - * - * ymm8: [ b b b b | b b b b ] - * ymm9: [ d d d d | d d d d ] - * ymm10: [ e e e e | e e e e ] - * ymm11: [ g g g g | g g g g ] - * - * And deal with the negative values by subtracting during accum. - */ \ - "vpermilps $0xff, %%ymm8, %%ymm11 \n" \ - "vpermilps $0xaa, %%ymm8, %%ymm10 \n" \ - "vpermilps $0x55, %%ymm8, %%ymm9 \n" \ - "vpermilps $0x00, %%ymm8, %%ymm8 \n" \ - \ - /* This one is easy, since we have ymm12-15 open for scratch - * ymm12 = b ymm1 + d ymm3 + e ymm5 + g ymm7 - */ \ - ROW1( "vmulps %%ymm1, %%ymm8, %%ymm12 \n" ) \ - ROW3( "vmulps %%ymm3, %%ymm9, %%ymm13 \n" ) \ - ROW5( "vmulps %%ymm5, %%ymm10, %%ymm14 \n" ) \ - ROW7( "vmulps %%ymm7, %%ymm11, %%ymm15 \n" ) \ - \ - ROW3( "vaddps %%ymm12, %%ymm13, %%ymm12 \n" ) \ - ROW7( "vaddps %%ymm14, %%ymm15, %%ymm14 \n" ) \ - ROW5( "vaddps %%ymm12, %%ymm14, %%ymm12 \n" ) \ - \ - /* Tricker, since only y13-15 are open for scratch - * ymm13 = d ymm1 - g ymm3 - b ymm5 - e ymm7 - */ \ - ROW1( "vmulps %%ymm1, %%ymm9, %%ymm13 \n" ) \ - ROW3( "vmulps %%ymm3, %%ymm11, %%ymm14 \n" ) \ - ROW5( "vmulps %%ymm5, %%ymm8, %%ymm15 \n" ) \ - \ - ROW5( "vaddps %%ymm14, %%ymm15, %%ymm14 \n" ) \ - ROW3( "vsubps %%ymm14, %%ymm13, %%ymm13 \n" ) \ - \ - ROW7( "vmulps %%ymm7, %%ymm10, %%ymm15 \n" ) \ - ROW7( "vsubps %%ymm15, %%ymm13, %%ymm13 \n" ) \ - \ - /* Tricker still, as only y14-15 are open for scratch - * ymm14 = e ymm1 - b ymm3 + g ymm5 + d ymm7 - */ \ - ROW1( "vmulps %%ymm1, %%ymm10, %%ymm14 \n" ) \ - ROW3( "vmulps %%ymm3, %%ymm8, %%ymm15 \n" ) \ - \ - ROW3( "vsubps %%ymm15, %%ymm14, %%ymm14 \n" ) \ - \ - ROW5( "vmulps %%ymm5, %%ymm11, %%ymm15 \n" ) \ - ROW5( "vaddps %%ymm15, %%ymm14, %%ymm14 \n" ) \ - \ - ROW7( "vmulps %%ymm7, %%ymm9, %%ymm15 \n" ) \ - ROW7( "vaddps %%ymm15, %%ymm14, %%ymm14 \n" ) \ - \ - \ - /* Easy, as we can blow away ymm1,3,5,7 for scratch - * ymm15 = g ymm1 - e ymm3 + d ymm5 - b ymm7 - */ \ - ROW1( "vmulps %%ymm1, %%ymm11, %%ymm15 \n" ) \ - ROW3( "vmulps %%ymm3, %%ymm10, %%ymm3 \n" ) \ - ROW5( "vmulps %%ymm5, %%ymm9, %%ymm5 \n" ) \ - ROW7( "vmulps %%ymm7, %%ymm8, %%ymm7 \n" ) \ - \ - ROW5( "vaddps %%ymm15, %%ymm5, %%ymm15 \n" ) \ - ROW7( "vaddps %%ymm3, %%ymm7, %%ymm3 \n" ) \ - ROW3( "vsubps %%ymm3, %%ymm15, %%ymm15 \n" ) \ - \ - \ - /* Load coefs for M1. Because we're going to broadcast - * coefs, we don't need to load the actual structure from - * M1. Instead, just load enough that we can broadcast. - * There are only 6 unique values in M1, but they're in +- - * pairs, leaving only 3 unique coefs if we add and subtract - * properly. - * - * Fill ymm1 with coef[2] = [ a a c f | a a c f ] - * Broadcast ymm5 with [ f f f f | f f f f ] - * Broadcast ymm3 with [ c c c c | c c c c ] - * Broadcast ymm1 with [ a a a a | a a a a ] - */ \ - "vbroadcastf128 8(%1), %%ymm1 \n" \ - "vpermilps $0xff, %%ymm1, %%ymm5 \n" \ - "vpermilps $0xaa, %%ymm1, %%ymm3 \n" \ - "vpermilps $0x00, %%ymm1, %%ymm1 \n" \ - \ - /* If we expand E = [M1] [x0 x2 x4 x6]^t, we get the following - * common expressions: - * - * E_0 = ymm8 = (a ymm0 + a ymm4) + (c ymm2 + f ymm6) - * E_3 = ymm11 = (a ymm0 + a ymm4) - (c ymm2 + f ymm6) - * - * E_1 = ymm9 = (a ymm0 - a ymm4) + (f ymm2 - c ymm6) - * E_2 = ymm10 = (a ymm0 - a ymm4) - (f ymm2 - c ymm6) - * - * Afterwards, ymm8-11 will hold the even outputs. - */ \ - \ - /* ymm11 = (a ymm0 + a ymm4), ymm1 = (a ymm0 - a ymm4) */ \ - ROW0( "vmulps %%ymm1, %%ymm0, %%ymm11 \n" ) \ - ROW4( "vmulps %%ymm1, %%ymm4, %%ymm4 \n" ) \ - ROW0( "vmovaps %%ymm11, %%ymm1 \n" ) \ - ROW4( "vaddps %%ymm4, %%ymm11, %%ymm11 \n" ) \ - ROW4( "vsubps %%ymm4, %%ymm1, %%ymm1 \n" ) \ - \ - /* ymm7 = (c ymm2 + f ymm6) */ \ - ROW2( "vmulps %%ymm3, %%ymm2, %%ymm7 \n" ) \ - ROW6( "vmulps %%ymm5, %%ymm6, %%ymm9 \n" ) \ - ROW6( "vaddps %%ymm9, %%ymm7, %%ymm7 \n" ) \ - \ - /* E_0 = ymm8 = (a ymm0 + a ymm4) + (c ymm2 + f ymm6) - * E_3 = ymm11 = (a ymm0 + a ymm4) - (c ymm2 + f ymm6) - */ \ - ROW0( "vmovaps %%ymm11, %%ymm8 \n" ) \ - ROW2( "vaddps %%ymm7, %%ymm8, %%ymm8 \n" ) \ - ROW2( "vsubps %%ymm7, %%ymm11, %%ymm11 \n" ) \ - \ - /* ymm7 = (f ymm2 - c ymm6) */ \ - ROW2( "vmulps %%ymm5, %%ymm2, %%ymm7 \n" ) \ - ROW6( "vmulps %%ymm3, %%ymm6, %%ymm9 \n" ) \ - ROW6( "vsubps %%ymm9, %%ymm7, %%ymm7 \n" ) \ - \ - /* E_1 = ymm9 = (a ymm0 - a ymm4) + (f ymm2 - c ymm6) - * E_2 = ymm10 = (a ymm0 - a ymm4) - (f ymm2 - c ymm6) - */ \ - ROW0( "vmovaps %%ymm1, %%ymm9 \n" ) \ - ROW0( "vmovaps %%ymm1, %%ymm10 \n" ) \ - ROW2( "vaddps %%ymm7, %%ymm1, %%ymm9 \n" ) \ - ROW2( "vsubps %%ymm7, %%ymm1, %%ymm10 \n" ) \ - \ - /* Add the even (ymm8-11) and the odds (ymm12-15), - * placing the results into ymm0-7 - */ \ - "vaddps %%ymm12, %%ymm8, %%ymm0 \n" \ - "vaddps %%ymm13, %%ymm9, %%ymm1 \n" \ - "vaddps %%ymm14, %%ymm10, %%ymm2 \n" \ - "vaddps %%ymm15, %%ymm11, %%ymm3 \n" \ - \ - "vsubps %%ymm12, %%ymm8, %%ymm7 \n" \ - "vsubps %%ymm13, %%ymm9, %%ymm6 \n" \ - "vsubps %%ymm14, %%ymm10, %%ymm5 \n" \ - "vsubps %%ymm15, %%ymm11, %%ymm4 \n" \ - \ - /* Copy out the results from ymm0-7 */ \ - "vmovaps %%ymm0, (%0) \n" \ - "vmovaps %%ymm1, 32(%0) \n" \ - "vmovaps %%ymm2, 64(%0) \n" \ - "vmovaps %%ymm3, 96(%0) \n" \ - "vmovaps %%ymm4, 128(%0) \n" \ - "vmovaps %%ymm5, 160(%0) \n" \ - "vmovaps %%ymm6, 192(%0) \n" \ - "vmovaps %%ymm7, 224(%0) \n" - -/* Output, input, and clobber (OIC) sections of the inline asm */ -#define IDCT_AVX_OIC(_IN0) \ - : /* Output */ \ - : /* Input */ "r"(_IN0), "r"(sAvxCoef) \ - : /* Clobber */ "memory", \ - "%xmm0", "%xmm1", "%xmm2", "%xmm3", \ - "%xmm4", "%xmm5", "%xmm6", "%xmm7", \ - "%xmm8", "%xmm9", "%xmm10", "%xmm11",\ - "%xmm12", "%xmm13", "%xmm14", "%xmm15" - -/* Include vzeroupper for non-AVX builds */ -#ifndef __AVX__ - #define IDCT_AVX_ASM(_IN0) \ - __asm__( \ - IDCT_AVX_BODY \ - "vzeroupper \n" \ - IDCT_AVX_OIC(_IN0) \ - ); -#else /* __AVX__ */ - #define IDCT_AVX_ASM(_IN0) \ - __asm__( \ - IDCT_AVX_BODY \ - IDCT_AVX_OIC(_IN0) \ - ); -#endif /* __AVX__ */ - -template -void -dctInverse8x8_avx (float *data) -{ - #if defined IMF_HAVE_GCC_INLINEASM_64 - - /* The column-major version of M1, followed by the - * column-major version of M2: - * - * [ a c a f ] [ b d e g ] - * M1 = [ a f -a -c ] M2 = [ d -g -b -e ] - * [ a -f -a c ] [ e -b g d ] - * [ a -c a -f ] [ g -e d -b ] - */ - const float sAvxCoef[32] __attribute__((aligned(32))) = { - 3.535536e-01, 3.535536e-01, 3.535536e-01, 3.535536e-01, /* a a a a */ - 4.619398e-01, 1.913422e-01, -1.913422e-01, -4.619398e-01, /* c f -f -c */ - 3.535536e-01, -3.535536e-01, -3.535536e-01, 3.535536e-01, /* a -a -a a */ - 1.913422e-01, -4.619398e-01, 4.619398e-01, -1.913422e-01, /* f -c c -f */ - - 4.903927e-01, 4.157349e-01, 2.777855e-01, 9.754573e-02, /* b d e g */ - 4.157349e-01, -9.754573e-02, -4.903927e-01, -2.777855e-01, /* d -g -b -e */ - 2.777855e-01, -4.903927e-01, 9.754573e-02, 4.157349e-01, /* e -b g d */ - 9.754573e-02, -2.777855e-01, 4.157349e-01, -4.903927e-01 /* g -e d -b */ - }; - - #define ROW0(_X) _X - #define ROW1(_X) _X - #define ROW2(_X) _X - #define ROW3(_X) _X - #define ROW4(_X) _X - #define ROW5(_X) _X - #define ROW6(_X) _X - #define ROW7(_X) _X - - if (zeroedRows == 0) { - - IDCT_AVX_ASM(data) - - } else if (zeroedRows == 1) { - - #undef ROW7 - #define ROW7(_X) - IDCT_AVX_ASM(data) - - } else if (zeroedRows == 2) { - - #undef ROW6 - #define ROW6(_X) - IDCT_AVX_ASM(data) - - } else if (zeroedRows == 3) { - - #undef ROW5 - #define ROW5(_X) - IDCT_AVX_ASM(data) - - } else if (zeroedRows == 4) { - - #undef ROW4 - #define ROW4(_X) - IDCT_AVX_ASM(data) - - } else if (zeroedRows == 5) { - - #undef ROW3 - #define ROW3(_X) - IDCT_AVX_ASM(data) - - } else if (zeroedRows == 6) { - - #undef ROW2 - #define ROW2(_X) - IDCT_AVX_ASM(data) - - } else if (zeroedRows == 7) { - - __asm__( - - /* ============================================== - * Row 1D DCT - * ---------------------------------------------- - */ - IDCT_AVX_SETUP_2_ROWS(0, 4, 14, 15, 0, 16, 32, 48) - - "vbroadcastf128 (%1), %%ymm8 \n" - "vbroadcastf128 16(%1), %%ymm9 \n" - "vbroadcastf128 32(%1), %%ymm10 \n" - "vbroadcastf128 48(%1), %%ymm11 \n" - - /* Stash a vector of [a a a a | a a a a] away in ymm2 */ - "vinsertf128 $1, %%xmm8, %%ymm8, %%ymm2 \n" - - IDCT_AVX_MMULT_ROWS(%%ymm0) - - "vbroadcastf128 64(%1), %%ymm8 \n" - "vbroadcastf128 80(%1), %%ymm9 \n" - "vbroadcastf128 96(%1), %%ymm10 \n" - "vbroadcastf128 112(%1), %%ymm11 \n" - - IDCT_AVX_MMULT_ROWS(%%ymm4) - - IDCT_AVX_EO_TO_ROW_HALVES(%%ymm0, %%ymm4, %%ymm0, %%ymm12) - - "vperm2f128 $0x02, %%ymm0, %%ymm12, %%ymm0 \n" - - /* ============================================== - * Column 1D DCT - * ---------------------------------------------- - */ - - /* DC only, so multiple by a and we're done */ - "vmulps %%ymm2, %%ymm0, %%ymm0 \n" - - /* Copy out results */ - "vmovaps %%ymm0, (%0) \n" - "vmovaps %%ymm0, 32(%0) \n" - "vmovaps %%ymm0, 64(%0) \n" - "vmovaps %%ymm0, 96(%0) \n" - "vmovaps %%ymm0, 128(%0) \n" - "vmovaps %%ymm0, 160(%0) \n" - "vmovaps %%ymm0, 192(%0) \n" - "vmovaps %%ymm0, 224(%0) \n" - - #ifndef __AVX__ - "vzeroupper \n" - #endif /* __AVX__ */ - IDCT_AVX_OIC(data) - ); - } else { - assert(false); // Invalid template instance parameter - } - #else /* IMF_HAVE_GCC_INLINEASM_64 */ - - dctInverse8x8_scalar(data); - - #endif /* IMF_HAVE_GCC_INLINEASM_64 */ -} - - -// -// Full 8x8 Forward DCT: -// -// Base forward 8x8 DCT implementation. Works on the data in-place -// -// The implementation describedin Pennebaker + Mitchell, -// section 4.3.2, and illustrated in figure 4-7 -// -// The basic idea is that the 1D DCT math reduces to: -// -// 2*out_0 = c_4 [(s_07 + s_34) + (s_12 + s_56)] -// 2*out_4 = c_4 [(s_07 + s_34) - (s_12 + s_56)] -// -// {2*out_2, 2*out_6} = rot_6 ((d_12 - d_56), (s_07 - s_34)) -// -// {2*out_3, 2*out_5} = rot_-3 (d_07 - c_4 (s_12 - s_56), -// d_34 - c_4 (d_12 + d_56)) -// -// {2*out_1, 2*out_7} = rot_-1 (d_07 + c_4 (s_12 - s_56), -// -d_34 - c_4 (d_12 + d_56)) -// -// where: -// -// c_i = cos(i*pi/16) -// s_i = sin(i*pi/16) -// -// s_ij = in_i + in_j -// d_ij = in_i - in_j -// -// rot_i(x, y) = {c_i*x + s_i*y, -s_i*x + c_i*y} -// -// We'll run the DCT in two passes. First, run the 1D DCT on -// the rows, in-place. Then, run over the columns in-place, -// and be done with it. -// - -#ifndef IMF_HAVE_SSE2 - -// -// Default implementation -// - -void -dctForward8x8 (float *data) -{ - float A0, A1, A2, A3, A4, A5, A6, A7; - float K0, K1, rot_x, rot_y; - - float *srcPtr = data; - float *dstPtr = data; - - const float c1 = cosf (3.14159f * 1.0f / 16.0f); - const float c2 = cosf (3.14159f * 2.0f / 16.0f); - const float c3 = cosf (3.14159f * 3.0f / 16.0f); - const float c4 = cosf (3.14159f * 4.0f / 16.0f); - const float c5 = cosf (3.14159f * 5.0f / 16.0f); - const float c6 = cosf (3.14159f * 6.0f / 16.0f); - const float c7 = cosf (3.14159f * 7.0f / 16.0f); - - const float c1Half = .5f * c1; - const float c2Half = .5f * c2; - const float c3Half = .5f * c3; - const float c5Half = .5f * c5; - const float c6Half = .5f * c6; - const float c7Half = .5f * c7; - - // - // First pass - do a 1D DCT over the rows and write the - // results back in place - // - - for (int row=0; row<8; ++row) - { - float *srcRowPtr = srcPtr + 8 * row; - float *dstRowPtr = dstPtr + 8 * row; - - A0 = srcRowPtr[0] + srcRowPtr[7]; - A1 = srcRowPtr[1] + srcRowPtr[2]; - A2 = srcRowPtr[1] - srcRowPtr[2]; - A3 = srcRowPtr[3] + srcRowPtr[4]; - A4 = srcRowPtr[3] - srcRowPtr[4]; - A5 = srcRowPtr[5] + srcRowPtr[6]; - A6 = srcRowPtr[5] - srcRowPtr[6]; - A7 = srcRowPtr[0] - srcRowPtr[7]; - - K0 = c4 * (A0 + A3); - K1 = c4 * (A1 + A5); - - dstRowPtr[0] = .5f * (K0 + K1); - dstRowPtr[4] = .5f * (K0 - K1); - - // - // (2*dst2, 2*dst6) = rot 6 (d12 - d56, s07 - s34) - // - - rot_x = A2 - A6; - rot_y = A0 - A3; - - dstRowPtr[2] = c6Half * rot_x + c2Half * rot_y; - dstRowPtr[6] = c6Half * rot_y - c2Half * rot_x; - - // - // K0, K1 are active until after dst[1],dst[7] - // as well as dst[3], dst[5] are computed. - // - - K0 = c4 * (A1 - A5); - K1 = -1 * c4 * (A2 + A6); - - // - // Two ways to do a rotation: - // - // rot i (x, y) = - // X = c_i*x + s_i*y - // Y = -s_i*x + c_i*y - // - // OR - // - // X = c_i*(x+y) + (s_i-c_i)*y - // Y = c_i*y - (s_i+c_i)*x - // - // the first case has 4 multiplies, but fewer constants, - // while the 2nd case has fewer multiplies but takes more space. - - // - // (2*dst3, 2*dst5) = rot -3 ( d07 - K0, d34 + K1 ) - // - - rot_x = A7 - K0; - rot_y = A4 + K1; - - dstRowPtr[3] = c3Half * rot_x - c5Half * rot_y; - dstRowPtr[5] = c5Half * rot_x + c3Half * rot_y; - - // - // (2*dst1, 2*dst7) = rot -1 ( d07 + K0, K1 - d34 ) - // - - rot_x = A7 + K0; - rot_y = K1 - A4; - - // - // A: 4, 7 are inactive. All A's are inactive - // - - dstRowPtr[1] = c1Half * rot_x - c7Half * rot_y; - dstRowPtr[7] = c7Half * rot_x + c1Half * rot_y; - } - - // - // Second pass - do the same, but on the columns - // - - for (int column = 0; column < 8; ++column) - { - - A0 = srcPtr[ column] + srcPtr[56 + column]; - A7 = srcPtr[ column] - srcPtr[56 + column]; - - A1 = srcPtr[ 8 + column] + srcPtr[16 + column]; - A2 = srcPtr[ 8 + column] - srcPtr[16 + column]; - - A3 = srcPtr[24 + column] + srcPtr[32 + column]; - A4 = srcPtr[24 + column] - srcPtr[32 + column]; - - A5 = srcPtr[40 + column] + srcPtr[48 + column]; - A6 = srcPtr[40 + column] - srcPtr[48 + column]; - - K0 = c4 * (A0 + A3); - K1 = c4 * (A1 + A5); - - dstPtr[ column] = .5f * (K0 + K1); - dstPtr[32+column] = .5f * (K0 - K1); - - // - // (2*dst2, 2*dst6) = rot 6 ( d12 - d56, s07 - s34 ) - // - - rot_x = A2 - A6; - rot_y = A0 - A3; - - dstPtr[16+column] = .5f * (c6 * rot_x + c2 * rot_y); - dstPtr[48+column] = .5f * (c6 * rot_y - c2 * rot_x); - - // - // K0, K1 are active until after dst[1],dst[7] - // as well as dst[3], dst[5] are computed. - // - - K0 = c4 * (A1 - A5); - K1 = -1 * c4 * (A2 + A6); - - // - // (2*dst3, 2*dst5) = rot -3 ( d07 - K0, d34 + K1 ) - // - - rot_x = A7 - K0; - rot_y = A4 + K1; - - dstPtr[24+column] = .5f * (c3 * rot_x - c5 * rot_y); - dstPtr[40+column] = .5f * (c5 * rot_x + c3 * rot_y); - - // - // (2*dst1, 2*dst7) = rot -1 ( d07 + K0, K1 - d34 ) - // - - rot_x = A7 + K0; - rot_y = K1 - A4; - - dstPtr[ 8+column] = .5f * (c1 * rot_x - c7 * rot_y); - dstPtr[56+column] = .5f * (c7 * rot_x + c1 * rot_y); - } -} - -#else /* IMF_HAVE_SSE2 */ - -// -// SSE2 implementation -// -// Here, we're always doing a column-wise operation -// plus transposes. This might be faster to do differently -// between rows-wise and column-wise -// - -void -dctForward8x8 (float *data) -{ - __m128 *srcVec = (__m128 *)data; - __m128 a0Vec, a1Vec, a2Vec, a3Vec, a4Vec, a5Vec, a6Vec, a7Vec; - __m128 k0Vec, k1Vec, rotXVec, rotYVec; - __m128 transTmp[4], transTmp2[4]; - - __m128 c4Vec = { .70710678f, .70710678f, .70710678f, .70710678f}; - __m128 c4NegVec = {-.70710678f, -.70710678f, -.70710678f, -.70710678f}; - - __m128 c1HalfVec = {.490392640f, .490392640f, .490392640f, .490392640f}; - __m128 c2HalfVec = {.461939770f, .461939770f, .461939770f, .461939770f}; - __m128 c3HalfVec = {.415734810f, .415734810f, .415734810f, .415734810f}; - __m128 c5HalfVec = {.277785120f, .277785120f, .277785120f, .277785120f}; - __m128 c6HalfVec = {.191341720f, .191341720f, .191341720f, .191341720f}; - __m128 c7HalfVec = {.097545161f, .097545161f, .097545161f, .097545161f}; - - __m128 halfVec = {.5f, .5f, .5f, .5f}; - - for (int iter = 0; iter < 2; ++iter) - { - // - // Operate on 4 columns at a time. The - // offsets into our row-major array are: - // 0: 0 1 - // 1: 2 3 - // 2: 4 5 - // 3: 6 7 - // 4: 8 9 - // 5: 10 11 - // 6: 12 13 - // 7: 14 15 - // - - for (int pass=0; pass<2; ++pass) - { - a0Vec = _mm_add_ps (srcVec[ 0 + pass], srcVec[14 + pass]); - a1Vec = _mm_add_ps (srcVec[ 2 + pass], srcVec[ 4 + pass]); - a3Vec = _mm_add_ps (srcVec[ 6 + pass], srcVec[ 8 + pass]); - a5Vec = _mm_add_ps (srcVec[10 + pass], srcVec[12 + pass]); - - a7Vec = _mm_sub_ps (srcVec[ 0 + pass], srcVec[14 + pass]); - a2Vec = _mm_sub_ps (srcVec[ 2 + pass], srcVec[ 4 + pass]); - a4Vec = _mm_sub_ps (srcVec[ 6 + pass], srcVec[ 8 + pass]); - a6Vec = _mm_sub_ps (srcVec[10 + pass], srcVec[12 + pass]); - - // - // First stage; Compute out_0 and out_4 - // - - k0Vec = _mm_add_ps (a0Vec, a3Vec); - k1Vec = _mm_add_ps (a1Vec, a5Vec); - - k0Vec = _mm_mul_ps (c4Vec, k0Vec); - k1Vec = _mm_mul_ps (c4Vec, k1Vec); - - srcVec[0 + pass] = _mm_add_ps (k0Vec, k1Vec); - srcVec[8 + pass] = _mm_sub_ps (k0Vec, k1Vec); - - srcVec[0 + pass] = _mm_mul_ps (srcVec[0 + pass], halfVec ); - srcVec[8 + pass] = _mm_mul_ps (srcVec[8 + pass], halfVec ); - - - // - // Second stage; Compute out_2 and out_6 - // - - k0Vec = _mm_sub_ps (a2Vec, a6Vec); - k1Vec = _mm_sub_ps (a0Vec, a3Vec); - - srcVec[ 4 + pass] = _mm_add_ps (_mm_mul_ps (c6HalfVec, k0Vec), - _mm_mul_ps (c2HalfVec, k1Vec)); - - srcVec[12 + pass] = _mm_sub_ps (_mm_mul_ps (c6HalfVec, k1Vec), - _mm_mul_ps (c2HalfVec, k0Vec)); - - // - // Precompute K0 and K1 for the remaining stages - // - - k0Vec = _mm_mul_ps (_mm_sub_ps (a1Vec, a5Vec), c4Vec); - k1Vec = _mm_mul_ps (_mm_add_ps (a2Vec, a6Vec), c4NegVec); - - // - // Third Stage, compute out_3 and out_5 - // - - rotXVec = _mm_sub_ps (a7Vec, k0Vec); - rotYVec = _mm_add_ps (a4Vec, k1Vec); - - srcVec[ 6 + pass] = _mm_sub_ps (_mm_mul_ps (c3HalfVec, rotXVec), - _mm_mul_ps (c5HalfVec, rotYVec)); - - srcVec[10 + pass] = _mm_add_ps (_mm_mul_ps (c5HalfVec, rotXVec), - _mm_mul_ps (c3HalfVec, rotYVec)); - - // - // Fourth Stage, compute out_1 and out_7 - // - - rotXVec = _mm_add_ps (a7Vec, k0Vec); - rotYVec = _mm_sub_ps (k1Vec, a4Vec); - - srcVec[ 2 + pass] = _mm_sub_ps (_mm_mul_ps (c1HalfVec, rotXVec), - _mm_mul_ps (c7HalfVec, rotYVec)); - - srcVec[14 + pass] = _mm_add_ps (_mm_mul_ps (c7HalfVec, rotXVec), - _mm_mul_ps (c1HalfVec, rotYVec)); - } - - // - // Transpose the matrix, in 4x4 blocks. So, if we have our - // 8x8 matrix divied into 4x4 blocks: - // - // M0 | M1 M0t | M2t - // ----+--- --> -----+------ - // M2 | M3 M1t | M3t - // - - // - // M0t, done in place, the first half. - // - - transTmp[0] = _mm_shuffle_ps (srcVec[0], srcVec[2], 0x44); - transTmp[1] = _mm_shuffle_ps (srcVec[4], srcVec[6], 0x44); - transTmp[3] = _mm_shuffle_ps (srcVec[4], srcVec[6], 0xEE); - transTmp[2] = _mm_shuffle_ps (srcVec[0], srcVec[2], 0xEE); - - // - // M3t, also done in place, the first half. - // - - transTmp2[0] = _mm_shuffle_ps (srcVec[ 9], srcVec[11], 0x44); - transTmp2[1] = _mm_shuffle_ps (srcVec[13], srcVec[15], 0x44); - transTmp2[2] = _mm_shuffle_ps (srcVec[ 9], srcVec[11], 0xEE); - transTmp2[3] = _mm_shuffle_ps (srcVec[13], srcVec[15], 0xEE); - - // - // M0t, the second half. - // - - srcVec[0] = _mm_shuffle_ps (transTmp[0], transTmp[1], 0x88); - srcVec[4] = _mm_shuffle_ps (transTmp[2], transTmp[3], 0x88); - srcVec[2] = _mm_shuffle_ps (transTmp[0], transTmp[1], 0xDD); - srcVec[6] = _mm_shuffle_ps (transTmp[2], transTmp[3], 0xDD); - - // - // M3t, the second half. - // - - srcVec[ 9] = _mm_shuffle_ps (transTmp2[0], transTmp2[1], 0x88); - srcVec[13] = _mm_shuffle_ps (transTmp2[2], transTmp2[3], 0x88); - srcVec[11] = _mm_shuffle_ps (transTmp2[0], transTmp2[1], 0xDD); - srcVec[15] = _mm_shuffle_ps (transTmp2[2], transTmp2[3], 0xDD); - - // - // M1 and M2 need to be done at the same time, because we're - // swapping. - // - // First, the first half of M1t - // - - transTmp[0] = _mm_shuffle_ps (srcVec[1], srcVec[3], 0x44); - transTmp[1] = _mm_shuffle_ps (srcVec[5], srcVec[7], 0x44); - transTmp[2] = _mm_shuffle_ps (srcVec[1], srcVec[3], 0xEE); - transTmp[3] = _mm_shuffle_ps (srcVec[5], srcVec[7], 0xEE); - - // - // And the first half of M2t - // - - transTmp2[0] = _mm_shuffle_ps (srcVec[ 8], srcVec[10], 0x44); - transTmp2[1] = _mm_shuffle_ps (srcVec[12], srcVec[14], 0x44); - transTmp2[2] = _mm_shuffle_ps (srcVec[ 8], srcVec[10], 0xEE); - transTmp2[3] = _mm_shuffle_ps (srcVec[12], srcVec[14], 0xEE); - - // - // Second half of M1t - // - - srcVec[ 8] = _mm_shuffle_ps (transTmp[0], transTmp[1], 0x88); - srcVec[12] = _mm_shuffle_ps (transTmp[2], transTmp[3], 0x88); - srcVec[10] = _mm_shuffle_ps (transTmp[0], transTmp[1], 0xDD); - srcVec[14] = _mm_shuffle_ps (transTmp[2], transTmp[3], 0xDD); - - // - // Second half of M2 - // - - srcVec[1] = _mm_shuffle_ps (transTmp2[0], transTmp2[1], 0x88); - srcVec[5] = _mm_shuffle_ps (transTmp2[2], transTmp2[3], 0x88); - srcVec[3] = _mm_shuffle_ps (transTmp2[0], transTmp2[1], 0xDD); - srcVec[7] = _mm_shuffle_ps (transTmp2[2], transTmp2[3], 0xDD); - } -} - -#endif /* IMF_HAVE_SSE2 */ - -} // anonymous namespace - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT - -#endif diff --git a/3rdparty/openexr/IlmImf/ImfEnvmap.cpp b/3rdparty/openexr/IlmImf/ImfEnvmap.cpp deleted file mode 100644 index f962fc96ee..0000000000 --- a/3rdparty/openexr/IlmImf/ImfEnvmap.cpp +++ /dev/null @@ -1,335 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - -//----------------------------------------------------------------------------- -// -// Environment maps -// -//----------------------------------------------------------------------------- - -#include "ImfEnvmap.h" -#include "ImathFun.h" -#include "ImfNamespace.h" - -#include -#include - -using namespace std; -using namespace IMATH_NAMESPACE; - - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_ENTER - - -namespace LatLongMap { - -V2f -latLong (const V3f &dir) -{ - float r = sqrt (dir.z * dir.z + dir.x * dir.x); - - float latitude = (r < abs (dir.y))? - acos (r / dir.length()) * sign (dir.y): - asin (dir.y / dir.length()); - - float longitude = (dir.z == 0 && dir.x == 0)? 0: atan2 (dir.x, dir.z); - - return V2f (latitude, longitude); -} - - -V2f -latLong (const Box2i &dataWindow, const V2f &pixelPosition) -{ - float latitude, longitude; - - if (dataWindow.max.y > dataWindow.min.y) - { - latitude = -1 * float(M_PI) * - ((pixelPosition.y - dataWindow.min.y) / - (dataWindow.max.y - dataWindow.min.y) - 0.5f); - } - else - { - latitude = 0; - } - - if (dataWindow.max.x > dataWindow.min.x) - { - longitude = -2 * float(M_PI) * - ((pixelPosition.x - dataWindow.min.x) / - (dataWindow.max.x - dataWindow.min.x) - 0.5f); - } - else - { - longitude = 0; - } - - return V2f (latitude, longitude); -} - - -V2f -pixelPosition (const Box2i &dataWindow, const V2f &latLong) -{ - float x = latLong.y / (-2 * float(M_PI)) + 0.5f; - float y = latLong.x / (-1 * float(M_PI)) + 0.5f; - - return V2f (x * (dataWindow.max.x - dataWindow.min.x) + dataWindow.min.x, - y * (dataWindow.max.y - dataWindow.min.y) + dataWindow.min.y); -} - - -V2f -pixelPosition (const Box2i &dataWindow, const V3f &direction) -{ - return pixelPosition (dataWindow, latLong (direction)); -} - - -V3f -direction (const Box2i &dataWindow, const V2f &pixelPosition) -{ - V2f ll = latLong (dataWindow, pixelPosition); - - return V3f (sin (ll.y) * cos (ll.x), - sin (ll.x), - cos (ll.y) * cos (ll.x)); -} - -} // namespace LatLongMap - - -namespace CubeMap { - -int -sizeOfFace (const Box2i &dataWindow) -{ - return min ((dataWindow.max.x - dataWindow.min.x + 1), - (dataWindow.max.y - dataWindow.min.y + 1) / 6); -} - - -Box2i -dataWindowForFace (CubeMapFace face, const Box2i &dataWindow) -{ - int sof = sizeOfFace (dataWindow); - Box2i dwf; - - dwf.min.x = 0; - dwf.min.y = int (face) * sof; - - dwf.max.x = dwf.min.x + sof - 1; - dwf.max.y = dwf.min.y + sof - 1; - - return dwf; -} - - -V2f -pixelPosition (CubeMapFace face, const Box2i &dataWindow, V2f positionInFace) -{ - Box2i dwf = dataWindowForFace (face, dataWindow); - V2f pos (0, 0); - - switch (face) - { - case CUBEFACE_POS_X: - - pos.x = dwf.min.x + positionInFace.y; - pos.y = dwf.max.y - positionInFace.x; - break; - - case CUBEFACE_NEG_X: - - pos.x = dwf.max.x - positionInFace.y; - pos.y = dwf.max.y - positionInFace.x; - break; - - case CUBEFACE_POS_Y: - - pos.x = dwf.min.x + positionInFace.x; - pos.y = dwf.max.y - positionInFace.y; - break; - - case CUBEFACE_NEG_Y: - - pos.x = dwf.min.x + positionInFace.x; - pos.y = dwf.min.y + positionInFace.y; - break; - - case CUBEFACE_POS_Z: - - pos.x = dwf.max.x - positionInFace.x; - pos.y = dwf.max.y - positionInFace.y; - break; - - case CUBEFACE_NEG_Z: - - pos.x = dwf.min.x + positionInFace.x; - pos.y = dwf.max.y - positionInFace.y; - break; - } - - return pos; -} - - -void -faceAndPixelPosition (const V3f &direction, - const Box2i &dataWindow, - CubeMapFace &face, - V2f &pif) -{ - int sof = sizeOfFace (dataWindow); - float absx = abs (direction.x); - float absy = abs (direction.y); - float absz = abs (direction.z); - - if (absx >= absy && absx >= absz) - { - if (absx == 0) - { - // - // Special case - direction is (0, 0, 0) - // - - face = CUBEFACE_POS_X; - pif = V2f (0, 0); - return; - } - - pif.x = (direction.y / absx + 1) / 2 * (sof - 1); - pif.y = (direction.z / absx + 1) / 2 * (sof - 1); - - if (direction.x > 0) - face = CUBEFACE_POS_X; - else - face = CUBEFACE_NEG_X; - } - else if (absy >= absz) - { - pif.x = (direction.x / absy + 1) / 2 * (sof - 1); - pif.y = (direction.z / absy + 1) / 2 * (sof - 1); - - if (direction.y > 0) - face = CUBEFACE_POS_Y; - else - face = CUBEFACE_NEG_Y; - } - else - { - pif.x = (direction.x / absz + 1) / 2 * (sof - 1); - pif.y = (direction.y / absz + 1) / 2 * (sof - 1); - - if (direction.z > 0) - face = CUBEFACE_POS_Z; - else - face = CUBEFACE_NEG_Z; - } -} - - -V3f -direction (CubeMapFace face, const Box2i &dataWindow, const V2f &positionInFace) -{ - int sof = sizeOfFace (dataWindow); - - V2f pos; - - if (sof > 1) - { - pos = V2f (positionInFace.x / (sof - 1) * 2 - 1, - positionInFace.y / (sof - 1) * 2 - 1); - } - else - { - pos = V2f (0, 0); - } - - V3f dir (1, 0, 0); - - switch (face) - { - case CUBEFACE_POS_X: - - dir.x = 1; - dir.y = pos.x; - dir.z = pos.y; - break; - - case CUBEFACE_NEG_X: - - dir.x = -1; - dir.y = pos.x; - dir.z = pos.y; - break; - - case CUBEFACE_POS_Y: - - dir.x = pos.x; - dir.y = 1; - dir.z = pos.y; - break; - - case CUBEFACE_NEG_Y: - - dir.x = pos.x; - dir.y = -1; - dir.z = pos.y; - break; - - case CUBEFACE_POS_Z: - - dir.x = pos.x; - dir.y = pos.y; - dir.z = 1; - break; - - case CUBEFACE_NEG_Z: - - dir.x = pos.x; - dir.y = pos.y; - dir.z = -1; - break; - } - - return dir; -} - -} // namespace CubeMap - - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_EXIT diff --git a/3rdparty/openexr/IlmImf/ImfEnvmap.h b/3rdparty/openexr/IlmImf/ImfEnvmap.h deleted file mode 100644 index 16e4ee3ee5..0000000000 --- a/3rdparty/openexr/IlmImf/ImfEnvmap.h +++ /dev/null @@ -1,336 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - -#ifndef INCLUDED_IMF_ENVMAP_H -#define INCLUDED_IMF_ENVMAP_H - -//----------------------------------------------------------------------------- -// -// Environment maps -// -// Environment maps define a mapping from 3D directions to 2D -// pixel space locations. Environment maps are typically used -// in 3D rendering, for effects such as quickly approximating -// how shiny surfaces reflect their environment. -// -// Environment maps can be stored in scanline-based or in tiled -// OpenEXR files. The fact that an image is an environment map -// is indicated by the presence of an EnvmapAttribute whose name -// is "envmap". (Convenience functions to access this attribute -// are defined in header file ImfStandardAttributes.h.) -// The attribute's value defines the mapping from 3D directions -// to 2D pixel space locations. -// -// This header file defines the set of possible EnvmapAttribute -// values. -// -// For each possible EnvmapAttribute value, this header file also -// defines a set of convienience functions to convert between 3D -// directions and 2D pixel locations. -// -// Most of the convenience functions defined below require a -// dataWindow parameter. For scanline-based images, and for -// tiled images with level mode ONE_LEVEL, the dataWindow -// parameter should be set to the image's data window, as -// defined in the image header. For tiled images with level -// mode MIPMAP_LEVELS or RIPMAP_LEVELS, the data window of the -// image level that is being accessed should be used instead. -// (See the dataWindowForLevel() methods in ImfTiledInputFile.h -// and ImfTiledOutputFile.h.) -// -//----------------------------------------------------------------------------- - -#include "ImathBox.h" -#include "ImfNamespace.h" -#include "ImfExport.h" - - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER - -//-------------------------------- -// Supported environment map types -//-------------------------------- - -enum Envmap -{ - ENVMAP_LATLONG = 0, // Latitude-longitude environment map - ENVMAP_CUBE = 1, // Cube map - - NUM_ENVMAPTYPES // Number of different environment map types -}; - - -//------------------------------------------------------------------------- -// Latitude-Longitude Map: -// -// The environment is projected onto the image using polar coordinates -// (latitude and longitude). A pixel's x coordinate corresponds to -// its longitude, and the y coordinate corresponds to its latitude. -// Pixel (dataWindow.min.x, dataWindow.min.y) has latitude +pi/2 and -// longitude +pi; pixel (dataWindow.max.x, dataWindow.max.y) has -// latitude -pi/2 and longitude -pi. -// -// In 3D space, latitudes -pi/2 and +pi/2 correspond to the negative and -// positive y direction. Latitude 0, longitude 0 points into positive -// z direction; and latitude 0, longitude pi/2 points into positive x -// direction. -// -// The size of the data window should be 2*N by N pixels (width by height), -// where N can be any integer greater than 0. -//------------------------------------------------------------------------- - -namespace LatLongMap -{ - //---------------------------------------------------- - // Convert a 3D direction to a 2D vector whose x and y - // components represent the corresponding latitude - // and longitude. - //---------------------------------------------------- - - IMF_EXPORT - IMATH_NAMESPACE::V2f latLong (const IMATH_NAMESPACE::V3f &direction); - - - //-------------------------------------------------------- - // Convert the position of a pixel to a 2D vector whose - // x and y components represent the corresponding latitude - // and longitude. - //-------------------------------------------------------- - - IMF_EXPORT - IMATH_NAMESPACE::V2f latLong (const IMATH_NAMESPACE::Box2i &dataWindow, - const IMATH_NAMESPACE::V2f &pixelPosition); - - - //------------------------------------------------------------- - // Convert a 2D vector, whose x and y components represent - // longitude and latitude, into a corresponding pixel position. - //------------------------------------------------------------- - - IMF_EXPORT - IMATH_NAMESPACE::V2f pixelPosition (const IMATH_NAMESPACE::Box2i &dataWindow, - const IMATH_NAMESPACE::V2f &latLong); - - - //----------------------------------------------------- - // Convert a 3D direction vector into a corresponding - // pixel position. pixelPosition(dw,dir) is equivalent - // to pixelPosition(dw,latLong(dw,dir)). - //----------------------------------------------------- - - IMF_EXPORT - IMATH_NAMESPACE::V2f pixelPosition (const IMATH_NAMESPACE::Box2i &dataWindow, - const IMATH_NAMESPACE::V3f &direction); - - - //-------------------------------------------------------- - // Convert the position of a pixel in a latitude-longitude - // map into a corresponding 3D direction. - //-------------------------------------------------------- - - IMF_EXPORT - IMATH_NAMESPACE::V3f direction (const IMATH_NAMESPACE::Box2i &dataWindow, - const IMATH_NAMESPACE::V2f &pixelPosition); -} - - -//-------------------------------------------------------------- -// Cube Map: -// -// The environment is projected onto the six faces of an -// axis-aligned cube. The cube's faces are then arranged -// in a 2D image as shown below. -// -// 2-----------3 -// / /| -// / / | Y -// / / | | -// 6-----------7 | | -// | | | | -// | | | | -// | 0 | 1 *------- X -// | | / / -// | | / / -// | |/ / -// 4-----------5 Z -// -// dataWindow.min -// / -// / -// +-----------+ -// |3 Y 7| -// | | | -// | | | -// | ---+---Z | +X face -// | | | -// | | | -// |1 5| -// +-----------+ -// |6 Y 2| -// | | | -// | | | -// | Z---+--- | -X face -// | | | -// | | | -// |4 0| -// +-----------+ -// |6 Z 7| -// | | | -// | | | -// | ---+---X | +Y face -// | | | -// | | | -// |2 3| -// +-----------+ -// |0 1| -// | | | -// | | | -// | ---+---X | -Y face -// | | | -// | | | -// |4 Z 5| -// +-----------+ -// |7 Y 6| -// | | | -// | | | -// | X---+--- | +Z face -// | | | -// | | | -// |5 4| -// +-----------+ -// |2 Y 3| -// | | | -// | | | -// | ---+---X | -Z face -// | | | -// | | | -// |0 1| -// +-----------+ -// / -// / -// dataWindow.max -// -// The size of the data window should be N by 6*N pixels -// (width by height), where N can be any integer greater -// than 0. -// -//-------------------------------------------------------------- - -//------------------------------------ -// Names for the six faces of the cube -//------------------------------------ - -enum CubeMapFace -{ - CUBEFACE_POS_X, // +X face - CUBEFACE_NEG_X, // -X face - CUBEFACE_POS_Y, // +Y face - CUBEFACE_NEG_Y, // -Y face - CUBEFACE_POS_Z, // +Z face - CUBEFACE_NEG_Z // -Z face -}; - -namespace CubeMap -{ - //--------------------------------------------- - // Width and height of a cube's face, in pixels - //--------------------------------------------- - - IMF_EXPORT - int sizeOfFace (const IMATH_NAMESPACE::Box2i &dataWindow); - - - //------------------------------------------ - // Compute the region in the environment map - // that is covered by the specified face. - //------------------------------------------ - - IMF_EXPORT - IMATH_NAMESPACE::Box2i dataWindowForFace (CubeMapFace face, - const IMATH_NAMESPACE::Box2i &dataWindow); - - - //---------------------------------------------------- - // Convert the coordinates of a pixel within a face - // [in the range from (0,0) to (s-1,s-1), where - // s == sizeOfFace(dataWindow)] to pixel coordinates - // in the environment map. - //---------------------------------------------------- - - IMF_EXPORT - IMATH_NAMESPACE::V2f pixelPosition (CubeMapFace face, - const IMATH_NAMESPACE::Box2i &dataWindow, - IMATH_NAMESPACE::V2f positionInFace); - - - //-------------------------------------------------------------- - // Convert a 3D direction into a cube face, and a pixel position - // within that face. - // - // If you have a 3D direction, dir, the following code fragment - // finds the position, pos, of the corresponding pixel in an - // environment map with data window dw: - // - // CubeMapFace f; - // V2f pif, pos; - // - // faceAndPixelPosition (dir, dw, f, pif); - // pos = pixelPosition (f, dw, pif); - // - //-------------------------------------------------------------- - - IMF_EXPORT - void faceAndPixelPosition (const IMATH_NAMESPACE::V3f &direction, - const IMATH_NAMESPACE::Box2i &dataWindow, - CubeMapFace &face, - IMATH_NAMESPACE::V2f &positionInFace); - - - // -------------------------------------------------------- - // Given a cube face and a pixel position within that face, - // compute the corresponding 3D direction. - // -------------------------------------------------------- - - IMF_EXPORT - IMATH_NAMESPACE::V3f direction (CubeMapFace face, - const IMATH_NAMESPACE::Box2i &dataWindow, - const IMATH_NAMESPACE::V2f &positionInFace); -} - - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT - - -#endif diff --git a/3rdparty/openexr/IlmImf/ImfEnvmapAttribute.cpp b/3rdparty/openexr/IlmImf/ImfEnvmapAttribute.cpp deleted file mode 100644 index b6f88c27d1..0000000000 --- a/3rdparty/openexr/IlmImf/ImfEnvmapAttribute.cpp +++ /dev/null @@ -1,76 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - -//----------------------------------------------------------------------------- -// -// class EnvmapAttribute -// -//----------------------------------------------------------------------------- - -#include - - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_ENTER - -using namespace OPENEXR_IMF_INTERNAL_NAMESPACE; - -template <> -const char * -EnvmapAttribute::staticTypeName () -{ - return "envmap"; -} - - -template <> -void -EnvmapAttribute::writeValueTo (OPENEXR_IMF_INTERNAL_NAMESPACE::OStream &os, int version) const -{ - unsigned char tmp = _value; - Xdr::write (os, tmp); -} - - -template <> -void -EnvmapAttribute::readValueFrom (OPENEXR_IMF_INTERNAL_NAMESPACE::IStream &is, int size, int version) -{ - unsigned char tmp; - Xdr::read (is, tmp); - _value = Envmap (tmp); -} - - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_EXIT diff --git a/3rdparty/openexr/IlmImf/ImfEnvmapAttribute.h b/3rdparty/openexr/IlmImf/ImfEnvmapAttribute.h deleted file mode 100644 index 0d0129b80a..0000000000 --- a/3rdparty/openexr/IlmImf/ImfEnvmapAttribute.h +++ /dev/null @@ -1,68 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - -#ifndef INCLUDED_IMF_ENVMAP_ATTRIBUTE_H -#define INCLUDED_IMF_ENVMAP_ATTRIBUTE_H - - -//----------------------------------------------------------------------------- -// -// class EnvmapAttribute -// -//----------------------------------------------------------------------------- - -#include "ImfAttribute.h" -#include "ImfEnvmap.h" -#include "ImfExport.h" - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER - - -typedef TypedAttribute EnvmapAttribute; - -template <> IMF_EXPORT const char *EnvmapAttribute::staticTypeName (); - -template <> IMF_EXPORT -void EnvmapAttribute::writeValueTo (OPENEXR_IMF_INTERNAL_NAMESPACE::OStream &, - int) const; - -template <> IMF_EXPORT -void EnvmapAttribute::readValueFrom (OPENEXR_IMF_INTERNAL_NAMESPACE::IStream &, - int, - int); - - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT - -#endif diff --git a/3rdparty/openexr/IlmImf/ImfExport.h b/3rdparty/openexr/IlmImf/ImfExport.h deleted file mode 100644 index 6563fd5e3e..0000000000 --- a/3rdparty/openexr/IlmImf/ImfExport.h +++ /dev/null @@ -1,46 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2012, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - -#if defined(OPENEXR_DLL) - #if defined(ILMIMF_EXPORTS) - #define IMF_EXPORT __declspec(dllexport) - #define IMF_EXPORT_CONST extern __declspec(dllexport) - #else - #define IMF_EXPORT __declspec(dllimport) - #define IMF_EXPORT_CONST extern __declspec(dllimport) - #endif -#else - #define IMF_EXPORT - #define IMF_EXPORT_CONST extern const -#endif diff --git a/3rdparty/openexr/IlmImf/ImfFastHuf.cpp b/3rdparty/openexr/IlmImf/ImfFastHuf.cpp deleted file mode 100644 index e581c0f25a..0000000000 --- a/3rdparty/openexr/IlmImf/ImfFastHuf.cpp +++ /dev/null @@ -1,768 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2009-2014 DreamWorks Animation LLC. -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of DreamWorks Animation nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - -#include "ImfFastHuf.h" -#include - -#include -#include -#include -#include - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_ENTER - -// -// Adapted from hufUnpackEncTable - -// We don't need to reconstruct the code book, just the encoded -// lengths for each symbol. From the lengths, we can build the -// base + offset tables. This should be a bit more efficient -// for sparse code books. -// -// table - ptr to the start of the code length data. Will be -// updated as we decode data -// -// numBytes - size of the encoded table (I think)? -// -// minSymbol - smallest symbol in the code book -// -// maxSymbol - largest symbol in the code book. -// -// rleSymbol - the symbol to trigger RLE in the encoded bitstream -// - -FastHufDecoder::FastHufDecoder - (const char *&table, - int numBytes, - int minSymbol, - int maxSymbol, - int rleSymbol) -: - _rleSymbol (rleSymbol), - _numSymbols (0), - _minCodeLength (255), - _maxCodeLength (0), - _idToSymbol (0) -{ - // - // List of symbols that we find with non-zero code lengths - // (listed in the order we find them). Store these in the - // same format as the code book stores codes + lengths - - // low 6 bits are the length, everything above that is - // the symbol. - // - - std::vector symbols; - - // - // The 'base' table is the minimum code at each code length. base[i] - // is the smallest code (numerically) of length i. - // - - Int64 base[MAX_CODE_LEN + 1]; - - // - // The 'offset' table is the position (in sorted order) of the first id - // of a given code lenght. Array is indexed by code length, like base. - // - - Int64 offset[MAX_CODE_LEN + 1]; - - // - // Count of how many codes at each length there are. Array is - // indexed by code length, like base and offset. - // - - size_t codeCount[MAX_CODE_LEN + 1]; - - for (int i = 0; i <= MAX_CODE_LEN; ++i) - { - codeCount[i] = 0; - base[i] = 0xffffffffffffffffULL; - offset[i] = 0; - } - - // - // Count the number of codes, the min/max code lengths, the number of - // codes with each length, and record symbols with non-zero code - // length as we find them. - // - - const char *currByte = table; - Int64 currBits = 0; - int currBitCount = 0; - - const int SHORT_ZEROCODE_RUN = 59; - const int LONG_ZEROCODE_RUN = 63; - const int SHORTEST_LONG_RUN = 2 + LONG_ZEROCODE_RUN - SHORT_ZEROCODE_RUN; - - for (Int64 symbol = minSymbol; symbol <= maxSymbol; symbol++) - { - if (currByte - table > numBytes) - { - throw IEX_NAMESPACE::InputExc ("Error decoding Huffman table " - "(Truncated table data)."); - } - - // - // Next code length - either: - // 0-58 (literal code length) - // 59-62 (various lengths runs of 0) - // 63 (run of n 0's, with n is the next 8 bits) - // - - Int64 codeLen = readBits (6, currBits, currBitCount, currByte); - - if (codeLen == (Int64) LONG_ZEROCODE_RUN) - { - if (currByte - table > numBytes) - { - throw IEX_NAMESPACE::InputExc ("Error decoding Huffman table " - "(Truncated table data)."); - } - - int runLen = readBits (8, currBits, currBitCount, currByte) + - SHORTEST_LONG_RUN; - - if (symbol + runLen > maxSymbol + 1) - { - throw IEX_NAMESPACE::InputExc ("Error decoding Huffman table " - "(Run beyond end of table)."); - } - - symbol += runLen - 1; - - } - else if (codeLen >= (Int64) SHORT_ZEROCODE_RUN) - { - int runLen = codeLen - SHORT_ZEROCODE_RUN + 2; - - if (symbol + runLen > maxSymbol + 1) - { - throw IEX_NAMESPACE::InputExc ("Error decoding Huffman table " - "(Run beyond end of table)."); - } - - symbol += runLen - 1; - - } - else if (codeLen != 0) - { - symbols.push_back ((symbol << 6) | (codeLen & 63)); - - if (codeLen < _minCodeLength) - _minCodeLength = codeLen; - - if (codeLen > _maxCodeLength) - _maxCodeLength = codeLen; - - codeCount[codeLen]++; - } - } - - for (int i = 0; i < MAX_CODE_LEN; ++i) - _numSymbols += codeCount[i]; - - table = currByte; - - // - // Compute base - once we have the code length counts, there - // is a closed form solution for this - // - - { - double* countTmp = new double[_maxCodeLength+1]; - - for (int l = _minCodeLength; l <= _maxCodeLength; ++l) - { - countTmp[l] = (double)codeCount[l] * - (double)(2 << (_maxCodeLength-l)); - } - - for (int l = _minCodeLength; l <= _maxCodeLength; ++l) - { - double tmp = 0; - - for (int k =l + 1; k <= _maxCodeLength; ++k) - tmp += countTmp[k]; - - tmp /= (double)(2 << (_maxCodeLength - l)); - - base[l] = (Int64)ceil (tmp); - } - - delete [] countTmp; - } - - // - // Compute offset - these are the positions of the first - // id (not symbol) that has length [i] - // - - offset[_maxCodeLength] = 0; - - for (int i= _maxCodeLength - 1; i >= _minCodeLength; i--) - offset[i] = offset[i + 1] + codeCount[i + 1]; - - // - // Allocate and fill the symbol-to-id mapping. Smaller Ids should be - // mapped to less-frequent symbols (which have longer codes). Use - // the offset table to tell us where the id's for a given code - // length start off. - // - - _idToSymbol = new int[_numSymbols]; - - Int64 mapping[MAX_CODE_LEN + 1]; - for (int i = 0; i < MAX_CODE_LEN + 1; ++i) - mapping[i] = -1; - for (int i = _minCodeLength; i <= _maxCodeLength; ++i) - mapping[i] = offset[i]; - - for (std::vector::const_iterator i = symbols.begin(); - i != symbols.end(); - ++i) - { - int codeLen = *i & 63; - int symbol = *i >> 6; - - if (mapping[codeLen] >= _numSymbols) - throw IEX_NAMESPACE::InputExc ("Huffman decode error " - "(Invalid symbol in header)."); - - _idToSymbol[mapping[codeLen]] = symbol; - mapping[codeLen]++; - } - - buildTables(base, offset); -} - - -FastHufDecoder::~FastHufDecoder() -{ - delete[] _idToSymbol; -} - - -// -// Static check if the decoder is enabled. -// -// ATM, I only have access to little endian hardware for testing, -// so I'm not entirely sure that we are reading fom the bit stream -// properly on BE. -// -// If you happen to have more obscure hardware, check that the -// byte swapping in refill() is happening sensable, add an endian -// check if needed, and fix the preprocessor magic here. -// - -#define READ64(c) \ - ((Int64)(c)[0] << 56) | ((Int64)(c)[1] << 48) | ((Int64)(c)[2] << 40) | \ - ((Int64)(c)[3] << 32) | ((Int64)(c)[4] << 24) | ((Int64)(c)[5] << 16) | \ - ((Int64)(c)[6] << 8) | ((Int64)(c)[7] ) - -#ifdef __INTEL_COMPILER // ICC built-in swap for LE hosts - #if defined (__i386__) || defined(__x86_64__) - #undef READ64 - #define READ64(c) _bswap64 (*(const Int64*)(c)) - #endif -#endif - - -bool -FastHufDecoder::enabled() -{ - #if defined(__INTEL_COMPILER) || defined(__GNUC__) - - // - // Enabled for ICC, GCC: - // __i386__ -> x86 - // __x86_64__ -> 64-bit x86 - // - - #if defined (__i386__) || defined(__x86_64__) - return true; - #else - return false; - #endif - - #elif defined (_MSC_VER) - - // - // Enabled for Visual Studio: - // _M_IX86 -> x86 - // _M_X64 -> 64bit x86 - - #if defined (_M_IX86) || defined(_M_X64) - return true; - #else - return false; - #endif - - #else - - // - // Unknown compiler - Be safe and disable. - // - return false; - #endif -} - -// -// -// Built the acceleration tables for lookups on the upper bits -// as well as the 'LJ' tables. -// - -void -FastHufDecoder::buildTables (Int64 *base, Int64 *offset) -{ - // - // Build the 'left justified' base table, by shifting base left.. - // - - for (int i = 0; i <= MAX_CODE_LEN; ++i) - { - if (base[i] != 0xffffffffffffffffULL) - { - _ljBase[i] = base[i] << (64 - i); - } - else - { - // - // Unused code length - insert dummy values - // - - _ljBase[i] = 0xffffffffffffffffULL; - } - } - - // - // Combine some terms into a big fat constant, which for - // lack of a better term we'll call the 'left justified' - // offset table (because it serves the same function - // as 'offset', when using the left justified base table. - // - - for (int i = 0; i <= MAX_CODE_LEN; ++i) - _ljOffset[i] = offset[i] - (_ljBase[i] >> (64 - i)); - - // - // Build the acceleration tables for the lookups of - // short codes ( <= TABLE_LOOKUP_BITS long) - // - - for (Int64 i = 0; i < 1 << TABLE_LOOKUP_BITS; ++i) - { - Int64 value = i << (64 - TABLE_LOOKUP_BITS); - - _tableSymbol[i] = 0xffff; - _tableCodeLen[i] = 0; - - for (int codeLen = _minCodeLength; codeLen <= _maxCodeLength; ++codeLen) - { - if (_ljBase[codeLen] <= value) - { - _tableCodeLen[i] = codeLen; - - Int64 id = _ljOffset[codeLen] + (value >> (64 - codeLen)); - if (id < _numSymbols) - { - _tableSymbol[i] = _idToSymbol[id]; - } - else - { - throw IEX_NAMESPACE::InputExc ("Huffman decode error " - "(Overrun)."); - } - break; - } - } - } - - // - // Store the smallest value in the table that points to real data. - // This should be the entry for the largest length that has - // valid data (in our case, non-dummy _ljBase) - // - - int minIdx = TABLE_LOOKUP_BITS; - - while (minIdx > 0 && _ljBase[minIdx] == 0xffffffffffffffffULL) - minIdx--; - - if (minIdx < 0) - { - // - // Error, no codes with lengths 0-TABLE_LOOKUP_BITS used. - // Set the min value such that the table is never tested. - // - - _tableMin = 0xffffffffffffffffULL; - } - else - { - _tableMin = _ljBase[minIdx]; - } -} - - -// -// For decoding, we're holding onto 2 Int64's. -// -// The first (buffer), holds the next bits from the bitstream to be -// decoded. For certain paths in the decoder, we only need TABLE_LOOKUP_BITS -// valid bits to decode the next symbol. For other paths, we need a full -// 64-bits to decode a symbol. -// -// When we need to refill 'buffer', we could pull bits straight from -// the bitstream. But this is very slow and requires lots of book keeping -// (what's the next bit in the next byte?). Instead, we keep another Int64 -// around that we use to refill from. While this doesn't cut down on the -// book keeping (still need to know how many valid bits), it does cut -// down on some of the bit shifting crazy and byte access. -// -// The refill Int64 (bufferBack) gets left-shifted after we've pulled -// off bits. If we run out of bits in the input bit stream, we just -// shift in 0's to bufferBack. -// -// The refill act takes numBits from the top of bufferBack and sticks -// them in the bottom of buffer. If there arn't enough bits in bufferBack, -// it gets refilled (to 64-bits) from the input bitstream. -// - -inline void -FastHufDecoder::refill - (Int64 &buffer, - int numBits, // number of bits to refill - Int64 &bufferBack, // the next 64-bits, to refill from - int &bufferBackNumBits, // number of bits left in bufferBack - const unsigned char *&currByte, // current byte in the bitstream - int &currBitsLeft) // number of bits left in the bitsream -{ - // - // Refill bits into the bottom of buffer, from the top of bufferBack. - // Always top up buffer to be completely full. - // - - buffer |= bufferBack >> (64 - numBits); - - if (bufferBackNumBits < numBits) - { - numBits -= bufferBackNumBits; - - // - // Refill all of bufferBack from the bitstream. Either grab - // a full 64-bit chunk, or whatever bytes are left. If we - // don't have 64-bits left, pad with 0's. - // - - if (currBitsLeft >= 64) - { - bufferBack = READ64 (currByte); - bufferBackNumBits = 64; - currByte += sizeof (Int64); - currBitsLeft -= 8 * sizeof (Int64); - - } - else - { - bufferBack = 0; - bufferBackNumBits = 64; - - Int64 shift = 56; - - while (currBitsLeft > 0) - { - bufferBack |= ((Int64)(*currByte)) << shift; - - currByte++; - shift -= 8; - currBitsLeft -= 8; - } - - // - // At this point, currBitsLeft might be negative, just because - // we're subtracting whole bytes. To keep anyone from freaking - // out, zero the counter. - // - - if (currBitsLeft < 0) - currBitsLeft = 0; - } - - buffer |= bufferBack >> (64 - numBits); - } - - bufferBack = bufferBack << numBits; - bufferBackNumBits -= numBits; - - // - // We can have cases where the previous shift of bufferBack is << 64 - - // in which case no shift occurs. The bit count math still works though, - // so if we don't have any bits left, zero out bufferBack. - // - - if (bufferBackNumBits == 0) - bufferBack = 0; -} - -// -// Read the next few bits out of a bitstream. Will be given a backing buffer -// (buffer) that may still have data left over from previous reads -// (bufferNumBits). Bitstream pointer (currByte) will be advanced when needed. -// - -inline Int64 -FastHufDecoder::readBits - (int numBits, - Int64 &buffer, // c - int &bufferNumBits, // lc - const char *&currByte) // in -{ - while (bufferNumBits < numBits) - { - buffer = (buffer << 8) | *(unsigned char*)(currByte++); - bufferNumBits += 8; - } - - bufferNumBits -= numBits; - return (buffer >> bufferNumBits) & ((1 << numBits) - 1); -} - - -// -// Decode using a the 'One-Shift' strategy for decoding, with a -// small-ish table to accelerate decoding of short codes. -// -// If possible, try looking up codes into the acceleration table. -// This has a few benifits - there's no search involved; We don't -// need an additional lookup to map id to symbol; we don't need -// a full 64-bits (so less refilling). -// - -void -FastHufDecoder::decode - (const unsigned char *src, - int numSrcBits, - unsigned short *dst, - int numDstElems) -{ - if (numSrcBits < 128) - throw IEX_NAMESPACE::InputExc ("Error choosing Huffman decoder implementation " - "(insufficient number of bits)."); - - // - // Current position (byte/bit) in the src data stream - // (after the first buffer fill) - // - - const unsigned char *currByte = src + 2 * sizeof (Int64); - - numSrcBits -= 8 * 2 * sizeof (Int64); - - // - // 64-bit buffer holding the current bits in the stream - // - - Int64 buffer = READ64 (src); - int bufferNumBits = 64; - - // - // 64-bit buffer holding the next bits in the stream - // - - Int64 bufferBack = READ64 ((src + sizeof (Int64))); - int bufferBackNumBits = 64; - - int dstIdx = 0; - - while (dstIdx < numDstElems) - { - int codeLen; - int symbol; - - // - // Test if we can be table accelerated. If so, directly - // lookup the output symbol. Otherwise, we need to fall - // back to searching for the code. - // - // If we're doing table lookups, we don't really need - // a re-filled buffer, so long as we have TABLE_LOOKUP_BITS - // left. But for a search, we do need a refilled table. - // - - if (_tableMin <= buffer) - { - int tableIdx = buffer >> (64 - TABLE_LOOKUP_BITS); - - // - // For invalid codes, _tableCodeLen[] should return 0. This - // will cause the decoder to get stuck in the current spot - // until we run out of elements, then barf that the codestream - // is bad. So we don't need to stick a condition like - // if (codeLen > _maxCodeLength) in this inner. - // - - codeLen = _tableCodeLen[tableIdx]; - symbol = _tableSymbol[tableIdx]; - } - else - { - if (bufferNumBits < 64) - { - refill (buffer, - 64 - bufferNumBits, - bufferBack, - bufferBackNumBits, - currByte, - numSrcBits); - - bufferNumBits = 64; - } - - // - // Brute force search: - // Find the smallest length where _ljBase[length] <= buffer - // - - codeLen = TABLE_LOOKUP_BITS + 1; - - while (_ljBase[codeLen] > buffer && codeLen <= _maxCodeLength) - codeLen++; - - if (codeLen > _maxCodeLength) - { - throw IEX_NAMESPACE::InputExc ("Huffman decode error " - "(Decoded an invalid symbol)."); - } - - Int64 id = _ljOffset[codeLen] + (buffer >> (64 - codeLen)); - if (id < _numSymbols) - { - symbol = _idToSymbol[id]; - } - else - { - throw IEX_NAMESPACE::InputExc ("Huffman decode error " - "(Decoded an invalid symbol)."); - } - } - - // - // Shift over bit stream, and update the bit count in the buffer - // - - buffer = buffer << codeLen; - bufferNumBits -= codeLen; - - // - // If we recieved a RLE symbol (_rleSymbol), then we need - // to read ahead 8 bits to know how many times to repeat - // the previous symbol. Need to ensure we at least have - // 8 bits of data in the buffer - // - - if (symbol == _rleSymbol) - { - if (bufferNumBits < 8) - { - refill (buffer, - 64 - bufferNumBits, - bufferBack, - bufferBackNumBits, - currByte, - numSrcBits); - - bufferNumBits = 64; - } - - int rleCount = buffer >> 56; - - if (dstIdx < 1) - { - throw IEX_NAMESPACE::InputExc ("Huffman decode error (RLE code " - "with no previous symbol)."); - } - - if (dstIdx + rleCount > numDstElems) - { - throw IEX_NAMESPACE::InputExc ("Huffman decode error (Symbol run " - "beyond expected output buffer length)."); - } - - if (rleCount <= 0) - { - throw IEX_NAMESPACE::InputExc("Huffman decode error" - " (Invalid RLE length)"); - } - - for (int i = 0; i < rleCount; ++i) - dst[dstIdx + i] = dst[dstIdx - 1]; - - dstIdx += rleCount; - - buffer = buffer << 8; - bufferNumBits -= 8; - } - else - { - dst[dstIdx] = symbol; - dstIdx++; - } - - // - // refill bit stream buffer if we're below the number of - // bits needed for a table lookup - // - - if (bufferNumBits < TABLE_LOOKUP_BITS) - { - refill (buffer, - 64 - bufferNumBits, - bufferBack, - bufferBackNumBits, - currByte, - numSrcBits); - - bufferNumBits = 64; - } - } - - if (numSrcBits != 0) - { - throw IEX_NAMESPACE::InputExc ("Huffman decode error (Compressed data remains " - "after filling expected output buffer)."); - } -} - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_EXIT diff --git a/3rdparty/openexr/IlmImf/ImfFastHuf.h b/3rdparty/openexr/IlmImf/ImfFastHuf.h deleted file mode 100644 index c8c84fdf51..0000000000 --- a/3rdparty/openexr/IlmImf/ImfFastHuf.h +++ /dev/null @@ -1,153 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2009-2014 DreamWorks Animation LLC. -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of DreamWorks Animation nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - -#ifndef INCLUDED_IMF_FAST_HUF_H -#define INCLUDED_IMF_FAST_HUF_H - -#include "ImfInt64.h" -#include "ImfNamespace.h" -#include "ImfExport.h" - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER - -// -// Alternative Canonical Huffman decoder: -// -// Canonical Huffman decoder based on 'On the Implementation of Minimum -// Redundancy Prefix Codes' by Moffat and Turpin - highly recommended -// reading as a good description of the problem space, as well as -// a fast decoding algorithm. -// -// The premise is that instead of working directly with the coded -// symbols, we create a new ordering based on the frequency of symbols. -// Less frequent symbols (and thus longer codes) are ordered earler. -// We're calling the values in this ordering 'Ids', as oppsed to -// 'Symbols' - which are the short values we eventually want decoded. -// -// With this new ordering, a few small tables can be derived ('base' -// and 'offset') which drive the decoding. To cut down on the -// linear scanning of these tables, you can add a small table -// to directly look up short codes (as you might in a traditional -// lookup-table driven decoder). -// -// The decoder is meant to be compatible with the encoder (and decoder) -// in ImfHuf.cpp, just faster. For ease of implementation, this decoder -// should only be used on compressed bitstreams >= 128 bits long. -// - -class FastHufDecoder -{ - public: - - // - // Longest compressed code length that ImfHuf supports (58 bits) - // - - static const int MAX_CODE_LEN = 58; - - // - // Number of bits in our acceleration table. Should match all - // codes up to TABLE_LOOKUP_BITS in length. - // - - static const int TABLE_LOOKUP_BITS = 12; - - IMF_EXPORT - FastHufDecoder (const char*& table, - int numBytes, - int minSymbol, - int maxSymbol, - int rleSymbol); - - IMF_EXPORT - ~FastHufDecoder (); - - IMF_EXPORT - static bool enabled (); - - IMF_EXPORT - void decode (const unsigned char *src, - int numSrcBits, - unsigned short *dst, - int numDstElems); - - private: - - void buildTables (Int64*, Int64*); - void refill (Int64&, int, Int64&, int&, const unsigned char *&, int&); - Int64 readBits (int, Int64&, int&, const char *&); - - int _rleSymbol; // RLE symbol written by the encoder. - // This could be 65536, so beware - // when you use shorts to hold things. - - int _numSymbols; // Number of symbols in the codebook. - - unsigned char _minCodeLength; // Minimum code length, in bits. - unsigned char _maxCodeLength; // Maximum code length, in bits. - - int *_idToSymbol; // Maps Ids to symbols. Ids are a symbol - // ordering sorted first in terms of - // code length, and by code within - // the same length. Ids run from 0 - // to mNumSymbols-1. - - Int64 _ljBase[MAX_CODE_LEN + 1]; // the 'left justified base' table. - // Takes base[i] (i = code length) - // and 'left justifies' it into an Int64 - - Int64 _ljOffset[MAX_CODE_LEN +1 ]; // There are some other terms that can - // be folded into constants when taking - // the 'left justified' decode path. This - // holds those constants, indexed by - // code length - - // - // We can accelerate the 'left justified' processing by running the - // top TABLE_LOOKUP_BITS through a LUT, to find the symbol and code - // length. These are those acceleration tables. - // - // Even though our evental 'symbols' are ushort's, the encoder adds - // a symbol to indicate RLE. So with a dense code book, we could - // have 2^16+1 codes, so both mIdToSymbol and mTableSymbol need - // to be bigger than 16 bits. - // - - int _tableSymbol[1 << TABLE_LOOKUP_BITS]; - unsigned char _tableCodeLen[1 << TABLE_LOOKUP_BITS]; - Int64 _tableMin; -}; - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT - -#endif diff --git a/3rdparty/openexr/IlmImf/ImfFloatAttribute.cpp b/3rdparty/openexr/IlmImf/ImfFloatAttribute.cpp deleted file mode 100644 index 4e22e90779..0000000000 --- a/3rdparty/openexr/IlmImf/ImfFloatAttribute.cpp +++ /dev/null @@ -1,57 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - - -//----------------------------------------------------------------------------- -// -// class FloatAttribute -// -//----------------------------------------------------------------------------- - -#include - - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_ENTER - - -template <> -const char * -FloatAttribute::staticTypeName () -{ - return "float"; -} - - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_EXIT diff --git a/3rdparty/openexr/IlmImf/ImfFloatAttribute.h b/3rdparty/openexr/IlmImf/ImfFloatAttribute.h deleted file mode 100644 index 737072146e..0000000000 --- a/3rdparty/openexr/IlmImf/ImfFloatAttribute.h +++ /dev/null @@ -1,58 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - - -#ifndef INCLUDED_IMF_FLOAT_ATTRIBUTE_H -#define INCLUDED_IMF_FLOAT_ATTRIBUTE_H - -//----------------------------------------------------------------------------- -// -// class FloatAttribute -// -//----------------------------------------------------------------------------- - -#include "ImfAttribute.h" - - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER - - -typedef TypedAttribute FloatAttribute; -template <> IMF_EXPORT const char *FloatAttribute::staticTypeName (); - - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT - -#endif diff --git a/3rdparty/openexr/IlmImf/ImfFloatVectorAttribute.cpp b/3rdparty/openexr/IlmImf/ImfFloatVectorAttribute.cpp deleted file mode 100644 index 49eda908fd..0000000000 --- a/3rdparty/openexr/IlmImf/ImfFloatVectorAttribute.cpp +++ /dev/null @@ -1,84 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2013, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - -//----------------------------------------------------------------------------- -// -// class FloatVectorAttribute -// -//----------------------------------------------------------------------------- - -#include - - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_ENTER - - -using namespace OPENEXR_IMF_INTERNAL_NAMESPACE; - - -template <> -const char * -FloatVectorAttribute::staticTypeName () -{ - return "floatvector"; -} - - -template <> -void -FloatVectorAttribute::writeValueTo - (OPENEXR_IMF_INTERNAL_NAMESPACE::OStream &os, int version) const -{ - int n = _value.size(); - - for (int i = 0; i < n; ++i) - Xdr::write (os, _value[i]); -} - - -template <> -void -FloatVectorAttribute::readValueFrom - (OPENEXR_IMF_INTERNAL_NAMESPACE::IStream &is, int size, int version) -{ - int n = size / Xdr::size(); - _value.resize (n); - - for (int i = 0; i < n; ++i) - Xdr::read (is, _value[i]); -} - - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_EXIT diff --git a/3rdparty/openexr/IlmImf/ImfFloatVectorAttribute.h b/3rdparty/openexr/IlmImf/ImfFloatVectorAttribute.h deleted file mode 100644 index 66e7642c9b..0000000000 --- a/3rdparty/openexr/IlmImf/ImfFloatVectorAttribute.h +++ /dev/null @@ -1,76 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2007, Weta Digital Ltd -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Weta Digital nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - - -#ifndef INCLUDED_IMF_FLOATVECTOR_ATTRIBUTE_H -#define INCLUDED_IMF_FLOATVECTOR_ATTRIBUTE_H - -//----------------------------------------------------------------------------- -// -// class FloatVectorAttribute -// -//----------------------------------------------------------------------------- - -#include "ImfAttribute.h" -#include "ImfNamespace.h" - -#include - - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER - -typedef std::vector - FloatVector; - -typedef TypedAttribute - FloatVectorAttribute; - -template <> -IMF_EXPORT -const char *FloatVectorAttribute::staticTypeName (); - -template <> -IMF_EXPORT -void FloatVectorAttribute::writeValueTo - (OPENEXR_IMF_INTERNAL_NAMESPACE::OStream &, int) const; - -template <> -IMF_EXPORT -void FloatVectorAttribute::readValueFrom - (OPENEXR_IMF_INTERNAL_NAMESPACE::IStream &, int, int); - - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT - -#endif diff --git a/3rdparty/openexr/IlmImf/ImfForward.h b/3rdparty/openexr/IlmImf/ImfForward.h deleted file mode 100644 index ea51c24d8c..0000000000 --- a/3rdparty/openexr/IlmImf/ImfForward.h +++ /dev/null @@ -1,127 +0,0 @@ - - -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2011, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// Portions (c) 2012 Weta Digital Ltd -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - -#ifndef INCLUDED_IMF_FORWARD_H -#define INCLUDED_IMF_FORWARD_H - -//////////////////////////////////////////////////////////////////// -// -// Forward declarations for OpenEXR - correctly declares namespace -// -//////////////////////////////////////////////////////////////////// - -#include "ImfNamespace.h" - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER - - -// classes for basic types; -template class Array; -template class Array2D; -struct Channel; -class ChannelList; -struct Chromaticities; - -// attributes used in headers are TypedAttributes -class Attribute; - -class Header; - -// file handling classes -class OutputFile; -class TiledInputFile; -class ScanLineInputFile; -class InputFile; -class TiledOutputFile; -class DeepScanLineInputFile; -class DeepScanLineOutputFile; -class DeepTiledInputFile; -class DeepTiledOutputFile; -class AcesInputFile; -class AcesOutputFile; -class TiledInputPart; -class TiledInputFile; -class TileOffsets; - -// multipart file handling -class GenericInputFile; -class GenericOutputFile; -class MultiPartInputFile; -class MultiPartOutputFile; - -class InputPart; -class TiledInputPart; -class DeepScanLineInputPart; -class DeepTiledInputPart; - -class OutputPart; -class ScanLineOutputPart; -class TiledOutputPart; -class DeepScanLineOutputPart; -class DeepTiledOutputPart; - - -// internal use only -struct InputPartData; -struct OutputStreamMutex; -struct OutputPartData; -struct InputStreamMutex; - -// frame buffers - -class FrameBuffer; -class DeepFrameBuffer; -struct DeepSlice; - -// compositing -class DeepCompositing; -class CompositeDeepScanLine; - -// preview image -class PreviewImage; -struct PreviewRgba; - -// streams -class OStream; -class IStream; - - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT - - -#endif // include guard diff --git a/3rdparty/openexr/IlmImf/ImfFrameBuffer.cpp b/3rdparty/openexr/IlmImf/ImfFrameBuffer.cpp deleted file mode 100644 index bced3b1686..0000000000 --- a/3rdparty/openexr/IlmImf/ImfFrameBuffer.cpp +++ /dev/null @@ -1,228 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - - -//----------------------------------------------------------------------------- -// -// class Slice -// class FrameBuffer -// -//----------------------------------------------------------------------------- - -#include -#include "Iex.h" - - -using namespace std; - -#include "ImfNamespace.h" - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_ENTER - -Slice::Slice (PixelType t, - char *b, - size_t xst, - size_t yst, - int xsm, - int ysm, - double fv, - bool xtc, - bool ytc) -: - type (t), - base (b), - xStride (xst), - yStride (yst), - xSampling (xsm), - ySampling (ysm), - fillValue (fv), - xTileCoords (xtc), - yTileCoords (ytc) -{ - // empty -} - - -void -FrameBuffer::insert (const char name[], const Slice &slice) -{ - if (name[0] == 0) - { - THROW (IEX_NAMESPACE::ArgExc, - "Frame buffer slice name cannot be an empty string."); - } - - _map[name] = slice; -} - - -void -FrameBuffer::insert (const string &name, const Slice &slice) -{ - insert (name.c_str(), slice); -} - - -Slice & -FrameBuffer::operator [] (const char name[]) -{ - SliceMap::iterator i = _map.find (name); - - if (i == _map.end()) - { - THROW (IEX_NAMESPACE::ArgExc, - "Cannot find frame buffer slice \"" << name << "\"."); - } - - return i->second; -} - - -const Slice & -FrameBuffer::operator [] (const char name[]) const -{ - SliceMap::const_iterator i = _map.find (name); - - if (i == _map.end()) - { - THROW (IEX_NAMESPACE::ArgExc, - "Cannot find frame buffer slice \"" << name << "\"."); - } - - return i->second; -} - - -Slice & -FrameBuffer::operator [] (const string &name) -{ - return this->operator[] (name.c_str()); -} - - -const Slice & -FrameBuffer::operator [] (const string &name) const -{ - return this->operator[] (name.c_str()); -} - - -Slice * -FrameBuffer::findSlice (const char name[]) -{ - SliceMap::iterator i = _map.find (name); - return (i == _map.end())? 0: &i->second; -} - - -const Slice * -FrameBuffer::findSlice (const char name[]) const -{ - SliceMap::const_iterator i = _map.find (name); - return (i == _map.end())? 0: &i->second; -} - - -Slice * -FrameBuffer::findSlice (const string &name) -{ - return findSlice (name.c_str()); -} - - -const Slice * -FrameBuffer::findSlice (const string &name) const -{ - return findSlice (name.c_str()); -} - - -FrameBuffer::Iterator -FrameBuffer::begin () -{ - return _map.begin(); -} - - -FrameBuffer::ConstIterator -FrameBuffer::begin () const -{ - return _map.begin(); -} - - -FrameBuffer::Iterator -FrameBuffer::end () -{ - return _map.end(); -} - - -FrameBuffer::ConstIterator -FrameBuffer::end () const -{ - return _map.end(); -} - - -FrameBuffer::Iterator -FrameBuffer::find (const char name[]) -{ - return _map.find (name); -} - - -FrameBuffer::ConstIterator -FrameBuffer::find (const char name[]) const -{ - return _map.find (name); -} - - -FrameBuffer::Iterator -FrameBuffer::find (const string &name) -{ - return find (name.c_str()); -} - - -FrameBuffer::ConstIterator -FrameBuffer::find (const string &name) const -{ - return find (name.c_str()); -} - - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_EXIT diff --git a/3rdparty/openexr/IlmImf/ImfFrameBuffer.h b/3rdparty/openexr/IlmImf/ImfFrameBuffer.h deleted file mode 100644 index e7ef247220..0000000000 --- a/3rdparty/openexr/IlmImf/ImfFrameBuffer.h +++ /dev/null @@ -1,418 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - - -#ifndef INCLUDED_IMF_FRAME_BUFFER_H -#define INCLUDED_IMF_FRAME_BUFFER_H - -//----------------------------------------------------------------------------- -// -// class Slice -// class FrameBuffer -// -//----------------------------------------------------------------------------- - -#include "ImfName.h" -#include "ImfPixelType.h" -#include "ImfExport.h" -#include "ImfNamespace.h" - -#include -#include - - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER - - -//------------------------------------------------------- -// Description of a single slice of the frame buffer: -// -// Note -- terminology: as part of a file, a component of -// an image (e.g. red, green, blue, depth etc.) is called -// a "channel". As part of a frame buffer, an image -// component is called a "slice". -//------------------------------------------------------- - -struct Slice -{ - //------------------------------ - // Data type; see ImfPixelType.h - //------------------------------ - - PixelType type; - - - //--------------------------------------------------------------------- - // Memory layout: The address of pixel (x, y) is - // - // base + (xp / xSampling) * xStride + (yp / ySampling) * yStride - // - // where xp and yp are computed as follows: - // - // * If we are reading or writing a scanline-based file: - // - // xp = x - // yp = y - // - // * If we are reading a tile whose upper left coorner is at (xt, yt): - // - // if xTileCoords is true then xp = x - xt, else xp = x - // if yTileCoords is true then yp = y - yt, else yp = y - // - //--------------------------------------------------------------------- - - char * base; - size_t xStride; - size_t yStride; - - - //-------------------------------------------- - // Subsampling: pixel (x, y) is present in the - // slice only if - // - // x % xSampling == 0 && y % ySampling == 0 - // - //-------------------------------------------- - - int xSampling; - int ySampling; - - - //---------------------------------------------------------- - // Default value, used to fill the slice when a file without - // a channel that corresponds to this slice is read. - //---------------------------------------------------------- - - double fillValue; - - - //------------------------------------------------------- - // For tiled files, the xTileCoords and yTileCoords flags - // determine whether pixel addressing is performed using - // absolute coordinates or coordinates relative to a - // tile's upper left corner. (See the comment on base, - // xStride and yStride, above.) - // - // For scanline-based files these flags have no effect; - // pixel addressing is always done using absolute - // coordinates. - //------------------------------------------------------- - - bool xTileCoords; - bool yTileCoords; - - - //------------ - // Constructor - //------------ - - IMF_EXPORT - Slice (PixelType type = HALF, - char * base = 0, - size_t xStride = 0, - size_t yStride = 0, - int xSampling = 1, - int ySampling = 1, - double fillValue = 0.0, - bool xTileCoords = false, - bool yTileCoords = false); -}; - - -class FrameBuffer -{ - public: - - //------------ - // Add a slice - //------------ - - IMF_EXPORT - void insert (const char name[], - const Slice &slice); - - IMF_EXPORT - void insert (const std::string &name, - const Slice &slice); - - //---------------------------------------------------------------- - // Access to existing slices: - // - // [n] Returns a reference to the slice with name n. - // If no slice with name n exists, an IEX_NAMESPACE::ArgExc - // is thrown. - // - // findSlice(n) Returns a pointer to the slice with name n, - // or 0 if no slice with name n exists. - // - //---------------------------------------------------------------- - - IMF_EXPORT - Slice & operator [] (const char name[]); - IMF_EXPORT - const Slice & operator [] (const char name[]) const; - - IMF_EXPORT - Slice & operator [] (const std::string &name); - IMF_EXPORT - const Slice & operator [] (const std::string &name) const; - - IMF_EXPORT - Slice * findSlice (const char name[]); - IMF_EXPORT - const Slice * findSlice (const char name[]) const; - - IMF_EXPORT - Slice * findSlice (const std::string &name); - IMF_EXPORT - const Slice * findSlice (const std::string &name) const; - - - //----------------------------------------- - // Iterator-style access to existing slices - //----------------------------------------- - - typedef std::map SliceMap; - - class Iterator; - class ConstIterator; - - IMF_EXPORT - Iterator begin (); - IMF_EXPORT - ConstIterator begin () const; - - IMF_EXPORT - Iterator end (); - IMF_EXPORT - ConstIterator end () const; - - IMF_EXPORT - Iterator find (const char name[]); - IMF_EXPORT - ConstIterator find (const char name[]) const; - - IMF_EXPORT - Iterator find (const std::string &name); - IMF_EXPORT - ConstIterator find (const std::string &name) const; - - private: - - SliceMap _map; -}; - - -//---------- -// Iterators -//---------- - -class FrameBuffer::Iterator -{ - public: - - IMF_EXPORT - Iterator (); - IMF_EXPORT - Iterator (const FrameBuffer::SliceMap::iterator &i); - - IMF_EXPORT - Iterator & operator ++ (); - IMF_EXPORT - Iterator operator ++ (int); - - IMF_EXPORT - const char * name () const; - IMF_EXPORT - Slice & slice () const; - - private: - - friend class FrameBuffer::ConstIterator; - - FrameBuffer::SliceMap::iterator _i; -}; - - -class FrameBuffer::ConstIterator -{ - public: - - IMF_EXPORT - ConstIterator (); - IMF_EXPORT - ConstIterator (const FrameBuffer::SliceMap::const_iterator &i); - IMF_EXPORT - ConstIterator (const FrameBuffer::Iterator &other); - - IMF_EXPORT - ConstIterator & operator ++ (); - IMF_EXPORT - ConstIterator operator ++ (int); - - IMF_EXPORT - const char * name () const; - IMF_EXPORT - const Slice & slice () const; - - private: - - friend bool operator == (const ConstIterator &, const ConstIterator &); - friend bool operator != (const ConstIterator &, const ConstIterator &); - - FrameBuffer::SliceMap::const_iterator _i; -}; - - -//----------------- -// Inline Functions -//----------------- - -inline -FrameBuffer::Iterator::Iterator (): _i() -{ - // empty -} - - -inline -FrameBuffer::Iterator::Iterator (const FrameBuffer::SliceMap::iterator &i): - _i (i) -{ - // empty -} - - -inline FrameBuffer::Iterator & -FrameBuffer::Iterator::operator ++ () -{ - ++_i; - return *this; -} - - -inline FrameBuffer::Iterator -FrameBuffer::Iterator::operator ++ (int) -{ - Iterator tmp = *this; - ++_i; - return tmp; -} - - -inline const char * -FrameBuffer::Iterator::name () const -{ - return *_i->first; -} - - -inline Slice & -FrameBuffer::Iterator::slice () const -{ - return _i->second; -} - - -inline -FrameBuffer::ConstIterator::ConstIterator (): _i() -{ - // empty -} - -inline -FrameBuffer::ConstIterator::ConstIterator - (const FrameBuffer::SliceMap::const_iterator &i): _i (i) -{ - // empty -} - - -inline -FrameBuffer::ConstIterator::ConstIterator (const FrameBuffer::Iterator &other): - _i (other._i) -{ - // empty -} - -inline FrameBuffer::ConstIterator & -FrameBuffer::ConstIterator::operator ++ () -{ - ++_i; - return *this; -} - - -inline FrameBuffer::ConstIterator -FrameBuffer::ConstIterator::operator ++ (int) -{ - ConstIterator tmp = *this; - ++_i; - return tmp; -} - - -inline const char * -FrameBuffer::ConstIterator::name () const -{ - return *_i->first; -} - -inline const Slice & -FrameBuffer::ConstIterator::slice () const -{ - return _i->second; -} - - -inline bool -operator == (const FrameBuffer::ConstIterator &x, - const FrameBuffer::ConstIterator &y) -{ - return x._i == y._i; -} - - -inline bool -operator != (const FrameBuffer::ConstIterator &x, - const FrameBuffer::ConstIterator &y) -{ - return !(x == y); -} - - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT - -#endif diff --git a/3rdparty/openexr/IlmImf/ImfFramesPerSecond.cpp b/3rdparty/openexr/IlmImf/ImfFramesPerSecond.cpp deleted file mode 100644 index b56f9482a4..0000000000 --- a/3rdparty/openexr/IlmImf/ImfFramesPerSecond.cpp +++ /dev/null @@ -1,76 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2006, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - -//----------------------------------------------------------------------------- -// -// Convenience functions related to the framesPerSecond attribute -// -//----------------------------------------------------------------------------- - -#include -#include "ImathFun.h" - -using namespace IMATH_NAMESPACE; -#include "ImfNamespace.h" - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_ENTER - -Rational -guessExactFps (double fps) -{ - return guessExactFps (Rational (fps)); -} - - -Rational -guessExactFps (const Rational &fps) -{ - const double e = 0.002; - - if (abs (double (fps) - double (fps_23_976())) < e) - return fps_23_976(); - - if (abs (double (fps) - double (fps_29_97())) < e) - return fps_29_97(); - - if (abs (double (fps) - double (fps_47_952())) < e) - return fps_47_952(); - - if (abs (double (fps) - double (fps_59_94())) < e) - return fps_59_94(); - - return fps; -} - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_EXIT diff --git a/3rdparty/openexr/IlmImf/ImfFramesPerSecond.h b/3rdparty/openexr/IlmImf/ImfFramesPerSecond.h deleted file mode 100644 index 59ab4cb20b..0000000000 --- a/3rdparty/openexr/IlmImf/ImfFramesPerSecond.h +++ /dev/null @@ -1,94 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2006, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - -#ifndef INCLUDED_IMF_FRAMES_PER_SECOND_H -#define INCLUDED_IMF_FRAMES_PER_SECOND_H - -//----------------------------------------------------------------------------- -// -// Convenience functions related to the framesPerSecond attribute -// -// Functions that return the exact values for commonly used frame rates: -// -// name frames per second -// -// fps_23_976() 23.976023... -// fps_24() 24.0 35mm film frames -// fps_25() 25.0 PAL video frames -// fps_29_97() 29.970029... NTSC video frames -// fps_30() 30.0 60Hz HDTV frames -// fps_47_952() 47.952047... -// fps_48() 48.0 -// fps_50() 50.0 PAL video fields -// fps_59_94() 59.940059... NTSC video fields -// fps_60() 60.0 60Hz HDTV fields -// -// Functions that try to convert inexact frame rates into exact ones: -// -// Given a frame rate, fps, that is close to one of the pre-defined -// frame rates fps_23_976(), fps_29_97(), fps_47_952() or fps_59_94(), -// guessExactFps(fps) returns the corresponding pre-defined frame -// rate. If fps is not close to one of the pre-defined frame rates, -// then guessExactFps(fps) returns Rational(fps). -// -//----------------------------------------------------------------------------- - -#include "ImfRational.h" -#include "ImfNamespace.h" -#include "ImfExport.h" - - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER - - -inline Rational fps_23_976 () {return Rational (24000, 1001);} -inline Rational fps_24 () {return Rational (24, 1);} -inline Rational fps_25 () {return Rational (25, 1);} -inline Rational fps_29_97 () {return Rational (30000, 1001);} -inline Rational fps_30 () {return Rational (30, 1);} -inline Rational fps_47_952 () {return Rational (48000, 1001);} -inline Rational fps_48 () {return Rational (48, 1);} -inline Rational fps_50 () {return Rational (50, 1);} -inline Rational fps_59_94 () {return Rational (60000, 1001);} -inline Rational fps_60 () {return Rational (60, 1);} - -IMF_EXPORT Rational guessExactFps (double fps); -IMF_EXPORT Rational guessExactFps (const Rational &fps); - - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT - - -#endif diff --git a/3rdparty/openexr/IlmImf/ImfGenericInputFile.cpp b/3rdparty/openexr/IlmImf/ImfGenericInputFile.cpp deleted file mode 100644 index 0096a0a9bb..0000000000 --- a/3rdparty/openexr/IlmImf/ImfGenericInputFile.cpp +++ /dev/null @@ -1,76 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2011, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - -#include "ImfGenericInputFile.h" - -#include -#include -#include -#include - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_ENTER - -void GenericInputFile::readMagicNumberAndVersionField(OPENEXR_IMF_INTERNAL_NAMESPACE::IStream& is, int& version) -{ - // - // Read the magic number and the file format version number. - // Then check if we can read the rest of this file. - // - - int magic; - - OPENEXR_IMF_INTERNAL_NAMESPACE::Xdr::read (is, magic); - OPENEXR_IMF_INTERNAL_NAMESPACE::Xdr::read (is, version); - - if (magic != MAGIC) - { - throw IEX_NAMESPACE::InputExc ("File is not an image file."); - } - - if (getVersion (version) != EXR_VERSION) - { - THROW (IEX_NAMESPACE::InputExc, "Cannot read " - "version " << getVersion (version) << " " - "image files. Current file format version " - "is " << EXR_VERSION << "."); - } - - if (!supportsFlags (getFlags (version))) - { - THROW (IEX_NAMESPACE::InputExc, "The file format version number's flag field " - "contains unrecognized flags."); - } -} - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_EXIT diff --git a/3rdparty/openexr/IlmImf/ImfGenericInputFile.h b/3rdparty/openexr/IlmImf/ImfGenericInputFile.h deleted file mode 100644 index 38cbcc2a85..0000000000 --- a/3rdparty/openexr/IlmImf/ImfGenericInputFile.h +++ /dev/null @@ -1,61 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2011, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - -#ifndef IMFGENERICINPUTFILE_H_ -#define IMFGENERICINPUTFILE_H_ - -#include "ImfIO.h" -#include "ImfHeader.h" -#include "ImfNamespace.h" -#include "ImfExport.h" - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER - -class GenericInputFile -{ - public: - IMF_EXPORT - virtual ~GenericInputFile() {} - - protected: - IMF_EXPORT - GenericInputFile() {} - IMF_EXPORT - void readMagicNumberAndVersionField(OPENEXR_IMF_INTERNAL_NAMESPACE::IStream& is, int& version); -}; - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT - - -#endif /* IMFGENERICINPUTFILE_H_ */ diff --git a/3rdparty/openexr/IlmImf/ImfGenericOutputFile.cpp b/3rdparty/openexr/IlmImf/ImfGenericOutputFile.cpp deleted file mode 100644 index 8ec707b2f6..0000000000 --- a/3rdparty/openexr/IlmImf/ImfGenericOutputFile.cpp +++ /dev/null @@ -1,112 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2011, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - -#include "ImfGenericOutputFile.h" - -#include -#include -#include -#include - -#include -#include - -#include "ImfNamespace.h" - - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_ENTER - - -using namespace std; - - - -void -GenericOutputFile::writeMagicNumberAndVersionField (OPENEXR_IMF_INTERNAL_NAMESPACE::OStream& os, - const Header& header) -{ - OPENEXR_IMF_INTERNAL_NAMESPACE::Xdr::write (os, MAGIC); - - int version = EXR_VERSION; - - if (header.hasType() && isDeepData(header.type())) - { - version |= NON_IMAGE_FLAG; - } - else - { - // (TODO) we may want to check something else in function signature - // instead of hasTileDescription()? - if (header.hasTileDescription()) - version |= TILED_FLAG; - } - - if (usesLongNames (header)) - version |= LONG_NAMES_FLAG; - - OPENEXR_IMF_INTERNAL_NAMESPACE::Xdr::write (os, version); -} - -void -GenericOutputFile::writeMagicNumberAndVersionField (OPENEXR_IMF_INTERNAL_NAMESPACE::OStream& os, - const Header * headers, - int parts) -{ - OPENEXR_IMF_INTERNAL_NAMESPACE::Xdr::write (os, MAGIC); - - int version = EXR_VERSION; - - if (parts == 1) - { - if (headers[0].type() == TILEDIMAGE) - version |= TILED_FLAG; - } - else - { - version |= MULTI_PART_FILE_FLAG; - } - - for (int i = 0; i < parts; i++) - { - if (usesLongNames (headers[i])) - version |= LONG_NAMES_FLAG; - - if (headers[i].hasType() && isImage(headers[i].type()) == false) - version |= NON_IMAGE_FLAG; - } - - OPENEXR_IMF_INTERNAL_NAMESPACE::Xdr::write (os, version); -} - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_EXIT diff --git a/3rdparty/openexr/IlmImf/ImfGenericOutputFile.h b/3rdparty/openexr/IlmImf/ImfGenericOutputFile.h deleted file mode 100644 index 8980d36811..0000000000 --- a/3rdparty/openexr/IlmImf/ImfGenericOutputFile.h +++ /dev/null @@ -1,66 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2011, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - -#ifndef IMFGENERICOUTPUTFILE_H_ -#define IMFGENERICOUTPUTFILE_H_ - -#include "ImfVersion.h" -#include "ImfIO.h" -#include "ImfXdr.h" -#include "ImfHeader.h" -#include "ImfNamespace.h" -#include "ImfExport.h" - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER - - -class GenericOutputFile -{ - public: - IMF_EXPORT - virtual ~GenericOutputFile() {} - - protected: - IMF_EXPORT - GenericOutputFile() {} - IMF_EXPORT - void writeMagicNumberAndVersionField (OPENEXR_IMF_INTERNAL_NAMESPACE::OStream& os, const Header& header); - IMF_EXPORT - void writeMagicNumberAndVersionField (OPENEXR_IMF_INTERNAL_NAMESPACE::OStream& os, const Header * headers, int parts); - -}; - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT - -#endif /* GENERICOUTPUTFILE_H_ */ diff --git a/3rdparty/openexr/IlmImf/ImfHeader.cpp b/3rdparty/openexr/IlmImf/ImfHeader.cpp deleted file mode 100644 index d6b55f3c47..0000000000 --- a/3rdparty/openexr/IlmImf/ImfHeader.cpp +++ /dev/null @@ -1,1283 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - - -//----------------------------------------------------------------------------- -// -// class Header -// -//----------------------------------------------------------------------------- - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "IlmThreadMutex.h" -#include "Iex.h" -#include -#include -#include - -#include "ImfNamespace.h" - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_ENTER - -using namespace std; -using IMATH_NAMESPACE::Box2i; -using IMATH_NAMESPACE::V2i; -using IMATH_NAMESPACE::V2f; -using ILMTHREAD_NAMESPACE::Mutex; -using ILMTHREAD_NAMESPACE::Lock; - - -namespace { - -int maxImageWidth = 0; -int maxImageHeight = 0; -int maxTileWidth = 0; -int maxTileHeight = 0; - - -void -initialize (Header &header, - const Box2i &displayWindow, - const Box2i &dataWindow, - float pixelAspectRatio, - const V2f &screenWindowCenter, - float screenWindowWidth, - LineOrder lineOrder, - Compression compression) -{ - header.insert ("displayWindow", Box2iAttribute (displayWindow)); - header.insert ("dataWindow", Box2iAttribute (dataWindow)); - header.insert ("pixelAspectRatio", FloatAttribute (pixelAspectRatio)); - header.insert ("screenWindowCenter", V2fAttribute (screenWindowCenter)); - header.insert ("screenWindowWidth", FloatAttribute (screenWindowWidth)); - header.insert ("lineOrder", LineOrderAttribute (lineOrder)); - header.insert ("compression", CompressionAttribute (compression)); - header.insert ("channels", ChannelListAttribute ()); -} - -template -void checkIsNullTerminated (const char (&str)[N], const char *what) -{ - for (size_t i = 0; i < N; ++i) { - if (str[i] == '\0') - return; - } - std::stringstream s; - s << "Invalid " << what << ": it is more than " << (N - 1) - << " characters long."; - throw IEX_NAMESPACE::InputExc(s); -} - -} // namespace - - -Header::Header (int width, - int height, - float pixelAspectRatio, - const V2f &screenWindowCenter, - float screenWindowWidth, - LineOrder lineOrder, - Compression compression) -: - _map() -{ - staticInitialize(); - - Box2i displayWindow (V2i (0, 0), V2i (width - 1, height - 1)); - - initialize (*this, - displayWindow, - displayWindow, - pixelAspectRatio, - screenWindowCenter, - screenWindowWidth, - lineOrder, - compression); -} - - -Header::Header (int width, - int height, - const Box2i &dataWindow, - float pixelAspectRatio, - const V2f &screenWindowCenter, - float screenWindowWidth, - LineOrder lineOrder, - Compression compression) -: - _map() -{ - staticInitialize(); - - Box2i displayWindow (V2i (0, 0), V2i (width - 1, height - 1)); - - initialize (*this, - displayWindow, - dataWindow, - pixelAspectRatio, - screenWindowCenter, - screenWindowWidth, - lineOrder, - compression); -} - - -Header::Header (const Box2i &displayWindow, - const Box2i &dataWindow, - float pixelAspectRatio, - const V2f &screenWindowCenter, - float screenWindowWidth, - LineOrder lineOrder, - Compression compression) -: - _map() -{ - staticInitialize(); - - initialize (*this, - displayWindow, - dataWindow, - pixelAspectRatio, - screenWindowCenter, - screenWindowWidth, - lineOrder, - compression); -} - - -Header::Header (const Header &other): _map() -{ - for (AttributeMap::const_iterator i = other._map.begin(); - i != other._map.end(); - ++i) - { - insert (*i->first, *i->second); - } -} - - -Header::~Header () -{ - for (AttributeMap::iterator i = _map.begin(); - i != _map.end(); - ++i) - { - delete i->second; - } -} - - -Header & -Header::operator = (const Header &other) -{ - if (this != &other) - { - for (AttributeMap::iterator i = _map.begin(); - i != _map.end(); - ++i) - { - delete i->second; - } - - _map.erase (_map.begin(), _map.end()); - - for (AttributeMap::const_iterator i = other._map.begin(); - i != other._map.end(); - ++i) - { - insert (*i->first, *i->second); - } - } - - return *this; -} - - -void -Header::erase (const char name[]) -{ - if (name[0] == 0) - THROW (IEX_NAMESPACE::ArgExc, "Image attribute name cannot be an empty string."); - - - AttributeMap::iterator i = _map.find (name); - if (i != _map.end()) - _map.erase (i); - -} - - -void -Header::erase (const string &name) -{ - erase (name.c_str()); -} - - -void -Header::insert (const char name[], const Attribute &attribute) -{ - if (name[0] == 0) - THROW (IEX_NAMESPACE::ArgExc, "Image attribute name cannot be an empty string."); - - AttributeMap::iterator i = _map.find (name); - - if (i == _map.end()) - { - Attribute *tmp = attribute.copy(); - - try - { - _map[name] = tmp; - } - catch (...) - { - delete tmp; - throw; - } - } - else - { - if (strcmp (i->second->typeName(), attribute.typeName())) - THROW (IEX_NAMESPACE::TypeExc, "Cannot assign a value of " - "type \"" << attribute.typeName() << "\" " - "to image attribute \"" << name << "\" of " - "type \"" << i->second->typeName() << "\"."); - - Attribute *tmp = attribute.copy(); - delete i->second; - i->second = tmp; - } -} - - -void -Header::insert (const string &name, const Attribute &attribute) -{ - insert (name.c_str(), attribute); -} - - -Attribute & -Header::operator [] (const char name[]) -{ - AttributeMap::iterator i = _map.find (name); - - if (i == _map.end()) - THROW (IEX_NAMESPACE::ArgExc, "Cannot find image attribute \"" << name << "\"."); - - return *i->second; -} - - -const Attribute & -Header::operator [] (const char name[]) const -{ - AttributeMap::const_iterator i = _map.find (name); - - if (i == _map.end()) - THROW (IEX_NAMESPACE::ArgExc, "Cannot find image attribute \"" << name << "\"."); - - return *i->second; -} - - -Attribute & -Header::operator [] (const string &name) -{ - return this->operator[] (name.c_str()); -} - - -const Attribute & -Header::operator [] (const string &name) const -{ - return this->operator[] (name.c_str()); -} - - -Header::Iterator -Header::begin () -{ - return _map.begin(); -} - - -Header::ConstIterator -Header::begin () const -{ - return _map.begin(); -} - - -Header::Iterator -Header::end () -{ - return _map.end(); -} - - -Header::ConstIterator -Header::end () const -{ - return _map.end(); -} - - -Header::Iterator -Header::find (const char name[]) -{ - return _map.find (name); -} - - -Header::ConstIterator -Header::find (const char name[]) const -{ - return _map.find (name); -} - - -Header::Iterator -Header::find (const string &name) -{ - return find (name.c_str()); -} - - -Header::ConstIterator -Header::find (const string &name) const -{ - return find (name.c_str()); -} - - -IMATH_NAMESPACE::Box2i & -Header::displayWindow () -{ - return static_cast - ((*this)["displayWindow"]).value(); -} - - -const IMATH_NAMESPACE::Box2i & -Header::displayWindow () const -{ - return static_cast - ((*this)["displayWindow"]).value(); -} - - -IMATH_NAMESPACE::Box2i & -Header::dataWindow () -{ - return static_cast - ((*this)["dataWindow"]).value(); -} - - -const IMATH_NAMESPACE::Box2i & -Header::dataWindow () const -{ - return static_cast - ((*this)["dataWindow"]).value(); -} - - -float & -Header::pixelAspectRatio () -{ - return static_cast - ((*this)["pixelAspectRatio"]).value(); -} - - -const float & -Header::pixelAspectRatio () const -{ - return static_cast - ((*this)["pixelAspectRatio"]).value(); -} - - -IMATH_NAMESPACE::V2f & -Header::screenWindowCenter () -{ - return static_cast - ((*this)["screenWindowCenter"]).value(); -} - - -const IMATH_NAMESPACE::V2f & -Header::screenWindowCenter () const -{ - return static_cast - ((*this)["screenWindowCenter"]).value(); -} - - -float & -Header::screenWindowWidth () -{ - return static_cast - ((*this)["screenWindowWidth"]).value(); -} - - -const float & -Header::screenWindowWidth () const -{ - return static_cast - ((*this)["screenWindowWidth"]).value(); -} - - -ChannelList & -Header::channels () -{ - return static_cast - ((*this)["channels"]).value(); -} - - -const ChannelList & -Header::channels () const -{ - return static_cast - ((*this)["channels"]).value(); -} - - -LineOrder & -Header::lineOrder () -{ - return static_cast - ((*this)["lineOrder"]).value(); -} - - -const LineOrder & -Header::lineOrder () const -{ - return static_cast - ((*this)["lineOrder"]).value(); -} - - -Compression & -Header::compression () -{ - return static_cast - ((*this)["compression"]).value(); -} - - -const Compression & -Header::compression () const -{ - return static_cast - ((*this)["compression"]).value(); -} - - -void -Header::setName(const string& name) -{ - insert ("name", StringAttribute (name)); -} - - -bool -Header::hasName() const -{ - return findTypedAttribute ("name") != 0; -} - - -string & -Header::name() -{ - return typedAttribute ("name").value(); -} - - -const string & -Header::name() const -{ - return typedAttribute ("name").value(); -} - - -void -Header::setType(const string& type) -{ - if (isSupportedType(type) == false) - { - throw IEX_NAMESPACE::ArgExc (type + "is not a supported image type." + - "The following are supported: " + - SCANLINEIMAGE + ", " + - TILEDIMAGE + ", " + - DEEPSCANLINE + " or " + - DEEPTILE + "."); - } - - insert ("type", StringAttribute (type)); - - // (TODO) Should we do it here? - if (isDeepData(type) && hasVersion() == false) - { - setVersion(1); - } -} - - -bool -Header::hasType() const -{ - return findTypedAttribute ("type") != 0; -} - - -string & -Header::type() -{ - return typedAttribute ("type").value(); -} - - -const string & -Header::type() const -{ - return typedAttribute ("type").value(); -} - - -void -Header::setView(const string& view) -{ - insert ("view", StringAttribute (view)); -} - - -bool -Header::hasView() const -{ - return findTypedAttribute ("view") != 0; -} - - -string & -Header::view() -{ - return typedAttribute ("view").value(); -} - - -const string & -Header::view() const -{ - return typedAttribute ("view").value(); -} - - -void -Header::setVersion(const int version) -{ - if (version != 1) - { - throw IEX_NAMESPACE::ArgExc ("We can only process version 1"); - } - - insert ("version", IntAttribute (version)); -} - - -bool -Header::hasVersion() const -{ - return findTypedAttribute ("version") != 0; -} - - -int & -Header::version() -{ - return typedAttribute ("version").value(); -} - - -const int & -Header::version() const -{ - return typedAttribute ("version").value(); -} - -void -Header::setChunkCount(int chunks) -{ - insert("chunkCount",IntAttribute(chunks)); -} - -bool -Header::hasChunkCount() const -{ - return findTypedAttribute("chunkCount") != 0; -} - -int& -Header::chunkCount() -{ - return typedAttribute ("chunkCount").value(); -} - -const int& -Header::chunkCount() const -{ - return typedAttribute ("chunkCount").value(); -} - -void -Header::setTileDescription(const TileDescription& td) -{ - insert ("tiles", TileDescriptionAttribute (td)); -} - - -bool -Header::hasTileDescription() const -{ - return findTypedAttribute ("tiles") != 0; -} - - -TileDescription & -Header::tileDescription () -{ - return typedAttribute ("tiles").value(); -} - - -const TileDescription & -Header::tileDescription () const -{ - return typedAttribute ("tiles").value(); -} - -void -Header::setPreviewImage (const PreviewImage &pi) -{ - insert ("preview", PreviewImageAttribute (pi)); -} - - -PreviewImage & -Header::previewImage () -{ - return typedAttribute ("preview").value(); -} - - -const PreviewImage & -Header::previewImage () const -{ - return typedAttribute ("preview").value(); -} - - -bool -Header::hasPreviewImage () const -{ - return findTypedAttribute ("preview") != 0; -} - - -void -Header::sanityCheck (bool isTiled, bool isMultipartFile) const -{ - // - // The display window and the data window must each - // contain at least one pixel. In addition, the - // coordinates of the window corners must be small - // enough to keep expressions like max-min+1 or - // max+min from overflowing. - // - - const Box2i &displayWindow = this->displayWindow(); - - if (displayWindow.min.x > displayWindow.max.x || - displayWindow.min.y > displayWindow.max.y || - displayWindow.min.x <= -(INT_MAX / 2) || - displayWindow.min.y <= -(INT_MAX / 2) || - displayWindow.max.x >= (INT_MAX / 2) || - displayWindow.max.y >= (INT_MAX / 2)) - { - throw IEX_NAMESPACE::ArgExc ("Invalid display window in image header."); - } - - const Box2i &dataWindow = this->dataWindow(); - - if (dataWindow.min.x > dataWindow.max.x || - dataWindow.min.y > dataWindow.max.y || - dataWindow.min.x <= -(INT_MAX / 2) || - dataWindow.min.y <= -(INT_MAX / 2) || - dataWindow.max.x >= (INT_MAX / 2) || - dataWindow.max.y >= (INT_MAX / 2)) - { - throw IEX_NAMESPACE::ArgExc ("Invalid data window in image header."); - } - - if (maxImageWidth > 0 && - maxImageWidth < (dataWindow.max.x - dataWindow.min.x + 1)) - { - THROW (IEX_NAMESPACE::ArgExc, "The width of the data window exceeds the " - "maximum width of " << maxImageWidth << "pixels."); - } - - if (maxImageHeight > 0 && - maxImageHeight < dataWindow.max.y - dataWindow.min.y + 1) - { - THROW (IEX_NAMESPACE::ArgExc, "The width of the data window exceeds the " - "maximum width of " << maxImageHeight << "pixels."); - } - - // chunk table must be smaller than the maximum image area - // (only reachable for unknown types or damaged files: will have thrown earlier - // for regular image types) - if( maxImageHeight>0 && maxImageWidth>0 && - hasChunkCount() && chunkCount()>Int64(maxImageWidth)*Int64(maxImageHeight)) - { - THROW (IEX_NAMESPACE::ArgExc, "chunkCount exceeds maximum area of " - << Int64(maxImageWidth)*Int64(maxImageHeight) << " pixels." ); - - } - - - // - // The pixel aspect ratio must be greater than 0. - // In applications, numbers like the the display or - // data window dimensions are likely to be multiplied - // or divided by the pixel aspect ratio; to avoid - // arithmetic exceptions, we limit the pixel aspect - // ratio to a range that is smaller than theoretically - // possible (real aspect ratios are likely to be close - // to 1.0 anyway). - // - - float pixelAspectRatio = this->pixelAspectRatio(); - - const float MIN_PIXEL_ASPECT_RATIO = 1e-6f; - const float MAX_PIXEL_ASPECT_RATIO = 1e+6f; - - if (pixelAspectRatio < MIN_PIXEL_ASPECT_RATIO || - pixelAspectRatio > MAX_PIXEL_ASPECT_RATIO) - { - throw IEX_NAMESPACE::ArgExc ("Invalid pixel aspect ratio in image header."); - } - - // - // The screen window width must not be less than 0. - // The size of the screen window can vary over a wide - // range (fish-eye lens to astronomical telescope), - // so we can't limit the screen window width to a - // small range. - // - - float screenWindowWidth = this->screenWindowWidth(); - - if (screenWindowWidth < 0) - throw IEX_NAMESPACE::ArgExc ("Invalid screen window width in image header."); - - // - // If the file has multiple parts, verify that each header has attribute - // name and type. - // (TODO) We may want to check more stuff here. - // - - if (isMultipartFile) - { - if (!hasName()) - { - throw IEX_NAMESPACE::ArgExc ("Headers in a multipart file should" - " have name attribute."); - } - - if (!hasType()) - { - throw IEX_NAMESPACE::ArgExc ("Headers in a multipart file should" - " have type attribute."); - } - - } - - const std::string & part_type=hasType() ? type() : ""; - - if(part_type!="" && !isSupportedType(part_type)) - { - // - // skip remaining sanity checks with unsupported types - they may not hold - // - return; - } - - - // - // If the file is tiled, verify that the tile description has reasonable - // values and check to see if the lineOrder is one of the predefined 3. - // If the file is not tiled, then the lineOrder can only be INCREASING_Y - // or DECREASING_Y. - // - - LineOrder lineOrder = this->lineOrder(); - - if (isTiled) - { - if (!hasTileDescription()) - { - throw IEX_NAMESPACE::ArgExc ("Tiled image has no tile " - "description attribute."); - } - - const TileDescription &tileDesc = tileDescription(); - - if (tileDesc.xSize <= 0 || tileDesc.ySize <= 0) - throw IEX_NAMESPACE::ArgExc ("Invalid tile size in image header."); - - if (maxTileWidth > 0 && - maxTileWidth < int(tileDesc.xSize)) - { - THROW (IEX_NAMESPACE::ArgExc, "The width of the tiles exceeds the maximum " - "width of " << maxTileWidth << "pixels."); - } - - if (maxTileHeight > 0 && - maxTileHeight < int(tileDesc.ySize)) - { - THROW (IEX_NAMESPACE::ArgExc, "The width of the tiles exceeds the maximum " - "width of " << maxTileHeight << "pixels."); - } - - if (tileDesc.mode != ONE_LEVEL && - tileDesc.mode != MIPMAP_LEVELS && - tileDesc.mode != RIPMAP_LEVELS) - throw IEX_NAMESPACE::ArgExc ("Invalid level mode in image header."); - - if (tileDesc.roundingMode != ROUND_UP && - tileDesc.roundingMode != ROUND_DOWN) - throw IEX_NAMESPACE::ArgExc ("Invalid level rounding mode in image header."); - - if (lineOrder != INCREASING_Y && - lineOrder != DECREASING_Y && - lineOrder != RANDOM_Y) - throw IEX_NAMESPACE::ArgExc ("Invalid line order in image header."); - } - else - { - if (lineOrder != INCREASING_Y && - lineOrder != DECREASING_Y) - throw IEX_NAMESPACE::ArgExc ("Invalid line order in image header."); - - - } - - // - // The compression method must be one of the predefined values. - // - - if (!isValidCompression (this->compression())) - throw IEX_NAMESPACE::ArgExc ("Unknown compression type in image header."); - - if(isDeepData(part_type)) - { - if (!isValidDeepCompression (this->compression())) - throw IEX_NAMESPACE::ArgExc ("Compression type in header not valid for deep data"); - } - - // - // Check the channel list: - // - // If the file is tiled then for each channel, the type must be one of the - // predefined values, and the x and y sampling must both be 1. - // - // If the file is not tiled then for each channel, the type must be one - // of the predefined values, the x and y coordinates of the data window's - // upper left corner must be divisible by the x and y subsampling factors, - // and the width and height of the data window must be divisible by the - // x and y subsampling factors. - // - - const ChannelList &channels = this->channels(); - - if (isTiled) - { - for (ChannelList::ConstIterator i = channels.begin(); - i != channels.end(); - ++i) - { - if (i.channel().type != OPENEXR_IMF_INTERNAL_NAMESPACE::UINT && - i.channel().type != OPENEXR_IMF_INTERNAL_NAMESPACE::HALF && - i.channel().type != OPENEXR_IMF_INTERNAL_NAMESPACE::FLOAT) - { - THROW (IEX_NAMESPACE::ArgExc, "Pixel type of \"" << i.name() << "\" " - "image channel is invalid."); - } - - if (i.channel().xSampling != 1) - { - THROW (IEX_NAMESPACE::ArgExc, "The x subsampling factor for the " - "\"" << i.name() << "\" channel " - "is not 1."); - } - - if (i.channel().ySampling != 1) - { - THROW (IEX_NAMESPACE::ArgExc, "The y subsampling factor for the " - "\"" << i.name() << "\" channel " - "is not 1."); - } - } - } - else - { - for (ChannelList::ConstIterator i = channels.begin(); - i != channels.end(); - ++i) - { - if (i.channel().type != OPENEXR_IMF_INTERNAL_NAMESPACE::UINT && - i.channel().type != OPENEXR_IMF_INTERNAL_NAMESPACE::HALF && - i.channel().type != OPENEXR_IMF_INTERNAL_NAMESPACE::FLOAT) - { - THROW (IEX_NAMESPACE::ArgExc, "Pixel type of \"" << i.name() << "\" " - "image channel is invalid."); - } - - if (i.channel().xSampling < 1) - { - THROW (IEX_NAMESPACE::ArgExc, "The x subsampling factor for the " - "\"" << i.name() << "\" channel " - "is invalid."); - } - - if (i.channel().ySampling < 1) - { - THROW (IEX_NAMESPACE::ArgExc, "The y subsampling factor for the " - "\"" << i.name() << "\" channel " - "is invalid."); - } - - if (dataWindow.min.x % i.channel().xSampling) - { - THROW (IEX_NAMESPACE::ArgExc, "The minimum x coordinate of the " - "image's data window is not a multiple " - "of the x subsampling factor of " - "the \"" << i.name() << "\" channel."); - } - - if (dataWindow.min.y % i.channel().ySampling) - { - THROW (IEX_NAMESPACE::ArgExc, "The minimum y coordinate of the " - "image's data window is not a multiple " - "of the y subsampling factor of " - "the \"" << i.name() << "\" channel."); - } - - if ((dataWindow.max.x - dataWindow.min.x + 1) % - i.channel().xSampling) - { - THROW (IEX_NAMESPACE::ArgExc, "Number of pixels per row in the " - "image's data window is not a multiple " - "of the x subsampling factor of " - "the \"" << i.name() << "\" channel."); - } - - if ((dataWindow.max.y - dataWindow.min.y + 1) % - i.channel().ySampling) - { - THROW (IEX_NAMESPACE::ArgExc, "Number of pixels per column in the " - "image's data window is not a multiple " - "of the y subsampling factor of " - "the \"" << i.name() << "\" channel."); - } - } - } -} - - -void -Header::setMaxImageSize (int maxWidth, int maxHeight) -{ - maxImageWidth = maxWidth; - maxImageHeight = maxHeight; -} - - -void -Header::setMaxTileSize (int maxWidth, int maxHeight) -{ - maxTileWidth = maxWidth; - maxTileHeight = maxHeight; -} - - -bool -Header::readsNothing() -{ - return _readsNothing; -} - - -Int64 -Header::writeTo (OPENEXR_IMF_INTERNAL_NAMESPACE::OStream &os, bool isTiled) const -{ - // - // Write a "magic number" to identify the file as an image file. - // Write the current file format version number. - // - - int version = EXR_VERSION; - - // - // Write all attributes. If we have a preview image attribute, - // keep track of its position in the file. - // - - Int64 previewPosition = 0; - - const Attribute *preview = - findTypedAttribute ("preview"); - - for (ConstIterator i = begin(); i != end(); ++i) - { - // - // Write the attribute's name and type. - // - - OPENEXR_IMF_INTERNAL_NAMESPACE::Xdr::write (os, i.name()); - OPENEXR_IMF_INTERNAL_NAMESPACE::Xdr::write (os, i.attribute().typeName()); - - // - // Write the size of the attribute value, - // and the value itself. - // - - StdOSStream oss; - i.attribute().writeValueTo (oss, version); - - std::string s = oss.str(); - OPENEXR_IMF_INTERNAL_NAMESPACE::Xdr::write (os, (int) s.length()); - - if (&i.attribute() == preview) - previewPosition = os.tellp(); - - os.write (s.data(), int(s.length())); - } - - // - // Write zero-length attribute name to mark the end of the header. - // - - OPENEXR_IMF_INTERNAL_NAMESPACE::Xdr::write (os, ""); - - return previewPosition; -} - - -void -Header::readFrom (OPENEXR_IMF_INTERNAL_NAMESPACE::IStream &is, int &version) -{ - // - // Read all attributes. - // - - int attrCount = 0; - - while (true) - { - // - // Read the name of the attribute. - // A zero-length attribute name indicates the end of the header. - // - - char name[Name::SIZE]; - OPENEXR_IMF_INTERNAL_NAMESPACE::Xdr::read (is, Name::MAX_LENGTH, name); - - if (name[0] == 0) - { - if (attrCount == 0) _readsNothing = true; - else _readsNothing = false; - break; - } - - attrCount++; - - checkIsNullTerminated (name, "attribute name"); - - // - // Read the attribute type and the size of the attribute value. - // - - char typeName[Name::SIZE]; - int size; - - OPENEXR_IMF_INTERNAL_NAMESPACE::Xdr::read (is, Name::MAX_LENGTH, typeName); - checkIsNullTerminated (typeName, "attribute type name"); - OPENEXR_IMF_INTERNAL_NAMESPACE::Xdr::read (is, size); - - AttributeMap::iterator i = _map.find (name); - - if (i != _map.end()) - { - // - // The attribute already exists (for example, - // because it is a predefined attribute). - // Read the attribute's new value from the file. - // - - if (strncmp (i->second->typeName(), typeName, sizeof (typeName))) - THROW (IEX_NAMESPACE::InputExc, "Unexpected type for image attribute " - "\"" << name << "\"."); - - i->second->readValueFrom (is, size, version); - } - else - { - // - // The new attribute does not exist yet. - // If the attribute type is of a known type, - // read the attribute value. If the attribute - // is of an unknown type, read its value and - // store it as an OpaqueAttribute. - // - - Attribute *attr; - - if (Attribute::knownType (typeName)) - attr = Attribute::newAttribute (typeName); - else - attr = new OpaqueAttribute (typeName); - - try - { - attr->readValueFrom (is, size, version); - _map[name] = attr; - } - catch (...) - { - delete attr; - throw; - } - } - } -} - - -void -staticInitialize () -{ - static Mutex criticalSection; - Lock lock (criticalSection); - - static bool initialized = false; - - if (!initialized) - { - // - // One-time initialization -- register - // some predefined attribute types. - // - - Box2fAttribute::registerAttributeType(); - Box2iAttribute::registerAttributeType(); - ChannelListAttribute::registerAttributeType(); - CompressionAttribute::registerAttributeType(); - ChromaticitiesAttribute::registerAttributeType(); - DeepImageStateAttribute::registerAttributeType(); - DoubleAttribute::registerAttributeType(); - EnvmapAttribute::registerAttributeType(); - FloatAttribute::registerAttributeType(); - FloatVectorAttribute::registerAttributeType(); - IntAttribute::registerAttributeType(); - KeyCodeAttribute::registerAttributeType(); - LineOrderAttribute::registerAttributeType(); - M33dAttribute::registerAttributeType(); - M33fAttribute::registerAttributeType(); - M44dAttribute::registerAttributeType(); - M44fAttribute::registerAttributeType(); - PreviewImageAttribute::registerAttributeType(); - RationalAttribute::registerAttributeType(); - StringAttribute::registerAttributeType(); - StringVectorAttribute::registerAttributeType(); - TileDescriptionAttribute::registerAttributeType(); - TimeCodeAttribute::registerAttributeType(); - V2dAttribute::registerAttributeType(); - V2fAttribute::registerAttributeType(); - V2iAttribute::registerAttributeType(); - V3dAttribute::registerAttributeType(); - V3fAttribute::registerAttributeType(); - V3iAttribute::registerAttributeType(); - DwaCompressor::initializeFuncs(); - - initialized = true; - } -} - - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_EXIT diff --git a/3rdparty/openexr/IlmImf/ImfHeader.h b/3rdparty/openexr/IlmImf/ImfHeader.h deleted file mode 100644 index 638d298cfa..0000000000 --- a/3rdparty/openexr/IlmImf/ImfHeader.h +++ /dev/null @@ -1,785 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - - -#ifndef INCLUDED_IMF_HEADER_H -#define INCLUDED_IMF_HEADER_H - -//----------------------------------------------------------------------------- -// -// class Header -// -//----------------------------------------------------------------------------- - -#include "ImfLineOrder.h" -#include "ImfCompression.h" -#include "ImfName.h" -#include "ImfTileDescription.h" -#include "ImfInt64.h" -#include "ImathVec.h" -#include "ImathBox.h" -#include "IexBaseExc.h" - -#include "ImfForward.h" -#include "ImfNamespace.h" -#include "ImfExport.h" - -#include -#include -#include - - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER - -using std::string; - - -class Header -{ - public: - - //---------------------------------------------------------------- - // Default constructor -- the display window and the data window - // are both set to Box2i (V2i (0, 0), V2i (width-1, height-1). - //---------------------------------------------------------------- - - IMF_EXPORT - Header (int width = 64, - int height = 64, - float pixelAspectRatio = 1, - const IMATH_NAMESPACE::V2f &screenWindowCenter = IMATH_NAMESPACE::V2f (0, 0), - float screenWindowWidth = 1, - LineOrder lineOrder = INCREASING_Y, - Compression = ZIP_COMPRESSION); - - - //-------------------------------------------------------------------- - // Constructor -- the data window is specified explicitly; the display - // window is set to Box2i (V2i (0, 0), V2i (width-1, height-1). - //-------------------------------------------------------------------- - - IMF_EXPORT - Header (int width, - int height, - const IMATH_NAMESPACE::Box2i &dataWindow, - float pixelAspectRatio = 1, - const IMATH_NAMESPACE::V2f &screenWindowCenter = IMATH_NAMESPACE::V2f (0, 0), - float screenWindowWidth = 1, - LineOrder lineOrder = INCREASING_Y, - Compression = ZIP_COMPRESSION); - - - //---------------------------------------------------------- - // Constructor -- the display window and the data window are - // both specified explicitly. - //---------------------------------------------------------- - - IMF_EXPORT - Header (const IMATH_NAMESPACE::Box2i &displayWindow, - const IMATH_NAMESPACE::Box2i &dataWindow, - float pixelAspectRatio = 1, - const IMATH_NAMESPACE::V2f &screenWindowCenter = IMATH_NAMESPACE::V2f (0, 0), - float screenWindowWidth = 1, - LineOrder lineOrder = INCREASING_Y, - Compression = ZIP_COMPRESSION); - - - //----------------- - // Copy constructor - //----------------- - - IMF_EXPORT - Header (const Header &other); - - - //----------- - // Destructor - //----------- - - IMF_EXPORT - ~Header (); - - - //----------- - // Assignment - //----------- - - IMF_EXPORT - Header & operator = (const Header &other); - - - //--------------------------------------------------------------- - // Add an attribute: - // - // insert(n,attr) If no attribute with name n exists, a new - // attribute with name n, and the same type as - // attr, is added, and the value of attr is - // copied into the new attribute. - // - // If an attribute with name n exists, and its - // type is the same as attr, the value of attr - // is copied into this attribute. - // - // If an attribute with name n exists, and its - // type is different from attr, an IEX_NAMESPACE::TypeExc - // is thrown. - // - //--------------------------------------------------------------- - - IMF_EXPORT - void insert (const char name[], - const Attribute &attribute); - - IMF_EXPORT - void insert (const std::string &name, - const Attribute &attribute); - - //--------------------------------------------------------------- - // Remove an attribute: - // - // remove(n) If an attribute with name n exists, then it - // is removed from the map of present attributes. - // - // If no attribute with name n exists, then this - // functions becomes a 'no-op' - // - //--------------------------------------------------------------- - - IMF_EXPORT - void erase (const char name[]); - IMF_EXPORT - void erase (const std::string &name); - - - - //------------------------------------------------------------------ - // Access to existing attributes: - // - // [n] Returns a reference to the attribute - // with name n. If no attribute with - // name n exists, an IEX_NAMESPACE::ArgExc is thrown. - // - // typedAttribute(n) Returns a reference to the attribute - // with name n and type T. If no attribute - // with name n exists, an IEX_NAMESPACE::ArgExc is - // thrown. If an attribute with name n - // exists, but its type is not T, an - // IEX_NAMESPACE::TypeExc is thrown. - // - // findTypedAttribute(n) Returns a pointer to the attribute with - // name n and type T, or 0 if no attribute - // with name n and type T exists. - // - //------------------------------------------------------------------ - - IMF_EXPORT - Attribute & operator [] (const char name[]); - IMF_EXPORT - const Attribute & operator [] (const char name[]) const; - - IMF_EXPORT - Attribute & operator [] (const std::string &name); - IMF_EXPORT - const Attribute & operator [] (const std::string &name) const; - - template T& typedAttribute (const char name[]); - template const T& typedAttribute (const char name[]) const; - - template T& typedAttribute (const std::string &name); - template const T& typedAttribute (const std::string &name) const; - - template T* findTypedAttribute (const char name[]); - template const T* findTypedAttribute (const char name[]) const; - - template T* findTypedAttribute (const std::string &name); - template const T* findTypedAttribute (const std::string &name) - const; - - //--------------------------------------------- - // Iterator-style access to existing attributes - //--------------------------------------------- - - typedef std::map AttributeMap; - - class Iterator; - class ConstIterator; - - IMF_EXPORT - Iterator begin (); - IMF_EXPORT - ConstIterator begin () const; - - IMF_EXPORT - Iterator end (); - IMF_EXPORT - ConstIterator end () const; - - IMF_EXPORT - Iterator find (const char name[]); - IMF_EXPORT - ConstIterator find (const char name[]) const; - - IMF_EXPORT - Iterator find (const std::string &name); - IMF_EXPORT - ConstIterator find (const std::string &name) const; - - - //-------------------------------- - // Access to predefined attributes - //-------------------------------- - - IMF_EXPORT - IMATH_NAMESPACE::Box2i & displayWindow (); - IMF_EXPORT - const IMATH_NAMESPACE::Box2i & displayWindow () const; - - IMF_EXPORT - IMATH_NAMESPACE::Box2i & dataWindow (); - IMF_EXPORT - const IMATH_NAMESPACE::Box2i & dataWindow () const; - - IMF_EXPORT - float & pixelAspectRatio (); - IMF_EXPORT - const float & pixelAspectRatio () const; - - IMF_EXPORT - IMATH_NAMESPACE::V2f & screenWindowCenter (); - IMF_EXPORT - const IMATH_NAMESPACE::V2f & screenWindowCenter () const; - - IMF_EXPORT - float & screenWindowWidth (); - IMF_EXPORT - const float & screenWindowWidth () const; - - IMF_EXPORT - ChannelList & channels (); - IMF_EXPORT - const ChannelList & channels () const; - - IMF_EXPORT - LineOrder & lineOrder (); - IMF_EXPORT - const LineOrder & lineOrder () const; - - IMF_EXPORT - Compression & compression (); - IMF_EXPORT - const Compression & compression () const; - - - //----------------------------------------------------- - // Access to required attributes for multipart files - // They are optional to non-multipart files and mandatory - // for multipart files. - //----------------------------------------------------- - IMF_EXPORT - void setName (const string& name); - - IMF_EXPORT - string& name(); - IMF_EXPORT - const string& name() const; - - IMF_EXPORT - bool hasName() const; - - IMF_EXPORT - void setType (const string& Type); - - IMF_EXPORT - string& type(); - IMF_EXPORT - const string& type() const; - - IMF_EXPORT - bool hasType() const; - - IMF_EXPORT - void setVersion (const int version); - - IMF_EXPORT - int& version(); - IMF_EXPORT - const int& version() const; - - IMF_EXPORT - bool hasVersion() const; - - // - // the chunkCount attribute is set automatically when a file is written. - // There is no need to set it manually - // - IMF_EXPORT - void setChunkCount(int chunks); - IMF_EXPORT - bool hasChunkCount() const; - IMF_EXPORT - const int & chunkCount() const; - IMF_EXPORT - int & chunkCount(); - - - // - // for multipart files, return whether the file has a view string attribute - // (for the deprecated single part multiview format EXR, see ImfMultiView.h) - // - IMF_EXPORT - void setView(const string & view); - IMF_EXPORT - bool hasView() const; - IMF_EXPORT - string & view(); - IMF_EXPORT - const string & view() const; - - - //---------------------------------------------------------------------- - // Tile Description: - // - // The tile description is a TileDescriptionAttribute whose name - // is "tiles". The "tiles" attribute must be present in any tiled - // image file. When present, it describes various properties of the - // tiles that make up the file. - // - // Convenience functions: - // - // setTileDescription(td) - // calls insert ("tiles", TileDescriptionAttribute (td)) - // - // tileDescription() - // returns typedAttribute("tiles").value() - // - // hasTileDescription() - // return findTypedAttribute("tiles") != 0 - // - //---------------------------------------------------------------------- - - IMF_EXPORT - void setTileDescription (const TileDescription & td); - - IMF_EXPORT - TileDescription & tileDescription (); - IMF_EXPORT - const TileDescription & tileDescription () const; - - IMF_EXPORT - bool hasTileDescription() const; - - - //---------------------------------------------------------------------- - // Preview image: - // - // The preview image is a PreviewImageAttribute whose name is "preview". - // This attribute is special -- while an image file is being written, - // the pixels of the preview image can be changed repeatedly by calling - // OutputFile::updatePreviewImage(). - // - // Convenience functions: - // - // setPreviewImage(p) - // calls insert ("preview", PreviewImageAttribute (p)) - // - // previewImage() - // returns typedAttribute("preview").value() - // - // hasPreviewImage() - // return findTypedAttribute("preview") != 0 - // - //---------------------------------------------------------------------- - - IMF_EXPORT - void setPreviewImage (const PreviewImage &p); - - IMF_EXPORT - PreviewImage & previewImage (); - IMF_EXPORT - const PreviewImage & previewImage () const; - - IMF_EXPORT - bool hasPreviewImage () const; - - - //------------------------------------------------------------- - // Sanity check -- examines the header, and throws an exception - // if it finds something wrong (empty display window, negative - // pixel aspect ratio, unknown compression sceme etc.) - // - // set isTiled to true if you are checking a tiled/multi-res - // header - //------------------------------------------------------------- - - IMF_EXPORT - void sanityCheck (bool isTiled = false, - bool isMultipartFile = false) const; - - - //---------------------------------------------------------------- - // Maximum image size and maximim tile size: - // - // sanityCheck() will throw an exception if the width or height of - // the data window exceeds the maximum image width or height, or - // if the size of a tile exceeds the maximum tile width or height. - // - // At program startup the maximum image and tile width and height - // are set to zero, meaning that width and height are unlimited. - // - // Limiting image and tile width and height limits how much memory - // will be allocated when a file is opened. This can help protect - // applications from running out of memory while trying to read - // a damaged image file. - //---------------------------------------------------------------- - - IMF_EXPORT - static void setMaxImageSize (int maxWidth, int maxHeight); - IMF_EXPORT - static void setMaxTileSize (int maxWidth, int maxHeight); - - // - // Check if the header reads nothing. - // - IMF_EXPORT - bool readsNothing(); - - - //------------------------------------------------------------------ - // Input and output: - // - // If the header contains a preview image attribute, then writeTo() - // returns the position of that attribute in the output stream; this - // information is used by OutputFile::updatePreviewImage(). - // If the header contains no preview image attribute, then writeTo() - // returns 0. - //------------------------------------------------------------------ - - - IMF_EXPORT - Int64 writeTo (OPENEXR_IMF_INTERNAL_NAMESPACE::OStream &os, - bool isTiled = false) const; - - IMF_EXPORT - void readFrom (OPENEXR_IMF_INTERNAL_NAMESPACE::IStream &is, - int &version); - - - private: - - AttributeMap _map; - - bool _readsNothing; -}; - - -//---------- -// Iterators -//---------- - -class Header::Iterator -{ - public: - - IMF_EXPORT - Iterator (); - IMF_EXPORT - Iterator (const Header::AttributeMap::iterator &i); - - IMF_EXPORT - Iterator & operator ++ (); - IMF_EXPORT - Iterator operator ++ (int); - - IMF_EXPORT - const char * name () const; - IMF_EXPORT - Attribute & attribute () const; - - private: - - friend class Header::ConstIterator; - - Header::AttributeMap::iterator _i; -}; - - -class Header::ConstIterator -{ - public: - - IMF_EXPORT - ConstIterator (); - IMF_EXPORT - ConstIterator (const Header::AttributeMap::const_iterator &i); - IMF_EXPORT - ConstIterator (const Header::Iterator &other); - - IMF_EXPORT - ConstIterator & operator ++ (); - IMF_EXPORT - ConstIterator operator ++ (int); - - IMF_EXPORT - const char * name () const; - IMF_EXPORT - const Attribute & attribute () const; - - private: - - friend bool operator == (const ConstIterator &, const ConstIterator &); - friend bool operator != (const ConstIterator &, const ConstIterator &); - - Header::AttributeMap::const_iterator _i; -}; - - -//------------------------------------------------------------------------ -// Library initialization: -// -// In a multithreaded program, staticInitialize() must be called once -// during startup, before the program accesses any other functions or -// classes in the IlmImf library. Calling staticInitialize() in this -// way avoids races during initialization of the library's global -// variables. -// -// Single-threaded programs are not required to call staticInitialize(); -// initialization of the library's global variables happens automatically. -// -//------------------------------------------------------------------------ - -void IMF_EXPORT staticInitialize (); - - -//----------------- -// Inline Functions -//----------------- - - -inline -Header::Iterator::Iterator (): _i() -{ - // empty -} - - -inline -Header::Iterator::Iterator (const Header::AttributeMap::iterator &i): _i (i) -{ - // empty -} - - -inline Header::Iterator & -Header::Iterator::operator ++ () -{ - ++_i; - return *this; -} - - -inline Header::Iterator -Header::Iterator::operator ++ (int) -{ - Iterator tmp = *this; - ++_i; - return tmp; -} - - -inline const char * -Header::Iterator::name () const -{ - return *_i->first; -} - - -inline Attribute & -Header::Iterator::attribute () const -{ - return *_i->second; -} - - -inline -Header::ConstIterator::ConstIterator (): _i() -{ - // empty -} - -inline -Header::ConstIterator::ConstIterator - (const Header::AttributeMap::const_iterator &i): _i (i) -{ - // empty -} - - -inline -Header::ConstIterator::ConstIterator (const Header::Iterator &other): - _i (other._i) -{ - // empty -} - -inline Header::ConstIterator & -Header::ConstIterator::operator ++ () -{ - ++_i; - return *this; -} - - -inline Header::ConstIterator -Header::ConstIterator::operator ++ (int) -{ - ConstIterator tmp = *this; - ++_i; - return tmp; -} - - -inline const char * -Header::ConstIterator::name () const -{ - return *_i->first; -} - - -inline const Attribute & -Header::ConstIterator::attribute () const -{ - return *_i->second; -} - - -inline bool -operator == (const Header::ConstIterator &x, const Header::ConstIterator &y) -{ - return x._i == y._i; -} - - -inline bool -operator != (const Header::ConstIterator &x, const Header::ConstIterator &y) -{ - return !(x == y); -} - - -//--------------------- -// Template definitions -//--------------------- - -template -T & -Header::typedAttribute (const char name[]) -{ - Attribute *attr = &(*this)[name]; - T *tattr = dynamic_cast (attr); - - if (tattr == 0) - throw IEX_NAMESPACE::TypeExc ("Unexpected attribute type."); - - return *tattr; -} - - -template -const T & -Header::typedAttribute (const char name[]) const -{ - const Attribute *attr = &(*this)[name]; - const T *tattr = dynamic_cast (attr); - - if (tattr == 0) - throw IEX_NAMESPACE::TypeExc ("Unexpected attribute type."); - - return *tattr; -} - - -template -T & -Header::typedAttribute (const std::string &name) -{ - return typedAttribute (name.c_str()); -} - - -template -const T & -Header::typedAttribute (const std::string &name) const -{ - return typedAttribute (name.c_str()); -} - - -template -T * -Header::findTypedAttribute (const char name[]) -{ - AttributeMap::iterator i = _map.find (name); - return (i == _map.end())? 0: dynamic_cast (i->second); -} - - -template -const T * -Header::findTypedAttribute (const char name[]) const -{ - AttributeMap::const_iterator i = _map.find (name); - return (i == _map.end())? 0: dynamic_cast (i->second); -} - - -template -T * -Header::findTypedAttribute (const std::string &name) -{ - return findTypedAttribute (name.c_str()); -} - - -template -const T * -Header::findTypedAttribute (const std::string &name) const -{ - return findTypedAttribute (name.c_str()); -} - - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT - -#endif diff --git a/3rdparty/openexr/IlmImf/ImfHuf.cpp b/3rdparty/openexr/IlmImf/ImfHuf.cpp deleted file mode 100644 index 97909a5b19..0000000000 --- a/3rdparty/openexr/IlmImf/ImfHuf.cpp +++ /dev/null @@ -1,1116 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - - - -//----------------------------------------------------------------------------- -// -// 16-bit Huffman compression and decompression. -// -// The source code in this file is derived from the 8-bit -// Huffman compression and decompression routines written -// by Christian Rouet for his PIZ image file format. -// -//----------------------------------------------------------------------------- - -#include -#include -#include "ImfAutoArray.h" -#include "ImfFastHuf.h" -#include "Iex.h" -#include -#include -#include - - -using namespace std; -using namespace IEX_NAMESPACE; -#include "ImfNamespace.h" - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_ENTER - -namespace { - - -const int HUF_ENCBITS = 16; // literal (value) bit length -const int HUF_DECBITS = 14; // decoding bit size (>= 8) - -const int HUF_ENCSIZE = (1 << HUF_ENCBITS) + 1; // encoding table size -const int HUF_DECSIZE = 1 << HUF_DECBITS; // decoding table size -const int HUF_DECMASK = HUF_DECSIZE - 1; - - -struct HufDec -{ // short code long code - //------------------------------- - int len:8; // code length 0 - int lit:24; // lit p size - int * p; // 0 lits -}; - - -void -invalidNBits () -{ - throw InputExc ("Error in header for Huffman-encoded data " - "(invalid number of bits)."); -} - - -void -tooMuchData () -{ - throw InputExc ("Error in Huffman-encoded data " - "(decoded data are longer than expected)."); -} - - -void -notEnoughData () -{ - throw InputExc ("Error in Huffman-encoded data " - "(decoded data are shorter than expected)."); -} - - -void -invalidCode () -{ - throw InputExc ("Error in Huffman-encoded data " - "(invalid code)."); -} - - -void -invalidTableSize () -{ - throw InputExc ("Error in Huffman-encoded data " - "(invalid code table size)."); -} - - -void -unexpectedEndOfTable () -{ - throw InputExc ("Error in Huffman-encoded data " - "(unexpected end of code table data)."); -} - - -void -tableTooLong () -{ - throw InputExc ("Error in Huffman-encoded data " - "(code table is longer than expected)."); -} - - -void -invalidTableEntry () -{ - throw InputExc ("Error in Huffman-encoded data " - "(invalid code table entry)."); -} - - -inline Int64 -hufLength (Int64 code) -{ - return code & 63; -} - - -inline Int64 -hufCode (Int64 code) -{ - return code >> 6; -} - - -inline void -outputBits (int nBits, Int64 bits, Int64 &c, int &lc, char *&out) -{ - c <<= nBits; - lc += nBits; - - c |= bits; - - while (lc >= 8) - *out++ = (c >> (lc -= 8)); -} - - -inline Int64 -getBits (int nBits, Int64 &c, int &lc, const char *&in) -{ - while (lc < nBits) - { - c = (c << 8) | *(unsigned char *)(in++); - lc += 8; - } - - lc -= nBits; - return (c >> lc) & ((1 << nBits) - 1); -} - - -// -// ENCODING TABLE BUILDING & (UN)PACKING -// - -// -// Build a "canonical" Huffman code table: -// - for each (uncompressed) symbol, hcode contains the length -// of the corresponding code (in the compressed data) -// - canonical codes are computed and stored in hcode -// - the rules for constructing canonical codes are as follows: -// * shorter codes (if filled with zeroes to the right) -// have a numerically higher value than longer codes -// * for codes with the same length, numerical values -// increase with numerical symbol values -// - because the canonical code table can be constructed from -// symbol lengths alone, the code table can be transmitted -// without sending the actual code values -// - see http://www.compressconsult.com/huffman/ -// - -void -hufCanonicalCodeTable (Int64 hcode[HUF_ENCSIZE]) -{ - Int64 n[59]; - - // - // For each i from 0 through 58, count the - // number of different codes of length i, and - // store the count in n[i]. - // - - for (int i = 0; i <= 58; ++i) - n[i] = 0; - - for (int i = 0; i < HUF_ENCSIZE; ++i) - n[hcode[i]] += 1; - - // - // For each i from 58 through 1, compute the - // numerically lowest code with length i, and - // store that code in n[i]. - // - - Int64 c = 0; - - for (int i = 58; i > 0; --i) - { - Int64 nc = ((c + n[i]) >> 1); - n[i] = c; - c = nc; - } - - // - // hcode[i] contains the length, l, of the - // code for symbol i. Assign the next available - // code of length l to the symbol and store both - // l and the code in hcode[i]. - // - - for (int i = 0; i < HUF_ENCSIZE; ++i) - { - int l = hcode[i]; - - if (l > 0) - hcode[i] = l | (n[l]++ << 6); - } -} - - -// -// Compute Huffman codes (based on frq input) and store them in frq: -// - code structure is : [63:lsb - 6:msb] | [5-0: bit length]; -// - max code length is 58 bits; -// - codes outside the range [im-iM] have a null length (unused values); -// - original frequencies are destroyed; -// - encoding tables are used by hufEncode() and hufBuildDecTable(); -// - - -struct FHeapCompare -{ - bool operator () (Int64 *a, Int64 *b) {return *a > *b;} -}; - - -void -hufBuildEncTable - (Int64* frq, // io: input frequencies [HUF_ENCSIZE], output table - int* im, // o: min frq index - int* iM) // o: max frq index -{ - // - // This function assumes that when it is called, array frq - // indicates the frequency of all possible symbols in the data - // that are to be Huffman-encoded. (frq[i] contains the number - // of occurrences of symbol i in the data.) - // - // The loop below does three things: - // - // 1) Finds the minimum and maximum indices that point - // to non-zero entries in frq: - // - // frq[im] != 0, and frq[i] == 0 for all i < im - // frq[iM] != 0, and frq[i] == 0 for all i > iM - // - // 2) Fills array fHeap with pointers to all non-zero - // entries in frq. - // - // 3) Initializes array hlink such that hlink[i] == i - // for all array entries. - // - - AutoArray hlink; - AutoArray fHeap; - - *im = 0; - - while (!frq[*im]) - (*im)++; - - int nf = 0; - - for (int i = *im; i < HUF_ENCSIZE; i++) - { - hlink[i] = i; - - if (frq[i]) - { - fHeap[nf] = &frq[i]; - nf++; - *iM = i; - } - } - - // - // Add a pseudo-symbol, with a frequency count of 1, to frq; - // adjust the fHeap and hlink array accordingly. Function - // hufEncode() uses the pseudo-symbol for run-length encoding. - // - - (*iM)++; - frq[*iM] = 1; - fHeap[nf] = &frq[*iM]; - nf++; - - // - // Build an array, scode, such that scode[i] contains the number - // of bits assigned to symbol i. Conceptually this is done by - // constructing a tree whose leaves are the symbols with non-zero - // frequency: - // - // Make a heap that contains all symbols with a non-zero frequency, - // with the least frequent symbol on top. - // - // Repeat until only one symbol is left on the heap: - // - // Take the two least frequent symbols off the top of the heap. - // Create a new node that has first two nodes as children, and - // whose frequency is the sum of the frequencies of the first - // two nodes. Put the new node back into the heap. - // - // The last node left on the heap is the root of the tree. For each - // leaf node, the distance between the root and the leaf is the length - // of the code for the corresponding symbol. - // - // The loop below doesn't actually build the tree; instead we compute - // the distances of the leaves from the root on the fly. When a new - // node is added to the heap, then that node's descendants are linked - // into a single linear list that starts at the new node, and the code - // lengths of the descendants (that is, their distance from the root - // of the tree) are incremented by one. - // - - make_heap (&fHeap[0], &fHeap[nf], FHeapCompare()); - - AutoArray scode; - memset (scode, 0, sizeof (Int64) * HUF_ENCSIZE); - - while (nf > 1) - { - // - // Find the indices, mm and m, of the two smallest non-zero frq - // values in fHeap, add the smallest frq to the second-smallest - // frq, and remove the smallest frq value from fHeap. - // - - int mm = fHeap[0] - frq; - pop_heap (&fHeap[0], &fHeap[nf], FHeapCompare()); - --nf; - - int m = fHeap[0] - frq; - pop_heap (&fHeap[0], &fHeap[nf], FHeapCompare()); - - frq[m ] += frq[mm]; - push_heap (&fHeap[0], &fHeap[nf], FHeapCompare()); - - // - // The entries in scode are linked into lists with the - // entries in hlink serving as "next" pointers and with - // the end of a list marked by hlink[j] == j. - // - // Traverse the lists that start at scode[m] and scode[mm]. - // For each element visited, increment the length of the - // corresponding code by one bit. (If we visit scode[j] - // during the traversal, then the code for symbol j becomes - // one bit longer.) - // - // Merge the lists that start at scode[m] and scode[mm] - // into a single list that starts at scode[m]. - // - - // - // Add a bit to all codes in the first list. - // - - for (int j = m; true; j = hlink[j]) - { - scode[j]++; - - assert (scode[j] <= 58); - - if (hlink[j] == j) - { - // - // Merge the two lists. - // - - hlink[j] = mm; - break; - } - } - - // - // Add a bit to all codes in the second list - // - - for (int j = mm; true; j = hlink[j]) - { - scode[j]++; - - assert (scode[j] <= 58); - - if (hlink[j] == j) - break; - } - } - - // - // Build a canonical Huffman code table, replacing the code - // lengths in scode with (code, code length) pairs. Copy the - // code table from scode into frq. - // - - hufCanonicalCodeTable (scode); - memcpy (frq, scode, sizeof (Int64) * HUF_ENCSIZE); -} - - -// -// Pack an encoding table: -// - only code lengths, not actual codes, are stored -// - runs of zeroes are compressed as follows: -// -// unpacked packed -// -------------------------------- -// 1 zero 0 (6 bits) -// 2 zeroes 59 -// 3 zeroes 60 -// 4 zeroes 61 -// 5 zeroes 62 -// n zeroes (6 or more) 63 n-6 (6 + 8 bits) -// - -const int SHORT_ZEROCODE_RUN = 59; -const int LONG_ZEROCODE_RUN = 63; -const int SHORTEST_LONG_RUN = 2 + LONG_ZEROCODE_RUN - SHORT_ZEROCODE_RUN; -const int LONGEST_LONG_RUN = 255 + SHORTEST_LONG_RUN; - - -void -hufPackEncTable - (const Int64* hcode, // i : encoding table [HUF_ENCSIZE] - int im, // i : min hcode index - int iM, // i : max hcode index - char** pcode) // o: ptr to packed table (updated) -{ - char *p = *pcode; - Int64 c = 0; - int lc = 0; - - for (; im <= iM; im++) - { - int l = hufLength (hcode[im]); - - if (l == 0) - { - int zerun = 1; - - while ((im < iM) && (zerun < LONGEST_LONG_RUN)) - { - if (hufLength (hcode[im+1]) > 0 ) - break; - im++; - zerun++; - } - - if (zerun >= 2) - { - if (zerun >= SHORTEST_LONG_RUN) - { - outputBits (6, LONG_ZEROCODE_RUN, c, lc, p); - outputBits (8, zerun - SHORTEST_LONG_RUN, c, lc, p); - } - else - { - outputBits (6, SHORT_ZEROCODE_RUN + zerun - 2, c, lc, p); - } - continue; - } - } - - outputBits (6, l, c, lc, p); - } - - if (lc > 0) - *p++ = (unsigned char) (c << (8 - lc)); - - *pcode = p; -} - - -// -// Unpack an encoding table packed by hufPackEncTable(): -// - -void -hufUnpackEncTable - (const char** pcode, // io: ptr to packed table (updated) - int ni, // i : input size (in bytes) - int im, // i : min hcode index - int iM, // i : max hcode index - Int64* hcode) // o: encoding table [HUF_ENCSIZE] -{ - memset (hcode, 0, sizeof (Int64) * HUF_ENCSIZE); - - const char *p = *pcode; - Int64 c = 0; - int lc = 0; - - for (; im <= iM; im++) - { - if (p - *pcode > ni) - unexpectedEndOfTable(); - - Int64 l = hcode[im] = getBits (6, c, lc, p); // code length - - if (l == (Int64) LONG_ZEROCODE_RUN) - { - if (p - *pcode > ni) - unexpectedEndOfTable(); - - int zerun = getBits (8, c, lc, p) + SHORTEST_LONG_RUN; - - if (im + zerun > iM + 1) - tableTooLong(); - - while (zerun--) - hcode[im++] = 0; - - im--; - } - else if (l >= (Int64) SHORT_ZEROCODE_RUN) - { - int zerun = l - SHORT_ZEROCODE_RUN + 2; - - if (im + zerun > iM + 1) - tableTooLong(); - - while (zerun--) - hcode[im++] = 0; - - im--; - } - } - - *pcode = const_cast(p); - - hufCanonicalCodeTable (hcode); -} - - -// -// DECODING TABLE BUILDING -// - -// -// Clear a newly allocated decoding table so that it contains only zeroes. -// - -void -hufClearDecTable - (HufDec * hdecod) // io: (allocated by caller) - // decoding table [HUF_DECSIZE] -{ - memset (hdecod, 0, sizeof (HufDec) * HUF_DECSIZE); -} - - -// -// Build a decoding hash table based on the encoding table hcode: -// - short codes (<= HUF_DECBITS) are resolved with a single table access; -// - long code entry allocations are not optimized, because long codes are -// unfrequent; -// - decoding tables are used by hufDecode(); -// - -void -hufBuildDecTable - (const Int64* hcode, // i : encoding table - int im, // i : min index in hcode - int iM, // i : max index in hcode - HufDec * hdecod) // o: (allocated by caller) - // decoding table [HUF_DECSIZE] -{ - // - // Init hashtable & loop on all codes. - // Assumes that hufClearDecTable(hdecod) has already been called. - // - - for (; im <= iM; im++) - { - Int64 c = hufCode (hcode[im]); - int l = hufLength (hcode[im]); - - if (c >> l) - { - // - // Error: c is supposed to be an l-bit code, - // but c contains a value that is greater - // than the largest l-bit number. - // - - invalidTableEntry(); - } - - if (l > HUF_DECBITS) - { - // - // Long code: add a secondary entry - // - - HufDec *pl = hdecod + (c >> (l - HUF_DECBITS)); - - if (pl->len) - { - // - // Error: a short code has already - // been stored in table entry *pl. - // - - invalidTableEntry(); - } - - pl->lit++; - - if (pl->p) - { - int *p = pl->p; - pl->p = new int [pl->lit]; - - for (int i = 0; i < pl->lit - 1; ++i) - pl->p[i] = p[i]; - - delete [] p; - } - else - { - pl->p = new int [1]; - } - - pl->p[pl->lit - 1]= im; - } - else if (l) - { - // - // Short code: init all primary entries - // - - HufDec *pl = hdecod + (c << (HUF_DECBITS - l)); - - for (Int64 i = 1 << (HUF_DECBITS - l); i > 0; i--, pl++) - { - if (pl->len || pl->p) - { - // - // Error: a short code or a long code has - // already been stored in table entry *pl. - // - - invalidTableEntry(); - } - - pl->len = l; - pl->lit = im; - } - } - } -} - - -// -// Free the long code entries of a decoding table built by hufBuildDecTable() -// - -void -hufFreeDecTable (HufDec *hdecod) // io: Decoding table -{ - for (int i = 0; i < HUF_DECSIZE; i++) - { - if (hdecod[i].p) - { - delete [] hdecod[i].p; - hdecod[i].p = 0; - } - } -} - - -// -// ENCODING -// - -inline void -outputCode (Int64 code, Int64 &c, int &lc, char *&out) -{ - outputBits (hufLength (code), hufCode (code), c, lc, out); -} - - -inline void -sendCode (Int64 sCode, int runCount, Int64 runCode, - Int64 &c, int &lc, char *&out) -{ - // - // Output a run of runCount instances of the symbol sCount. - // Output the symbols explicitly, or if that is shorter, output - // the sCode symbol once followed by a runCode symbol and runCount - // expressed as an 8-bit number. - // - - if (hufLength (sCode) + hufLength (runCode) + 8 < - hufLength (sCode) * runCount) - { - outputCode (sCode, c, lc, out); - outputCode (runCode, c, lc, out); - outputBits (8, runCount, c, lc, out); - } - else - { - while (runCount-- >= 0) - outputCode (sCode, c, lc, out); - } -} - - -// -// Encode (compress) ni values based on the Huffman encoding table hcode: -// - -int -hufEncode // return: output size (in bits) - (const Int64* hcode, // i : encoding table - const unsigned short* in, // i : uncompressed input buffer - const int ni, // i : input buffer size (in bytes) - int rlc, // i : rl code - char* out) // o: compressed output buffer -{ - char *outStart = out; - Int64 c = 0; // bits not yet written to out - int lc = 0; // number of valid bits in c (LSB) - int s = in[0]; - int cs = 0; - - // - // Loop on input values - // - - for (int i = 1; i < ni; i++) - { - // - // Count same values or send code - // - - if (s == in[i] && cs < 255) - { - cs++; - } - else - { - sendCode (hcode[s], cs, hcode[rlc], c, lc, out); - cs=0; - } - - s = in[i]; - } - - // - // Send remaining code - // - - sendCode (hcode[s], cs, hcode[rlc], c, lc, out); - - if (lc) - *out = (c << (8 - lc)) & 0xff; - - return (out - outStart) * 8 + lc; -} - - -// -// DECODING -// - -// -// In order to force the compiler to inline them, -// getChar() and getCode() are implemented as macros -// instead of "inline" functions. -// - -#define getChar(c, lc, in) \ -{ \ - c = (c << 8) | *(unsigned char *)(in++); \ - lc += 8; \ -} - - -#define getCode(po, rlc, c, lc, in, out, ob, oe)\ -{ \ - if (po == rlc) \ - { \ - if (lc < 8) \ - getChar(c, lc, in); \ - \ - lc -= 8; \ - \ - unsigned char cs = (c >> lc); \ - \ - if (out + cs > oe) \ - tooMuchData(); \ - else if (out - 1 < ob) \ - notEnoughData(); \ - \ - unsigned short s = out[-1]; \ - \ - while (cs-- > 0) \ - *out++ = s; \ - } \ - else if (out < oe) \ - { \ - *out++ = po; \ - } \ - else \ - { \ - tooMuchData(); \ - } \ -} - - -// -// Decode (uncompress) ni bits based on encoding & decoding tables: -// - -void -hufDecode - (const Int64 * hcode, // i : encoding table - const HufDec * hdecod, // i : decoding table - const char* in, // i : compressed input buffer - int ni, // i : input size (in bits) - int rlc, // i : run-length code - int no, // i : expected output size (in bytes) - unsigned short* out) // o: uncompressed output buffer -{ - Int64 c = 0; - int lc = 0; - unsigned short * outb = out; - unsigned short * oe = out + no; - const char * ie = in + (ni + 7) / 8; // input byte size - - // - // Loop on input bytes - // - - while (in < ie) - { - getChar (c, lc, in); - - // - // Access decoding table - // - - while (lc >= HUF_DECBITS) - { - const HufDec pl = hdecod[(c >> (lc-HUF_DECBITS)) & HUF_DECMASK]; - - if (pl.len) - { - // - // Get short code - // - - lc -= pl.len; - getCode (pl.lit, rlc, c, lc, in, out, outb, oe); - } - else - { - if (!pl.p) - invalidCode(); // wrong code - - // - // Search long code - // - - int j; - - for (j = 0; j < pl.lit; j++) - { - int l = hufLength (hcode[pl.p[j]]); - - while (lc < l && in < ie) // get more bits - getChar (c, lc, in); - - if (lc >= l) - { - if (hufCode (hcode[pl.p[j]]) == - ((c >> (lc - l)) & ((Int64(1) << l) - 1))) - { - // - // Found : get long code - // - - lc -= l; - getCode (pl.p[j], rlc, c, lc, in, out, outb, oe); - break; - } - } - } - - if (j == pl.lit) - invalidCode(); // Not found - } - } - } - - // - // Get remaining (short) codes - // - - int i = (8 - ni) & 7; - c >>= i; - lc -= i; - - while (lc > 0) - { - const HufDec pl = hdecod[(c << (HUF_DECBITS - lc)) & HUF_DECMASK]; - - if (pl.len) - { - lc -= pl.len; - getCode (pl.lit, rlc, c, lc, in, out, outb, oe); - } - else - { - invalidCode(); // wrong (long) code - } - } - - if (out - outb != no) - notEnoughData (); -} - - -void -countFrequencies (Int64 freq[HUF_ENCSIZE], - const unsigned short data[/*n*/], - int n) -{ - for (int i = 0; i < HUF_ENCSIZE; ++i) - freq[i] = 0; - - for (int i = 0; i < n; ++i) - ++freq[data[i]]; -} - - -void -writeUInt (char buf[4], unsigned int i) -{ - unsigned char *b = (unsigned char *) buf; - - b[0] = i; - b[1] = i >> 8; - b[2] = i >> 16; - b[3] = i >> 24; -} - - -unsigned int -readUInt (const char buf[4]) -{ - const unsigned char *b = (const unsigned char *) buf; - - return ( b[0] & 0x000000ff) | - ((b[1] << 8) & 0x0000ff00) | - ((b[2] << 16) & 0x00ff0000) | - ((b[3] << 24) & 0xff000000); -} - -} // namespace - - -// -// EXTERNAL INTERFACE -// - - -int -hufCompress (const unsigned short raw[], - int nRaw, - char compressed[]) -{ - if (nRaw == 0) - return 0; - - AutoArray freq; - - countFrequencies (freq, raw, nRaw); - - int im = 0; - int iM = 0; - hufBuildEncTable (freq, &im, &iM); - - char *tableStart = compressed + 20; - char *tableEnd = tableStart; - hufPackEncTable (freq, im, iM, &tableEnd); - int tableLength = tableEnd - tableStart; - - char *dataStart = tableEnd; - int nBits = hufEncode (freq, raw, nRaw, iM, dataStart); - int dataLength = (nBits + 7) / 8; - - writeUInt (compressed, im); - writeUInt (compressed + 4, iM); - writeUInt (compressed + 8, tableLength); - writeUInt (compressed + 12, nBits); - writeUInt (compressed + 16, 0); // room for future extensions - - return dataStart + dataLength - compressed; -} - - -void -hufUncompress (const char compressed[], - int nCompressed, - unsigned short raw[], - int nRaw) -{ - if (nCompressed == 0) - { - if (nRaw != 0) - notEnoughData(); - - return; - } - - int im = readUInt (compressed); - int iM = readUInt (compressed + 4); - // int tableLength = readUInt (compressed + 8); - int nBits = readUInt (compressed + 12); - - if (im < 0 || im >= HUF_ENCSIZE || iM < 0 || iM >= HUF_ENCSIZE) - invalidTableSize(); - - const char *ptr = compressed + 20; - - // - // Fast decoder needs at least 2x64-bits of compressed data, and - // needs to be run-able on this platform. Otherwise, fall back - // to the original decoder - // - - if (FastHufDecoder::enabled() && nBits > 128) - { - FastHufDecoder fhd (ptr, nCompressed - (ptr - compressed), im, iM, iM); - fhd.decode ((unsigned char*)ptr, nBits, raw, nRaw); - } - else - { - AutoArray freq; - AutoArray hdec; - - hufClearDecTable (hdec); - - hufUnpackEncTable (&ptr, - nCompressed - (ptr - compressed), - im, - iM, - freq); - - try - { - if (nBits > 8 * (nCompressed - (ptr - compressed))) - invalidNBits(); - - hufBuildDecTable (freq, im, iM, hdec); - hufDecode (freq, hdec, ptr, nBits, iM, nRaw, raw); - } - catch (...) - { - hufFreeDecTable (hdec); - throw; - } - - hufFreeDecTable (hdec); - } -} - - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_EXIT diff --git a/3rdparty/openexr/IlmImf/ImfHuf.h b/3rdparty/openexr/IlmImf/ImfHuf.h deleted file mode 100644 index fa8960458b..0000000000 --- a/3rdparty/openexr/IlmImf/ImfHuf.h +++ /dev/null @@ -1,82 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - - -#ifndef INCLUDED_IMF_HUF_H -#define INCLUDED_IMF_HUF_H - -#include "ImfExport.h" -#include "ImfNamespace.h" - -//----------------------------------------------------------------------------- -// -// 16-bit Huffman compression and decompression: -// -// hufCompress (r, nr, c) -// -// Compresses the contents of array r (of length nr), -// stores the compressed data in array c, and returns -// the size of the compressed data (in bytes). -// -// To avoid buffer overflows, the size of array c should -// be at least 2 * nr + 65536. -// -// hufUncompress (c, nc, r, nr) -// -// Uncompresses the data in array c (with length nc), -// and stores the results in array r (with length nr). -// -//----------------------------------------------------------------------------- - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER - - -IMF_EXPORT -int -hufCompress (const unsigned short raw[/*nRaw*/], - int nRaw, - char compressed[/*2 * nRaw + 65536*/]); - -IMF_EXPORT -void -hufUncompress (const char compressed[/*nCompressed*/], - int nCompressed, - unsigned short raw[/*nRaw*/], - int nRaw); - - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT - -#endif diff --git a/3rdparty/openexr/IlmImf/ImfIO.cpp b/3rdparty/openexr/IlmImf/ImfIO.cpp deleted file mode 100644 index c52fc54587..0000000000 --- a/3rdparty/openexr/IlmImf/ImfIO.cpp +++ /dev/null @@ -1,110 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - -//----------------------------------------------------------------------------- -// -// Low-level file input and output for OpenEXR. -// -//----------------------------------------------------------------------------- - -#include -#include "Iex.h" -#include "ImfNamespace.h" - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_ENTER - - -IStream::IStream (const char fileName[]): _fileName (fileName) -{ - // empty -} - - -IStream::~IStream () -{ - // empty -} - - -bool -IStream::isMemoryMapped () const -{ - return false; -} - - -char * -IStream::readMemoryMapped (int n) -{ - throw IEX_NAMESPACE::InputExc ("Attempt to perform a memory-mapped read " - "on a file that is not memory mapped."); - return 0; -} - - -void -IStream::clear () -{ - // empty -} - - -const char * -IStream::fileName () const -{ - return _fileName.c_str(); -} - - -OStream::OStream (const char fileName[]): _fileName (fileName) -{ - // empty -} - - -OStream::~OStream () -{ - // empty -} - - -const char * -OStream::fileName () const -{ - return _fileName.c_str(); -} - - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_EXIT diff --git a/3rdparty/openexr/IlmImf/ImfIO.h b/3rdparty/openexr/IlmImf/ImfIO.h deleted file mode 100644 index 8c32fea917..0000000000 --- a/3rdparty/openexr/IlmImf/ImfIO.h +++ /dev/null @@ -1,264 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - -#ifndef INCLUDED_IMF_IO_H -#define INCLUDED_IMF_IO_H - -//----------------------------------------------------------------------------- -// -// Low-level file input and output for OpenEXR. -// -//----------------------------------------------------------------------------- - -#include "ImfInt64.h" -#include "ImfNamespace.h" -#include "ImfExport.h" - -#include - - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER - -//----------------------------------------------------------- -// class IStream -- an abstract base class for input streams. -//----------------------------------------------------------- - -class IStream -{ - public: - - //----------- - // Destructor - //----------- - - IMF_EXPORT - virtual ~IStream (); - - - //------------------------------------------------- - // Does this input stream support memory-mapped IO? - // - // Memory-mapped streams can avoid an extra copy; - // memory-mapped read operations return a pointer - // to an internal buffer instead of copying data - // into a buffer supplied by the caller. - //------------------------------------------------- - - IMF_EXPORT - virtual bool isMemoryMapped () const; - - - //------------------------------------------------------ - // Read from the stream: - // - // read(c,n) reads n bytes from the stream, and stores - // them in array c. If the stream contains less than n - // bytes, or if an I/O error occurs, read(c,n) throws - // an exception. If read(c,n) reads the last byte from - // the file it returns false, otherwise it returns true. - //------------------------------------------------------ - - virtual bool read (char c[/*n*/], int n) = 0; - - - //--------------------------------------------------- - // Read from a memory-mapped stream: - // - // readMemoryMapped(n) reads n bytes from the stream - // and returns a pointer to the first byte. The - // returned pointer remains valid until the stream - // is closed. If there are less than n byte left to - // read in the stream or if the stream is not memory- - // mapped, readMemoryMapped(n) throws an exception. - //--------------------------------------------------- - - IMF_EXPORT - virtual char * readMemoryMapped (int n); - - - //-------------------------------------------------------- - // Get the current reading position, in bytes from the - // beginning of the file. If the next call to read() will - // read the first byte in the file, tellg() returns 0. - //-------------------------------------------------------- - - virtual Int64 tellg () = 0; - - - //------------------------------------------- - // Set the current reading position. - // After calling seekg(i), tellg() returns i. - //------------------------------------------- - - virtual void seekg (Int64 pos) = 0; - - - //------------------------------------------------------ - // Clear error conditions after an operation has failed. - //------------------------------------------------------ - - IMF_EXPORT - virtual void clear (); - - - //------------------------------------------------------ - // Get the name of the file associated with this stream. - //------------------------------------------------------ - - IMF_EXPORT - const char * fileName () const; - - protected: - - IMF_EXPORT - IStream (const char fileName[]); - - private: - - IStream (const IStream &); // not implemented - IStream & operator = (const IStream &); // not implemented - - std::string _fileName; -}; - - -//----------------------------------------------------------- -// class OStream -- an abstract base class for output streams -//----------------------------------------------------------- - -class OStream -{ - public: - - //----------- - // Destructor - //----------- - - IMF_EXPORT - virtual ~OStream (); - - - //---------------------------------------------------------- - // Write to the stream: - // - // write(c,n) takes n bytes from array c, and stores them - // in the stream. If an I/O error occurs, write(c,n) throws - // an exception. - //---------------------------------------------------------- - - virtual void write (const char c[/*n*/], int n) = 0; - - - //--------------------------------------------------------- - // Get the current writing position, in bytes from the - // beginning of the file. If the next call to write() will - // start writing at the beginning of the file, tellp() - // returns 0. - //--------------------------------------------------------- - - virtual Int64 tellp () = 0; - - - //------------------------------------------- - // Set the current writing position. - // After calling seekp(i), tellp() returns i. - //------------------------------------------- - - virtual void seekp (Int64 pos) = 0; - - - //------------------------------------------------------ - // Get the name of the file associated with this stream. - //------------------------------------------------------ - - IMF_EXPORT - const char * fileName () const; - - protected: - - IMF_EXPORT - OStream (const char fileName[]); - - private: - - OStream (const OStream &); // not implemented - OStream & operator = (const OStream &); // not implemented - - std::string _fileName; -}; - - -//----------------------- -// Helper classes for Xdr -//----------------------- - -struct StreamIO -{ - static void - writeChars (OStream &os, const char c[/*n*/], int n) - { - os.write (c, n); - } - - static bool - readChars (IStream &is, char c[/*n*/], int n) - { - return is.read (c, n); - } -}; - - -struct CharPtrIO -{ - static void - writeChars (char *&op, const char c[/*n*/], int n) - { - while (n--) - *op++ = *c++; - } - - static bool - readChars (const char *&ip, char c[/*n*/], int n) - { - while (n--) - *c++ = *ip++; - - return true; - } -}; - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT - -#endif diff --git a/3rdparty/openexr/IlmImf/ImfInputFile.cpp b/3rdparty/openexr/IlmImf/ImfInputFile.cpp deleted file mode 100644 index 4aa885ee83..0000000000 --- a/3rdparty/openexr/IlmImf/ImfInputFile.cpp +++ /dev/null @@ -1,928 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - -//----------------------------------------------------------------------------- -// -// class InputFile -// -//----------------------------------------------------------------------------- - -#include "ImfInputFile.h" -#include "ImfScanLineInputFile.h" -#include "ImfTiledInputFile.h" -#include "ImfChannelList.h" -#include "ImfMisc.h" -#include "ImfStdIO.h" -#include "ImfVersion.h" -#include "ImfPartType.h" -#include "ImfInputPartData.h" -#include "ImfMultiPartInputFile.h" - -#include -#include - -#include "ImathFun.h" -#include "IlmThreadMutex.h" -#include "Iex.h" -#include "half.h" - -#include -#include - -#include "ImfNamespace.h" - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_ENTER - - -using IMATH_NAMESPACE::Box2i; -using IMATH_NAMESPACE::divp; -using IMATH_NAMESPACE::modp; -using ILMTHREAD_NAMESPACE::Mutex; -using ILMTHREAD_NAMESPACE::Lock; - - -// -// Struct InputFile::Data stores things that will be -// needed between calls to readPixels -// - -struct InputFile::Data : public Mutex -{ - Header header; - int version; - bool isTiled; - - TiledInputFile * tFile; - ScanLineInputFile * sFile; - DeepScanLineInputFile * dsFile; - - LineOrder lineOrder; // the file's lineorder - int minY; // data window's min y coord - int maxY; // data window's max x coord - - FrameBuffer tFileBuffer; - FrameBuffer * cachedBuffer; - CompositeDeepScanLine * compositor; // for loading deep files - - int cachedTileY; - int offset; - - int numThreads; - - int partNumber; - InputPartData* part; - - bool multiPartBackwardSupport; - MultiPartInputFile* multiPartFile; - InputStreamMutex * _streamData; - bool _deleteStream; - - Data (int numThreads); - ~Data (); - - void deleteCachedBuffer(); -}; - - -InputFile::Data::Data (int numThreads): - isTiled (false), - tFile (0), - sFile (0), - dsFile(0), - cachedBuffer (0), - compositor(0), - cachedTileY (-1), - numThreads (numThreads), - partNumber (-1), - part(NULL), - multiPartBackwardSupport (false), - multiPartFile (0), - _streamData(0), - _deleteStream(false) - -{ - // empty -} - - -InputFile::Data::~Data () -{ - if (tFile) - delete tFile; - if (sFile) - delete sFile; - if (dsFile) - delete dsFile; - if (compositor) - delete compositor; - - deleteCachedBuffer(); - - if (multiPartBackwardSupport && multiPartFile) - delete multiPartFile; -} - - -void -InputFile::Data::deleteCachedBuffer() -{ - // - // Delete the cached frame buffer, and all memory - // allocated for the slices in the cached frameBuffer. - // - - if (cachedBuffer) - { - for (FrameBuffer::Iterator k = cachedBuffer->begin(); - k != cachedBuffer->end(); - ++k) - { - Slice &s = k.slice(); - - switch (s.type) - { - case OPENEXR_IMF_INTERNAL_NAMESPACE::UINT: - - delete [] (((unsigned int *)s.base) + offset); - break; - - case OPENEXR_IMF_INTERNAL_NAMESPACE::HALF: - - delete [] ((half *)s.base + offset); - break; - - case OPENEXR_IMF_INTERNAL_NAMESPACE::FLOAT: - - delete [] (((float *)s.base) + offset); - break; - case NUM_PIXELTYPES : - throw(IEX_NAMESPACE::ArgExc("Invalid pixel type")); - } - } - - // - // delete the cached frame buffer - // - - delete cachedBuffer; - cachedBuffer = 0; - } -} - - -namespace { - -void -bufferedReadPixels (InputFile::Data* ifd, int scanLine1, int scanLine2) -{ - // - // bufferedReadPixels reads each row of tiles that intersect the - // scan-line range (scanLine1 to scanLine2). The previous row of - // tiles is cached in order to prevent redundent tile reads when - // accessing scanlines sequentially. - // - - int minY = std::min (scanLine1, scanLine2); - int maxY = std::max (scanLine1, scanLine2); - - if (minY < ifd->minY || maxY > ifd->maxY) - { - throw IEX_NAMESPACE::ArgExc ("Tried to read scan line outside " - "the image file's data window."); - } - - // - // The minimum and maximum y tile coordinates that intersect this - // scanline range - // - - int minDy = (minY - ifd->minY) / ifd->tFile->tileYSize(); - int maxDy = (maxY - ifd->minY) / ifd->tFile->tileYSize(); - - // - // Figure out which one is first in the file so we can read without seeking - // - - int yStart, yEnd, yStep; - - if (ifd->lineOrder == DECREASING_Y) - { - yStart = maxDy; - yEnd = minDy - 1; - yStep = -1; - } - else - { - yStart = minDy; - yEnd = maxDy + 1; - yStep = 1; - } - - // - // the number of pixels in a row of tiles - // - - Box2i levelRange = ifd->tFile->dataWindowForLevel(0); - - // - // Read the tiles into our temporary framebuffer and copy them into - // the user's buffer - // - - for (int j = yStart; j != yEnd; j += yStep) - { - Box2i tileRange = ifd->tFile->dataWindowForTile (0, j, 0); - - int minYThisRow = std::max (minY, tileRange.min.y); - int maxYThisRow = std::min (maxY, tileRange.max.y); - - if (j != ifd->cachedTileY) - { - // - // We don't have any valid buffered info, so we need to read in - // from the file. - // - - ifd->tFile->readTiles (0, ifd->tFile->numXTiles (0) - 1, j, j); - ifd->cachedTileY = j; - } - - // - // Copy the data from our cached framebuffer into the user's - // framebuffer. - // - - for (FrameBuffer::ConstIterator k = ifd->cachedBuffer->begin(); - k != ifd->cachedBuffer->end(); - ++k) - { - Slice fromSlice = k.slice(); // slice to write from - Slice toSlice = ifd->tFileBuffer[k.name()]; // slice to write to - - char *fromPtr, *toPtr; - int size = pixelTypeSize (toSlice.type); - - int xStart = levelRange.min.x; - int yStart = minYThisRow; - - while (modp (xStart, toSlice.xSampling) != 0) - ++xStart; - - while (modp (yStart, toSlice.ySampling) != 0) - ++yStart; - - for (int y = yStart; - y <= maxYThisRow; - y += toSlice.ySampling) - { - // - // Set the pointers to the start of the y scanline in - // this row of tiles - // - - fromPtr = fromSlice.base + - (y - tileRange.min.y) * fromSlice.yStride + - xStart * fromSlice.xStride; - - toPtr = toSlice.base + - divp (y, toSlice.ySampling) * toSlice.yStride + - divp (xStart, toSlice.xSampling) * toSlice.xStride; - - // - // Copy all pixels for the scanline in this row of tiles - // - - for (int x = xStart; - x <= levelRange.max.x; - x += toSlice.xSampling) - { - for (int i = 0; i < size; ++i) - toPtr[i] = fromPtr[i]; - - fromPtr += fromSlice.xStride * toSlice.xSampling; - toPtr += toSlice.xStride; - } - } - } - } -} - -} // namespace - - - -InputFile::InputFile (const char fileName[], int numThreads): - _data (new Data (numThreads)) -{ - _data->_streamData = NULL; - _data->_deleteStream=true; - - OPENEXR_IMF_INTERNAL_NAMESPACE::IStream* is = 0; - try - { - is = new StdIFStream (fileName); - readMagicNumberAndVersionField(*is, _data->version); - - // - // compatibility to read multipart file. - // - if (isMultiPart(_data->version)) - { - compatibilityInitialize(*is); - } - else - { - _data->_streamData = new InputStreamMutex(); - _data->_streamData->is = is; - _data->header.readFrom (*_data->_streamData->is, _data->version); - - // fix type attribute in single part regular image types - // (may be wrong if an old version of OpenEXR converts - // a tiled image to scanline or vice versa) - if(!isNonImage(_data->version) && - !isMultiPart(_data->version) && - _data->header.hasType()) - { - _data->header.setType(isTiled(_data->version) ? TILEDIMAGE : SCANLINEIMAGE); - } - - _data->header.sanityCheck (isTiled (_data->version)); - - initialize(); - } - } - catch (IEX_NAMESPACE::BaseExc &e) - { - if (is) delete is; - - if ( _data && !_data->multiPartBackwardSupport && _data->_streamData) - { - delete _data->_streamData; - _data->_streamData=NULL; - } - - if (_data) delete _data; - _data=NULL; - - REPLACE_EXC (e, "Cannot read image file " - "\"" << fileName << "\". " << e.what()); - throw; - } - catch (...) - { - if (is) delete is; - if (_data && !_data->multiPartBackwardSupport && _data->_streamData) - { - delete _data->_streamData; - } - if (_data) delete _data; - - throw; - } -} - - -InputFile::InputFile (OPENEXR_IMF_INTERNAL_NAMESPACE::IStream &is, int numThreads): - _data (new Data (numThreads)) -{ - _data->_streamData=NULL; - _data->_deleteStream=false; - try - { - readMagicNumberAndVersionField(is, _data->version); - - // - // Backward compatibility to read multpart file. - // - if (isMultiPart(_data->version)) - { - compatibilityInitialize(is); - } - else - { - _data->_streamData = new InputStreamMutex(); - _data->_streamData->is = &is; - _data->header.readFrom (*_data->_streamData->is, _data->version); - - // fix type attribute in single part regular image types - // (may be wrong if an old version of OpenEXR converts - // a tiled image to scanline or vice versa) - if(!isNonImage(_data->version) && - !isMultiPart(_data->version) && - _data->header.hasType()) - { - _data->header.setType(isTiled(_data->version) ? TILEDIMAGE : SCANLINEIMAGE); - } - - _data->header.sanityCheck (isTiled (_data->version)); - - initialize(); - } - } - catch (IEX_NAMESPACE::BaseExc &e) - { - if (_data && !_data->multiPartBackwardSupport && _data->_streamData) delete _data->_streamData; - if (_data) delete _data; - _data=NULL; - - REPLACE_EXC (e, "Cannot read image file " - "\"" << is.fileName() << "\". " << e.what()); - throw; - } - catch (...) - { - if (_data && !_data->multiPartBackwardSupport && _data->_streamData) delete _data->_streamData; - if (_data) delete _data; - _data=NULL; - throw; - } -} - - -InputFile::InputFile (InputPartData* part) : - _data (new Data (part->numThreads)) -{ - _data->_deleteStream=false; - multiPartInitialize (part); -} - - -void -InputFile::compatibilityInitialize (OPENEXR_IMF_INTERNAL_NAMESPACE::IStream& is) -{ - is.seekg(0); - - // - // Construct a MultiPartInputFile, initialize InputFile - // with the part 0 data. - // (TODO) may want to have a way to set the reconstruction flag. - // - _data->multiPartBackwardSupport = true; - _data->multiPartFile = new MultiPartInputFile(is, _data->numThreads); - InputPartData* part = _data->multiPartFile->getPart(0); - - multiPartInitialize (part); -} - - -void -InputFile::multiPartInitialize (InputPartData* part) -{ - _data->_streamData = part->mutex; - _data->version = part->version; - _data->header = part->header; - _data->partNumber = part->partNumber; - _data->part = part; - - initialize(); -} - - -void -InputFile::initialize () -{ - if (!_data->part) - { - if(_data->header.hasType() && _data->header.type()==DEEPSCANLINE) - { - _data->isTiled=false; - const Box2i &dataWindow = _data->header.dataWindow(); - _data->minY = dataWindow.min.y; - _data->maxY = dataWindow.max.y; - - _data->dsFile = new DeepScanLineInputFile (_data->header, - _data->_streamData->is, - _data->version, - _data->numThreads); - _data->compositor = new CompositeDeepScanLine; - _data->compositor->addSource(_data->dsFile); - } - - else if (isTiled (_data->version)) - { - _data->isTiled = true; - _data->lineOrder = _data->header.lineOrder(); - - // - // Save the dataWindow information - // - - const Box2i &dataWindow = _data->header.dataWindow(); - _data->minY = dataWindow.min.y; - _data->maxY = dataWindow.max.y; - - _data->tFile = new TiledInputFile (_data->header, - _data->_streamData->is, - _data->version, - _data->numThreads); - } - - else if(!_data->header.hasType() || _data->header.type()==SCANLINEIMAGE) - { - _data->sFile = new ScanLineInputFile (_data->header, - _data->_streamData->is, - _data->numThreads); - }else{ - // type set but not recognised - - THROW(IEX_NAMESPACE::ArgExc, "InputFile cannot handle parts of type " << _data->header.type()); - } - } - else - { - if(_data->header.hasType() && _data->header.type()==DEEPSCANLINE) - { - _data->isTiled=false; - const Box2i &dataWindow = _data->header.dataWindow(); - _data->minY = dataWindow.min.y; - _data->maxY = dataWindow.max.y; - - _data->dsFile = new DeepScanLineInputFile (_data->part); - _data->compositor = new CompositeDeepScanLine; - _data->compositor->addSource(_data->dsFile); - } - else if (isTiled (_data->header.type())) - { - _data->isTiled = true; - _data->lineOrder = _data->header.lineOrder(); - - // - // Save the dataWindow information - // - - const Box2i &dataWindow = _data->header.dataWindow(); - _data->minY = dataWindow.min.y; - _data->maxY = dataWindow.max.y; - - _data->tFile = new TiledInputFile (_data->part); - } - else if(!_data->header.hasType() || _data->header.type()==SCANLINEIMAGE) - { - _data->sFile = new ScanLineInputFile (_data->part); - }else{ - THROW(IEX_NAMESPACE::ArgExc, "InputFile cannot handle parts of type " << _data->header.type()); - - } - } -} - -#include -InputFile::~InputFile () -{ - if (_data->_deleteStream) - delete _data->_streamData->is; - - // unless this file was opened via the multipart API, - // delete the streamData object too - if (_data->partNumber==-1 && _data->_streamData) - delete _data->_streamData; - - if (_data) delete _data; -} - -const char * -InputFile::fileName () const -{ - return _data->_streamData->is->fileName(); -} - - -const Header & -InputFile::header () const -{ - return _data->header; -} - - -int -InputFile::version () const -{ - return _data->version; -} - - -void -InputFile::setFrameBuffer (const FrameBuffer &frameBuffer) -{ - if (_data->isTiled) - { - Lock lock (*_data); - - // - // We must invalidate the cached buffer if the new frame - // buffer has a different set of channels than the old - // frame buffer, or if the type of a channel has changed. - // - - const FrameBuffer &oldFrameBuffer = _data->tFileBuffer; - - FrameBuffer::ConstIterator i = oldFrameBuffer.begin(); - FrameBuffer::ConstIterator j = frameBuffer.begin(); - - while (i != oldFrameBuffer.end() && j != frameBuffer.end()) - { - if (strcmp (i.name(), j.name()) || i.slice().type != j.slice().type) - break; - - ++i; - ++j; - } - - if (i != oldFrameBuffer.end() || j != frameBuffer.end()) - { - // - // Invalidate the cached buffer. - // - - _data->deleteCachedBuffer (); - _data->cachedTileY = -1; - - // - // Create new a cached frame buffer. It can hold a single - // row of tiles. The cached buffer can be reused for each - // row of tiles because we set the yTileCoords parameter of - // each Slice to true. - // - - const Box2i &dataWindow = _data->header.dataWindow(); - _data->cachedBuffer = new FrameBuffer(); - _data->offset = dataWindow.min.x; - - int tileRowSize = (dataWindow.max.x - dataWindow.min.x + 1) * - _data->tFile->tileYSize(); - - for (FrameBuffer::ConstIterator k = frameBuffer.begin(); - k != frameBuffer.end(); - ++k) - { - Slice s = k.slice(); - - switch (s.type) - { - case OPENEXR_IMF_INTERNAL_NAMESPACE::UINT: - - _data->cachedBuffer->insert - (k.name(), - Slice (UINT, - (char *)(new unsigned int[tileRowSize] - - _data->offset), - sizeof (unsigned int), - sizeof (unsigned int) * - _data->tFile->levelWidth(0), - 1, 1, - s.fillValue, - false, true)); - break; - - case OPENEXR_IMF_INTERNAL_NAMESPACE::HALF: - - _data->cachedBuffer->insert - (k.name(), - Slice (HALF, - (char *)(new half[tileRowSize] - - _data->offset), - sizeof (half), - sizeof (half) * - _data->tFile->levelWidth(0), - 1, 1, - s.fillValue, - false, true)); - break; - - case OPENEXR_IMF_INTERNAL_NAMESPACE::FLOAT: - - _data->cachedBuffer->insert - (k.name(), - Slice (OPENEXR_IMF_INTERNAL_NAMESPACE::FLOAT, - (char *)(new float[tileRowSize] - - _data->offset), - sizeof(float), - sizeof(float) * - _data->tFile->levelWidth(0), - 1, 1, - s.fillValue, - false, true)); - break; - - default: - - throw IEX_NAMESPACE::ArgExc ("Unknown pixel data type."); - } - } - - _data->tFile->setFrameBuffer (*_data->cachedBuffer); - } - - _data->tFileBuffer = frameBuffer; - } - else if(_data->compositor) - { - _data->compositor->setFrameBuffer(frameBuffer); - }else { - _data->sFile->setFrameBuffer(frameBuffer); - _data->tFileBuffer = frameBuffer; - } -} - - -const FrameBuffer & -InputFile::frameBuffer () const -{ - if(_data->compositor) - { - return _data->compositor->frameBuffer(); - } - else if(_data->isTiled) - { - Lock lock (*_data); - return _data->tFileBuffer; - } - else - { - return _data->sFile->frameBuffer(); - } -} - - -bool -InputFile::isComplete () const -{ - if (_data->dsFile) - return _data->dsFile->isComplete(); - else if (_data->isTiled) - return _data->tFile->isComplete(); - else - return _data->sFile->isComplete(); -} - -bool -InputFile::isOptimizationEnabled() const -{ - if(_data->sFile) - { - return _data->sFile->isOptimizationEnabled(); - }else{ - return false; - } -} - - -void -InputFile::readPixels (int scanLine1, int scanLine2) -{ - if (_data->compositor) - { - _data->compositor->readPixels(scanLine1,scanLine2); - } - else if (_data->isTiled) - { - Lock lock (*_data); - bufferedReadPixels (_data, scanLine1, scanLine2); - } - else - { - _data->sFile->readPixels (scanLine1, scanLine2); - } -} - - -void -InputFile::readPixels (int scanLine) -{ - readPixels (scanLine, scanLine); -} - - -void -InputFile::rawPixelData (int firstScanLine, - const char *&pixelData, - int &pixelDataSize) -{ - try - { - if (_data->dsFile) - { - throw IEX_NAMESPACE::ArgExc ("Tried to read a raw scanline " - "from a deep image."); - } - - else if (_data->isTiled) - { - throw IEX_NAMESPACE::ArgExc ("Tried to read a raw scanline " - "from a tiled image."); - } - - _data->sFile->rawPixelData (firstScanLine, pixelData, pixelDataSize); - } - catch (IEX_NAMESPACE::BaseExc &e) - { - REPLACE_EXC (e, "Error reading pixel data from image " - "file \"" << fileName() << "\". " << e.what()); - throw; - } -} - - - - -void -InputFile::rawPixelDataToBuffer (int scanLine, - char *pixelData, - int &pixelDataSize) const -{ - try - { - if (_data->dsFile) - { - throw IEX_NAMESPACE::ArgExc ("Tried to read a raw scanline " - "from a deep image."); - } - - else if (_data->isTiled) - { - throw IEX_NAMESPACE::ArgExc ("Tried to read a raw scanline " - "from a tiled image."); - } - - _data->sFile->rawPixelDataToBuffer(scanLine, pixelData, pixelDataSize); - } - catch (IEX_NAMESPACE::BaseExc &e) - { - REPLACE_EXC (e, "Error reading pixel data from image " - "file \"" << fileName() << "\". " << e.what()); - throw; - } -} - - - -void -InputFile::rawTileData (int &dx, int &dy, - int &lx, int &ly, - const char *&pixelData, - int &pixelDataSize) -{ - try - { - if (!_data->isTiled) - { - throw IEX_NAMESPACE::ArgExc ("Tried to read a raw tile " - "from a scanline-based image."); - } - - _data->tFile->rawTileData (dx, dy, lx, ly, pixelData, pixelDataSize); - } - catch (IEX_NAMESPACE::BaseExc &e) - { - REPLACE_EXC (e, "Error reading tile data from image " - "file \"" << fileName() << "\". " << e.what()); - throw; - } -} - - -TiledInputFile* -InputFile::tFile() -{ - if (!_data->isTiled) - { - throw IEX_NAMESPACE::ArgExc ("Cannot get a TiledInputFile pointer " - "from an InputFile that is not tiled."); - } - - return _data->tFile; -} - - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_EXIT diff --git a/3rdparty/openexr/IlmImf/ImfInputFile.h b/3rdparty/openexr/IlmImf/ImfInputFile.h deleted file mode 100644 index cc524a25cf..0000000000 --- a/3rdparty/openexr/IlmImf/ImfInputFile.h +++ /dev/null @@ -1,278 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - -#ifndef INCLUDED_IMF_INPUT_FILE_H -#define INCLUDED_IMF_INPUT_FILE_H - -//----------------------------------------------------------------------------- -// -// class InputFile -- a scanline-based interface that can be used -// to read both scanline-based and tiled OpenEXR image files. -// -//----------------------------------------------------------------------------- - -#include "ImfHeader.h" -#include "ImfFrameBuffer.h" -#include "ImfTiledOutputFile.h" -#include "ImfThreading.h" -#include "ImfGenericInputFile.h" -#include "ImfNamespace.h" -#include "ImfForward.h" -#include "ImfExport.h" - -#include - - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER - - -class InputFile : public GenericInputFile -{ - public: - - //----------------------------------------------------------- - // A constructor that opens the file with the specified name. - // Destroying the InputFile object will close the file. - // - // numThreads determines the number of threads that will be - // used to read the file (see ImfThreading.h). - //----------------------------------------------------------- - - IMF_EXPORT - InputFile (const char fileName[], int numThreads = globalThreadCount()); - - - //------------------------------------------------------------- - // A constructor that attaches the new InputFile object to a - // file that has already been opened. Destroying the InputFile - // object will not close the file. - // - // numThreads determines the number of threads that will be - // used to read the file (see ImfThreading.h). - //------------------------------------------------------------- - - IMF_EXPORT - InputFile (OPENEXR_IMF_INTERNAL_NAMESPACE::IStream &is, int numThreads = globalThreadCount()); - - - //----------- - // Destructor - //----------- - - IMF_EXPORT - virtual ~InputFile (); - - - //------------------------ - // Access to the file name - //------------------------ - - IMF_EXPORT - const char * fileName () const; - - - //-------------------------- - // Access to the file header - //-------------------------- - - IMF_EXPORT - const Header & header () const; - - - //---------------------------------- - // Access to the file format version - //---------------------------------- - - IMF_EXPORT - int version () const; - - - //----------------------------------------------------------- - // Set the current frame buffer -- copies the FrameBuffer - // object into the InputFile object. - // - // The current frame buffer is the destination for the pixel - // data read from the file. The current frame buffer must be - // set at least once before readPixels() is called. - // The current frame buffer can be changed after each call - // to readPixels(). - //----------------------------------------------------------- - - IMF_EXPORT - void setFrameBuffer (const FrameBuffer &frameBuffer); - - - //----------------------------------- - // Access to the current frame buffer - //----------------------------------- - - IMF_EXPORT - const FrameBuffer & frameBuffer () const; - - - //--------------------------------------------------------------- - // Check if the file is complete: - // - // isComplete() returns true if all pixels in the data window are - // present in the input file, or false if any pixels are missing. - // (Another program may still be busy writing the file, or file - // writing may have been aborted prematurely.) - //--------------------------------------------------------------- - - IMF_EXPORT - bool isComplete () const; - - - //--------------------------------------------------------------- - // Check if SSE optimization is enabled - // - // Call after setFrameBuffer() to query whether optimized file decoding - // is available - decode times will be faster if returns true - // - // Optimization depends on: - // the file type (only scanline data is supported), - // the framebuffer channels (RGB/RGBA mono or stereo) - // the framebuffer channel types (all channels half-float format only) - // the file channels (RGB/RGBA mono or stereo) - // the file channel types (all channel half-float format only) - // whether SSE2 instruction support was detected at compile time - // - // Calling isOptimizationEnabled before setFrameBuffer will throw an exception - // - //--------------------------------------------------------------- - - IMF_EXPORT - bool isOptimizationEnabled () const; - - - - - //--------------------------------------------------------------- - // Read pixel data: - // - // readPixels(s1,s2) reads all scan lines with y coordinates - // in the interval [min (s1, s2), max (s1, s2)] from the file, - // and stores them in the current frame buffer. - // - // Both s1 and s2 must be within the interval - // [header().dataWindow().min.y, header().dataWindow().max.y] - // - // The scan lines can be read from the file in random order, and - // individual scan lines may be skipped or read multiple times. - // For maximum efficiency, the scan lines should be read in the - // order in which they were written to the file. - // - // readPixels(s) calls readPixels(s,s). - // - //--------------------------------------------------------------- - - IMF_EXPORT - void readPixels (int scanLine1, int scanLine2); - IMF_EXPORT - void readPixels (int scanLine); - - - //---------------------------------------------- - // Read a block of raw pixel data from the file, - // without uncompressing it (this function is - // used to implement OutputFile::copyPixels()). - //---------------------------------------------- - - IMF_EXPORT - void rawPixelData (int firstScanLine, - const char *&pixelData, - int &pixelDataSize); - - - //---------------------------------------------- - // Read a scanline's worth of raw pixel data - // from the file, without uncompressing it, and - // store in an external buffer, pixelData. - // pixelData should be pre-allocated with space - // for pixelDataSize chars. - // - // This function can be used to separate the - // reading of a raw scan line from the - // decompression of that scan line, for - // example to allow multiple scan lines to be - // decompressed in parallel by an application's - // own threads, where it is not convenient to - // use the threading within the library. - //---------------------------------------------- - - IMF_EXPORT - void rawPixelDataToBuffer (int scanLine, - char *pixelData, - int &pixelDataSize) const; - - - - //-------------------------------------------------- - // Read a tile of raw pixel data from the file, - // without uncompressing it (this function is - // used to implement TiledOutputFile::copyPixels()). - //-------------------------------------------------- - - IMF_EXPORT - void rawTileData (int &dx, int &dy, - int &lx, int &ly, - const char *&pixelData, - int &pixelDataSize); - - struct Data; - - private: - - InputFile (InputPartData* part); - InputFile (const InputFile &); // not implemented - InputFile & operator = (const InputFile &); // not implemented - - void initialize (); - void multiPartInitialize(InputPartData* part); - void compatibilityInitialize(OPENEXR_IMF_INTERNAL_NAMESPACE::IStream& is); - TiledInputFile * tFile (); - - friend void TiledOutputFile::copyPixels (InputFile &); - - Data * _data; - - - friend class MultiPartInputFile; -}; - - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT - -#endif diff --git a/3rdparty/openexr/IlmImf/ImfInputPart.cpp b/3rdparty/openexr/IlmImf/ImfInputPart.cpp deleted file mode 100644 index d548592d85..0000000000 --- a/3rdparty/openexr/IlmImf/ImfInputPart.cpp +++ /dev/null @@ -1,122 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2011, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - -#include "ImfInputPart.h" -#include "ImfNamespace.h" - -#include "ImfMultiPartInputFile.h" - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_ENTER - -InputPart::InputPart(MultiPartInputFile& multiPartFile, int partNumber) -{ - file = multiPartFile.getInputPart(partNumber); -} - -const char * -InputPart::fileName () const -{ - return file->fileName(); -} - -const Header & -InputPart::header () const -{ - return file->header(); -} - -int -InputPart::version () const -{ - return file->version(); -} - -void -InputPart::setFrameBuffer (const FrameBuffer &frameBuffer) -{ - file->setFrameBuffer(frameBuffer); -} - -const FrameBuffer & -InputPart::frameBuffer () const -{ - return file->frameBuffer(); -} - -bool -InputPart::isComplete () const -{ - return file->isComplete(); -} - -bool -InputPart::isOptimizationEnabled() const -{ - return file->isOptimizationEnabled(); -} - -void -InputPart::readPixels (int scanLine1, int scanLine2) -{ - file->readPixels(scanLine1, scanLine2); -} - -void -InputPart::readPixels (int scanLine) -{ - file->readPixels(scanLine); -} - -void -InputPart::rawPixelData (int firstScanLine, const char *&pixelData, int &pixelDataSize) -{ - file->rawPixelData(firstScanLine, pixelData, pixelDataSize); -} - - -void -InputPart::rawPixelDataToBuffer (int scanLine, char *pixelData, int &pixelDataSize) const -{ - file->rawPixelDataToBuffer(scanLine, pixelData, pixelDataSize); -} - - -void -InputPart::rawTileData (int &dx, int &dy, int &lx, int &ly, - const char *&pixelData, int &pixelDataSize) -{ - file->rawTileData(dx, dy, lx, ly, pixelData, pixelDataSize); -} - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_EXIT diff --git a/3rdparty/openexr/IlmImf/ImfInputPart.h b/3rdparty/openexr/IlmImf/ImfInputPart.h deleted file mode 100644 index 1afb86e07e..0000000000 --- a/3rdparty/openexr/IlmImf/ImfInputPart.h +++ /dev/null @@ -1,104 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2011, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - -#ifndef IMFINPUTPART_H_ -#define IMFINPUTPART_H_ - -#include "ImfInputFile.h" -#include "ImfOutputPart.h" -#include "ImfForward.h" -#include "ImfNamespace.h" -#include "ImfExport.h" - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER - -//------------------------------------------------------------------- -// class InputPart: -// -// Same interface as InputFile. Please refer to InputFile. -//------------------------------------------------------------------- - -class InputPart -{ - public: - IMF_EXPORT - InputPart(MultiPartInputFile& multiPartFile, int partNumber); - - IMF_EXPORT - const char * fileName () const; - IMF_EXPORT - const Header & header () const; - IMF_EXPORT - int version () const; - IMF_EXPORT - void setFrameBuffer (const FrameBuffer &frameBuffer); - IMF_EXPORT - const FrameBuffer & frameBuffer () const; - IMF_EXPORT - bool isComplete () const; - IMF_EXPORT - bool isOptimizationEnabled () const; - IMF_EXPORT - void readPixels (int scanLine1, int scanLine2); - IMF_EXPORT - void readPixels (int scanLine); - IMF_EXPORT - void rawPixelData (int firstScanLine, - const char *&pixelData, - int &pixelDataSize); - - - IMF_EXPORT - void rawPixelDataToBuffer (int scanLine, - char *pixelData, - int &pixelDataSize) const; - - - IMF_EXPORT - void rawTileData (int &dx, int &dy, - int &lx, int &ly, - const char *&pixelData, - int &pixelDataSize); - - private: - InputFile* file; - // for internal use - give OutputFile and TiledOutputFile access to file for copyPixels - friend void OutputFile::copyPixels(InputPart&); - friend void TiledOutputFile::copyPixels(InputPart&); - -}; - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT - -#endif /* IMFINPUTPART_H_ */ diff --git a/3rdparty/openexr/IlmImf/ImfInputPartData.cpp b/3rdparty/openexr/IlmImf/ImfInputPartData.cpp deleted file mode 100644 index d241aed9cc..0000000000 --- a/3rdparty/openexr/IlmImf/ImfInputPartData.cpp +++ /dev/null @@ -1,51 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2011, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - -#include "ImfInputPartData.h" -#include "ImfNamespace.h" - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_ENTER - -InputPartData::InputPartData(InputStreamMutex* mutex, const Header &header, - int partNumber, int numThreads, int version): - header(header), - numThreads(numThreads), - partNumber(partNumber), - version(version), - mutex(mutex), - completed(false) -{ -} - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_EXIT diff --git a/3rdparty/openexr/IlmImf/ImfInputPartData.h b/3rdparty/openexr/IlmImf/ImfInputPartData.h deleted file mode 100644 index fb9f86ec29..0000000000 --- a/3rdparty/openexr/IlmImf/ImfInputPartData.h +++ /dev/null @@ -1,70 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2011, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - -#ifndef IMFINPUTPARTDATA_H_ -#define IMFINPUTPARTDATA_H_ - -#include - -#include "ImfInputStreamMutex.h" -#include "ImfHeader.h" -#include "ImfNamespace.h" - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER - - -struct InputPartData -{ - Header header; - int numThreads; - int partNumber; - int version; - InputStreamMutex* mutex; - std::vector chunkOffsets; - bool completed; - - IMF_EXPORT - InputPartData(InputStreamMutex* mutex, const Header &header, - int partNumber, int numThreads, int version); - -}; - - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT - - - - - -#endif /* IMFINPUTPARTDATA_H_ */ diff --git a/3rdparty/openexr/IlmImf/ImfInputStreamMutex.h b/3rdparty/openexr/IlmImf/ImfInputStreamMutex.h deleted file mode 100644 index c491dbee1e..0000000000 --- a/3rdparty/openexr/IlmImf/ImfInputStreamMutex.h +++ /dev/null @@ -1,68 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2011, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - -#ifndef IMFINPUTSTREAMMUTEX_H_ -#define IMFINPUTSTREAMMUTEX_H_ - -#include "ImfIO.h" -#include "IlmThreadMutex.h" -#include "ImfNamespace.h" - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER - -using ILMTHREAD_NAMESPACE::Mutex; - -// -// Used to wrap OPENEXR_IMF_INTERNAL_NAMESPACE::IStream as a Mutex. -// -struct InputStreamMutex : public Mutex -{ - OPENEXR_IMF_INTERNAL_NAMESPACE::IStream* is; - Int64 currentPosition; - - InputStreamMutex() - { - is = 0; - currentPosition = 0; - } -}; - - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT - - - - - -#endif /* IMFINPUTSTREAMMUTEX_H_ */ diff --git a/3rdparty/openexr/IlmImf/ImfInt64.h b/3rdparty/openexr/IlmImf/ImfInt64.h deleted file mode 100644 index eca020c055..0000000000 --- a/3rdparty/openexr/IlmImf/ImfInt64.h +++ /dev/null @@ -1,57 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2006, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - -#ifndef INCLUDED_IMF_INT64_H -#define INCLUDED_IMF_INT64_H - -//---------------------------------------------------------------------------- -// -// Int64 -- unsigned 64-bit integers, imported from namespace Imath -// -//---------------------------------------------------------------------------- - -#include "ImathInt64.h" -#include "ImfNamespace.h" - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER - -using IMATH_NAMESPACE::Int64; -using IMATH_NAMESPACE::SInt64; - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT - - - - -#endif // INCLUDED_IMF_INT64_H diff --git a/3rdparty/openexr/IlmImf/ImfIntAttribute.cpp b/3rdparty/openexr/IlmImf/ImfIntAttribute.cpp deleted file mode 100644 index 7486a2ed83..0000000000 --- a/3rdparty/openexr/IlmImf/ImfIntAttribute.cpp +++ /dev/null @@ -1,57 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - - -//----------------------------------------------------------------------------- -// -// class IntAttribute -// -//----------------------------------------------------------------------------- - -#include - - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_ENTER - - -template <> -const char * -IntAttribute::staticTypeName () -{ - return "int"; -} - - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_EXIT diff --git a/3rdparty/openexr/IlmImf/ImfIntAttribute.h b/3rdparty/openexr/IlmImf/ImfIntAttribute.h deleted file mode 100644 index 3d271cabe4..0000000000 --- a/3rdparty/openexr/IlmImf/ImfIntAttribute.h +++ /dev/null @@ -1,58 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - - -#ifndef INCLUDED_IMF_INT_ATTRIBUTE_H -#define INCLUDED_IMF_INT_ATTRIBUTE_H - -//----------------------------------------------------------------------------- -// -// class IntAttribute -// -//----------------------------------------------------------------------------- - -#include "ImfAttribute.h" -#include "ImfNamespace.h" - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER - - -typedef TypedAttribute IntAttribute; -template <> IMF_EXPORT const char *IntAttribute::staticTypeName (); - - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT - -#endif diff --git a/3rdparty/openexr/IlmImf/ImfKeyCode.cpp b/3rdparty/openexr/IlmImf/ImfKeyCode.cpp deleted file mode 100644 index f90e4334e6..0000000000 --- a/3rdparty/openexr/IlmImf/ImfKeyCode.cpp +++ /dev/null @@ -1,217 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - -//----------------------------------------------------------------------------- -// -// class KeyCode -// -//----------------------------------------------------------------------------- - -#include -#include "Iex.h" -#include "ImfNamespace.h" - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_ENTER - - -KeyCode::KeyCode (int filmMfcCode, - int filmType, - int prefix, - int count, - int perfOffset, - int perfsPerFrame, - int perfsPerCount) -{ - setFilmMfcCode (filmMfcCode); - setFilmType (filmType); - setPrefix (prefix); - setCount (count); - setPerfOffset (perfOffset); - setPerfsPerFrame (perfsPerFrame); - setPerfsPerCount (perfsPerCount); -} - - -KeyCode::KeyCode (const KeyCode &other) -{ - _filmMfcCode = other._filmMfcCode; - _filmType = other._filmType; - _prefix = other._prefix; - _count = other._count; - _perfOffset = other._perfOffset; - _perfsPerFrame = other._perfsPerFrame; - _perfsPerCount = other._perfsPerCount; -} - - -KeyCode & -KeyCode::operator = (const KeyCode &other) -{ - _filmMfcCode = other._filmMfcCode; - _filmType = other._filmType; - _prefix = other._prefix; - _count = other._count; - _perfOffset = other._perfOffset; - _perfsPerFrame = other._perfsPerFrame; - _perfsPerCount = other._perfsPerCount; - - return *this; -} - - -int -KeyCode::filmMfcCode () const -{ - return _filmMfcCode; -} - - -void -KeyCode::setFilmMfcCode (int filmMfcCode) -{ - if (filmMfcCode < 0 || filmMfcCode > 99) - throw IEX_NAMESPACE::ArgExc ("Invalid key code film manufacturer code " - "(must be between 0 and 99)."); - - _filmMfcCode = filmMfcCode; -} - -int -KeyCode::filmType () const -{ - return _filmType; -} - - -void -KeyCode::setFilmType (int filmType) -{ - if (filmType < 0 || filmType > 99) - throw IEX_NAMESPACE::ArgExc ("Invalid key code film type " - "(must be between 0 and 99)."); - - _filmType = filmType; -} - -int -KeyCode::prefix () const -{ - return _prefix; -} - - -void -KeyCode::setPrefix (int prefix) -{ - if (prefix < 0 || prefix > 999999) - throw IEX_NAMESPACE::ArgExc ("Invalid key code prefix " - "(must be between 0 and 999999)."); - - _prefix = prefix; -} - - -int -KeyCode::count () const -{ - return _count; -} - - -void -KeyCode::setCount (int count) -{ - if (count < 0 || count > 9999) - throw IEX_NAMESPACE::ArgExc ("Invalid key code count " - "(must be between 0 and 9999)."); - - _count = count; -} - - -int -KeyCode::perfOffset () const -{ - return _perfOffset; -} - - -void -KeyCode::setPerfOffset (int perfOffset) -{ - if (perfOffset < 0 || perfOffset > 119) - throw IEX_NAMESPACE::ArgExc ("Invalid key code perforation offset " - "(must be between 0 and 119)."); - - _perfOffset = perfOffset; -} - - -int -KeyCode::perfsPerFrame () const -{ - return _perfsPerFrame; -} - - -void -KeyCode::setPerfsPerFrame (int perfsPerFrame) -{ - if (perfsPerFrame < 1 || perfsPerFrame > 15) - throw IEX_NAMESPACE::ArgExc ("Invalid key code number of perforations per frame " - "(must be between 1 and 15)."); - - _perfsPerFrame = perfsPerFrame; -} - - -int -KeyCode::perfsPerCount () const -{ - return _perfsPerCount; -} - - -void -KeyCode::setPerfsPerCount (int perfsPerCount) -{ - if (perfsPerCount < 20 || perfsPerCount > 120) - throw IEX_NAMESPACE::ArgExc ("Invalid key code number of perforations per count " - "(must be between 20 and 120)."); - - _perfsPerCount = perfsPerCount; -} - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_EXIT diff --git a/3rdparty/openexr/IlmImf/ImfKeyCode.h b/3rdparty/openexr/IlmImf/ImfKeyCode.h deleted file mode 100644 index 37f0ddd0d4..0000000000 --- a/3rdparty/openexr/IlmImf/ImfKeyCode.h +++ /dev/null @@ -1,184 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - -#ifndef INCLUDED_IMF_KEY_CODE_H -#define INCLUDED_IMF_KEY_CODE_H - -//----------------------------------------------------------------------------- -// -// class KeyCode -// -// A KeyCode object uniquely identifies a motion picture film frame. -// The following fields specifiy film manufacturer, film type, film -// roll and the frame's position within the roll: -// -// filmMfcCode film manufacturer code -// range: 0 - 99 -// -// filmType film type code -// range: 0 - 99 -// -// prefix prefix to identify film roll -// range: 0 - 999999 -// -// count count, increments once every perfsPerCount -// perforations (see below) -// range: 0 - 9999 -// -// perfOffset offset of frame, in perforations from -// zero-frame reference mark -// range: 0 - 119 -// -// perfsPerFrame number of perforations per frame -// range: 1 - 15 -// -// typical values: -// -// 1 for 16mm film -// 3, 4, or 8 for 35mm film -// 5, 8 or 15 for 65mm film -// -// perfsPerCount number of perforations per count -// range: 20 - 120 -// -// typical values: -// -// 20 for 16mm film -// 64 for 35mm film -// 80 or 120 for 65mm film -// -// For more information about the interpretation of those fields see -// the following standards and recommended practice publications: -// -// SMPTE 254 Motion-Picture Film (35-mm) - Manufacturer-Printed -// Latent Image Identification Information -// -// SMPTE 268M File Format for Digital Moving-Picture Exchange (DPX) -// (section 6.1) -// -// SMPTE 270 Motion-Picture Film (65-mm) - Manufacturer- Printed -// Latent Image Identification Information -// -// SMPTE 271 Motion-Picture Film (16-mm) - Manufacturer- Printed -// Latent Image Identification Information -// -//----------------------------------------------------------------------------- -#include "ImfNamespace.h" -#include "ImfExport.h" - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER - - -class KeyCode -{ - public: - - //------------------------------------- - // Constructors and assignment operator - //------------------------------------- - - IMF_EXPORT - KeyCode (int filmMfcCode = 0, - int filmType = 0, - int prefix = 0, - int count = 0, - int perfOffset = 0, - int perfsPerFrame = 4, - int perfsPerCount = 64); - - IMF_EXPORT - KeyCode (const KeyCode &other); - IMF_EXPORT - KeyCode & operator = (const KeyCode &other); - - - //---------------------------- - // Access to individual fields - //---------------------------- - - IMF_EXPORT - int filmMfcCode () const; - IMF_EXPORT - void setFilmMfcCode (int filmMfcCode); - - IMF_EXPORT - int filmType () const; - IMF_EXPORT - void setFilmType (int filmType); - - IMF_EXPORT - int prefix () const; - IMF_EXPORT - void setPrefix (int prefix); - - IMF_EXPORT - int count () const; - IMF_EXPORT - void setCount (int count); - - IMF_EXPORT - int perfOffset () const; - IMF_EXPORT - void setPerfOffset (int perfOffset); - - IMF_EXPORT - int perfsPerFrame () const; - IMF_EXPORT - void setPerfsPerFrame (int perfsPerFrame); - - IMF_EXPORT - int perfsPerCount () const; - IMF_EXPORT - void setPerfsPerCount (int perfsPerCount); - - private: - - int _filmMfcCode; - int _filmType; - int _prefix; - int _count; - int _perfOffset; - int _perfsPerFrame; - int _perfsPerCount; -}; - - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT - - - - - -#endif diff --git a/3rdparty/openexr/IlmImf/ImfKeyCodeAttribute.cpp b/3rdparty/openexr/IlmImf/ImfKeyCodeAttribute.cpp deleted file mode 100644 index 06c666bb37..0000000000 --- a/3rdparty/openexr/IlmImf/ImfKeyCodeAttribute.cpp +++ /dev/null @@ -1,99 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - -//----------------------------------------------------------------------------- -// -// class KeyCodeAttribute -// -//----------------------------------------------------------------------------- - -#include - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_ENTER - -using namespace OPENEXR_IMF_INTERNAL_NAMESPACE; - -template <> -const char * -KeyCodeAttribute::staticTypeName () -{ - return "keycode"; -} - - -template <> -void -KeyCodeAttribute::writeValueTo (OPENEXR_IMF_INTERNAL_NAMESPACE::OStream &os, int version) const -{ - Xdr::write (os, _value.filmMfcCode()); - Xdr::write (os, _value.filmType()); - Xdr::write (os, _value.prefix()); - Xdr::write (os, _value.count()); - Xdr::write (os, _value.perfOffset()); - Xdr::write (os, _value.perfsPerFrame()); - Xdr::write (os, _value.perfsPerCount()); -} - - -template <> -void -KeyCodeAttribute::readValueFrom (OPENEXR_IMF_INTERNAL_NAMESPACE::IStream &is, int size, int version) -{ - int tmp; - - Xdr::read (is, tmp); - _value.setFilmMfcCode (tmp); - - Xdr::read (is, tmp); - _value.setFilmType (tmp); - - Xdr::read (is, tmp); - _value.setPrefix (tmp); - - Xdr::read (is, tmp); - _value.setCount (tmp); - - Xdr::read (is, tmp); - _value.setPerfOffset (tmp); - - Xdr::read (is, tmp); - _value.setPerfsPerFrame (tmp); - - Xdr::read (is, tmp); - _value.setPerfsPerCount (tmp); -} - - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_EXIT diff --git a/3rdparty/openexr/IlmImf/ImfKeyCodeAttribute.h b/3rdparty/openexr/IlmImf/ImfKeyCodeAttribute.h deleted file mode 100644 index 00d4ece9f5..0000000000 --- a/3rdparty/openexr/IlmImf/ImfKeyCodeAttribute.h +++ /dev/null @@ -1,73 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - -#ifndef INCLUDED_IMF_KEY_CODE_ATTRIBUTE_H -#define INCLUDED_IMF_KEY_CODE_ATTRIBUTE_H - - -//----------------------------------------------------------------------------- -// -// class KeyCodeAttribute -// -//----------------------------------------------------------------------------- - -#include "ImfAttribute.h" -#include "ImfKeyCode.h" -#include "ImfExport.h" - - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER - - -typedef TypedAttribute KeyCodeAttribute; - -template <> -IMF_EXPORT -const char *KeyCodeAttribute::staticTypeName (); - -template <> -IMF_EXPORT -void KeyCodeAttribute::writeValueTo (OPENEXR_IMF_INTERNAL_NAMESPACE::OStream &, - int) const; - -template <> -IMF_EXPORT -void KeyCodeAttribute::readValueFrom (OPENEXR_IMF_INTERNAL_NAMESPACE::IStream &, - int, int); - - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT - -#endif diff --git a/3rdparty/openexr/IlmImf/ImfLineOrder.h b/3rdparty/openexr/IlmImf/ImfLineOrder.h deleted file mode 100644 index 8f30bed1fc..0000000000 --- a/3rdparty/openexr/IlmImf/ImfLineOrder.h +++ /dev/null @@ -1,69 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - - -#ifndef INCLUDED_IMF_LINE_ORDER_H -#define INCLUDED_IMF_LINE_ORDER_H - -//----------------------------------------------------------------------------- -// -// enum LineOrder -// -//----------------------------------------------------------------------------- -#include "ImfNamespace.h" - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER - - -enum LineOrder -{ - INCREASING_Y = 0, // first scan line has lowest y coordinate - - DECREASING_Y = 1, // first scan line has highest y coordinate - - RANDOM_Y = 2, // only for tiled files; tiles are written - // in random order - - NUM_LINEORDERS // number of different line orders -}; - - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT - - - - - -#endif diff --git a/3rdparty/openexr/IlmImf/ImfLineOrderAttribute.cpp b/3rdparty/openexr/IlmImf/ImfLineOrderAttribute.cpp deleted file mode 100644 index aebbac7e77..0000000000 --- a/3rdparty/openexr/IlmImf/ImfLineOrderAttribute.cpp +++ /dev/null @@ -1,78 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - - - -//----------------------------------------------------------------------------- -// -// class LineOrderAttribute -// -//----------------------------------------------------------------------------- - -#include "ImfLineOrderAttribute.h" - - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_ENTER - -using namespace OPENEXR_IMF_INTERNAL_NAMESPACE; - -template <> -const char * -LineOrderAttribute::staticTypeName () -{ - return "lineOrder"; -} - - -template <> -void -LineOrderAttribute::writeValueTo (OPENEXR_IMF_INTERNAL_NAMESPACE::OStream &os, int version) const -{ - unsigned char tmp = _value; - Xdr::write (os, tmp); -} - - -template <> -void -LineOrderAttribute::readValueFrom (OPENEXR_IMF_INTERNAL_NAMESPACE::IStream &is, int size, int version) -{ - unsigned char tmp; - Xdr::read (is, tmp); - _value = LineOrder (tmp); -} - - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_EXIT diff --git a/3rdparty/openexr/IlmImf/ImfLineOrderAttribute.h b/3rdparty/openexr/IlmImf/ImfLineOrderAttribute.h deleted file mode 100644 index 342c3d0563..0000000000 --- a/3rdparty/openexr/IlmImf/ImfLineOrderAttribute.h +++ /dev/null @@ -1,72 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - - -#ifndef INCLUDED_IMF_LINE_ORDER_ATTRIBUTE_H -#define INCLUDED_IMF_LINE_ORDER_ATTRIBUTE_H - -//----------------------------------------------------------------------------- -// -// class LineOrderAttribute -// -//----------------------------------------------------------------------------- - -#include "ImfAttribute.h" -#include "ImfLineOrder.h" -#include "ImfExport.h" - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER - - -typedef TypedAttribute LineOrderAttribute; - -template <> -IMF_EXPORT -const char *LineOrderAttribute::staticTypeName (); - -template <> -IMF_EXPORT -void LineOrderAttribute::writeValueTo (OPENEXR_IMF_INTERNAL_NAMESPACE::OStream &, - int) const; - -template <> -IMF_EXPORT -void LineOrderAttribute::readValueFrom (OPENEXR_IMF_INTERNAL_NAMESPACE::IStream &, - int, int); - - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT - -#endif diff --git a/3rdparty/openexr/IlmImf/ImfLut.cpp b/3rdparty/openexr/IlmImf/ImfLut.cpp deleted file mode 100644 index 3209abc40f..0000000000 --- a/3rdparty/openexr/IlmImf/ImfLut.cpp +++ /dev/null @@ -1,178 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - - -//----------------------------------------------------------------------------- -// -// Lookup tables for efficient application -// of half --> half functions to pixel data, -// and some commonly applied functions. -// -//----------------------------------------------------------------------------- - -#include -#include -#include -#include "ImfNamespace.h" - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_ENTER - - -void -HalfLut::apply (half *data, int nData, int stride) const -{ - while (nData) - { - *data = _lut (*data); - data += stride; - nData -= 1; - } -} - - -void -HalfLut::apply (const Slice &data, const IMATH_NAMESPACE::Box2i &dataWindow) const -{ - assert (data.type == HALF); - assert (dataWindow.min.x % data.xSampling == 0); - assert (dataWindow.min.y % data.ySampling == 0); - assert ((dataWindow.max.x - dataWindow.min.x + 1) % data.xSampling == 0); - assert ((dataWindow.max.y - dataWindow.min.y + 1) % data.ySampling == 0); - - char *base = data.base + data.yStride * - (dataWindow.min.y / data.ySampling); - - for (int y = dataWindow.min.y; - y <= dataWindow.max.y; - y += data.ySampling) - { - char *pixel = base + data.xStride * - (dataWindow.min.x / data.xSampling); - - for (int x = dataWindow.min.x; - x <= dataWindow.max.x; - x += data.xSampling) - { - *(half *)pixel = _lut (*(half *)pixel); - pixel += data.xStride; - } - - base += data.yStride; - } -} - - -void -RgbaLut::apply (Rgba *data, int nData, int stride) const -{ - while (nData) - { - if (_chn & WRITE_R) - data->r = _lut (data->r); - - if (_chn & WRITE_G) - data->g = _lut (data->g); - - if (_chn & WRITE_B) - data->b = _lut (data->b); - - if (_chn & WRITE_A) - data->a = _lut (data->a); - - data += stride; - nData -= 1; - } -} - - -void -RgbaLut::apply (Rgba *base, - int xStride, int yStride, - const IMATH_NAMESPACE::Box2i &dataWindow) const -{ - base += dataWindow.min.y * yStride; - - for (int y = dataWindow.min.y; y <= dataWindow.max.y; ++y) - { - Rgba *pixel = base + dataWindow.min.x * xStride; - - for (int x = dataWindow.min.x; x <= dataWindow.max.x; ++x) - { - if (_chn & WRITE_R) - pixel->r = _lut (pixel->r); - - if (_chn & WRITE_G) - pixel->g = _lut (pixel->g); - - if (_chn & WRITE_B) - pixel->b = _lut (pixel->b); - - if (_chn & WRITE_A) - pixel->a = _lut (pixel->a); - - pixel += xStride; - } - - base += yStride; - } -} - - -half -round12log (half x) -{ - const float middleval = pow (2.0, -2.5); - int int12log; - - if (x <= 0) - { - return 0; - } - else - { - int12log = int (2000.5 + 200.0 * log (x / middleval) / log (2.0)); - - if (int12log > 4095) - int12log = 4095; - - if (int12log < 1) - int12log = 1; - } - - return middleval * pow (2.0, (int12log - 2000.0) / 200.0); -} - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_EXIT - diff --git a/3rdparty/openexr/IlmImf/ImfLut.h b/3rdparty/openexr/IlmImf/ImfLut.h deleted file mode 100644 index c59beabfa3..0000000000 --- a/3rdparty/openexr/IlmImf/ImfLut.h +++ /dev/null @@ -1,192 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - - -#ifndef INCLUDED_IMF_LUT_H -#define INCLUDED_IMF_LUT_H - -//----------------------------------------------------------------------------- -// -// Lookup tables for efficient application -// of half --> half functions to pixel data, -// and some commonly applied functions. -// -//----------------------------------------------------------------------------- - -#include "ImfRgbaFile.h" -#include "ImfFrameBuffer.h" -#include "ImathBox.h" -#include "halfFunction.h" -#include "ImfNamespace.h" -#include "ImfExport.h" - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER - -// -// Lookup table for individual half channels. -// - -class HalfLut -{ - public: - - //------------ - // Constructor - //------------ - - template - HalfLut (Function f); - - - //---------------------------------------------------------------------- - // Apply the table to data[0], data[stride] ... data[(nData-1) * stride] - //---------------------------------------------------------------------- - - IMF_EXPORT - void apply (half *data, - int nData, - int stride = 1) const; - - - //--------------------------------------------------------------- - // Apply the table to a frame buffer slice (see ImfFrameBuffer.h) - //--------------------------------------------------------------- - - IMF_EXPORT - void apply (const Slice &data, - const IMATH_NAMESPACE::Box2i &dataWindow) const; - - private: - - halfFunction _lut; -}; - - -// -// Lookup table for combined RGBA data. -// - -class RgbaLut -{ - public: - - //------------ - // Constructor - //------------ - - template - RgbaLut (Function f, RgbaChannels chn = WRITE_RGB); - - - //---------------------------------------------------------------------- - // Apply the table to data[0], data[stride] ... data[(nData-1) * stride] - //---------------------------------------------------------------------- - - IMF_EXPORT - void apply (Rgba *data, - int nData, - int stride = 1) const; - - - //----------------------------------------------------------------------- - // Apply the table to a frame buffer (see RgbaOutpuFile.setFrameBuffer()) - //----------------------------------------------------------------------- - - IMF_EXPORT - void apply (Rgba *base, - int xStride, - int yStride, - const IMATH_NAMESPACE::Box2i &dataWindow) const; - - private: - - halfFunction _lut; - RgbaChannels _chn; -}; - - -// -// 12bit log rounding reduces data to 20 stops with 200 steps per stop. -// That makes 4000 numbers. An extra 96 just come along for the ride. -// Zero explicitly remains zero. The first non-zero half will map to 1 -// in the 0-4095 12log space. A nice power of two number is placed at -// the center [2000] and that number is near 0.18. -// - -IMF_EXPORT -half round12log (half x); - - -// -// Round to n-bit precision (n should be between 0 and 10). -// After rounding, the significand's 10-n least significant -// bits will be zero. -// - -struct roundNBit -{ - roundNBit (int n): n(n) {} - half operator () (half x) {return x.round(n);} - int n; -}; - - -// -// Template definitions -// - - -template -HalfLut::HalfLut (Function f): - _lut(f, -HALF_MAX, HALF_MAX, half (0), - half::posInf(), half::negInf(), half::qNan()) -{ - // empty -} - - -template -RgbaLut::RgbaLut (Function f, RgbaChannels chn): - _lut(f, -HALF_MAX, HALF_MAX, half (0), - half::posInf(), half::negInf(), half::qNan()), - _chn(chn) -{ - // empty -} - - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT - -#endif diff --git a/3rdparty/openexr/IlmImf/ImfMatrixAttribute.cpp b/3rdparty/openexr/IlmImf/ImfMatrixAttribute.cpp deleted file mode 100644 index 84efe7e239..0000000000 --- a/3rdparty/openexr/IlmImf/ImfMatrixAttribute.cpp +++ /dev/null @@ -1,263 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - - -//----------------------------------------------------------------------------- -// -// class M33fAttribute -// class M33dAttribute -// class M44fAttribute -// class M44dAttribute -// -//----------------------------------------------------------------------------- - -#include - - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_ENTER - - -using namespace OPENEXR_IMF_INTERNAL_NAMESPACE; - - -template <> -const char * -M33fAttribute::staticTypeName () -{ - return "m33f"; -} - - -template <> -void -M33fAttribute::writeValueTo (OPENEXR_IMF_INTERNAL_NAMESPACE::OStream &os, int version) const -{ - Xdr::write (os, _value[0][0]); - Xdr::write (os, _value[0][1]); - Xdr::write (os, _value[0][2]); - - Xdr::write (os, _value[1][0]); - Xdr::write (os, _value[1][1]); - Xdr::write (os, _value[1][2]); - - Xdr::write (os, _value[2][0]); - Xdr::write (os, _value[2][1]); - Xdr::write (os, _value[2][2]); -} - - -template <> -void -M33fAttribute::readValueFrom (OPENEXR_IMF_INTERNAL_NAMESPACE::IStream &is, int size, int version) -{ - Xdr::read (is, _value[0][0]); - Xdr::read (is, _value[0][1]); - Xdr::read (is, _value[0][2]); - - Xdr::read (is, _value[1][0]); - Xdr::read (is, _value[1][1]); - Xdr::read (is, _value[1][2]); - - Xdr::read (is, _value[2][0]); - Xdr::read (is, _value[2][1]); - Xdr::read (is, _value[2][2]); -} - - -template <> -const char * -M33dAttribute::staticTypeName () -{ - return "m33d"; -} - - -template <> -void -M33dAttribute::writeValueTo (OPENEXR_IMF_INTERNAL_NAMESPACE::OStream &os, int version) const -{ - Xdr::write (os, _value[0][0]); - Xdr::write (os, _value[0][1]); - Xdr::write (os, _value[0][2]); - - Xdr::write (os, _value[1][0]); - Xdr::write (os, _value[1][1]); - Xdr::write (os, _value[1][2]); - - Xdr::write (os, _value[2][0]); - Xdr::write (os, _value[2][1]); - Xdr::write (os, _value[2][2]); -} - - -template <> -void -M33dAttribute::readValueFrom (OPENEXR_IMF_INTERNAL_NAMESPACE::IStream &is, int size, int version) -{ - Xdr::read (is, _value[0][0]); - Xdr::read (is, _value[0][1]); - Xdr::read (is, _value[0][2]); - - Xdr::read (is, _value[1][0]); - Xdr::read (is, _value[1][1]); - Xdr::read (is, _value[1][2]); - - Xdr::read (is, _value[2][0]); - Xdr::read (is, _value[2][1]); - Xdr::read (is, _value[2][2]); -} - - -template <> -const char * -M44fAttribute::staticTypeName () -{ - return "m44f"; -} - - -template <> -void -M44fAttribute::writeValueTo (OPENEXR_IMF_INTERNAL_NAMESPACE::OStream &os, int version) const -{ - Xdr::write (os, _value[0][0]); - Xdr::write (os, _value[0][1]); - Xdr::write (os, _value[0][2]); - Xdr::write (os, _value[0][3]); - - Xdr::write (os, _value[1][0]); - Xdr::write (os, _value[1][1]); - Xdr::write (os, _value[1][2]); - Xdr::write (os, _value[1][3]); - - Xdr::write (os, _value[2][0]); - Xdr::write (os, _value[2][1]); - Xdr::write (os, _value[2][2]); - Xdr::write (os, _value[2][3]); - - Xdr::write (os, _value[3][0]); - Xdr::write (os, _value[3][1]); - Xdr::write (os, _value[3][2]); - Xdr::write (os, _value[3][3]); -} - - -template <> -void -M44fAttribute::readValueFrom (OPENEXR_IMF_INTERNAL_NAMESPACE::IStream &is, int size, int version) -{ - Xdr::read (is, _value[0][0]); - Xdr::read (is, _value[0][1]); - Xdr::read (is, _value[0][2]); - Xdr::read (is, _value[0][3]); - - Xdr::read (is, _value[1][0]); - Xdr::read (is, _value[1][1]); - Xdr::read (is, _value[1][2]); - Xdr::read (is, _value[1][3]); - - Xdr::read (is, _value[2][0]); - Xdr::read (is, _value[2][1]); - Xdr::read (is, _value[2][2]); - Xdr::read (is, _value[2][3]); - - Xdr::read (is, _value[3][0]); - Xdr::read (is, _value[3][1]); - Xdr::read (is, _value[3][2]); - Xdr::read (is, _value[3][3]); -} - - -template <> -const char * -M44dAttribute::staticTypeName () -{ - return "m44d"; -} - - -template <> -void -M44dAttribute::writeValueTo (OPENEXR_IMF_INTERNAL_NAMESPACE::OStream &os, int version) const -{ - Xdr::write (os, _value[0][0]); - Xdr::write (os, _value[0][1]); - Xdr::write (os, _value[0][2]); - Xdr::write (os, _value[0][3]); - - Xdr::write (os, _value[1][0]); - Xdr::write (os, _value[1][1]); - Xdr::write (os, _value[1][2]); - Xdr::write (os, _value[1][3]); - - Xdr::write (os, _value[2][0]); - Xdr::write (os, _value[2][1]); - Xdr::write (os, _value[2][2]); - Xdr::write (os, _value[2][3]); - - Xdr::write (os, _value[3][0]); - Xdr::write (os, _value[3][1]); - Xdr::write (os, _value[3][2]); - Xdr::write (os, _value[3][3]); -} - - -template <> -void -M44dAttribute::readValueFrom (OPENEXR_IMF_INTERNAL_NAMESPACE::IStream &is, int size, int version) -{ - Xdr::read (is, _value[0][0]); - Xdr::read (is, _value[0][1]); - Xdr::read (is, _value[0][2]); - Xdr::read (is, _value[0][3]); - - Xdr::read (is, _value[1][0]); - Xdr::read (is, _value[1][1]); - Xdr::read (is, _value[1][2]); - Xdr::read (is, _value[1][3]); - - Xdr::read (is, _value[2][0]); - Xdr::read (is, _value[2][1]); - Xdr::read (is, _value[2][2]); - Xdr::read (is, _value[2][3]); - - Xdr::read (is, _value[3][0]); - Xdr::read (is, _value[3][1]); - Xdr::read (is, _value[3][2]); - Xdr::read (is, _value[3][3]); -} - - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_EXIT diff --git a/3rdparty/openexr/IlmImf/ImfMatrixAttribute.h b/3rdparty/openexr/IlmImf/ImfMatrixAttribute.h deleted file mode 100644 index 31f14668db..0000000000 --- a/3rdparty/openexr/IlmImf/ImfMatrixAttribute.h +++ /dev/null @@ -1,83 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - - -#ifndef INCLUDED_IMF_MATRIX_ATTRIBUTE_H -#define INCLUDED_IMF_MATRIX_ATTRIBUTE_H - -//----------------------------------------------------------------------------- -// -// class M33fAttribute -// class M33dAttribute -// class M44fAttribute -// class M44dAttribute -// -//----------------------------------------------------------------------------- - -#include "ImfAttribute.h" -#include "ImathMatrix.h" -#include "ImfExport.h" - - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER - - -typedef TypedAttribute M33fAttribute; -template <> IMF_EXPORT const char *M33fAttribute::staticTypeName (); -template <> IMF_EXPORT void M33fAttribute::writeValueTo (OPENEXR_IMF_INTERNAL_NAMESPACE::OStream &, int) const; -template <> IMF_EXPORT void M33fAttribute::readValueFrom (OPENEXR_IMF_INTERNAL_NAMESPACE::IStream &, int, int); - - -typedef TypedAttribute M33dAttribute; -template <> IMF_EXPORT const char *M33dAttribute::staticTypeName (); -template <> IMF_EXPORT void M33dAttribute::writeValueTo (OPENEXR_IMF_INTERNAL_NAMESPACE::OStream &, int) const; -template <> IMF_EXPORT void M33dAttribute::readValueFrom (OPENEXR_IMF_INTERNAL_NAMESPACE::IStream &, int, int); - - -typedef TypedAttribute M44fAttribute; -template <> IMF_EXPORT const char *M44fAttribute::staticTypeName (); -template <> IMF_EXPORT void M44fAttribute::writeValueTo (OPENEXR_IMF_INTERNAL_NAMESPACE::OStream &, int) const; -template <> IMF_EXPORT void M44fAttribute::readValueFrom (OPENEXR_IMF_INTERNAL_NAMESPACE::IStream &, int, int); - - -typedef TypedAttribute M44dAttribute; -template <> IMF_EXPORT const char *M44dAttribute::staticTypeName (); -template <> IMF_EXPORT void M44dAttribute::writeValueTo (OPENEXR_IMF_INTERNAL_NAMESPACE::OStream &, int) const; -template <> IMF_EXPORT void M44dAttribute::readValueFrom (OPENEXR_IMF_INTERNAL_NAMESPACE::IStream &, int, int); - - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT - -#endif diff --git a/3rdparty/openexr/IlmImf/ImfMisc.cpp b/3rdparty/openexr/IlmImf/ImfMisc.cpp deleted file mode 100644 index 4622c41707..0000000000 --- a/3rdparty/openexr/IlmImf/ImfMisc.cpp +++ /dev/null @@ -1,1879 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - - -//----------------------------------------------------------------------------- -// -// Miscellaneous helper functions for OpenEXR image file I/O -// -//----------------------------------------------------------------------------- - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "ImfNamespace.h" - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_ENTER - -using IMATH_NAMESPACE::Box2i; -using IMATH_NAMESPACE::divp; -using IMATH_NAMESPACE::modp; -using std::vector; - -int -pixelTypeSize (PixelType type) -{ - int size; - - switch (type) - { - case OPENEXR_IMF_INTERNAL_NAMESPACE::UINT: - - size = Xdr::size (); - break; - - case OPENEXR_IMF_INTERNAL_NAMESPACE::HALF: - - size = Xdr::size (); - break; - - case OPENEXR_IMF_INTERNAL_NAMESPACE::FLOAT: - - size = Xdr::size (); - break; - - default: - - throw IEX_NAMESPACE::ArgExc ("Unknown pixel type."); - } - - return size; -} - - -int -numSamples (int s, int a, int b) -{ - int a1 = divp (a, s); - int b1 = divp (b, s); - return b1 - a1 + ((a1 * s < a)? 0: 1); -} - - -size_t -bytesPerLineTable (const Header &header, - vector &bytesPerLine) -{ - const Box2i &dataWindow = header.dataWindow(); - const ChannelList &channels = header.channels(); - - bytesPerLine.resize (dataWindow.max.y - dataWindow.min.y + 1); - - for (ChannelList::ConstIterator c = channels.begin(); - c != channels.end(); - ++c) - { - int nBytes = pixelTypeSize (c.channel().type) * - (dataWindow.max.x - dataWindow.min.x + 1) / - c.channel().xSampling; - - for (int y = dataWindow.min.y, i = 0; y <= dataWindow.max.y; ++y, ++i) - if (modp (y, c.channel().ySampling) == 0) - bytesPerLine[i] += nBytes; - } - - size_t maxBytesPerLine = 0; - - for (int y = dataWindow.min.y, i = 0; y <= dataWindow.max.y; ++y, ++i) - if (maxBytesPerLine < bytesPerLine[i]) - maxBytesPerLine = bytesPerLine[i]; - - return maxBytesPerLine; -} - -static int -roundToNextMultiple(int n, int d) -{ - return ((n + d - 1) / d) * d; -} - -static int -roundToPrevMultiple(int n, int d) -{ - return (n / d) * d; -} - -size_t -bytesPerDeepLineTable (const Header &header, - int minY, int maxY, - const char* base, - int xStride, - int yStride, - vector &bytesPerLine) -{ - const Box2i &dataWindow = header.dataWindow(); - const ChannelList &channels = header.channels(); - - for (ChannelList::ConstIterator c = channels.begin(); - c != channels.end(); - ++c) - { - const int ySampling = abs(c.channel().ySampling); - const int xSampling = abs(c.channel().xSampling); - const int pixelSize = pixelTypeSize (c.channel().type); - - // Here we transform from the domain over all pixels into the domain - // of actual samples. We want to sample points in [minY, maxY] where - // (y % ySampling) == 0. However, doing this by rejecting samples - // requires O(height*width) modulo computations, which were a - // significant bottleneck in the previous implementation of this - // function. For the low, low price of 4 divisions per channel, we - // can tighten the y & x ranges to the least and greatest roots of the - // sampling function and then stride by the sampling rate. - const int sampleMinY = roundToNextMultiple(minY, ySampling); - const int sampleMaxY = roundToPrevMultiple(maxY, ySampling); - const int sampleMinX = roundToNextMultiple(dataWindow.min.x, xSampling); - const int sampleMaxX = roundToPrevMultiple(dataWindow.max.x, xSampling); - - for (int y = sampleMinY; y <= sampleMaxY; y+=ySampling) - { - int nBytes = 0; - for (int x = sampleMinX; x <= sampleMaxX; x += xSampling) - { - nBytes += pixelSize * - sampleCount(base, xStride, yStride, x, y); - } - bytesPerLine[y - dataWindow.min.y] += nBytes; - } - } - - size_t maxBytesPerLine = 0; - - for (int y = minY; y <= maxY; ++y) - if (maxBytesPerLine < bytesPerLine[y - dataWindow.min.y]) - maxBytesPerLine = bytesPerLine[y - dataWindow.min.y]; - - return maxBytesPerLine; -} - - -size_t -bytesPerDeepLineTable (const Header &header, - char* base, - int xStride, - int yStride, - vector &bytesPerLine) -{ - return bytesPerDeepLineTable(header, - header.dataWindow().min.y, - header.dataWindow().max.y, - base, - xStride, - yStride, - bytesPerLine); -} - - -void -offsetInLineBufferTable (const vector &bytesPerLine, - int scanline1, int scanline2, - int linesInLineBuffer, - vector &offsetInLineBuffer) -{ - offsetInLineBuffer.resize (bytesPerLine.size()); - - size_t offset = 0; - - for (int i = scanline1; i <= scanline2; ++i) - { - if (i % linesInLineBuffer == 0) - offset = 0; - - offsetInLineBuffer[i] = offset; - offset += bytesPerLine[i]; - } -} - - -void -offsetInLineBufferTable (const vector &bytesPerLine, - int linesInLineBuffer, - vector &offsetInLineBuffer) -{ - offsetInLineBufferTable (bytesPerLine, - 0, bytesPerLine.size() - 1, - linesInLineBuffer, - offsetInLineBuffer); -} - - -int -lineBufferMinY (int y, int minY, int linesInLineBuffer) -{ - return ((y - minY) / linesInLineBuffer) * linesInLineBuffer + minY; -} - - -int -lineBufferMaxY (int y, int minY, int linesInLineBuffer) -{ - return lineBufferMinY (y, minY, linesInLineBuffer) + linesInLineBuffer - 1; -} - - -Compressor::Format -defaultFormat (Compressor * compressor) -{ - return compressor? compressor->format(): Compressor::XDR; -} - - -int -numLinesInBuffer (Compressor * compressor) -{ - return compressor? compressor->numScanLines(): 1; -} - - -void -copyIntoFrameBuffer (const char *& readPtr, - char * writePtr, - char * endPtr, - size_t xStride, - bool fill, - double fillValue, - Compressor::Format format, - PixelType typeInFrameBuffer, - PixelType typeInFile) -{ - // - // Copy a horizontal row of pixels from an input - // file's line or tile buffer to a frame buffer. - // - - if (fill) - { - // - // The file contains no data for this channel. - // Store a default value in the frame buffer. - // - - switch (typeInFrameBuffer) - { - case OPENEXR_IMF_INTERNAL_NAMESPACE::UINT: - - { - unsigned int fillVal = (unsigned int) (fillValue); - - while (writePtr <= endPtr) - { - *(unsigned int *) writePtr = fillVal; - writePtr += xStride; - } - } - break; - - case OPENEXR_IMF_INTERNAL_NAMESPACE::HALF: - - { - half fillVal = half (fillValue); - - while (writePtr <= endPtr) - { - *(half *) writePtr = fillVal; - writePtr += xStride; - } - } - break; - - case OPENEXR_IMF_INTERNAL_NAMESPACE::FLOAT: - - { - float fillVal = float (fillValue); - - while (writePtr <= endPtr) - { - *(float *) writePtr = fillVal; - writePtr += xStride; - } - } - break; - - default: - - throw IEX_NAMESPACE::ArgExc ("Unknown pixel data type."); - } - } - else if (format == Compressor::XDR) - { - // - // The the line or tile buffer is in XDR format. - // - // Convert the pixels from the file's machine- - // independent representation, and store the - // results in the frame buffer. - // - - switch (typeInFrameBuffer) - { - case OPENEXR_IMF_INTERNAL_NAMESPACE::UINT: - - switch (typeInFile) - { - case OPENEXR_IMF_INTERNAL_NAMESPACE::UINT: - - while (writePtr <= endPtr) - { - Xdr::read (readPtr, *(unsigned int *) writePtr); - writePtr += xStride; - } - break; - - case OPENEXR_IMF_INTERNAL_NAMESPACE::HALF: - - while (writePtr <= endPtr) - { - half h; - Xdr::read (readPtr, h); - *(unsigned int *) writePtr = halfToUint (h); - writePtr += xStride; - } - break; - - case OPENEXR_IMF_INTERNAL_NAMESPACE::FLOAT: - - while (writePtr <= endPtr) - { - float f; - Xdr::read (readPtr, f); - *(unsigned int *)writePtr = floatToUint (f); - writePtr += xStride; - } - break; - - default: - throw IEX_NAMESPACE::ArgExc ("Unknown pixel data type."); - } - break; - - case OPENEXR_IMF_INTERNAL_NAMESPACE::HALF: - - switch (typeInFile) - { - case OPENEXR_IMF_INTERNAL_NAMESPACE::UINT: - - while (writePtr <= endPtr) - { - unsigned int ui; - Xdr::read (readPtr, ui); - *(half *) writePtr = uintToHalf (ui); - writePtr += xStride; - } - break; - - case OPENEXR_IMF_INTERNAL_NAMESPACE::HALF: - - while (writePtr <= endPtr) - { - Xdr::read (readPtr, *(half *) writePtr); - writePtr += xStride; - } - break; - - case OPENEXR_IMF_INTERNAL_NAMESPACE::FLOAT: - - while (writePtr <= endPtr) - { - float f; - Xdr::read (readPtr, f); - *(half *) writePtr = floatToHalf (f); - writePtr += xStride; - } - break; - default: - - throw IEX_NAMESPACE::ArgExc ("Unknown pixel data type."); - } - break; - - case OPENEXR_IMF_INTERNAL_NAMESPACE::FLOAT: - - switch (typeInFile) - { - case OPENEXR_IMF_INTERNAL_NAMESPACE::UINT: - - while (writePtr <= endPtr) - { - unsigned int ui; - Xdr::read (readPtr, ui); - *(float *) writePtr = float (ui); - writePtr += xStride; - } - break; - - case OPENEXR_IMF_INTERNAL_NAMESPACE::HALF: - - while (writePtr <= endPtr) - { - half h; - Xdr::read (readPtr, h); - *(float *) writePtr = float (h); - writePtr += xStride; - } - break; - - case OPENEXR_IMF_INTERNAL_NAMESPACE::FLOAT: - - while (writePtr <= endPtr) - { - Xdr::read (readPtr, *(float *) writePtr); - writePtr += xStride; - } - break; - default: - - throw IEX_NAMESPACE::ArgExc ("Unknown pixel data type."); - } - break; - - default: - - throw IEX_NAMESPACE::ArgExc ("Unknown pixel data type."); - } - } - else - { - // - // The the line or tile buffer is in NATIVE format. - // Copy the results into the frame buffer. - // - - switch (typeInFrameBuffer) - { - case OPENEXR_IMF_INTERNAL_NAMESPACE::UINT: - - switch (typeInFile) - { - case OPENEXR_IMF_INTERNAL_NAMESPACE::UINT: - - while (writePtr <= endPtr) - { - for (size_t i = 0; i < sizeof (unsigned int); ++i) - writePtr[i] = readPtr[i]; - - readPtr += sizeof (unsigned int); - writePtr += xStride; - } - break; - - case OPENEXR_IMF_INTERNAL_NAMESPACE::HALF: - - while (writePtr <= endPtr) - { - half h = *(half *) readPtr; - *(unsigned int *) writePtr = halfToUint (h); - readPtr += sizeof (half); - writePtr += xStride; - } - break; - - case OPENEXR_IMF_INTERNAL_NAMESPACE::FLOAT: - - while (writePtr <= endPtr) - { - float f; - - for (size_t i = 0; i < sizeof (float); ++i) - ((char *)&f)[i] = readPtr[i]; - - *(unsigned int *)writePtr = floatToUint (f); - readPtr += sizeof (float); - writePtr += xStride; - } - break; - - default: - - throw IEX_NAMESPACE::ArgExc ("Unknown pixel data type."); - } - break; - - case OPENEXR_IMF_INTERNAL_NAMESPACE::HALF: - - switch (typeInFile) - { - case OPENEXR_IMF_INTERNAL_NAMESPACE::UINT: - - while (writePtr <= endPtr) - { - unsigned int ui; - - for (size_t i = 0; i < sizeof (unsigned int); ++i) - ((char *)&ui)[i] = readPtr[i]; - - *(half *) writePtr = uintToHalf (ui); - readPtr += sizeof (unsigned int); - writePtr += xStride; - } - break; - - case OPENEXR_IMF_INTERNAL_NAMESPACE::HALF: - - // If we're tightly packed, just memcpy - if (xStride == sizeof(half)) { - int numBytes = endPtr-writePtr+sizeof(half); - memcpy(writePtr, readPtr, numBytes); - readPtr += numBytes; - writePtr += numBytes; - } else { - while (writePtr <= endPtr) - { - *(half *) writePtr = *(half *)readPtr; - readPtr += sizeof (half); - writePtr += xStride; - } - } - break; - - case OPENEXR_IMF_INTERNAL_NAMESPACE::FLOAT: - - while (writePtr <= endPtr) - { - float f; - - for (size_t i = 0; i < sizeof (float); ++i) - ((char *)&f)[i] = readPtr[i]; - - *(half *) writePtr = floatToHalf (f); - readPtr += sizeof (float); - writePtr += xStride; - } - break; - default: - - throw IEX_NAMESPACE::ArgExc ("Unknown pixel data type."); - } - break; - - case OPENEXR_IMF_INTERNAL_NAMESPACE::FLOAT: - - switch (typeInFile) - { - case OPENEXR_IMF_INTERNAL_NAMESPACE::UINT: - - while (writePtr <= endPtr) - { - unsigned int ui; - - for (size_t i = 0; i < sizeof (unsigned int); ++i) - ((char *)&ui)[i] = readPtr[i]; - - *(float *) writePtr = float (ui); - readPtr += sizeof (unsigned int); - writePtr += xStride; - } - break; - - case OPENEXR_IMF_INTERNAL_NAMESPACE::HALF: - - while (writePtr <= endPtr) - { - half h = *(half *) readPtr; - *(float *) writePtr = float (h); - readPtr += sizeof (half); - writePtr += xStride; - } - break; - - case OPENEXR_IMF_INTERNAL_NAMESPACE::FLOAT: - - while (writePtr <= endPtr) - { - for (size_t i = 0; i < sizeof (float); ++i) - writePtr[i] = readPtr[i]; - - readPtr += sizeof (float); - writePtr += xStride; - } - break; - default: - - throw IEX_NAMESPACE::ArgExc ("Unknown pixel data type."); - } - break; - - default: - - throw IEX_NAMESPACE::ArgExc ("Unknown pixel data type."); - } - } -} - -void -copyIntoDeepFrameBuffer (const char *& readPtr, - char * base, - const char* sampleCountBase, - ptrdiff_t sampleCountXStride, - ptrdiff_t sampleCountYStride, - int y, int minX, int maxX, - int xOffsetForSampleCount, - int yOffsetForSampleCount, - int xOffsetForData, - int yOffsetForData, - ptrdiff_t sampleStride, - ptrdiff_t xPointerStride, - ptrdiff_t yPointerStride, - bool fill, - double fillValue, - Compressor::Format format, - PixelType typeInFrameBuffer, - PixelType typeInFile) -{ - // - // Copy a horizontal row of pixels from an input - // file's line or tile buffer to a frame buffer. - // - - if (fill) - { - // - // The file contains no data for this channel. - // Store a default value in the frame buffer. - // - - switch (typeInFrameBuffer) - { - case OPENEXR_IMF_INTERNAL_NAMESPACE::UINT: - - { - unsigned int fillVal = (unsigned int) (fillValue); - - for (int x = minX; x <= maxX; x++) - { - char* writePtr = *(char **)(base+(y-yOffsetForData)*yPointerStride + (x-xOffsetForData)*xPointerStride); - if(writePtr) - { - int count = sampleCount(sampleCountBase, - sampleCountXStride, - sampleCountYStride, - x - xOffsetForSampleCount, - y - yOffsetForSampleCount); - for (int i = 0; i < count; i++) - { - *(unsigned int *) writePtr = fillVal; - writePtr += sampleStride; - } - } - } - } - break; - - case OPENEXR_IMF_INTERNAL_NAMESPACE::HALF: - - { - half fillVal = half (fillValue); - - for (int x = minX; x <= maxX; x++) - { - char* writePtr = *(char **)(base+(y-yOffsetForData)*yPointerStride + (x-xOffsetForData)*xPointerStride); - - if(writePtr) - { - int count = sampleCount(sampleCountBase, - sampleCountXStride, - sampleCountYStride, - x - xOffsetForSampleCount, - y - yOffsetForSampleCount); - for (int i = 0; i < count; i++) - { - *(half *) writePtr = fillVal; - writePtr += sampleStride; - } - } - } - } - break; - - case OPENEXR_IMF_INTERNAL_NAMESPACE::FLOAT: - - { - float fillVal = float (fillValue); - - for (int x = minX; x <= maxX; x++) - { - char* writePtr = *(char **)(base+(y-yOffsetForData)*yPointerStride + (x-xOffsetForData)*xPointerStride); - - if(writePtr) - { - int count = sampleCount(sampleCountBase, - sampleCountXStride, - sampleCountYStride, - x - xOffsetForSampleCount, - y - yOffsetForSampleCount); - for (int i = 0; i < count; i++) - { - *(float *) writePtr = fillVal; - writePtr += sampleStride; - } - } - } - } - break; - - default: - - throw IEX_NAMESPACE::ArgExc ("Unknown pixel data type."); - } - } - else if (format == Compressor::XDR) - { - // - // The the line or tile buffer is in XDR format. - // - // Convert the pixels from the file's machine- - // independent representation, and store the - // results in the frame buffer. - // - - switch (typeInFrameBuffer) - { - case OPENEXR_IMF_INTERNAL_NAMESPACE::UINT: - - switch (typeInFile) - { - case OPENEXR_IMF_INTERNAL_NAMESPACE::UINT: - - for (int x = minX; x <= maxX; x++) - { - char* writePtr = *(char **)(base+(y-yOffsetForData)*yPointerStride + (x-xOffsetForData)*xPointerStride); - - int count = sampleCount(sampleCountBase, - sampleCountXStride, - sampleCountYStride, - x - xOffsetForSampleCount, - y - yOffsetForSampleCount); - if(writePtr) - { - - for (int i = 0; i < count; i++) - { - Xdr::read (readPtr, *(unsigned int *) writePtr); - writePtr += sampleStride; - } - }else{ - Xdr::skip (readPtr,count*Xdr::size()); - } - } - break; - - case OPENEXR_IMF_INTERNAL_NAMESPACE::HALF: - - for (int x = minX; x <= maxX; x++) - { - char* writePtr = *(char **)(base+(y-yOffsetForData)*yPointerStride + (x-xOffsetForData)*xPointerStride); - - int count = sampleCount(sampleCountBase, - sampleCountXStride, - sampleCountYStride, - x - xOffsetForSampleCount, - y - yOffsetForSampleCount); - if(writePtr) - { - - for (int i = 0; i < count; i++) - { - half h; - Xdr::read (readPtr, h); - *(unsigned int *) writePtr = halfToUint (h); - writePtr += sampleStride; - } - }else{ - Xdr::skip (readPtr,count*Xdr::size()); - } - } - break; - - case OPENEXR_IMF_INTERNAL_NAMESPACE::FLOAT: - - for (int x = minX; x <= maxX; x++) - { - char* writePtr = *(char **)(base+(y-yOffsetForData)*yPointerStride + (x-xOffsetForData)*xPointerStride); - - int count = sampleCount(sampleCountBase, - sampleCountXStride, - sampleCountYStride, - x - xOffsetForSampleCount, - y - yOffsetForSampleCount); - - if(writePtr) - { - for (int i = 0; i < count; i++) - { - float f; - Xdr::read (readPtr, f); - *(unsigned int *)writePtr = floatToUint (f); - writePtr += sampleStride; - } - }else{ - Xdr::skip (readPtr,count*Xdr::size()); - } - - } - break; - default: - throw IEX_NAMESPACE::ArgExc ("Unknown pixel data type."); - } - break; - - case OPENEXR_IMF_INTERNAL_NAMESPACE::HALF: - - switch (typeInFile) - { - case OPENEXR_IMF_INTERNAL_NAMESPACE::UINT: - - for (int x = minX; x <= maxX; x++) - { - char* writePtr = *(char **)(base+(y-yOffsetForData)*yPointerStride + (x-xOffsetForData)*xPointerStride); - - int count = sampleCount(sampleCountBase, - sampleCountXStride, - sampleCountYStride, - x - xOffsetForSampleCount, - y - yOffsetForSampleCount); - if(writePtr) - { - - for (int i = 0; i < count; i++) - { - unsigned int ui; - Xdr::read (readPtr, ui); - *(half *) writePtr = uintToHalf (ui); - writePtr += sampleStride; - } - }else{ - Xdr::skip (readPtr,count*Xdr::size()); - } - } - break; - - case OPENEXR_IMF_INTERNAL_NAMESPACE::HALF: - - for (int x = minX; x <= maxX; x++) - { - char* writePtr = *(char **)(base+(y-yOffsetForData)*yPointerStride + (x-xOffsetForData)*xPointerStride); - - int count = sampleCount(sampleCountBase, - sampleCountXStride, - sampleCountYStride, - x - xOffsetForSampleCount, - y - yOffsetForSampleCount); - if(writePtr) - { - - for (int i = 0; i < count; i++) - { - Xdr::read (readPtr, *(half *) writePtr); - writePtr += sampleStride; - } - }else{ - Xdr::skip (readPtr,count*Xdr::size()); - } - } - break; - - case OPENEXR_IMF_INTERNAL_NAMESPACE::FLOAT: - - for (int x = minX; x <= maxX; x++) - { - char* writePtr = *(char **) (base+(y-yOffsetForData)*yPointerStride + (x-xOffsetForData)*xPointerStride); - - int count = sampleCount(sampleCountBase, - sampleCountXStride, - sampleCountYStride, - x - xOffsetForSampleCount, - y - yOffsetForSampleCount); - if(writePtr) - { - for (int i = 0; i < count; i++) - { - float f; - Xdr::read (readPtr, f); - *(half *) writePtr = floatToHalf (f); - writePtr += sampleStride; - } - }else{ - Xdr::skip (readPtr,count*Xdr::size()); - } - } - break; - default: - - throw IEX_NAMESPACE::ArgExc ("Unknown pixel data type."); - } - break; - - case OPENEXR_IMF_INTERNAL_NAMESPACE::FLOAT: - - switch (typeInFile) - { - case OPENEXR_IMF_INTERNAL_NAMESPACE::UINT: - - for (int x = minX; x <= maxX; x++) - { - char* writePtr = *(char **)(base+(y-yOffsetForData)*yPointerStride + (x-xOffsetForData)*xPointerStride); - - int count = sampleCount(sampleCountBase, - sampleCountXStride, - sampleCountYStride, - x - xOffsetForSampleCount, - y - yOffsetForSampleCount); - if(writePtr) - { - for (int i = 0; i < count; i++) - { - unsigned int ui; - Xdr::read (readPtr, ui); - *(float *) writePtr = float (ui); - writePtr += sampleStride; - } - }else{ - Xdr::skip (readPtr,count*Xdr::size()); - } - } - break; - - case OPENEXR_IMF_INTERNAL_NAMESPACE::HALF: - - for (int x = minX; x <= maxX; x++) - { - char* writePtr = *(char **)(base+(y-yOffsetForData)*yPointerStride + (x-xOffsetForData)*xPointerStride); - - int count = sampleCount(sampleCountBase, - sampleCountXStride, - sampleCountYStride, - x - xOffsetForSampleCount, - y - yOffsetForSampleCount); - if(writePtr) - { - - for (int i = 0; i < count; i++) - { - half h; - Xdr::read (readPtr, h); - *(float *) writePtr = float (h); - writePtr += sampleStride; - } - - }else{ - Xdr::skip (readPtr,count*Xdr::size()); - } - } - break; - - case OPENEXR_IMF_INTERNAL_NAMESPACE::FLOAT: - - for (int x = minX; x <= maxX; x++) - { - char* writePtr = *(char **)(base+(y-yOffsetForData)*yPointerStride + (x-xOffsetForData)*xPointerStride); - - int count = sampleCount(sampleCountBase, - sampleCountXStride, - sampleCountYStride, - x - xOffsetForSampleCount, - y - yOffsetForSampleCount); - if(writePtr) - { - - for (int i = 0; i < count; i++) - { - Xdr::read (readPtr, *(float *) writePtr); - writePtr += sampleStride; - } - } else{ - Xdr::skip (readPtr,count*Xdr::size()); - } - - } - break; - default: - - throw IEX_NAMESPACE::ArgExc ("Unknown pixel data type."); - } - break; - - default: - - throw IEX_NAMESPACE::ArgExc ("Unknown pixel data type."); - } - } - else - { - // - // The the line or tile buffer is in NATIVE format. - // Copy the results into the frame buffer. - // - - switch (typeInFrameBuffer) - { - case OPENEXR_IMF_INTERNAL_NAMESPACE::UINT: - - switch (typeInFile) - { - case OPENEXR_IMF_INTERNAL_NAMESPACE::UINT: - - for (int x = minX; x <= maxX; x++) - { - char* writePtr = *(char **)(base+(y-yOffsetForData)*yPointerStride + (x-xOffsetForData)*xPointerStride); - - int count = sampleCount(sampleCountBase, - sampleCountXStride, - sampleCountYStride, - x - xOffsetForSampleCount, - y - yOffsetForSampleCount); - - if(writePtr) - { - for (int i = 0; i < count; i++) - { - for (size_t i = 0; i < sizeof (unsigned int); ++i) - writePtr[i] = readPtr[i]; - - readPtr += sizeof (unsigned int); - writePtr += sampleStride; - } - }else{ - readPtr+=sizeof(unsigned int)*count; - } - } - break; - - case OPENEXR_IMF_INTERNAL_NAMESPACE::HALF: - - for (int x = minX; x <= maxX; x++) - { - char* writePtr = *(char **)(base+(y-yOffsetForData)*yPointerStride + (x-xOffsetForData)*xPointerStride); - - int count = sampleCount(sampleCountBase, - sampleCountXStride, - sampleCountYStride, - x - xOffsetForSampleCount, - y - yOffsetForSampleCount); - - if(writePtr) - { - for (int i = 0; i < count; i++) - { - half h = *(half *) readPtr; - *(unsigned int *) writePtr = halfToUint (h); - readPtr += sizeof (half); - writePtr += sampleStride; - } - }else{ - readPtr+=sizeof(half)*count; - } - } - break; - - case OPENEXR_IMF_INTERNAL_NAMESPACE::FLOAT: - - for (int x = minX; x <= maxX; x++) - { - char* writePtr = *(char **)(base+(y-yOffsetForData)*yPointerStride + (x-xOffsetForData)*xPointerStride); - - int count = sampleCount(sampleCountBase, - sampleCountXStride, - sampleCountYStride, - x - xOffsetForSampleCount, - y - yOffsetForSampleCount); - - if(writePtr) - { - - for (int i = 0; i < count; i++) - { - float f; - - for (size_t i = 0; i < sizeof (float); ++i) - ((char *)&f)[i] = readPtr[i]; - - *(unsigned int *)writePtr = floatToUint (f); - readPtr += sizeof (float); - writePtr += sampleStride; - } - }else{ - readPtr+=sizeof(float)*count; - } - } - break; - default: - - throw IEX_NAMESPACE::ArgExc ("Unknown pixel data type."); - } - break; - - case OPENEXR_IMF_INTERNAL_NAMESPACE::HALF: - - switch (typeInFile) - { - case OPENEXR_IMF_INTERNAL_NAMESPACE::UINT: - - for (int x = minX; x <= maxX; x++) - { - char* writePtr = *(char **)(base+(y-yOffsetForData)*yPointerStride + (x-xOffsetForData)*xPointerStride); - - int count = sampleCount(sampleCountBase, - sampleCountXStride, - sampleCountYStride, - x - xOffsetForSampleCount, - y - yOffsetForSampleCount); - - if(writePtr) - { - for (int i = 0; i < count; i++) - { - unsigned int ui; - - for (size_t i = 0; i < sizeof (unsigned int); ++i) - ((char *)&ui)[i] = readPtr[i]; - - *(half *) writePtr = uintToHalf (ui); - readPtr += sizeof (unsigned int); - writePtr += sampleStride; - } - }else{ - readPtr+=sizeof(unsigned int)*count; - } - } - break; - - case OPENEXR_IMF_INTERNAL_NAMESPACE::HALF: - - for (int x = minX; x <= maxX; x++) - { - char* writePtr = *(char **)(base+(y-yOffsetForData)*yPointerStride + (x-xOffsetForData)*xPointerStride); - - int count = sampleCount(sampleCountBase, - sampleCountXStride, - sampleCountYStride, - x - xOffsetForSampleCount, - y - yOffsetForSampleCount); - - if(writePtr) - { - for (int i = 0; i < count; i++) - { - *(half *) writePtr = *(half *)readPtr; - readPtr += sizeof (half); - writePtr += sampleStride; - } - }else{ - readPtr+=sizeof(half)*count; - } - } - break; - - case OPENEXR_IMF_INTERNAL_NAMESPACE::FLOAT: - - for (int x = minX; x <= maxX; x++) - { - char* writePtr = *(char **)(base+(y-yOffsetForData)*yPointerStride + (x-xOffsetForData)*xPointerStride); - - int count = sampleCount(sampleCountBase, - sampleCountXStride, - sampleCountYStride, - x - xOffsetForSampleCount, - y - yOffsetForSampleCount); - - if(writePtr) - { - for (int i = 0; i < count; i++) - { - float f; - - for (size_t i = 0; i < sizeof (float); ++i) - ((char *)&f)[i] = readPtr[i]; - - *(half *) writePtr = floatToHalf (f); - readPtr += sizeof (float); - writePtr += sampleStride; - } - }else{ - readPtr+=sizeof(float)*count; - } - } - break; - default: - - throw IEX_NAMESPACE::ArgExc ("Unknown pixel data type."); - } - break; - - case OPENEXR_IMF_INTERNAL_NAMESPACE::FLOAT: - - switch (typeInFile) - { - case OPENEXR_IMF_INTERNAL_NAMESPACE::UINT: - - for (int x = minX; x <= maxX; x++) - { - char* writePtr = *(char **)(base+(y-yOffsetForData)*yPointerStride + (x-xOffsetForData)*xPointerStride); - - int count = sampleCount(sampleCountBase, - sampleCountXStride, - sampleCountYStride, - x - xOffsetForSampleCount, - y - yOffsetForSampleCount); - - if(writePtr) - { - for (int i = 0; i < count; i++) - { - unsigned int ui; - - for (size_t i = 0; i < sizeof (unsigned int); ++i) - ((char *)&ui)[i] = readPtr[i]; - - *(float *) writePtr = float (ui); - readPtr += sizeof (unsigned int); - writePtr += sampleStride; - } - }else{ - readPtr+=sizeof(unsigned int)*count; - } - } - break; - - case OPENEXR_IMF_INTERNAL_NAMESPACE::HALF: - - for (int x = minX; x <= maxX; x++) - { - char* writePtr = *(char **)(base+(y-yOffsetForData)*yPointerStride + (x-xOffsetForData)*xPointerStride); - - int count = sampleCount(sampleCountBase, - sampleCountXStride, - sampleCountYStride, - x - xOffsetForSampleCount, - y - yOffsetForSampleCount); - - if(writePtr) - { - for (int i = 0; i < count; i++) - { - half h = *(half *) readPtr; - *(float *) writePtr = float (h); - readPtr += sizeof (half); - writePtr += sampleStride; - } - }else{ - readPtr+=sizeof(half)*count; - } - } - break; - - case OPENEXR_IMF_INTERNAL_NAMESPACE::FLOAT: - - for (int x = minX; x <= maxX; x++) - { - char* writePtr = *(char **)(base+(y-yOffsetForData)*yPointerStride + (x-xOffsetForData)*xPointerStride); - - int count = sampleCount(sampleCountBase, - sampleCountXStride, - sampleCountYStride, - x - xOffsetForSampleCount, - y - yOffsetForSampleCount); - - if(writePtr) - { - for (int i = 0; i < count; i++) - { - for (size_t i = 0; i < sizeof (float); ++i) - writePtr[i] = readPtr[i]; - - readPtr += sizeof (float); - writePtr += sampleStride; - } - }else{ - readPtr+=sizeof(float)*count; - } - } - break; - default: - - throw IEX_NAMESPACE::ArgExc ("Unknown pixel data type."); - } - break; - - default: - - throw IEX_NAMESPACE::ArgExc ("Unknown pixel data type."); - } - } -} - - -void -skipChannel (const char *& readPtr, - PixelType typeInFile, - size_t xSize) -{ - switch (typeInFile) - { - case OPENEXR_IMF_INTERNAL_NAMESPACE::UINT: - - Xdr::skip (readPtr, Xdr::size () * xSize); - break; - - case OPENEXR_IMF_INTERNAL_NAMESPACE::HALF: - - Xdr::skip (readPtr, Xdr::size () * xSize); - break; - - case OPENEXR_IMF_INTERNAL_NAMESPACE::FLOAT: - - Xdr::skip (readPtr, Xdr::size () * xSize); - break; - - default: - - throw IEX_NAMESPACE::ArgExc ("Unknown pixel data type."); - } -} - - -void -convertInPlace (char *& writePtr, - const char *& readPtr, - PixelType type, - size_t numPixels) -{ - switch (type) - { - case OPENEXR_IMF_INTERNAL_NAMESPACE::UINT: - - for (size_t j = 0; j < numPixels; ++j) - { - Xdr::write (writePtr, *(const unsigned int *) readPtr); - readPtr += sizeof(unsigned int); - } - break; - - case OPENEXR_IMF_INTERNAL_NAMESPACE::HALF: - - for (size_t j = 0; j < numPixels; ++j) - { - Xdr::write (writePtr, *(const half *) readPtr); - readPtr += sizeof(half); - } - break; - - case OPENEXR_IMF_INTERNAL_NAMESPACE::FLOAT: - - for (size_t j = 0; j < numPixels; ++j) - { - Xdr::write (writePtr, *(const float *) readPtr); - readPtr += sizeof(float); - } - break; - - default: - - throw IEX_NAMESPACE::ArgExc ("Unknown pixel data type."); - } -} - - -void -copyFromFrameBuffer (char *& writePtr, - const char *& readPtr, - const char * endPtr, - size_t xStride, - Compressor::Format format, - PixelType type) -{ - // - // Copy a horizontal row of pixels from a frame - // buffer to an output file's line or tile buffer. - // - - if (format == Compressor::XDR) - { - // - // The the line or tile buffer is in XDR format. - // - - switch (type) - { - case OPENEXR_IMF_INTERNAL_NAMESPACE::UINT: - - while (readPtr <= endPtr) - { - Xdr::write (writePtr, - *(const unsigned int *) readPtr); - readPtr += xStride; - } - break; - - case OPENEXR_IMF_INTERNAL_NAMESPACE::HALF: - - while (readPtr <= endPtr) - { - Xdr::write (writePtr, *(const half *) readPtr); - readPtr += xStride; - } - break; - - case OPENEXR_IMF_INTERNAL_NAMESPACE::FLOAT: - - while (readPtr <= endPtr) - { - Xdr::write (writePtr, *(const float *) readPtr); - readPtr += xStride; - } - break; - - default: - - throw IEX_NAMESPACE::ArgExc ("Unknown pixel data type."); - } - } - else - { - // - // The the line or tile buffer is in NATIVE format. - // - - switch (type) - { - case OPENEXR_IMF_INTERNAL_NAMESPACE::UINT: - - while (readPtr <= endPtr) - { - for (size_t i = 0; i < sizeof (unsigned int); ++i) - *writePtr++ = readPtr[i]; - - readPtr += xStride; - } - break; - - case OPENEXR_IMF_INTERNAL_NAMESPACE::HALF: - - while (readPtr <= endPtr) - { - *(half *) writePtr = *(const half *) readPtr; - writePtr += sizeof (half); - readPtr += xStride; - } - break; - - case OPENEXR_IMF_INTERNAL_NAMESPACE::FLOAT: - - while (readPtr <= endPtr) - { - for (size_t i = 0; i < sizeof (float); ++i) - *writePtr++ = readPtr[i]; - - readPtr += xStride; - } - break; - - default: - - throw IEX_NAMESPACE::ArgExc ("Unknown pixel data type."); - } - } -} - -void -copyFromDeepFrameBuffer (char *& writePtr, - const char * base, - char* sampleCountBase, - ptrdiff_t sampleCountXStride, - ptrdiff_t sampleCountYStride, - int y, int xMin, int xMax, - int xOffsetForSampleCount, - int yOffsetForSampleCount, - int xOffsetForData, - int yOffsetForData, - ptrdiff_t sampleStride, - ptrdiff_t dataXStride, - ptrdiff_t dataYStride, - Compressor::Format format, - PixelType type) -{ - // - // Copy a horizontal row of pixels from a frame - // buffer to an output file's line or tile buffer. - // - - if (format == Compressor::XDR) - { - // - // The the line or tile buffer is in XDR format. - // - - switch (type) - { - case OPENEXR_IMF_INTERNAL_NAMESPACE::UINT: - - for (int x = xMin; x <= xMax; x++) - { - unsigned int count = - sampleCount(sampleCountBase, - sampleCountXStride, - sampleCountYStride, - x - xOffsetForSampleCount, - y - yOffsetForSampleCount); - const char* ptr = base + (y-yOffsetForData) * dataYStride + (x-xOffsetForData) * dataXStride; - const char* readPtr = ((const char**) ptr)[0]; - for (unsigned int i = 0; i < count; i++) - { - Xdr::write (writePtr, - *(const unsigned int *) readPtr); - readPtr += sampleStride; - } - } - break; - - case OPENEXR_IMF_INTERNAL_NAMESPACE::HALF: - - for (int x = xMin; x <= xMax; x++) - { - unsigned int count = - sampleCount(sampleCountBase, - sampleCountXStride, - sampleCountYStride, - x - xOffsetForSampleCount, - y - yOffsetForSampleCount); - const char* ptr = base + (y-yOffsetForData) * dataYStride + (x-xOffsetForData) * dataXStride; - const char* readPtr = ((const char**) ptr)[0]; - for (unsigned int i = 0; i < count; i++) - { - Xdr::write (writePtr, *(const half *) readPtr); - readPtr += sampleStride; - } - } - break; - - case OPENEXR_IMF_INTERNAL_NAMESPACE::FLOAT: - - for (int x = xMin; x <= xMax; x++) - { - unsigned int count = - sampleCount(sampleCountBase, - sampleCountXStride, - sampleCountYStride, - x - xOffsetForSampleCount, - y - yOffsetForSampleCount); - const char* ptr = base + (y-yOffsetForData) * dataYStride + (x-xOffsetForData) * dataXStride; - - const char* readPtr = ((const char**) ptr)[0]; - for (unsigned int i = 0; i < count; i++) - { - Xdr::write (writePtr, *(const float *) readPtr); - readPtr += sampleStride; - } - } - break; - - default: - - throw IEX_NAMESPACE::ArgExc ("Unknown pixel data type."); - } - } - else - { - // - // The the line or tile buffer is in NATIVE format. - // - - switch (type) - { - case OPENEXR_IMF_INTERNAL_NAMESPACE::UINT: - - for (int x = xMin; x <= xMax; x++) - { - unsigned int count = - sampleCount(sampleCountBase, - sampleCountXStride, - sampleCountYStride, - x - xOffsetForSampleCount, - y - yOffsetForSampleCount); - - const char* ptr = base + (y-yOffsetForData) * dataYStride + (x-xOffsetForData) * dataXStride; - const char* readPtr = ((const char**) ptr)[0]; - for (unsigned int i = 0; i < count; i++) - { - for (size_t j = 0; j < sizeof (unsigned int); ++j) - *writePtr++ = readPtr[j]; - - readPtr += sampleStride; - } - } - break; - - case OPENEXR_IMF_INTERNAL_NAMESPACE::HALF: - - for (int x = xMin; x <= xMax; x++) - { - unsigned int count = - sampleCount(sampleCountBase, - sampleCountXStride, - sampleCountYStride, - x - xOffsetForSampleCount, - y - yOffsetForSampleCount); - const char* ptr = base + (y-yOffsetForData) * dataYStride + (x-xOffsetForData) * dataXStride; - const char* readPtr = ((const char**) ptr)[0]; - for (unsigned int i = 0; i < count; i++) - { - *(half *) writePtr = *(const half *) readPtr; - writePtr += sizeof (half); - readPtr += sampleStride; - } - } - break; - - case OPENEXR_IMF_INTERNAL_NAMESPACE::FLOAT: - - for (int x = xMin; x <= xMax; x++) - { - unsigned int count = - sampleCount(sampleCountBase, - sampleCountXStride, - sampleCountYStride, - x - xOffsetForSampleCount, - y - yOffsetForSampleCount); - - const char* ptr = base + (y-yOffsetForData) * dataYStride + (x-xOffsetForData) * dataXStride; - const char* readPtr = ((const char**) ptr)[0]; - for (unsigned int i = 0; i < count; i++) - { - for (size_t j = 0; j < sizeof (float); ++j) - *writePtr++ = readPtr[j]; - - readPtr += sampleStride; - } - } - break; - - default: - - throw IEX_NAMESPACE::ArgExc ("Unknown pixel data type."); - } - } -} - - -void -fillChannelWithZeroes (char *& writePtr, - Compressor::Format format, - PixelType type, - size_t xSize) -{ - if (format == Compressor::XDR) - { - // - // Fill with data in XDR format. - // - - switch (type) - { - case OPENEXR_IMF_INTERNAL_NAMESPACE::UINT: - - for (size_t j = 0; j < xSize; ++j) - Xdr::write (writePtr, (unsigned int) 0); - - break; - - case OPENEXR_IMF_INTERNAL_NAMESPACE::HALF: - - for (size_t j = 0; j < xSize; ++j) - Xdr::write (writePtr, (half) 0); - - break; - - case OPENEXR_IMF_INTERNAL_NAMESPACE::FLOAT: - - for (size_t j = 0; j < xSize; ++j) - Xdr::write (writePtr, (float) 0); - - break; - - default: - - throw IEX_NAMESPACE::ArgExc ("Unknown pixel data type."); - } - } - else - { - // - // Fill with data in NATIVE format. - // - - switch (type) - { - case OPENEXR_IMF_INTERNAL_NAMESPACE::UINT: - - for (size_t j = 0; j < xSize; ++j) - { - static const unsigned int ui = 0; - - for (size_t i = 0; i < sizeof (ui); ++i) - *writePtr++ = ((char *) &ui)[i]; - } - break; - - case OPENEXR_IMF_INTERNAL_NAMESPACE::HALF: - - for (size_t j = 0; j < xSize; ++j) - { - *(half *) writePtr = half (0); - writePtr += sizeof (half); - } - break; - - case OPENEXR_IMF_INTERNAL_NAMESPACE::FLOAT: - - for (size_t j = 0; j < xSize; ++j) - { - static const float f = 0; - - for (size_t i = 0; i < sizeof (f); ++i) - *writePtr++ = ((char *) &f)[i]; - } - break; - - default: - - throw IEX_NAMESPACE::ArgExc ("Unknown pixel data type."); - } - } -} - -bool -usesLongNames (const Header &header) -{ - // - // If an OpenEXR file contains any attribute names, attribute type names - // or channel names longer than 31 characters, then the file cannot be - // read by older versions of the IlmImf library (up to OpenEXR 1.6.1). - // Before writing the file header, we check if the header contains - // any names longer than 31 characters; if it does, then we set the - // LONG_NAMES_FLAG in the file version number. Older versions of the - // IlmImf library will refuse to read files that have the LONG_NAMES_FLAG - // set. Without the flag, older versions of the library would mis- - // interpret the file as broken. - // - - for (Header::ConstIterator i = header.begin(); - i != header.end(); - ++i) - { - if (strlen (i.name()) >= 32 || strlen (i.attribute().typeName()) >= 32) - return true; - } - - const ChannelList &channels = header.channels(); - - for (ChannelList::ConstIterator i = channels.begin(); - i != channels.end(); - ++i) - { - if (strlen (i.name()) >= 32) - return true; - } - - return false; -} - -int -getScanlineChunkOffsetTableSize(const Header& header) -{ - const Box2i &dataWindow = header.dataWindow(); - - vector bytesPerLine; - size_t maxBytesPerLine = bytesPerLineTable (header, - bytesPerLine); - - Compressor* compressor = newCompressor(header.compression(), - maxBytesPerLine, - header); - - int linesInBuffer = numLinesInBuffer (compressor); - - int lineOffsetSize = (dataWindow.max.y - dataWindow.min.y + - linesInBuffer) / linesInBuffer; - - delete compressor; - - return lineOffsetSize; -} - -// -// Located in ImfTiledMisc.cpp -// -int -getTiledChunkOffsetTableSize(const Header& header); - -int -getChunkOffsetTableSize(const Header& header,bool ignore_attribute) -{ - if(!ignore_attribute && header.hasChunkCount()) - { - return header.chunkCount(); - } - - if(header.hasType() && !isSupportedType(header.type())) - { - throw IEX_NAMESPACE::ArgExc ("unsupported header type to " - "get chunk offset table size"); - } - if (isTiled(header.type()) == false) - return getScanlineChunkOffsetTableSize(header); - else - return getTiledChunkOffsetTableSize(header); - -} - - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_EXIT diff --git a/3rdparty/openexr/IlmImf/ImfMisc.h b/3rdparty/openexr/IlmImf/ImfMisc.h deleted file mode 100644 index c0d90eaa1b..0000000000 --- a/3rdparty/openexr/IlmImf/ImfMisc.h +++ /dev/null @@ -1,478 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - - -#ifndef INCLUDED_IMF_MISC_H -#define INCLUDED_IMF_MISC_H - -//----------------------------------------------------------------------------- -// -// Miscellaneous helper functions for OpenEXR image file I/O -// -//----------------------------------------------------------------------------- - -#include "ImfPixelType.h" -#include "ImfCompressor.h" -#include "ImfArray.h" -#include "ImfNamespace.h" -#include "ImfExport.h" -#include "ImfForward.h" - -#include -#include - - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER - - -// -// Return the size of a single value of the indicated type, -// in the machine's native format. -// - -IMF_EXPORT -int pixelTypeSize (PixelType type); - - -// -// Return the number of samples a channel with subsampling rate -// s has in the interval [a, b]. For example, a channel with -// subsampling rate 2 (and samples at 0, 2, 4, 6, 8, etc.) has -// 2 samples in the interval [1, 5] and three samples in the -// interval [2, 6]. -// - -IMF_EXPORT -int numSamples (int s, int a, int b); - - -// -// Build a table that lists, for each scanline in a file's -// data window, how many bytes are required to store all -// pixels in all channels in that scanline (assuming that -// the pixel data are tightly packed). -// - -IMF_EXPORT -size_t bytesPerLineTable (const Header &header, - std::vector &bytesPerLine); - - -// -// Get the sample count for pixel (x, y) using the array base -// pointer, xStride and yStride. -// - -inline -int& -sampleCount(char* base, int xStride, int yStride, int x, int y) -{ - char* ptr = base + y * yStride + x * xStride; - int* intPtr = (int*) ptr; - - return *intPtr; -} - - -inline -const int& -sampleCount(const char* base, int xStride, int yStride, int x, int y) -{ - const char* ptr = base + y * yStride + x * xStride; - int* intPtr = (int*) ptr; - - return *intPtr; -} - -// -// Build a table that lists, for each scanline in a DEEP file's -// data window, how many bytes are required to store all -// pixels in all channels in scanlines ranged in [minY, maxY] -// (assuming that the pixel data are tightly packed). -// - -IMF_EXPORT -size_t bytesPerDeepLineTable (const Header &header, - int minY, int maxY, - const char* base, - int xStride, - int yStride, - std::vector &bytesPerLine); - - -// -// Build a table that lists, for each scanline in a DEEP file's -// data window, how many bytes are required to store all -// pixels in all channels in every scanline (assuming that -// the pixel data are tightly packed). -// - -IMF_EXPORT -size_t bytesPerDeepLineTable (const Header &header, - char* base, - int xStride, - int yStride, - std::vector &bytesPerLine); - - -// -// For scanline-based files, pixels are read or written in -// in multi-scanline blocks. Internally, class OutputFile -// and class ScanLineInputFile store a block of scan lines -// in a "line buffer". Function offsetInLineBufferTable() -// builds a table that lists, scanlines within range -// [scanline1, scanline2], the location of the pixel data -// for the scanline relative to the beginning of the line buffer, -// where scanline1 = 0 represents the first line in the DATA WINDOW. -// The one without specifying the range will make scanline1 = 0 -// and scanline2 = bytesPerLine.size(). -// - -IMF_EXPORT -void offsetInLineBufferTable (const std::vector &bytesPerLine, - int scanline1, int scanline2, - int linesInLineBuffer, - std::vector &offsetInLineBuffer); - -IMF_EXPORT -void offsetInLineBufferTable (const std::vector &bytesPerLine, - int linesInLineBuffer, - std::vector &offsetInLineBuffer); - -// -// For a scanline-based file, compute the range of scanlines -// that occupy the same line buffer as a given scanline, y. -// (minY is the minimum y coordinate of the file's data window.) -// - -IMF_EXPORT int lineBufferMinY (int y, int minY, int linesInLineBuffer); -IMF_EXPORT int lineBufferMaxY (int y, int minY, int linesInLineBuffer); - - -// -// Return a compressor's data format (Compressor::NATIVE or Compressor::XDR). -// If compressor is 0, return Compressor::XDR. -// - -IMF_EXPORT -Compressor::Format defaultFormat (Compressor *compressor); - - -// -// Return the number of scan lines a compressor wants to compress -// or uncompress at once. If compressor is 0, return 1. -// - -IMF_EXPORT -int numLinesInBuffer (Compressor *compressor); - - -// -// Copy a single channel of a horizontal row of pixels from an -// input file's internal line buffer or tile buffer into a -// frame buffer slice. If necessary, perform on-the-fly data -// type conversion. -// -// readPtr initially points to the beginning of the -// data in the line or tile buffer. readPtr -// is advanced as the pixel data are copied; -// when copyIntoFrameBuffer() returns, -// readPtr points just past the end of the -// copied data. -// -// writePtr, endPtr point to the lefmost and rightmost pixels -// in the frame buffer slice -// -// xStride the xStride for the frame buffer slice -// -// format indicates if the line or tile buffer is -// in NATIVE or XDR format. -// -// typeInFrameBuffer the pixel data type of the frame buffer slice -// -// typeInFile the pixel data type in the input file's channel -// - -IMF_EXPORT -void copyIntoFrameBuffer (const char *&readPtr, - char *writePtr, - char *endPtr, - size_t xStride, - bool fill, - double fillValue, - Compressor::Format format, - PixelType typeInFrameBuffer, - PixelType typeInFile); - - -// -// Copy a single channel of a horizontal row of pixels from an -// input file's internal line buffer or tile buffer into a -// frame buffer slice. If necessary, perform on-the-fly data -// type conversion. -// -// readPtr initially points to the beginning of the -// data in the line or tile buffer. readPtr -// is advanced as the pixel data are copied; -// when copyIntoFrameBuffer() returns, -// readPtr points just past the end of the -// copied data. -// -// base point to each pixel in the framebuffer -// -// sampleCountBase, provide the number of samples in each pixel -// sampleCountXStride, -// sampleCountYStride -// -// y the scanline to copy. The coordinate is -// relative to the datawindow.min.y. -// -// minX, maxX used to indicate which pixels in the scanline -// will be copied. -// -// xOffsetForSampleCount, used to offset the sample count array -// yOffsetForSampleCount, and the base array. -// xOffsetForData, -// yOffsetForData -// -// xStride the xStride for the frame buffer slice -// -// format indicates if the line or tile buffer is -// in NATIVE or XDR format. -// -// typeInFrameBuffer the pixel data type of the frame buffer slice -// -// typeInFile the pixel data type in the input file's channel -// - -IMF_EXPORT -void copyIntoDeepFrameBuffer (const char *& readPtr, - char * base, - const char* sampleCountBase, - ptrdiff_t sampleCountXStride, - ptrdiff_t sampleCountYStride, - int y, int minX, int maxX, - int xOffsetForSampleCount, - int yOffsetForSampleCount, - int xOffsetForData, - int yOffsetForData, - ptrdiff_t xStride, - ptrdiff_t xPointerStride, - ptrdiff_t yPointerStride, - bool fill, - double fillValue, - Compressor::Format format, - PixelType typeInFrameBuffer, - PixelType typeInFile); - - -// -// Given a pointer into a an input file's line buffer or tile buffer, -// skip over the data for xSize pixels of type typeInFile. -// readPtr initially points to the beginning of the data to be skipped; -// when skipChannel() returns, readPtr points just past the end of the -// skipped data. -// - -IMF_EXPORT -void skipChannel (const char *&readPtr, - PixelType typeInFile, - size_t xSize); - -// -// Convert an array of pixel data from the machine's native -// representation to XDR format. -// -// toPtr, fromPtr initially point to the beginning of the input -// and output pixel data arrays; when convertInPlace() -// returns, toPtr and fromPtr point just past the -// end of the input and output arrays. -// If the native representation of the data has the -// same size as the XDR data, then the conversion -// can take in place, without an intermediate -// temporary buffer (toPtr and fromPtr can point -// to the same location). -// -// type the pixel data type -// -// numPixels number of pixels in the input and output arrays -// - -IMF_EXPORT -void convertInPlace (char *&toPtr, - const char *&fromPtr, - PixelType type, - size_t numPixels); - -// -// Copy a single channel of a horizontal row of pixels from a -// a frame buffer into an output file's internal line buffer or -// tile buffer. -// -// writePtr initially points to the beginning of the -// data in the line or tile buffer. writePtr -// is advanced as the pixel data are copied; -// when copyFromFrameBuffer() returns, -// writePtr points just past the end of the -// copied data. -// -// readPtr, endPtr point to the lefmost and rightmost pixels -// in the frame buffer slice -// -// xStride the xStride for the frame buffer slice -// -// format indicates if the line or tile buffer is -// in NATIVE or XDR format. -// -// type the pixel data type in the frame buffer -// and in the output file's channel (function -// copyFromFrameBuffer() doesn't do on-the-fly -// data type conversion) -// - -IMF_EXPORT -void copyFromFrameBuffer (char *&writePtr, - const char *&readPtr, - const char *endPtr, - size_t xStride, - Compressor::Format format, - PixelType type); - -// -// Copy a single channel of a horizontal row of pixels from a -// a frame buffer in a deep data file into an output file's -// internal line buffer or tile buffer. -// -// writePtr initially points to the beginning of the -// data in the line or tile buffer. writePtr -// is advanced as the pixel data are copied; -// when copyFromDeepFrameBuffer() returns, -// writePtr points just past the end of the -// copied data. -// -// base the start pointer of each pixel in this channel. -// It points to the real data in FrameBuffer. -// It is different for different channels. -// dataWindowMinX and dataWindowMinY are involved in -// locating for base. -// -// sampleCountBase, used to locate the position to get -// sampleCountXStride, the number of samples for each pixel. -// sampleCountYStride Used to determine how far we should -// read based on the pointer provided by base. -// -// y the scanline to copy. If we are dealing -// with a tiled deep file, then probably a portion -// of the scanline is copied. -// -// xMin, xMax used to indicate which pixels in the scanline -// will be copied. -// -// xOffsetForSampleCount, used to offset the sample count array -// yOffsetForSampleCount, and the base array. -// xOffsetForData, -// yOffsetForData -// -// xStride the xStride for the frame buffer slice -// -// format indicates if the line or tile buffer is -// in NATIVE or XDR format. -// -// type the pixel data type in the frame buffer -// and in the output file's channel (function -// copyFromFrameBuffer() doesn't do on-the-fly -// data type conversion) -// - -IMF_EXPORT -void copyFromDeepFrameBuffer (char *& writePtr, - const char * base, - char* sampleCountBase, - ptrdiff_t sampleCountXStride, - ptrdiff_t sampleCountYStride, - int y, int xMin, int xMax, - int xOffsetForSampleCount, - int yOffsetForSampleCount, - int xOffsetForData, - int yOffsetForData, - ptrdiff_t sampleStride, - ptrdiff_t xStrideForData, - ptrdiff_t yStrideForData, - Compressor::Format format, - PixelType type); - -// -// Fill part of an output file's line buffer or tile buffer with -// zeroes. This routine is called when an output file contains -// a channel for which the frame buffer contains no corresponding -// slice. -// -// writePtr initially points to the beginning of the -// data in the line or tile buffer. When -// fillChannelWithZeroes() returns, writePtr -// points just past the end of the zeroed -// data. -// -// format indicates if the line or tile buffer is -// in NATIVE or XDR format. -// -// type the pixel data type in the line or frame buffer. -// -// xSize number of pixels to be filled with zeroes. -// - -IMF_EXPORT -void fillChannelWithZeroes (char *&writePtr, - Compressor::Format format, - PixelType type, - size_t xSize); - -IMF_EXPORT -bool usesLongNames (const Header &header); - - -// -// compute size of chunk offset table - if ignore_attribute set to true -// will compute from the image size and layout, rather than the attribute -// The default behaviour is to read the attribute -// - -IMF_EXPORT -int getChunkOffsetTableSize(const Header& header,bool ignore_attribute=false); - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT - - -#endif diff --git a/3rdparty/openexr/IlmImf/ImfMultiPartInputFile.cpp b/3rdparty/openexr/IlmImf/ImfMultiPartInputFile.cpp deleted file mode 100644 index 55bdcaa1e4..0000000000 --- a/3rdparty/openexr/IlmImf/ImfMultiPartInputFile.cpp +++ /dev/null @@ -1,783 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2011, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - -#include "ImfMultiPartInputFile.h" - -#include "ImfTimeCodeAttribute.h" -#include "ImfChromaticitiesAttribute.h" -#include "ImfBoxAttribute.h" -#include "ImfFloatAttribute.h" -#include "ImfStdIO.h" -#include "ImfTileOffsets.h" -#include "ImfMisc.h" -#include "ImfTiledMisc.h" -#include "ImfInputStreamMutex.h" -#include "ImfInputPartData.h" -#include "ImfPartType.h" -#include "ImfInputFile.h" -#include "ImfScanLineInputFile.h" -#include "ImfTiledInputFile.h" -#include "ImfDeepScanLineInputFile.h" -#include "ImfDeepTiledInputFile.h" -#include "ImfVersion.h" - -#include -#include -#include - -#include -#include -#include - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_ENTER - -using ILMTHREAD_NAMESPACE::Mutex; -using ILMTHREAD_NAMESPACE::Lock; -using IMATH_NAMESPACE::Box2i; - -using std::vector; -using std::map; -using std::set; -using std::string; - -namespace -{ - // Controls whether we error out in the event of shared attribute - // inconsistency in the input file - static const bool strictSharedAttribute = true; -} - -struct MultiPartInputFile::Data: public InputStreamMutex -{ - int version; // Version of this file. - bool deleteStream; // If we should delete the stream during destruction. - vector parts; // Data to initialize Output files. - int numThreads; // Number of threads - bool reconstructChunkOffsetTable; // If we should reconstruct - // the offset table if it's broken. - std::map _inputFiles; - std::vector
_headers; - - - void chunkOffsetReconstruction(OPENEXR_IMF_INTERNAL_NAMESPACE::IStream& is, const std::vector& parts); - - void readChunkOffsetTables(bool reconstructChunkOffsetTable); - - bool checkSharedAttributesValues(const Header & src, - const Header & dst, - std::vector & conflictingAttributes) const; - - TileOffsets* createTileOffsets(const Header& header); - - InputPartData* getPart(int partNumber); - - Data (bool deleteStream, int numThreads, bool reconstructChunkOffsetTable): - InputStreamMutex(), - deleteStream (deleteStream), - numThreads (numThreads), - reconstructChunkOffsetTable(reconstructChunkOffsetTable) - { - } - - ~Data() - { - if (deleteStream) delete is; - - for (size_t i = 0; i < parts.size(); i++) - delete parts[i]; - } - - template - T* createInputPartT(int partNumber) - { - - } -}; - -MultiPartInputFile::MultiPartInputFile(const char fileName[], - int numThreads, - bool reconstructChunkOffsetTable): - _data(new Data(true, numThreads, reconstructChunkOffsetTable)) -{ - try - { - _data->is = new StdIFStream (fileName); - initialize(); - } - catch (IEX_NAMESPACE::BaseExc &e) - { - delete _data; - - REPLACE_EXC (e, "Cannot read image file " - "\"" << fileName << "\". " << e.what()); - throw; - } - catch (...) - { - delete _data; - throw; - } -} - -MultiPartInputFile::MultiPartInputFile (OPENEXR_IMF_INTERNAL_NAMESPACE::IStream& is, - int numThreads, - bool reconstructChunkOffsetTable): - _data(new Data(false, numThreads, reconstructChunkOffsetTable)) -{ - try - { - _data->is = &is; - initialize(); - } - catch (IEX_NAMESPACE::BaseExc &e) - { - delete _data; - - REPLACE_EXC (e, "Cannot read image file " - "\"" << is.fileName() << "\". " << e.what()); - throw; - } - catch (...) - { - delete _data; - throw; - } -} - -template -T* -MultiPartInputFile::getInputPart(int partNumber) -{ - Lock lock(*_data); - if (_data->_inputFiles.find(partNumber) == _data->_inputFiles.end()) - { - T* file = new T(_data->getPart(partNumber)); - _data->_inputFiles.insert(std::make_pair(partNumber, (GenericInputFile*) file)); - return file; - } - else return (T*) _data->_inputFiles[partNumber]; -} - - -template InputFile* MultiPartInputFile::getInputPart(int); -template TiledInputFile* MultiPartInputFile::getInputPart(int); -template DeepScanLineInputFile* MultiPartInputFile::getInputPart(int); -template DeepTiledInputFile* MultiPartInputFile::getInputPart(int); - -InputPartData* -MultiPartInputFile::getPart(int partNumber) -{ - return _data->getPart(partNumber); -} - - - -const Header & - MultiPartInputFile::header(int n) const -{ - return _data->_headers[n]; -} - - - -MultiPartInputFile::~MultiPartInputFile() -{ - for (map::iterator it = _data->_inputFiles.begin(); - it != _data->_inputFiles.end(); it++) - { - delete it->second; - } - - delete _data; -} - - -bool -MultiPartInputFile::Data::checkSharedAttributesValues(const Header & src, - const Header & dst, - vector & conflictingAttributes) const -{ - conflictingAttributes.clear(); - - bool conflict = false; - - // - // Display Window - // - if (src.displayWindow() != dst.displayWindow()) - { - conflict = true; - conflictingAttributes.push_back ("displayWindow"); - } - - - // - // Pixel Aspect Ratio - // - if (src.pixelAspectRatio() != dst.pixelAspectRatio()) - { - conflict = true; - conflictingAttributes.push_back ("pixelAspectRatio"); - } - - - // - // Timecode - // - const TimeCodeAttribute * srcTimeCode = src.findTypedAttribute< - TimeCodeAttribute> (TimeCodeAttribute::staticTypeName()); - const TimeCodeAttribute * dstTimeCode = dst.findTypedAttribute< - TimeCodeAttribute> (TimeCodeAttribute::staticTypeName()); - - if (dstTimeCode) - { - if ( (srcTimeCode && (srcTimeCode->value() != dstTimeCode->value())) || - (!srcTimeCode)) - { - conflict = true; - conflictingAttributes.push_back (TimeCodeAttribute::staticTypeName()); - } - } - - // - // Chromaticities - // - const ChromaticitiesAttribute * srcChrom = src.findTypedAttribute< - ChromaticitiesAttribute> (ChromaticitiesAttribute::staticTypeName()); - const ChromaticitiesAttribute * dstChrom = dst.findTypedAttribute< - ChromaticitiesAttribute> (ChromaticitiesAttribute::staticTypeName()); - - if (dstChrom) - { - if ( (srcChrom && (srcChrom->value() != dstChrom->value())) || - (!srcChrom)) - { - conflict = true; - conflictingAttributes.push_back (ChromaticitiesAttribute::staticTypeName()); - } - } - - - return conflict; -} - - -void -MultiPartInputFile::initialize() -{ - readMagicNumberAndVersionField(*_data->is, _data->version); - - bool multipart = isMultiPart(_data->version); - bool tiled = isTiled(_data->version); - - // - // Multipart files don't have and shouldn't have the tiled bit set. - // - - if (tiled && multipart) - throw IEX_NAMESPACE::InputExc ("Multipart files cannot have the tiled bit set"); - - - int pos = 0; - while (true) - { - Header header; - header.readFrom(*_data->is, _data->version); - - // - // If we read nothing then we stop reading. - // - - if (header.readsNothing()) - { - pos++; - break; - } - - _data->_headers.push_back(header); - - if(multipart == false) - break; - } - - // - // Perform usual check on headers. - // - - for (size_t i = 0; i < _data->_headers.size(); i++) - { - // - // Silently invent a type if the file is a single part regular image. - // - - if( _data->_headers[i].hasType() == false ) - { - if(multipart) - - throw IEX_NAMESPACE::ArgExc ("Every header in a multipart file should have a type"); - - _data->_headers[i].setType(tiled ? TILEDIMAGE : SCANLINEIMAGE); - } - else - { - - // - // Silently fix the header type if it's wrong - // (happens when a regular Image file written by EXR_2.0 is rewritten by an older library, - // so doesn't effect deep image types) - // - - if(!multipart && !isNonImage(_data->version)) - { - _data->_headers[i].setType(tiled ? TILEDIMAGE : SCANLINEIMAGE); - } - } - - - - if( _data->_headers[i].hasName() == false ) - { - if(multipart) - throw IEX_NAMESPACE::ArgExc ("Every header in a multipart file should have a name"); - } - - if (isTiled(_data->_headers[i].type())) - _data->_headers[i].sanityCheck(true, multipart); - else - _data->_headers[i].sanityCheck(false, multipart); - } - - // - // Check name uniqueness. - // - - if (multipart) - { - set names; - for (size_t i = 0; i < _data->_headers.size(); i++) - { - - if (names.find(_data->_headers[i].name()) != names.end()) - { - throw IEX_NAMESPACE::InputExc ("Header name " + _data->_headers[i].name() + - " is not a unique name."); - } - names.insert(_data->_headers[i].name()); - } - } - - // - // Check shared attributes compliance. - // - - if (multipart && strictSharedAttribute) - { - for (size_t i = 1; i < _data->_headers.size(); i++) - { - vector attrs; - if (_data->checkSharedAttributesValues (_data->_headers[0], _data->_headers[i], attrs)) - { - string attrNames; - for (size_t j=0; j_headers[i].name() + - " has non-conforming shared attributes: "+ - attrNames); - } - } - } - - // - // Create InputParts and read chunk offset tables. - // - - for (size_t i = 0; i < _data->_headers.size(); i++) - _data->parts.push_back( - new InputPartData(_data, _data->_headers[i], i, _data->numThreads, _data->version)); - - _data->readChunkOffsetTables(_data->reconstructChunkOffsetTable); -} - -TileOffsets* -MultiPartInputFile::Data::createTileOffsets(const Header& header) -{ - // - // Get the dataWindow information - // - - const Box2i &dataWindow = header.dataWindow(); - int minX = dataWindow.min.x; - int maxX = dataWindow.max.x; - int minY = dataWindow.min.y; - int maxY = dataWindow.max.y; - - // - // Precompute level and tile information - // - - int* numXTiles; - int* numYTiles; - int numXLevels, numYLevels; - TileDescription tileDesc = header.tileDescription(); - precalculateTileInfo (tileDesc, - minX, maxX, - minY, maxY, - numXTiles, numYTiles, - numXLevels, numYLevels); - - TileOffsets* tileOffsets = new TileOffsets (tileDesc.mode, - numXLevels, - numYLevels, - numXTiles, - numYTiles); - delete [] numXTiles; - delete [] numYTiles; - - return tileOffsets; -} - - -void -MultiPartInputFile::Data::chunkOffsetReconstruction(OPENEXR_IMF_INTERNAL_NAMESPACE::IStream& is, const vector& parts) -{ - // - // Reconstruct broken chunk offset tables. Stop once we received any exception. - // - - Int64 position = is.tellg(); - - - // - // check we understand all the parts available: if not, we cannot continue - // exceptions thrown here should trickle back up to the constructor - // - - for (size_t i = 0; i < parts.size(); i++) - { - Header& header=parts[i]->header; - - // - // do we have a valid type entry? - // we only need them for true multipart files or single part non-image (deep) files - // - if(!header.hasType() && (isMultiPart(version) || isNonImage(version))) - { - throw IEX_NAMESPACE::ArgExc("cannot reconstruct incomplete file: part with missing type"); - } - if(!isSupportedType(header.type())) - { - throw IEX_NAMESPACE::ArgExc("cannot reconstruct incomplete file: part with unknown type "+header.type()); - } - } - - - // how many chunks should we read? We should stop when we reach the end - size_t total_chunks = 0; - - // for tiled-based parts, array of (pointers to) tileOffsets objects - // to create mapping between tile coordinates and chunk table indices - - - vector tileOffsets(parts.size()); - - // for scanline-based parts, number of scanlines in each part - vector rowsizes(parts.size()); - - for(size_t i = 0 ; i < parts.size() ; i++) - { - total_chunks += parts[i]->chunkOffsets.size(); - if (isTiled(parts[i]->header.type())) - { - tileOffsets[i] = createTileOffsets(parts[i]->header); - }else{ - tileOffsets[i] = NULL; - // (TODO) fix this so that it doesn't need to be revised for future compression types. - switch(parts[i]->header.compression()) - { - case DWAB_COMPRESSION : - rowsizes[i] = 256; - break; - case PIZ_COMPRESSION : - case B44_COMPRESSION : - case B44A_COMPRESSION : - case DWAA_COMPRESSION : - rowsizes[i]=32; - break; - case ZIP_COMPRESSION : - case PXR24_COMPRESSION : - rowsizes[i]=16; - break; - case ZIPS_COMPRESSION : - case RLE_COMPRESSION : - case NO_COMPRESSION : - rowsizes[i]=1; - break; - default : - throw(IEX_NAMESPACE::ArgExc("Unknown compression method in chunk offset reconstruction")); - } - } - } - - try - { - - // - // - // - - Int64 chunk_start = position; - for (size_t i = 0; i < total_chunks ; i++) - { - // - // do we have a part number? - // - - int partNumber = 0; - if(isMultiPart(version)) - { - OPENEXR_IMF_INTERNAL_NAMESPACE::Xdr::read (is, partNumber); - } - - - - if(partNumber<0 || partNumber>int(parts.size())) - { - // bail here - bad part number - throw int(); - } - - Header& header = parts[partNumber]->header; - - // size of chunk NOT including multipart field - - Int64 size_of_chunk=0; - - if (isTiled(header.type())) - { - // - // - // - int tilex,tiley,levelx,levely; - OPENEXR_IMF_INTERNAL_NAMESPACE::Xdr::read (is, tilex); - OPENEXR_IMF_INTERNAL_NAMESPACE::Xdr::read (is, tiley); - OPENEXR_IMF_INTERNAL_NAMESPACE::Xdr::read (is, levelx); - OPENEXR_IMF_INTERNAL_NAMESPACE::Xdr::read (is, levely); - - //std::cout << "chunk_start for " << tilex <<',' << tiley << ',' << levelx << ' ' << levely << ':' << chunk_start << std::endl; - - - if(!tileOffsets[partNumber]) - { - // this shouldn't actually happen - we should have allocated a valid - // tileOffsets for any part which isTiled - throw int(); - - } - - if(!tileOffsets[partNumber]->isValidTile(tilex,tiley,levelx,levely)) - { - //std::cout << "invalid tile : aborting\n"; - throw int(); - } - - (*tileOffsets[partNumber])(tilex,tiley,levelx,levely)=chunk_start; - - // compute chunk sizes - different procedure for deep tiles and regular - // ones - if(header.type()==DEEPTILE) - { - Int64 packed_offset; - Int64 packed_sample; - OPENEXR_IMF_INTERNAL_NAMESPACE::Xdr::read (is, packed_offset); - OPENEXR_IMF_INTERNAL_NAMESPACE::Xdr::read (is, packed_sample); - - //add 40 byte header to packed sizes (tile coordinates, packed sizes, unpacked size) - size_of_chunk=packed_offset+packed_sample+40; - } - else - { - - // regular image has 20 bytes of header, 4 byte chunksize; - int chunksize; - OPENEXR_IMF_INTERNAL_NAMESPACE::Xdr::read (is, chunksize); - size_of_chunk=chunksize+20; - } - } - else - { - int y_coordinate; - OPENEXR_IMF_INTERNAL_NAMESPACE::Xdr::read (is, y_coordinate); - - y_coordinate -= header.dataWindow().min.y; - y_coordinate /= rowsizes[partNumber]; - - if(y_coordinate < 0 || y_coordinate >= int(parts[partNumber]->chunkOffsets.size())) - { - //std::cout << "aborting reconstruction: bad data " << y_coordinate << endl; - //bail to exception catcher: broken scanline - throw int(); - } - - parts[partNumber]->chunkOffsets[y_coordinate]=chunk_start; - //std::cout << "chunk_start for " << y_coordinate << ':' << chunk_start << std::endl; - - if(header.type()==DEEPSCANLINE) - { - Int64 packed_offset; - Int64 packed_sample; - OPENEXR_IMF_INTERNAL_NAMESPACE::Xdr::read (is, packed_offset); - OPENEXR_IMF_INTERNAL_NAMESPACE::Xdr::read (is, packed_sample); - - - size_of_chunk=packed_offset+packed_sample+28; - } - else - { - int chunksize; - OPENEXR_IMF_INTERNAL_NAMESPACE::Xdr::read (is, chunksize); - size_of_chunk=chunksize+8; - } - - } - - if(isMultiPart(version)) - { - chunk_start+=4; - } - - chunk_start+=size_of_chunk; - - //std::cout << " next chunk +"<header,false); - parts[i]->chunkOffsets.resize(chunkOffsetTableSize); - - for (int j = 0; j < chunkOffsetTableSize; j++) - OPENEXR_IMF_INTERNAL_NAMESPACE::Xdr::read (*is, parts[i]->chunkOffsets[j]); - - // - // Check chunk offsets, reconstruct if broken. - // At first we assume the table is complete. - // - parts[i]->completed = true; - for (int j = 0; j < chunkOffsetTableSize; j++) - { - if (parts[i]->chunkOffsets[j] <= 0) - { - brokenPartsExist = true; - parts[i]->completed = false; - break; - } - } - } - - if (brokenPartsExist && reconstructChunkOffsetTable) - chunkOffsetReconstruction(*is, parts); -} - -int -MultiPartInputFile::version() const -{ - return _data->version; -} - -bool -MultiPartInputFile::partComplete(int part) const -{ - return _data->parts[part]->completed; -} - -int -MultiPartInputFile::parts() const -{ - return int(_data->_headers.size()); -} - - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_EXIT diff --git a/3rdparty/openexr/IlmImf/ImfMultiPartInputFile.h b/3rdparty/openexr/IlmImf/ImfMultiPartInputFile.h deleted file mode 100644 index 67ac5a433f..0000000000 --- a/3rdparty/openexr/IlmImf/ImfMultiPartInputFile.h +++ /dev/null @@ -1,134 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2011, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - -#ifndef IMFMULTIPARTINPUTFILE_H_ -#define IMFMULTIPARTINPUTFILE_H_ - -#include "ImfGenericInputFile.h" -#include "ImfNamespace.h" -#include "ImfForward.h" -#include "ImfThreading.h" -#include "ImfExport.h" - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER - - -class MultiPartInputFile : public GenericInputFile -{ - public: - IMF_EXPORT - MultiPartInputFile(const char fileName[], - int numThreads = globalThreadCount(), - bool reconstructChunkOffsetTable = true); - - IMF_EXPORT - MultiPartInputFile(IStream& is, - int numThreads = globalThreadCount(), - bool reconstructChunkOffsetTable = true); - - IMF_EXPORT - virtual ~MultiPartInputFile(); - - // ---------------------- - // Count of number of parts in file - // --------------------- - IMF_EXPORT - int parts() const; - - - //---------------------- - // Access to the headers - //---------------------- - - IMF_EXPORT - const Header & header(int n) const; - - - //---------------------------------- - // Access to the file format version - //---------------------------------- - - IMF_EXPORT - int version () const; - - - // =---------------------------------------- - // Check whether the entire chunk offset - // table for the part is written correctly - // ----------------------------------------- - IMF_EXPORT - bool partComplete(int part) const; - - - struct Data; - - - private: - Data* _data; - - MultiPartInputFile(const MultiPartInputFile &); // not implemented - - - // - // used internally by 'Part' types to access individual parts of the multipart file - // - template T* getInputPart(int partNumber); - InputPartData* getPart(int); - - void initialize(); - - - - - friend class InputPart; - friend class ScanLineInputPart; - friend class TiledInputPart; - friend class DeepScanLineInputPart; - friend class DeepTiledInputPart; - - // - // For backward compatibility. - // - - friend class InputFile; - friend class TiledInputFile; - friend class ScanLineInputFile; - friend class DeepScanLineInputFile; - friend class DeepTiledInputFile; -}; - - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT - -#endif /* IMFMULTIPARTINPUTFILE_H_ */ diff --git a/3rdparty/openexr/IlmImf/ImfMultiPartOutputFile.cpp b/3rdparty/openexr/IlmImf/ImfMultiPartOutputFile.cpp deleted file mode 100644 index 8260cd223a..0000000000 --- a/3rdparty/openexr/IlmImf/ImfMultiPartOutputFile.cpp +++ /dev/null @@ -1,519 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2011, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - -#include "ImfMultiPartOutputFile.h" -#include "ImfBoxAttribute.h" -#include "ImfFloatAttribute.h" -#include "ImfTimeCodeAttribute.h" -#include "ImfChromaticitiesAttribute.h" -#include "ImfOutputPartData.h" -#include "ImfPartType.h" -#include "ImfOutputFile.h" -#include "ImfTiledOutputFile.h" -#include "ImfThreading.h" -#include "IlmThreadMutex.h" -#include "ImfMisc.h" -#include "ImfStdIO.h" -#include "ImfDeepScanLineOutputFile.h" -#include "ImfDeepTiledOutputFile.h" -#include "ImfOutputStreamMutex.h" - -#include "ImfNamespace.h" -#include - - -#include - - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_ENTER - -using IMATH_NAMESPACE::Box2i; -using ILMTHREAD_NAMESPACE::Lock; - - -using std::vector; -using std::map; -using std::set; - - -struct MultiPartOutputFile::Data: public OutputStreamMutex -{ - vector parts; // Contains data to initialize Output files. - bool deleteStream; // If we should delete the stream when destruction. - int numThreads; // The number of threads. - std::map _outputFiles; - std::vector
_headers; - - - void headerNameUniquenessCheck (const std::vector
&headers); - - void writeHeadersToFile (const std::vector
&headers); - - void writeChunkTableOffsets (std::vector &parts); - - - //------------------------------------- - // ensure that _headers is valid: called by constructors - //------------------------------------- - void do_header_sanity_checks(bool overrideSharedAttributes); - - // ------------------------------------------------ - // Given a source header, we copy over all the 'shared attributes' to - // the destination header and remove any conflicting ones. - // ------------------------------------------------ - void overrideSharedAttributesValues (const Header & src, - Header & dst); - - // ------------------------------------------------ - // Given a source header, we check the destination header for any - // attributes that are part of the shared attribute set. For attributes - // present in both we check the values. For attribute present in - // destination but absent in source we return false. - // For attributes present in src but missing from dst we return false - // and add the attribute to dst. - // We return false for all other cases. - // If we return true then we also populate the conflictingAttributes - // vector with the names of the attributes that failed the above. - // ------------------------------------------------ - bool checkSharedAttributesValues (const Header & src, - const Header & dst, - std::vector & conflictingAttributes) const; - Data (bool deleteStream, int numThreads): - OutputStreamMutex(), - deleteStream (deleteStream), - numThreads (numThreads) - { - } - - - ~Data() - { - if (deleteStream) delete os; - - for (size_t i = 0; i < parts.size(); i++) - delete parts[i]; - } -}; - -void -MultiPartOutputFile::Data::do_header_sanity_checks(bool overrideSharedAttributes) -{ - size_t parts = _headers.size(); - if (parts == 0) - throw IEX_NAMESPACE::ArgExc ("Empty header list."); - - bool isMultiPart = (parts > 1); - - // - // Do part 0 checks first. - // - - _headers[0].sanityCheck (_headers[0].hasTileDescription(), isMultiPart); - - - if (isMultiPart) - { - // multipart files must contain a chunkCount attribute - _headers[0].setChunkCount(getChunkOffsetTableSize(_headers[0],true)); - - for (size_t i = 1; i < parts; i++) - { - if (_headers[i].hasType() == false) - throw IEX_NAMESPACE::ArgExc ("Every header in a multipart file should have a type"); - - - _headers[i].setChunkCount(getChunkOffsetTableSize(_headers[i],true)); - _headers[i].sanityCheck (_headers[i].hasTileDescription(), isMultiPart); - - - if (overrideSharedAttributes) - overrideSharedAttributesValues(_headers[0],_headers[i]); - else - { - std::vector conflictingAttributes; - bool valid =checkSharedAttributesValues (_headers[0], - _headers[i], - conflictingAttributes); - if (valid) - { - string excMsg("Conflicting attributes found for header :: "); - excMsg += _headers[i].name(); - for (size_t i=0; i_headers.resize(parts); - - for(int i=0;i_headers[i]=headers[i]; - } - try - { - - _data->do_header_sanity_checks(overrideSharedAttributes); - - // - // Build parts and write headers and offset tables to file. - // - - _data->os = new StdOFStream (fileName); - for (size_t i = 0; i < _data->_headers.size(); i++) - _data->parts.push_back( new OutputPartData(_data, _data->_headers[i], i, numThreads, parts>1 ) ); - - writeMagicNumberAndVersionField(*_data->os, &_data->_headers[0],_data->_headers.size()); - _data->writeHeadersToFile(_data->_headers); - _data->writeChunkTableOffsets(_data->parts); - } - catch (IEX_NAMESPACE::BaseExc &e) - { - delete _data; - - REPLACE_EXC (e, "Cannot open image file " - "\"" << fileName << "\". " << e.what()); - throw; - } - catch (...) - { - delete _data; - throw; - } -} - -MultiPartOutputFile::MultiPartOutputFile(OStream& os, - const Header* headers, - int parts, - bool overrideSharedAttributes, - int numThreads): - _data(new Data(false,numThreads)) -{ - // grab headers - _data->_headers.resize(parts); - _data->os=&os; - - for(int i=0;i_headers[i]=headers[i]; - } - try - { - - _data->do_header_sanity_checks(overrideSharedAttributes); - - // - // Build parts and write headers and offset tables to file. - // - - for (size_t i = 0; i < _data->_headers.size(); i++) - _data->parts.push_back( new OutputPartData(_data, _data->_headers[i], i, numThreads, parts>1 ) ); - - writeMagicNumberAndVersionField(*_data->os, &_data->_headers[0],_data->_headers.size()); - _data->writeHeadersToFile(_data->_headers); - _data->writeChunkTableOffsets(_data->parts); - } - catch (IEX_NAMESPACE::BaseExc &e) - { - delete _data; - - REPLACE_EXC (e, "Cannot open image stream " - "\"" << os.fileName() << "\". " << e.what()); - throw; - } - catch (...) - { - delete _data; - throw; - } -} - - -const Header & -MultiPartOutputFile::header(int n) const -{ - if(n<0 || n>int(_data->_headers.size())) - { - throw IEX_NAMESPACE::ArgExc("MultiPartOutputFile::header called with invalid part number"); - } - return _data->_headers[n]; -} - -int -MultiPartOutputFile::parts() const -{ - return _data->_headers.size(); -} - - -MultiPartOutputFile::~MultiPartOutputFile () -{ - for (map::iterator it = _data->_outputFiles.begin(); - it != _data->_outputFiles.end(); it++) - { - delete it->second; - } - - delete _data; -} - -template -T* -MultiPartOutputFile::getOutputPart(int partNumber) -{ - Lock lock(*_data); - if (_data->_outputFiles.find(partNumber) == _data->_outputFiles.end()) - { - T* file = new T(_data->parts[partNumber]); - _data->_outputFiles.insert(std::make_pair(partNumber, (GenericOutputFile*) file)); - return file; - } - else return (T*) _data->_outputFiles[partNumber]; -} - -// instance above function for all four types -template OutputFile* MultiPartOutputFile::getOutputPart(int); -template TiledOutputFile * MultiPartOutputFile::getOutputPart(int); -template DeepScanLineOutputFile * MultiPartOutputFile::getOutputPart (int); -template DeepTiledOutputFile * MultiPartOutputFile::getOutputPart (int); - - - -void -MultiPartOutputFile::Data::overrideSharedAttributesValues(const Header & src, Header & dst) -{ - // - // Display Window - // - const Box2iAttribute * displayWindow = - src.findTypedAttribute ("displayWindow"); - - if (displayWindow) - dst.insert ("displayWindow", *displayWindow); - else - dst.erase ("displayWindow"); - - - // - // Pixel Aspect Ratio - // - const FloatAttribute * pixelAspectRatio = - src.findTypedAttribute ("pixelAspectRatio"); - - if (pixelAspectRatio) - dst.insert ("pixelAspectRatio", *pixelAspectRatio); - else - dst.erase ("pixelAspectRatio"); - - - // - // Timecode - // - const TimeCodeAttribute * timeCode = - src.findTypedAttribute ("timecode"); - - if (timeCode) - dst.insert ("timecode", *timeCode); - else - dst.erase ("timecode"); - - - // - // Chromaticities - // - const ChromaticitiesAttribute * chromaticities = - src.findTypedAttribute ("chromaticities"); - - if (chromaticities) - dst.insert ("chromaticities", *chromaticities); - else - dst.erase ("chromaticities"); - -} - - -bool -MultiPartOutputFile::Data::checkSharedAttributesValues(const Header & src, - const Header & dst, - vector & conflictingAttributes) const -{ - bool conflict = false; - - // - // Display Window - // - if (src.displayWindow() != dst.displayWindow()) - { - conflict = true; - conflictingAttributes.push_back ("displayWindow"); - } - - - // - // Pixel Aspect Ratio - // - if (src.pixelAspectRatio() != dst.pixelAspectRatio()) - { - conflict = true; - conflictingAttributes.push_back ("pixelAspectRatio"); - } - - - // - // Timecode - // - const TimeCodeAttribute * srcTimeCode = src.findTypedAttribute< - TimeCodeAttribute> (TimeCodeAttribute::staticTypeName()); - const TimeCodeAttribute * dstTimeCode = dst.findTypedAttribute< - TimeCodeAttribute> (TimeCodeAttribute::staticTypeName()); - - if (dstTimeCode) - { - if ((srcTimeCode && (srcTimeCode->value() != dstTimeCode->value())) || - (!srcTimeCode)) - { - conflict = true; - conflictingAttributes.push_back (TimeCodeAttribute::staticTypeName()); - } - } - - // - // Chromaticities - // - const ChromaticitiesAttribute * srcChrom = src.findTypedAttribute< - ChromaticitiesAttribute> (ChromaticitiesAttribute::staticTypeName()); - const ChromaticitiesAttribute * dstChrom = dst.findTypedAttribute< - ChromaticitiesAttribute> (ChromaticitiesAttribute::staticTypeName()); - - if (dstChrom) - { - if ( (srcChrom && (srcChrom->value() != dstChrom->value())) || - (!srcChrom)) - { - conflict = true; - conflictingAttributes.push_back (ChromaticitiesAttribute::staticTypeName()); - } - } - - return conflict; -} - - -void -MultiPartOutputFile::Data::headerNameUniquenessCheck (const vector
&headers) -{ - set names; - for (size_t i = 0; i < headers.size(); i++) - { - if (names.find(headers[i].name()) != names.end()) - throw IEX_NAMESPACE::ArgExc ("Each part should have a unique name."); - names.insert(headers[i].name()); - } -} - -void -MultiPartOutputFile::Data::writeHeadersToFile (const vector
&headers) -{ - for (size_t i = 0; i < headers.size(); i++) - { - - // (TODO) consider deep files' preview images here. - if (headers[i].type() == TILEDIMAGE) - parts[i]->previewPosition = headers[i].writeTo(*os, true); - else - parts[i]->previewPosition = headers[i].writeTo(*os, false); - } - - // - // If a multipart file, write zero-length attribute name to mark the end of all headers. - // - - if (headers.size() !=1) - OPENEXR_IMF_INTERNAL_NAMESPACE::Xdr::write (*os, ""); -} - -void -MultiPartOutputFile::Data::writeChunkTableOffsets (vector &parts) -{ - for (size_t i = 0; i < parts.size(); i++) - { - int chunkTableSize = getChunkOffsetTableSize(parts[i]->header,false); - - Int64 pos = os->tellp(); - - if (pos == -1) - IEX_NAMESPACE::throwErrnoExc ("Cannot determine current file position (%T)."); - - parts[i]->chunkOffsetTablePosition = os->tellp(); - - // - // Fill in empty data for now. We'll write actual offsets during destruction. - // - - for (int j = 0; j < chunkTableSize; j++) - { - Int64 empty = 0; - OPENEXR_IMF_INTERNAL_NAMESPACE::Xdr::write (*os, empty); - } - } -} - - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_EXIT diff --git a/3rdparty/openexr/IlmImf/ImfMultiPartOutputFile.h b/3rdparty/openexr/IlmImf/ImfMultiPartOutputFile.h deleted file mode 100644 index f8269f12aa..0000000000 --- a/3rdparty/openexr/IlmImf/ImfMultiPartOutputFile.h +++ /dev/null @@ -1,122 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2011, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// Portions (c) 2012 Weta Digital Ltd -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - -#ifndef MULTIPARTOUTPUTFILE_H_ -#define MULTIPARTOUTPUTFILE_H_ - -#include "ImfHeader.h" -#include "ImfGenericOutputFile.h" -#include "ImfForward.h" -#include "ImfThreading.h" -#include "ImfNamespace.h" -#include "ImfExport.h" - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER - - -// -// Class responsible for handling the writing of multipart images. -// -// Note: Certain attributes are 'common' to all parts. Notably: -// * Display Window -// * Pixel Aspect Ratio -// * Time Code -// * Chromaticities -// The first header forms the basis for the set of attributes that are shared -// across the constituent parts. -// -// Parameters -// headers - pointer to array of headers; one for each part of the image file -// parts - count of number of parts -// overrideSharedAttributes - toggle for the handling of shared attributes. -// set false to check for inconsistencies, true -// to copy the values over from the first header. -// numThreads - number of threads that should be used in encoding the data. -// - -class MultiPartOutputFile : public GenericOutputFile -{ - public: - IMF_EXPORT - MultiPartOutputFile(const char fileName[], - const Header * headers, - int parts, - bool overrideSharedAttributes = false, - int numThreads = globalThreadCount()); - - IMF_EXPORT - MultiPartOutputFile(OStream & os, - const Header * headers, - int parts, - bool overrideSharedAttributes = false, - int numThreads = globalThreadCount()); - - // - // return number of parts in file - // - IMF_EXPORT - int parts() const; - - // - // return header for part n - // (note: may have additional attributes compared to that passed to constructor) - // - IMF_EXPORT - const Header & header(int n) const; - - IMF_EXPORT - ~MultiPartOutputFile(); - - struct Data; - - private: - Data* _data; - - MultiPartOutputFile(const MultiPartOutputFile &); // not implemented - - template T* getOutputPart(int partNumber); - - - friend class OutputPart; - friend class TiledOutputPart; - friend class DeepScanLineOutputPart; - friend class DeepTiledOutputPart; -}; - - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT - -#endif /* MULTIPARTOUTPUTFILE_H_ */ diff --git a/3rdparty/openexr/IlmImf/ImfMultiView.cpp b/3rdparty/openexr/IlmImf/ImfMultiView.cpp deleted file mode 100644 index acca3fe4b1..0000000000 --- a/3rdparty/openexr/IlmImf/ImfMultiView.cpp +++ /dev/null @@ -1,435 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2007, Weta Digital Ltd -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Weta Digital nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - -//----------------------------------------------------------------------------- -// -// Functions related to accessing channels -// and views in multi-view OpenEXR files. -// -//----------------------------------------------------------------------------- - -#include - -using namespace std; -#include "ImfNamespace.h" - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_ENTER - -namespace { - -StringVector -parseString (string name, char c = '.') -{ - // - // Turn name into a list of strings, separating - // on char 'c' with whitespace stripped. - // - - StringVector r; - - while (name.size() > 0) - { - size_t s = name.find (c); - string sec = name.substr (0, s); - - // - // Strip spaces from beginning - // - - while (sec.size() > 0 && sec[0] == ' ') - sec.erase (0, 1); - - // - // Strip spaces from end - // - - while (sec.size() > 0 && sec[sec.size() - 1] == ' ') - sec.erase (sec.size() - 1); - - r.push_back (sec); - - // - // Strip off name including ending 'c' - // - - if (s == name.npos) - name = ""; - else - name = name.substr (s + 1); - } - - return r; -} - - -int -viewNum (const string &view, const StringVector &multiView) -{ - // - // returns which view number is called 'view' - // returns -1 if no member of multiView is 'view' - // (i.e. if viewNum() returns -1, 'view' isn't a view name - // if viewNum() returns 0, 'view' is the default view - // otherwise, it's some other (valid) view - // - - for (size_t i = 0; i < multiView.size(); ++i) - { - if (multiView[i] == view) - return i; - } - - return -1; -} - -} // namespace - - -string -defaultViewName (const StringVector &multiView) -{ - if (multiView.size() > 0) - return multiView[0]; - else - return ""; -} - - -string -viewFromChannelName (const string &channel, - const StringVector &multiView) -{ - // - // Given the name of a channel, return the name of the view to - // which it belongs. - // - - // - // View name is penultimate section of name separated by periods ('.'s) - // - - StringVector s = parseString (channel, '.'); - - if (s.size() == 0) - return ""; // nothing in, nothing out - - if (s.size() == 1) - { - // - // Return default view name. - // The rules say ALL channels with no periods - // in the name belong to the default view. - // - - return multiView[0]; - } - else - { - // - // size >= 2 - the last part is the channel name, - // the next-to-last part is the view name. - // Check if that part of the name really is - // a valid view and, if it is, return it. - // - - const string &viewName = s[s.size() - 2]; - - if (viewNum (viewName, multiView) >= 0) - return viewName; - else - return ""; // not associated with any particular view - } -} - - -ChannelList -channelsInView (const string & viewName, - const ChannelList & channelList, - const StringVector & multiView) -{ - // - // Return a list of all channels belonging to view viewName. - // - - ChannelList q; - - for (ChannelList::ConstIterator i = channelList.begin(); - i != channelList.end(); - ++i) - { - // - // Get view name for this channel - // - - string view = viewFromChannelName (i.name(), multiView); - - - // - // Insert channel into q if it's a member of view viewName - // - - if (view == viewName) - q.insert (i.name(), i.channel()); - } - - return q; -} - - -ChannelList -channelsInNoView (const ChannelList &channelList, - const StringVector &multiView) -{ - // - // Return a list of channels not associated with any named view. - // - - return channelsInView ("", channelList, multiView); -} - - - -bool -areCounterparts (const string &channel1, - const string &channel2, - const StringVector &multiView) -{ - // - // Given two channels, return true if they are the same - // channel in two different views. - // - - StringVector chan1 = parseString (channel1); - size_t size1 = chan1.size(); // number of SECTIONS in string - // name (not string length) - - StringVector chan2 = parseString (channel2); - size_t size2 = chan2.size(); - - if (size1 == 0 || size2 == 0) - return false; - - // - // channel1 and channel2 can't be counterparts - // if either channel is in no view. - // - - if (size1 > 1 && viewNum (chan1[size1 - 2], multiView) == -1) - return false; - - if (size2 > 1 && viewNum (chan2[size2 - 2], multiView) == -1) - return false; - - if (viewFromChannelName (channel1, multiView) == - viewFromChannelName (channel2, multiView)) - { - // - // channel1 and channel2 are not counterparts - // if they are in the same view. - // - - return false; - } - - if (size1 == 1) - { - // - // channel1 is a default channel - the channels will only be - // counterparts if channel2 is of the form . - // - - return size2 == 2 && chan1[0] == chan2[1]; - } - - if (size2 == 1) - { - // - // channel2 is a default channel - the channels will only be - // counterparts if channel1 is of the form . - // - - return size1 == 2 && chan2[0] == chan1[1]; - } - - // - // Neither channel is a default channel. To be counterparts both - // channel names must have the same number of components, and - // all components except the penultimate one must be the same. - // - - if (size1 != size2) - return false; - - for(size_t i = 0; i < size1; ++i) - { - if (i != size1 - 2 && chan1[i] != chan2[i]) - return false; - } - - return true; -} - - -ChannelList -channelInAllViews (const string &channelName, - const ChannelList &channelList, - const StringVector &multiView) -{ - // - // Given the name of a channel, return a - // list of the same channel in all views. - // - - ChannelList q; - - for (ChannelList::ConstIterator i=channelList.begin(); - i != channelList.end(); - ++i) - { - if (i.name() == channelName || - areCounterparts (i.name(), channelName, multiView)) - { - q.insert (i.name(), i.channel()); - } - } - - return q; -} - - -string -channelInOtherView (const string &channelName, - const ChannelList &channelList, - const StringVector &multiView, - const string &otherViewName) -{ - // - // Given the name of a channel in one view, return the - // corresponding channel name for view otherViewName. - // - - for (ChannelList::ConstIterator i=channelList.begin(); - i != channelList.end(); - ++i) - { - if (viewFromChannelName (i.name(), multiView) == otherViewName && - areCounterparts (i.name(), channelName, multiView)) - { - return i.name(); - } - } - - return ""; -} - - -string -insertViewName (const string &channel, - const StringVector &multiView, - int i) -{ - // - // Insert multiView[i] into the channel name if appropriate. - // - - StringVector s = parseString (channel, '.'); - - if (s.size() == 0) - return ""; // nothing in, nothing out - - if (s.size() == 1 && i == 0) - { - // - // Channel in the default view, with no periods in its name. - // Do not insert view name. - // - - return channel; - } - - // - // View name becomes penultimate section of new channel name. - // - - string newName; - - for (size_t j = 0; j < s.size(); ++j) - { - if (j < s.size() - 1) - newName += s[j] + "."; - else - newName += multiView[i] + "." + s[j]; - } - - return newName; -} - - -string -removeViewName(const string & channel,const string & view) -{ - StringVector s = parseString (channel, '.'); - - if (s.size() == 0) - return ""; // nothing in, nothing out - - if (s.size() == 1) - { - // - // Channel in the default view, since no periods in its name. - // No viewname to remove - // - - return channel; - } - - string newName; - for( size_t j = 0 ; j < s.size() ; ++j) - { - // only add the penultimate string part - // if it doesn't match the view name - if(j+2!=s.size() || s[j]!=view) - { - newName += s[j]; - if(j+1!=s.size()) - { - newName += "."; - } - } - } - - return newName; - -} - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_EXIT diff --git a/3rdparty/openexr/IlmImf/ImfMultiView.h b/3rdparty/openexr/IlmImf/ImfMultiView.h deleted file mode 100644 index 127f97d858..0000000000 --- a/3rdparty/openexr/IlmImf/ImfMultiView.h +++ /dev/null @@ -1,187 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2007, Weta Digital Ltd -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Weta Digital nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - -#ifndef INCLUDED_IMF_MULTIVIEW_H -#define INCLUDED_IMF_MULTIVIEW_H - -#include "ImfChannelList.h" -#include "ImfStringVectorAttribute.h" -#include "ImfExport.h" -#include "ImfNamespace.h" - -//----------------------------------------------------------------------------- -// -// Functions related to accessing channels and views in multi-view -// OpenEXR files. -// -// A multi-view image file contains two or more views of the same -// scene, as seen from different viewpoints, for example, a left-eye -// and a right-eye view for stereo displays. Each view has its own -// set of image channels. A naming convention identifies the channels -// that belong to a given view. -// -// A "multiView" attribute in the file header lists the names of the -// views in an image (see ImfStandardAttributes.h), and channel names -// of the form -// -// layer.view.channel -// -// allow channels to be matched with views. -// -// For compatibility with singe-view images, the first view listed in -// the multiView attribute is the "default view", and channels that -// have no periods in their names are considered part of the default -// view. -// -// For example, if a file's multiView attribute lists the views -// "left" and "right", in that order, then "left" is the default -// view. Channels -// -// "R", "left.Z", "diffuse.left.R" -// -// are part of the "left" view; channels -// -// "right.R", "right.Z", "diffuse.right.R" -// -// are part of the "right" view; and channels -// -// "tmp.R", "right.diffuse.R", "diffuse.tmp.R" -// -// belong to no view at all. -// -//----------------------------------------------------------------------------- - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER - -// -// Return the name of the default view given a multi-view string vector, -// that is, return the first element of the string vector. If the string -// vector is empty, return "". -// - -IMF_EXPORT -std::string defaultViewName (const StringVector &multiView); - - -// -// Given the name of a channel, return the name of the view to -// which it belongs. Returns the empty string ("") if the channel -// is not a member of any named view. -// - -IMF_EXPORT -std::string viewFromChannelName (const std::string &channel, - const StringVector &multiView); - - -// -// Return whether channel1 and channel2 are the same channel but -// viewed in different views. (Return false if either channel -// belongs to no view or if both channels belong to the same view.) -// - -IMF_EXPORT -bool areCounterparts (const std::string &channel1, - const std::string &channel2, - const StringVector &multiView); - -// -// Return a list of all channels belonging to view viewName. -// - -IMF_EXPORT -ChannelList channelsInView (const std::string &viewName, - const ChannelList &channelList, - const StringVector &multiView); - -// -// Return a list of channels not associated with any view. -// - -IMF_EXPORT -ChannelList channelsInNoView (const ChannelList &channelList, - const StringVector &multiView); - -// -// Given the name of a channel, return a list of the same channel -// in all views (for example, given X.left.Y return X.left.Y, -// X.right.Y, X.centre.Y, etc.). -// - -IMF_EXPORT -ChannelList channelInAllViews (const std::string &channame, - const ChannelList &channelList, - const StringVector &multiView); - -// -// Given the name of a channel in one view, return the corresponding -// channel name for view otherViewName. Return "" if no corresponding -// channel exists in view otherViewName, or if view otherViewName doesn't -// exist. -// - -IMF_EXPORT -std::string channelInOtherView (const std::string &channel, - const ChannelList &channelList, - const StringVector &multiView, - const std::string &otherViewName); - -// -// Given a channel name that does not include a view name, insert -// multiView[i] into the channel name at the appropriate location. -// If i is zero and the channel name contains no periods, then do -// not insert the view name. -// - -IMF_EXPORT -std::string insertViewName (const std::string &channel, - const StringVector &multiView, - int i); - -// -// Given a channel name that does may include a view name, return -// string without the view name. If the string does not contain -// the view name, return the string unaltered. -// (Will only remove the viewname if it is in the correct position -// in the string) -// - -IMF_EXPORT -std::string removeViewName (const std::string &channel, - const std::string &view); - - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT - -#endif diff --git a/3rdparty/openexr/IlmImf/ImfName.h b/3rdparty/openexr/IlmImf/ImfName.h deleted file mode 100644 index 17fa33a3f9..0000000000 --- a/3rdparty/openexr/IlmImf/ImfName.h +++ /dev/null @@ -1,159 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - - -#ifndef INCLUDED_IMF_NAME_H -#define INCLUDED_IMF_NAME_H - -//----------------------------------------------------------------------------- -// -// class ImfName -- a zero-terminated string -// with a fixed, small maximum length -// -//----------------------------------------------------------------------------- - -#include -#include "ImfNamespace.h" -#include "ImfExport.h" - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER - - -class Name -{ - public: - - //------------- - // Constructors - //------------- - - IMF_EXPORT - Name (); - IMF_EXPORT - Name (const char text[]); - - - //-------------------- - // Assignment operator - //-------------------- - - IMF_EXPORT - Name & operator = (const char text[]); - - - //--------------------- - // Access to the string - //--------------------- - - IMF_EXPORT - const char * text () const {return _text;} - IMF_EXPORT - const char * operator * () const {return _text;} - - //--------------- - // Maximum length - //--------------- - - static const int SIZE = 256; - static const int MAX_LENGTH = SIZE - 1; - - private: - - char _text[SIZE]; -}; - - -IMF_EXPORT -bool operator == (const Name &x, const Name &y); -IMF_EXPORT -bool operator != (const Name &x, const Name &y); -IMF_EXPORT -bool operator < (const Name &x, const Name &y); - - -//----------------- -// Inline functions -//----------------- - -inline Name & -Name::operator = (const char text[]) -{ - strncpy (_text, text, MAX_LENGTH); - return *this; -} - - -inline -Name::Name () -{ - _text[0] = 0; -} - - -inline -Name::Name (const char text[]) -{ - *this = text; - _text [MAX_LENGTH] = 0; -} - - -inline bool -operator == (const Name &x, const Name &y) -{ - return strcmp (*x, *y) == 0; -} - - -inline bool -operator != (const Name &x, const Name &y) -{ - return !(x == y); -} - - -inline bool -operator < (const Name &x, const Name &y) -{ - return strcmp (*x, *y) < 0; -} - - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT - - - - -#endif diff --git a/3rdparty/openexr/IlmImf/ImfNamespace.h b/3rdparty/openexr/IlmImf/ImfNamespace.h deleted file mode 100644 index c36a31eec9..0000000000 --- a/3rdparty/openexr/IlmImf/ImfNamespace.h +++ /dev/null @@ -1,115 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2012, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - -#ifndef INCLUDED_IMFNAMESPACE_H -#define INCLUDED_IMFNAMESPACE_H - -// -// The purpose of this file is to have all of the Imath symbols defined within -// the OPENEXR_IMF_INTERNAL_NAMESPACE namespace rather than the standard Imath -// namespace. Those symbols are made available to client code through the -// OPENEXR_IMF_NAMESPACE in addition to the OPENEXR_IMF_INTERNAL_NAMESPACE. -// -// To ensure source code compatibility, the OPENEXR_IMF_NAMESPACE defaults to -// Imath and then "using namespace OPENEXR_IMF_INTERNAL_NAMESPACE;" brings all -// of the declarations from the OPENEXR_IMF_INTERNAL_NAMESPACE into the -// OPENEXR_IMF_NAMESPACE. -// This means that client code can continue to use syntax like -// Imf::Header, but at link time it will resolve to a -// mangled symbol based on the OPENEXR_IMF_INTERNAL_NAMESPACE. -// -// As an example, if one needed to build against a newer version of Imath and -// have it run alongside an older version in the same application, it is now -// possible to use an internal namespace to prevent collisions between the -// older versions of Imath symbols and the newer ones. To do this, the -// following could be defined at build time: -// -// OPENEXR_IMF_INTERNAL_NAMESPACE = Imf_v2 -// -// This means that declarations inside Imath headers look like this (after -// the preprocessor has done its work): -// -// namespace Imf_v2 { -// ... -// class declarations -// ... -// } -// -// namespace Imf { -// using namespace IMF_NAMESPACE_v2; -// } -// - -// -// Open Source version of this file pulls in the OpenEXRConfig.h file -// for the configure time options. -// -#include "OpenEXRConfig.h" - - -#ifndef OPENEXR_IMF_NAMESPACE -#define OPENEXR_IMF_NAMESPACE Imf -#endif - -#ifndef OPENEXR_IMF_INTERNAL_NAMESPACE -#define OPENEXR_IMF_INTERNAL_NAMESPACE OPENEXR_IMF_NAMESPACE -#endif - -// -// We need to be sure that we import the internal namespace into the public one. -// To do this, we use the small bit of code below which initially defines -// OPENEXR_IMF_INTERNAL_NAMESPACE (so it can be referenced) and then defines -// OPENEXR_IMF_NAMESPACE and pulls the internal symbols into the public -// namespace. -// - -namespace OPENEXR_IMF_INTERNAL_NAMESPACE {} -namespace OPENEXR_IMF_NAMESPACE { - using namespace OPENEXR_IMF_INTERNAL_NAMESPACE; -} - -// -// There are identical pairs of HEADER/SOURCE ENTER/EXIT macros so that -// future extension to the namespace mechanism is possible without changing -// project source code. -// - -#define OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER namespace OPENEXR_IMF_INTERNAL_NAMESPACE { -#define OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT } - -#define OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_ENTER namespace OPENEXR_IMF_INTERNAL_NAMESPACE { -#define OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_EXIT } - - -#endif /* INCLUDED_IMFNAMESPACE_H */ diff --git a/3rdparty/openexr/IlmImf/ImfOpaqueAttribute.cpp b/3rdparty/openexr/IlmImf/ImfOpaqueAttribute.cpp deleted file mode 100644 index 4a473efe27..0000000000 --- a/3rdparty/openexr/IlmImf/ImfOpaqueAttribute.cpp +++ /dev/null @@ -1,126 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - - -//----------------------------------------------------------------------------- -// -// class OpaqueAttribute -// -//----------------------------------------------------------------------------- - -#include -#include "Iex.h" -#include -#include "ImfNamespace.h" - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_ENTER - - -OpaqueAttribute::OpaqueAttribute (const char typeName[]): - _typeName (strlen (typeName) + 1), - _dataSize (0) -{ - strcpy (_typeName, typeName); -} - - -OpaqueAttribute::OpaqueAttribute (const OpaqueAttribute &other): - _typeName (strlen (other._typeName) + 1), - _dataSize (other._dataSize), - _data (other._dataSize) -{ - strcpy (_typeName, other._typeName); - _data.resizeErase (other._dataSize); - memcpy ((char *) _data, (const char *) other._data, other._dataSize); -} - - -OpaqueAttribute::~OpaqueAttribute () -{ - // empty -} - - -const char * -OpaqueAttribute::typeName () const -{ - return _typeName; -} - - -Attribute * -OpaqueAttribute::copy () const -{ - return new OpaqueAttribute (*this); -} - - -void -OpaqueAttribute::writeValueTo (OPENEXR_IMF_INTERNAL_NAMESPACE::OStream &os, int version) const -{ - Xdr::write (os, _data, _dataSize); -} - - -void -OpaqueAttribute::readValueFrom (OPENEXR_IMF_INTERNAL_NAMESPACE::IStream &is, int size, int version) -{ - _data.resizeErase (size); - _dataSize = size; - Xdr::read (is, _data, size); -} - - -void -OpaqueAttribute::copyValueFrom (const Attribute &other) -{ - const OpaqueAttribute *oa = dynamic_cast (&other); - - if (oa == 0 || strcmp (_typeName, oa->_typeName)) - { - THROW (IEX_NAMESPACE::TypeExc, "Cannot copy the value of an " - "image file attribute of type " - "\"" << other.typeName() << "\" " - "to an attribute of type " - "\"" << _typeName << "\"."); - } - - _data.resizeErase (oa->_dataSize); - _dataSize = oa->_dataSize; - memcpy ((char *) _data, (const char *) oa->_data, oa->_dataSize); -} - - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_EXIT diff --git a/3rdparty/openexr/IlmImf/ImfOpaqueAttribute.h b/3rdparty/openexr/IlmImf/ImfOpaqueAttribute.h deleted file mode 100644 index 9340ee9fb9..0000000000 --- a/3rdparty/openexr/IlmImf/ImfOpaqueAttribute.h +++ /dev/null @@ -1,118 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - - -#ifndef INCLUDED_IMF_OPAQUE_ATTRIBUTE_H -#define INCLUDED_IMF_OPAQUE_ATTRIBUTE_H - -//----------------------------------------------------------------------------- -// -// class OpaqueAttribute -// -// When an image file is read, OpqaqueAttribute objects are used -// to hold the values of attributes whose types are not recognized -// by the reading program. OpaqueAttribute objects can be read -// from an image file, copied, and written back to to another image -// file, but their values are inaccessible. -// -//----------------------------------------------------------------------------- - -#include "ImfAttribute.h" -#include "ImfArray.h" -#include "ImfNamespace.h" - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER - - -class OpaqueAttribute: public Attribute -{ - public: - - //---------------------------- - // Constructors and destructor - //---------------------------- - - IMF_EXPORT - OpaqueAttribute (const char typeName[]); - IMF_EXPORT - OpaqueAttribute (const OpaqueAttribute &other); - IMF_EXPORT - virtual ~OpaqueAttribute (); - - - //------------------------------- - // Get this attribute's type name - //------------------------------- - - IMF_EXPORT - virtual const char * typeName () const; - - - //------------------------------ - // Make a copy of this attribute - //------------------------------ - - IMF_EXPORT - virtual Attribute * copy () const; - - - //---------------- - // I/O and copying - //---------------- - - IMF_EXPORT - virtual void writeValueTo (OPENEXR_IMF_INTERNAL_NAMESPACE::OStream &os, - int version) const; - - IMF_EXPORT - virtual void readValueFrom (OPENEXR_IMF_INTERNAL_NAMESPACE::IStream &is, - int size, - int version); - - IMF_EXPORT - virtual void copyValueFrom (const Attribute &other); - - - private: - - Array _typeName; - long _dataSize; - Array _data; -}; - - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT - -#endif diff --git a/3rdparty/openexr/IlmImf/ImfOptimizedPixelReading.h b/3rdparty/openexr/IlmImf/ImfOptimizedPixelReading.h deleted file mode 100644 index d0bc857844..0000000000 --- a/3rdparty/openexr/IlmImf/ImfOptimizedPixelReading.h +++ /dev/null @@ -1,646 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2012, Autodesk, Inc. -// -// All rights reserved. -// -// Implementation of IIF-specific file format and speed optimizations -// provided by Innobec Technologies inc on behalf of Autodesk. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - -#pragma once - -#ifndef INCLUDED_IMF_OPTIMIZED_PIXEL_READING_H -#define INCLUDED_IMF_OPTIMIZED_PIXEL_READING_H - -#include "ImfSimd.h" -#include "ImfSystemSpecific.h" -#include -#include "ImfChannelList.h" -#include "ImfFrameBuffer.h" -#include "ImfStringVectorAttribute.h" - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER - -class OptimizationMode -{ -public: - - - bool _optimizable; - int _ySampling; - OptimizationMode() : _optimizable(false) {} - -}; - - -#ifdef IMF_HAVE_SSE2 - - -//------------------------------------------------------------------------ -// Test for SSE pointer alignemnt -//------------------------------------------------------------------------ -EXR_FORCEINLINE -bool -isPointerSSEAligned (const void* EXR_RESTRICT pPointer) -{ - uintptr_t trailingBits = ((uintptr_t)pPointer) & 15; - return trailingBits == 0; -} - -//------------------------------------------------------------------------ -// Load SSE from address into register -//------------------------------------------------------------------------ -template -EXR_FORCEINLINE -__m128i loadSSE (__m128i*& loadAddress) -{ - // throw exception :: this is not accepted - return _mm_loadu_si128 (loadAddress); -} - -template<> -EXR_FORCEINLINE -__m128i loadSSE (__m128i*& loadAddress) -{ - return _mm_loadu_si128 (loadAddress); -} - -template<> -EXR_FORCEINLINE -__m128i loadSSE (__m128i*& loadAddress) -{ - return _mm_load_si128 (loadAddress); -} - -//------------------------------------------------------------------------ -// Store SSE from register into address -//------------------------------------------------------------------------ -template -EXR_FORCEINLINE -void storeSSE (__m128i*& storeAddress, __m128i& dataToStore) -{ - -} - -template<> -EXR_FORCEINLINE -void -storeSSE (__m128i*& storeAddress, __m128i& dataToStore) -{ - _mm_storeu_si128 (storeAddress, dataToStore); -} - -template<> -EXR_FORCEINLINE -void -storeSSE (__m128i*& storeAddress, __m128i& dataToStore) -{ - _mm_stream_si128 (storeAddress, dataToStore); -} - - - -//------------------------------------------------------------------------ -// -// Write to RGBA -// -//------------------------------------------------------------------------ - -// -// Using SSE intrinsics -// -template -EXR_FORCEINLINE -void writeToRGBASSETemplate - (__m128i*& readPtrSSERed, - __m128i*& readPtrSSEGreen, - __m128i*& readPtrSSEBlue, - __m128i*& readPtrSSEAlpha, - __m128i*& writePtrSSE, - const size_t& lPixelsToCopySSE) -{ - for (size_t i = 0; i < lPixelsToCopySSE; ++i) - { - __m128i redRegister = loadSSE (readPtrSSERed); - __m128i greenRegister = loadSSE (readPtrSSEGreen); - __m128i blueRegister = loadSSE (readPtrSSEBlue); - __m128i alphaRegister = loadSSE (readPtrSSEAlpha); - - __m128i redGreenRegister = _mm_unpacklo_epi16 (redRegister, - greenRegister); - __m128i blueAlphaRegister = _mm_unpacklo_epi16 (blueRegister, - alphaRegister); - - __m128i pixel12Register = _mm_unpacklo_epi32 (redGreenRegister, - blueAlphaRegister); - __m128i pixel34Register = _mm_unpackhi_epi32 (redGreenRegister, - blueAlphaRegister); - - storeSSE (writePtrSSE, pixel12Register); - ++writePtrSSE; - - storeSSE (writePtrSSE, pixel34Register); - ++writePtrSSE; - - redGreenRegister = _mm_unpackhi_epi16 (redRegister, greenRegister); - blueAlphaRegister = _mm_unpackhi_epi16 (blueRegister, alphaRegister); - - pixel12Register = _mm_unpacklo_epi32 (redGreenRegister, - blueAlphaRegister); - pixel34Register = _mm_unpackhi_epi32 (redGreenRegister, - blueAlphaRegister); - - storeSSE (writePtrSSE, pixel12Register); - ++writePtrSSE; - - storeSSE (writePtrSSE, pixel34Register); - ++writePtrSSE; - - ++readPtrSSEAlpha; - ++readPtrSSEBlue; - ++readPtrSSEGreen; - ++readPtrSSERed; - } -} - -// -// Not using SSE intrinsics. This is still faster than the alternative -// because we have multiple read pointers and therefore we are able to -// take advantage of data locality for write operations. -// -EXR_FORCEINLINE -void writeToRGBANormal (unsigned short*& readPtrRed, - unsigned short*& readPtrGreen, - unsigned short*& readPtrBlue, - unsigned short*& readPtrAlpha, - unsigned short*& writePtr, - const size_t& lPixelsToCopy) -{ - for (size_t i = 0; i < lPixelsToCopy; ++i) - { - *(writePtr++) = *(readPtrRed++); - *(writePtr++) = *(readPtrGreen++); - *(writePtr++) = *(readPtrBlue++); - *(writePtr++) = *(readPtrAlpha++); - } -} - -// -// Determine which (template) version to use by checking whether pointers -// are aligned -// -EXR_FORCEINLINE -void optimizedWriteToRGBA (unsigned short*& readPtrRed, - unsigned short*& readPtrGreen, - unsigned short*& readPtrBlue, - unsigned short*& readPtrAlpha, - unsigned short*& writePtr, - const size_t& pixelsToCopySSE, - const size_t& pixelsToCopyNormal) -{ - bool readPtrAreAligned = true; - - readPtrAreAligned &= isPointerSSEAligned(readPtrRed); - readPtrAreAligned &= isPointerSSEAligned(readPtrGreen); - readPtrAreAligned &= isPointerSSEAligned(readPtrBlue); - readPtrAreAligned &= isPointerSSEAligned(readPtrAlpha); - - bool writePtrIsAligned = isPointerSSEAligned(writePtr); - - if (!readPtrAreAligned && !writePtrIsAligned) - { - writeToRGBASSETemplate ((__m128i*&)readPtrRed, - (__m128i*&)readPtrGreen, - (__m128i*&)readPtrBlue, - (__m128i*&)readPtrAlpha, - (__m128i*&)writePtr, - pixelsToCopySSE); - } - else if (!readPtrAreAligned && writePtrIsAligned) - { - writeToRGBASSETemplate ((__m128i*&)readPtrRed, - (__m128i*&)readPtrGreen, - (__m128i*&)readPtrBlue, - (__m128i*&)readPtrAlpha, - (__m128i*&)writePtr, - pixelsToCopySSE); - } - else if (readPtrAreAligned && !writePtrIsAligned) - { - writeToRGBASSETemplate ((__m128i*&)readPtrRed, - (__m128i*&)readPtrGreen, - (__m128i*&)readPtrBlue, - (__m128i*&)readPtrAlpha, - (__m128i*&)writePtr, - pixelsToCopySSE); - } - else if(readPtrAreAligned && writePtrIsAligned) - { - writeToRGBASSETemplate ((__m128i*&)readPtrRed, - (__m128i*&)readPtrGreen, - (__m128i*&)readPtrBlue, - (__m128i*&)readPtrAlpha, - (__m128i*&)writePtr, - pixelsToCopySSE); - } - - writeToRGBANormal (readPtrRed, readPtrGreen, readPtrBlue, readPtrAlpha, - writePtr, pixelsToCopyNormal); -} - - - -//------------------------------------------------------------------------ -// -// Write to RGBA Fill A -// -//------------------------------------------------------------------------ - -// -// Using SSE intrinsics -// -template -EXR_FORCEINLINE -void -writeToRGBAFillASSETemplate (__m128i*& readPtrSSERed, - __m128i*& readPtrSSEGreen, - __m128i*& readPtrSSEBlue, - const unsigned short& alphaFillValue, - __m128i*& writePtrSSE, - const size_t& pixelsToCopySSE) -{ - const __m128i dummyAlphaRegister = _mm_set_epi16 (alphaFillValue, - alphaFillValue, - alphaFillValue, - alphaFillValue, - alphaFillValue, - alphaFillValue, - alphaFillValue, - alphaFillValue); - - for (size_t pixelCounter = 0; pixelCounter < pixelsToCopySSE; ++pixelCounter) - { - __m128i redRegister = loadSSE (readPtrSSERed); - __m128i greenRegister = loadSSE (readPtrSSEGreen); - __m128i blueRegister = loadSSE (readPtrSSEBlue); - - __m128i redGreenRegister = _mm_unpacklo_epi16 (redRegister, - greenRegister); - __m128i blueAlphaRegister = _mm_unpacklo_epi16 (blueRegister, - dummyAlphaRegister); - - __m128i pixel12Register = _mm_unpacklo_epi32 (redGreenRegister, - blueAlphaRegister); - __m128i pixel34Register = _mm_unpackhi_epi32 (redGreenRegister, - blueAlphaRegister); - - storeSSE (writePtrSSE, pixel12Register); - ++writePtrSSE; - - storeSSE (writePtrSSE, pixel34Register); - ++writePtrSSE; - - redGreenRegister = _mm_unpackhi_epi16 (redRegister, - greenRegister); - blueAlphaRegister = _mm_unpackhi_epi16 (blueRegister, - dummyAlphaRegister); - - pixel12Register = _mm_unpacklo_epi32 (redGreenRegister, - blueAlphaRegister); - pixel34Register = _mm_unpackhi_epi32 (redGreenRegister, - blueAlphaRegister); - - storeSSE (writePtrSSE, pixel12Register); - ++writePtrSSE; - - storeSSE (writePtrSSE, pixel34Register); - ++writePtrSSE; - - ++readPtrSSEBlue; - ++readPtrSSEGreen; - ++readPtrSSERed; - } -} - -// -// Not using SSE intrinsics. This is still faster than the alternative -// because we have multiple read pointers and therefore we are able to -// take advantage of data locality for write operations. -// -EXR_FORCEINLINE -void -writeToRGBAFillANormal (unsigned short*& readPtrRed, - unsigned short*& readPtrGreen, - unsigned short*& readPtrBlue, - const unsigned short& alphaFillValue, - unsigned short*& writePtr, - const size_t& pixelsToCopy) -{ - for (size_t i = 0; i < pixelsToCopy; ++i) - { - *(writePtr++) = *(readPtrRed++); - *(writePtr++) = *(readPtrGreen++); - *(writePtr++) = *(readPtrBlue++); - *(writePtr++) = alphaFillValue; - } -} - -// -// Determine which (template) version to use by checking whether pointers -// are aligned. -// -EXR_FORCEINLINE -void -optimizedWriteToRGBAFillA (unsigned short*& readPtrRed, - unsigned short*& readPtrGreen, - unsigned short*& readPtrBlue, - const unsigned short& alphaFillValue, - unsigned short*& writePtr, - const size_t& pixelsToCopySSE, - const size_t& pixelsToCopyNormal) -{ - bool readPtrAreAligned = true; - - readPtrAreAligned &= isPointerSSEAligned (readPtrRed); - readPtrAreAligned &= isPointerSSEAligned (readPtrGreen); - readPtrAreAligned &= isPointerSSEAligned (readPtrBlue); - - bool writePtrIsAligned = isPointerSSEAligned (writePtr); - - if (!readPtrAreAligned && !writePtrIsAligned) - { - writeToRGBAFillASSETemplate ((__m128i*&)readPtrRed, - (__m128i*&)readPtrGreen, - (__m128i*&)readPtrBlue, - alphaFillValue, - (__m128i*&)writePtr, - pixelsToCopySSE); - } - else if (!readPtrAreAligned && writePtrIsAligned) - { - writeToRGBAFillASSETemplate ((__m128i*&)readPtrRed, - (__m128i*&)readPtrGreen, - (__m128i*&)readPtrBlue, - alphaFillValue, - (__m128i*&)writePtr, - pixelsToCopySSE); - } - else if (readPtrAreAligned && !writePtrIsAligned) - { - writeToRGBAFillASSETemplate ((__m128i*&)readPtrRed, - (__m128i*&)readPtrGreen, - (__m128i*&)readPtrBlue, - alphaFillValue, - (__m128i*&)writePtr, - pixelsToCopySSE); - } - else if (readPtrAreAligned && writePtrIsAligned) - { - writeToRGBAFillASSETemplate ((__m128i*&)readPtrRed, - (__m128i*&)readPtrGreen, - (__m128i*&)readPtrBlue, - alphaFillValue, - (__m128i*&)writePtr, - pixelsToCopySSE); - } - - writeToRGBAFillANormal (readPtrRed, - readPtrGreen, readPtrBlue, alphaFillValue, - writePtr, pixelsToCopyNormal); -} - - - -//------------------------------------------------------------------------ -// -// Write to RGB -// -//------------------------------------------------------------------------ - -// -// Using SSE intrinsics -// -template -EXR_FORCEINLINE -void -writeToRGBSSETemplate (__m128i*& readPtrSSERed, - __m128i*& readPtrSSEGreen, - __m128i*& readPtrSSEBlue, - __m128i*& writePtrSSE, - const size_t& pixelsToCopySSE) -{ - - for (size_t pixelCounter = 0; pixelCounter < pixelsToCopySSE; ++pixelCounter) - { - // - // Need to shuffle and unpack pointers to obtain my first register - // We must save 8 pixels at a time, so we must have the following three registers at the end: - // 1) R1 G1 B1 R2 G2 B2 R3 G3 - // 2) B3 R4 G4 B4 R5 G5 B5 R6 - // 3) G6 B6 R7 G7 B7 R8 G8 B8 - // - __m128i redRegister = loadSSE (readPtrSSERed); - __m128i greenRegister = loadSSE (readPtrSSEGreen); - __m128i blueRegister = loadSSE (readPtrSSEBlue); - - // - // First register: R1 G1 B1 R2 G2 B2 R3 G3 - // Construct 2 registers and then unpack them to obtain our final result: - // - __m128i redGreenRegister = _mm_unpacklo_epi16 (redRegister, - greenRegister); - __m128i redBlueRegister = _mm_unpacklo_epi16 (redRegister, - blueRegister); - __m128i greenBlueRegister = _mm_unpacklo_epi16 (greenRegister, - blueRegister); - - // Left Part (R1 G1 B1 R2) - __m128i quarterRight = _mm_shufflelo_epi16 (redBlueRegister, - _MM_SHUFFLE(3,0,2,1)); - __m128i halfLeft = _mm_unpacklo_epi32 (redGreenRegister, - quarterRight); - - // Right Part (G2 B2 R3 G3) - __m128i quarterLeft = _mm_shuffle_epi32 (greenBlueRegister, - _MM_SHUFFLE(3,2,0,1)); - quarterRight = _mm_shuffle_epi32 (redGreenRegister, - _MM_SHUFFLE(3,0,1,2)); - __m128i halfRight = _mm_unpacklo_epi32 (quarterLeft, quarterRight); - - __m128i fullRegister = _mm_unpacklo_epi64 (halfLeft, halfRight); - storeSSE (writePtrSSE, fullRegister); - ++writePtrSSE; - - // - // Second register: B3 R4 G4 B4 R5 G5 B5 R6 - // - - // Left Part (B3, R4, G4, B4) - quarterLeft = _mm_shufflehi_epi16 (redBlueRegister, - _MM_SHUFFLE(0, 3, 2, 1)); - quarterRight = _mm_shufflehi_epi16 (greenBlueRegister, - _MM_SHUFFLE(1, 0, 3, 2)); - halfLeft = _mm_unpackhi_epi32 (quarterLeft, quarterRight); - - // Update the registers - redGreenRegister = _mm_unpackhi_epi16 (redRegister, greenRegister); - redBlueRegister = _mm_unpackhi_epi16 (redRegister, blueRegister); - greenBlueRegister = _mm_unpackhi_epi16 (greenRegister, blueRegister); - - // Right Part (R5 G5 B5 R6) - quarterRight = _mm_shufflelo_epi16 (redBlueRegister, - _MM_SHUFFLE(3,0,2,1)); - halfRight = _mm_unpacklo_epi32 (redGreenRegister, quarterRight); - - fullRegister = _mm_unpacklo_epi64 (halfLeft, halfRight); - storeSSE (writePtrSSE, fullRegister); - ++writePtrSSE; - - // - // Third register: G6 B6 R7 G7 B7 R8 G8 B8 - // - - // Left part (G6 B6 R7 G7) - quarterLeft = _mm_shuffle_epi32 (greenBlueRegister, - _MM_SHUFFLE(3,2,0,1)); - quarterRight = _mm_shuffle_epi32 (redGreenRegister, - _MM_SHUFFLE(3,0,1,2)); - halfLeft = _mm_unpacklo_epi32 (quarterLeft, quarterRight); - - // Right part (B7 R8 G8 B8) - quarterLeft = _mm_shufflehi_epi16 (redBlueRegister, - _MM_SHUFFLE(0, 3, 2, 1)); - quarterRight = _mm_shufflehi_epi16 (greenBlueRegister, - _MM_SHUFFLE(1, 0, 3, 2)); - halfRight = _mm_unpackhi_epi32 (quarterLeft, quarterRight); - - fullRegister = _mm_unpacklo_epi64 (halfLeft, halfRight); - storeSSE (writePtrSSE, fullRegister); - ++writePtrSSE; - - // - // Increment read pointers - // - ++readPtrSSEBlue; - ++readPtrSSEGreen; - ++readPtrSSERed; - } -} - -// -// Not using SSE intrinsics. This is still faster than the alternative -// because we have multiple read pointers and therefore we are able to -// take advantage of data locality for write operations. -// -EXR_FORCEINLINE -void -writeToRGBNormal (unsigned short*& readPtrRed, - unsigned short*& readPtrGreen, - unsigned short*& readPtrBlue, - unsigned short*& writePtr, - const size_t& pixelsToCopy) -{ - for (size_t i = 0; i < pixelsToCopy; ++i) - { - *(writePtr++) = *(readPtrRed++); - *(writePtr++) = *(readPtrGreen++); - *(writePtr++) = *(readPtrBlue++); - } -} - -// -// Determine which (template) version to use by checking whether pointers -// are aligned -// -EXR_FORCEINLINE -void optimizedWriteToRGB (unsigned short*& readPtrRed, - unsigned short*& readPtrGreen, - unsigned short*& readPtrBlue, - unsigned short*& writePtr, - const size_t& pixelsToCopySSE, - const size_t& pixelsToCopyNormal) -{ - bool readPtrAreAligned = true; - - readPtrAreAligned &= isPointerSSEAligned(readPtrRed); - readPtrAreAligned &= isPointerSSEAligned(readPtrGreen); - readPtrAreAligned &= isPointerSSEAligned(readPtrBlue); - - bool writePtrIsAligned = isPointerSSEAligned(writePtr); - - if (!readPtrAreAligned && !writePtrIsAligned) - { - writeToRGBSSETemplate ((__m128i*&)readPtrRed, - (__m128i*&)readPtrGreen, - (__m128i*&)readPtrBlue, - (__m128i*&)writePtr, - pixelsToCopySSE); - } - else if (!readPtrAreAligned && writePtrIsAligned) - { - writeToRGBSSETemplate ((__m128i*&)readPtrRed, - (__m128i*&)readPtrGreen, - (__m128i*&)readPtrBlue, - (__m128i*&)writePtr, - pixelsToCopySSE); - } - else if (readPtrAreAligned && !writePtrIsAligned) - { - writeToRGBSSETemplate ((__m128i*&)readPtrRed, - (__m128i*&)readPtrGreen, - (__m128i*&)readPtrBlue, - (__m128i*&)writePtr, - pixelsToCopySSE); - } - else if (readPtrAreAligned && writePtrIsAligned) - { - writeToRGBSSETemplate ((__m128i*&)readPtrRed, - (__m128i*&)readPtrGreen, - (__m128i*&)readPtrBlue, - (__m128i*&)writePtr, - pixelsToCopySSE); - } - - - writeToRGBNormal (readPtrRed, readPtrGreen, readPtrBlue, - writePtr, pixelsToCopyNormal); -} - - - - -#else // ! defined IMF_HAVE_SSE2 - -#endif // defined IMF_HAVE_SSE2 - - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT - -#endif diff --git a/3rdparty/openexr/IlmImf/ImfOutputFile.cpp b/3rdparty/openexr/IlmImf/ImfOutputFile.cpp deleted file mode 100644 index ff44e66648..0000000000 --- a/3rdparty/openexr/IlmImf/ImfOutputFile.cpp +++ /dev/null @@ -1,1403 +0,0 @@ -// -///\todo: version needs fixing! -// - -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - -//----------------------------------------------------------------------------- -// -// class OutputFile -// -//----------------------------------------------------------------------------- - -#include -#include -#include -#include -#include -#include -#include "ImathBox.h" -#include "ImathFun.h" -#include -#include "ImfXdr.h" -#include -#include -#include "IlmThreadPool.h" -#include "ImfOutputStreamMutex.h" -#include "IlmThreadSemaphore.h" -#include "IlmThreadMutex.h" -#include "Iex.h" -#include "ImfInputPart.h" -#include "ImfNamespace.h" -#include "ImfOutputPartData.h" - -#include -#include -#include -#include -#include - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_ENTER - -using IMATH_NAMESPACE::Box2i; -using IMATH_NAMESPACE::divp; -using IMATH_NAMESPACE::modp; -using std::string; -using std::vector; -using std::ofstream; -using std::min; -using std::max; -using ILMTHREAD_NAMESPACE::Mutex; -using ILMTHREAD_NAMESPACE::Lock; -using ILMTHREAD_NAMESPACE::Semaphore; -using ILMTHREAD_NAMESPACE::Task; -using ILMTHREAD_NAMESPACE::TaskGroup; -using ILMTHREAD_NAMESPACE::ThreadPool; - - -namespace { - - -struct OutSliceInfo -{ - PixelType type; - const char * base; - size_t xStride; - size_t yStride; - int xSampling; - int ySampling; - bool zero; - - OutSliceInfo (PixelType type = HALF, - const char *base = 0, - size_t xStride = 0, - size_t yStride = 0, - int xSampling = 1, - int ySampling = 1, - bool zero = false); - -}; - - -OutSliceInfo::OutSliceInfo (PixelType t, - const char *b, - size_t xs, size_t ys, - int xsm, int ysm, - bool z) -: - type (t), - base (b), - xStride (xs), - yStride (ys), - xSampling (xsm), - ySampling (ysm), - zero (z) -{ - // empty -} - - -struct LineBuffer -{ - Array buffer; - const char * dataPtr; - int dataSize; - char * endOfLineBufferData; - int minY; - int maxY; - int scanLineMin; - int scanLineMax; - Compressor * compressor; - bool partiallyFull; // has incomplete data - bool hasException; - string exception; - - LineBuffer (Compressor *comp); - ~LineBuffer (); - - void wait () {_sem.wait();} - void post () {_sem.post();} - - private: - - Semaphore _sem; -}; - - -LineBuffer::LineBuffer (Compressor *comp) : - dataPtr (0), - dataSize (0), - compressor (comp), - partiallyFull (false), - hasException (false), - exception (), - _sem (1) -{ - // empty -} - - -LineBuffer::~LineBuffer () -{ - delete compressor; -} - -} // namespace - -struct OutputFile::Data -{ - Header header; // the image header - bool multiPart; // is the file multipart? - int version; // version attribute \todo NOT BEING WRITTEN PROPERLY - Int64 previewPosition; // file position for preview - FrameBuffer frameBuffer; // framebuffer to write into - int currentScanLine; // next scanline to be written - int missingScanLines; // number of lines to write - LineOrder lineOrder; // the file's lineorder - int minX; // data window's min x coord - int maxX; // data window's max x coord - int minY; // data window's min y coord - int maxY; // data window's max x coord - vector lineOffsets; // stores offsets in file for - // each scanline - vector bytesPerLine; // combined size of a line over - // all channels - vector offsetInLineBuffer; // offset for each scanline in - // its linebuffer - Compressor::Format format; // compressor's data format - vector slices; // info about channels in file - Int64 lineOffsetsPosition; // file position for line - // offset table - - vector lineBuffers; // each holds one line buffer - int linesInBuffer; // number of scanlines each - // buffer holds - size_t lineBufferSize; // size of the line buffer - - int partNumber; // the output part number - OutputStreamMutex * _streamData; - bool _deleteStream; - Data (int numThreads); - ~Data (); - - - inline LineBuffer * getLineBuffer (int number); // hash function from line - // buffer indices into our - // vector of line buffers -}; - - -OutputFile::Data::Data (int numThreads): - lineOffsetsPosition (0), - partNumber (-1), - _streamData(0), - _deleteStream(false) -{ - // - // We need at least one lineBuffer, but if threading is used, - // to keep n threads busy we need 2*n lineBuffers. - // - - lineBuffers.resize (max (1, 2 * numThreads)); -} - - -OutputFile::Data::~Data () -{ - for (size_t i = 0; i < lineBuffers.size(); i++) - delete lineBuffers[i]; -} - - -LineBuffer* -OutputFile::Data::getLineBuffer (int number) -{ - return lineBuffers[number % lineBuffers.size()]; -} - -namespace { - -Int64 -writeLineOffsets (OPENEXR_IMF_INTERNAL_NAMESPACE::OStream &os, const vector &lineOffsets) -{ - Int64 pos = os.tellp(); - - if (pos == -1) - IEX_NAMESPACE::throwErrnoExc ("Cannot determine current file position (%T)."); - - for (unsigned int i = 0; i < lineOffsets.size(); i++) - Xdr::write (os, lineOffsets[i]); - - return pos; -} - - -void -writePixelData (OutputStreamMutex *filedata, - OutputFile::Data *partdata, - int lineBufferMinY, - const char pixelData[], - int pixelDataSize) -{ - // - // Store a block of pixel data in the output file, and try - // to keep track of the current writing position the file - // without calling tellp() (tellp() can be fairly expensive). - // - - Int64 currentPosition = filedata->currentPosition; - filedata->currentPosition = 0; - - if (currentPosition == 0) - currentPosition = filedata->os->tellp(); - - partdata->lineOffsets[(partdata->currentScanLine - partdata->minY) / partdata->linesInBuffer] = - currentPosition; - - #ifdef DEBUG - - assert (filedata->os->tellp() == currentPosition); - - #endif - - - - if (partdata->multiPart) - { - OPENEXR_IMF_INTERNAL_NAMESPACE::Xdr::write (*filedata->os, partdata->partNumber); - } - - OPENEXR_IMF_INTERNAL_NAMESPACE::Xdr::write (*filedata->os, lineBufferMinY); - OPENEXR_IMF_INTERNAL_NAMESPACE::Xdr::write (*filedata->os, pixelDataSize); - filedata->os->write (pixelData, pixelDataSize); - - filedata->currentPosition = currentPosition + - Xdr::size() + - Xdr::size() + - pixelDataSize; - - if (partdata->multiPart) - { - filedata->currentPosition += Xdr::size(); - } -} - - -inline void -writePixelData (OutputStreamMutex* filedata, - OutputFile::Data *partdata, - const LineBuffer *lineBuffer) -{ - writePixelData (filedata, partdata, - lineBuffer->minY, - lineBuffer->dataPtr, - lineBuffer->dataSize); -} - - -void -convertToXdr (OutputFile::Data *ofd, - Array &lineBuffer, - int lineBufferMinY, - int lineBufferMaxY, - int inSize) -{ - // - // Convert the contents of a lineBuffer from the machine's native - // representation to Xdr format. This function is called by - // CompressLineBuffer::execute(), below, if the compressor wanted - // its input pixel data in the machine's native format, but then - // failed to compress the data (most compressors will expand rather - // than compress random input data). - // - // Note that this routine assumes that the machine's native - // representation of the pixel data has the same size as the - // Xdr representation. This makes it possible to convert the - // pixel data in place, without an intermediate temporary buffer. - // - - // - // Iterate over all scanlines in the lineBuffer to convert. - // - - char *writePtr = &lineBuffer[0]; - for (int y = lineBufferMinY; y <= lineBufferMaxY; y++) - { - // - // Set these to point to the start of line y. - // We will write to writePtr from readPtr. - // - - const char *readPtr = writePtr; - - // - // Iterate over all slices in the file. - // - - for (unsigned int i = 0; i < ofd->slices.size(); ++i) - { - // - // Test if scan line y of this channel is - // contains any data (the scan line contains - // data only if y % ySampling == 0). - // - - const OutSliceInfo &slice = ofd->slices[i]; - - if (modp (y, slice.ySampling) != 0) - continue; - - // - // Find the number of sampled pixels, dMaxX-dMinX+1, for - // slice i in scan line y (i.e. pixels within the data window - // for which x % xSampling == 0). - // - - int dMinX = divp (ofd->minX, slice.xSampling); - int dMaxX = divp (ofd->maxX, slice.xSampling); - - // - // Convert the samples in place. - // - - convertInPlace (writePtr, readPtr, slice.type, dMaxX - dMinX + 1); - } - } -} - - -// -// A LineBufferTask encapsulates the task of copying a set of scanlines -// from the user's frame buffer into a LineBuffer object, compressing -// the data if necessary. -// - -class LineBufferTask: public Task -{ - public: - - LineBufferTask (TaskGroup *group, - OutputFile::Data *ofd, - int number, - int scanLineMin, - int scanLineMax); - - virtual ~LineBufferTask (); - - virtual void execute (); - - private: - - OutputFile::Data * _ofd; - LineBuffer * _lineBuffer; -}; - - -LineBufferTask::LineBufferTask - (TaskGroup *group, - OutputFile::Data *ofd, - int number, - int scanLineMin, - int scanLineMax) -: - Task (group), - _ofd (ofd), - _lineBuffer (_ofd->getLineBuffer(number)) -{ - // - // Wait for the lineBuffer to become available - // - - _lineBuffer->wait (); - - // - // Initialize the lineBuffer data if necessary - // - - if (!_lineBuffer->partiallyFull) - { - _lineBuffer->endOfLineBufferData = _lineBuffer->buffer; - - _lineBuffer->minY = _ofd->minY + number * _ofd->linesInBuffer; - - _lineBuffer->maxY = min (_lineBuffer->minY + _ofd->linesInBuffer - 1, - _ofd->maxY); - - _lineBuffer->partiallyFull = true; - } - - _lineBuffer->scanLineMin = max (_lineBuffer->minY, scanLineMin); - _lineBuffer->scanLineMax = min (_lineBuffer->maxY, scanLineMax); -} - - -LineBufferTask::~LineBufferTask () -{ - // - // Signal that the line buffer is now free - // - - _lineBuffer->post (); -} - - -void -LineBufferTask::execute () -{ - try - { - // - // First copy the pixel data from the - // frame buffer into the line buffer - // - - int yStart, yStop, dy; - - if (_ofd->lineOrder == INCREASING_Y) - { - yStart = _lineBuffer->scanLineMin; - yStop = _lineBuffer->scanLineMax + 1; - dy = 1; - } - else - { - yStart = _lineBuffer->scanLineMax; - yStop = _lineBuffer->scanLineMin - 1; - dy = -1; - } - - int y; - - for (y = yStart; y != yStop; y += dy) - { - // - // Gather one scan line's worth of pixel data and store - // them in _ofd->lineBuffer. - // - - char *writePtr = _lineBuffer->buffer + - _ofd->offsetInLineBuffer[y - _ofd->minY]; - // - // Iterate over all image channels. - // - - for (unsigned int i = 0; i < _ofd->slices.size(); ++i) - { - // - // Test if scan line y of this channel contains any data - // (the scan line contains data only if y % ySampling == 0). - // - - const OutSliceInfo &slice = _ofd->slices[i]; - - if (modp (y, slice.ySampling) != 0) - continue; - - // - // Find the x coordinates of the leftmost and rightmost - // sampled pixels (i.e. pixels within the data window - // for which x % xSampling == 0). - // - - int dMinX = divp (_ofd->minX, slice.xSampling); - int dMaxX = divp (_ofd->maxX, slice.xSampling); - - // - // Fill the line buffer with with pixel data. - // - - if (slice.zero) - { - // - // The frame buffer contains no data for this channel. - // Store zeroes in _lineBuffer->buffer. - // - - fillChannelWithZeroes (writePtr, _ofd->format, slice.type, - dMaxX - dMinX + 1); - } - else - { - // - // If necessary, convert the pixel data to Xdr format. - // Then store the pixel data in _ofd->lineBuffer. - // - - const char *linePtr = slice.base + - divp (y, slice.ySampling) * - slice.yStride; - - const char *readPtr = linePtr + dMinX * slice.xStride; - const char *endPtr = linePtr + dMaxX * slice.xStride; - - copyFromFrameBuffer (writePtr, readPtr, endPtr, - slice.xStride, _ofd->format, - slice.type); - } - } - - if (_lineBuffer->endOfLineBufferData < writePtr) - _lineBuffer->endOfLineBufferData = writePtr; - - #ifdef DEBUG - - assert (writePtr - (_lineBuffer->buffer + - _ofd->offsetInLineBuffer[y - _ofd->minY]) == - (int) _ofd->bytesPerLine[y - _ofd->minY]); - - #endif - - } - - // - // If the next scanline isn't past the bounds of the lineBuffer - // then we are done, otherwise compress the linebuffer - // - - if (y >= _lineBuffer->minY && y <= _lineBuffer->maxY) - return; - - _lineBuffer->dataPtr = _lineBuffer->buffer; - - _lineBuffer->dataSize = _lineBuffer->endOfLineBufferData - - _lineBuffer->buffer; - - // - // Compress the data - // - - Compressor *compressor = _lineBuffer->compressor; - - if (compressor) - { - const char *compPtr; - - int compSize = compressor->compress (_lineBuffer->dataPtr, - _lineBuffer->dataSize, - _lineBuffer->minY, compPtr); - - if (compSize < _lineBuffer->dataSize) - { - _lineBuffer->dataSize = compSize; - _lineBuffer->dataPtr = compPtr; - } - else if (_ofd->format == Compressor::NATIVE) - { - // - // The data did not shrink during compression, but - // we cannot write to the file using the machine's - // native format, so we need to convert the lineBuffer - // to Xdr. - // - - convertToXdr (_ofd, _lineBuffer->buffer, _lineBuffer->minY, - _lineBuffer->maxY, _lineBuffer->dataSize); - } - } - - _lineBuffer->partiallyFull = false; - } - catch (std::exception &e) - { - if (!_lineBuffer->hasException) - { - _lineBuffer->exception = e.what (); - _lineBuffer->hasException = true; - } - } - catch (...) - { - if (!_lineBuffer->hasException) - { - _lineBuffer->exception = "unrecognized exception"; - _lineBuffer->hasException = true; - } - } -} - -} // namespace - - -OutputFile::OutputFile - (const char fileName[], - const Header &header, - int numThreads) -: - _data (new Data (numThreads)) -{ - _data->_streamData=new OutputStreamMutex (); - _data->_deleteStream=true; - try - { - header.sanityCheck(); - _data->_streamData->os = new StdOFStream (fileName); - _data->multiPart=false; // only one header, not multipart - initialize (header); - _data->_streamData->currentPosition = _data->_streamData->os->tellp(); - - // Write header and empty offset table to the file. - writeMagicNumberAndVersionField(*_data->_streamData->os, _data->header); - _data->previewPosition = - _data->header.writeTo (*_data->_streamData->os); - _data->lineOffsetsPosition = - writeLineOffsets (*_data->_streamData->os,_data->lineOffsets); - } - catch (IEX_NAMESPACE::BaseExc &e) - { - // ~OutputFile will not run, so free memory here - if (_data) - { - if (_data->_streamData) - { - delete _data->_streamData->os; - delete _data->_streamData; - } - - delete _data; - } - - REPLACE_EXC (e, "Cannot open image file " - "\"" << fileName << "\". " << e.what()); - throw; - } - catch (...) - { - // ~OutputFile will not run, so free memory here - if (_data) - { - if (_data->_streamData) - { - delete _data->_streamData->os; - delete _data->_streamData; - } - delete _data; - } - - throw; - } -} - - -OutputFile::OutputFile - (OPENEXR_IMF_INTERNAL_NAMESPACE::OStream &os, - const Header &header, - int numThreads) -: - _data (new Data (numThreads)) -{ - _data->_streamData=new OutputStreamMutex (); - _data->_deleteStream=false; - try - { - header.sanityCheck(); - _data->_streamData->os = &os; - _data->multiPart=false; - initialize (header); - _data->_streamData->currentPosition = _data->_streamData->os->tellp(); - - // Write header and empty offset table to the file. - writeMagicNumberAndVersionField(*_data->_streamData->os, _data->header); - _data->previewPosition = - _data->header.writeTo (*_data->_streamData->os); - _data->lineOffsetsPosition = - writeLineOffsets (*_data->_streamData->os, _data->lineOffsets); - } - catch (IEX_NAMESPACE::BaseExc &e) - { - // ~OutputFile will not run, so free memory here - if (_data) - { - if (_data->_streamData) - delete _data->_streamData; - delete _data; - } - - REPLACE_EXC (e, "Cannot open image file " - "\"" << os.fileName() << "\". " << e.what()); - throw; - } - catch (...) - { - // ~OutputFile will not run, so free memory here - if (_data) - { - if (_data->_streamData) - delete _data->_streamData; - delete _data; - } - - throw; - } -} - -OutputFile::OutputFile(const OutputPartData* part) : _data(NULL) -{ - try - { - if (part->header.type() != SCANLINEIMAGE) - throw IEX_NAMESPACE::ArgExc("Can't build a OutputFile from a type-mismatched part."); - - _data = new Data (part->numThreads); - _data->_streamData = part->mutex; - _data->_deleteStream=false; - _data->multiPart=part->multipart; - - initialize (part->header); - _data->partNumber = part->partNumber; - _data->lineOffsetsPosition = part->chunkOffsetTablePosition; - _data->previewPosition = part->previewPosition; - } - catch (IEX_NAMESPACE::BaseExc &e) - { - if (_data) delete _data; - - REPLACE_EXC (e, "Cannot initialize output part " - "\"" << part->partNumber << "\". " << e.what()); - throw; - } - catch (...) - { - if (_data) delete _data; - - throw; - } -} - -void -OutputFile::initialize (const Header &header) -{ - _data->header = header; - - // "fix" the type if it happens to be set incorrectly - // (attribute is optional, but ensure it is correct if it exists) - if(_data->header.hasType()) - { - _data->header.setType(SCANLINEIMAGE); - } - - const Box2i &dataWindow = header.dataWindow(); - - _data->currentScanLine = (header.lineOrder() == INCREASING_Y)? - dataWindow.min.y: dataWindow.max.y; - - _data->missingScanLines = dataWindow.max.y - dataWindow.min.y + 1; - _data->lineOrder = header.lineOrder(); - _data->minX = dataWindow.min.x; - _data->maxX = dataWindow.max.x; - _data->minY = dataWindow.min.y; - _data->maxY = dataWindow.max.y; - - size_t maxBytesPerLine = bytesPerLineTable (_data->header, - _data->bytesPerLine); - - for (size_t i = 0; i < _data->lineBuffers.size(); ++i) - { - _data->lineBuffers[i] = - new LineBuffer (newCompressor (_data->header.compression(), - maxBytesPerLine, - _data->header)); - } - - LineBuffer *lineBuffer = _data->lineBuffers[0]; - _data->format = defaultFormat (lineBuffer->compressor); - _data->linesInBuffer = numLinesInBuffer (lineBuffer->compressor); - _data->lineBufferSize = maxBytesPerLine * _data->linesInBuffer; - - for (size_t i = 0; i < _data->lineBuffers.size(); i++) - _data->lineBuffers[i]->buffer.resizeErase(_data->lineBufferSize); - - int lineOffsetSize = (dataWindow.max.y - dataWindow.min.y + - _data->linesInBuffer) / _data->linesInBuffer; - - _data->lineOffsets.resize (lineOffsetSize); - - - offsetInLineBufferTable (_data->bytesPerLine, - _data->linesInBuffer, - _data->offsetInLineBuffer); -} - - -OutputFile::~OutputFile () -{ - if (_data) - { - { - Lock lock(*_data->_streamData); - Int64 originalPosition = _data->_streamData->os->tellp(); - - if (_data->lineOffsetsPosition > 0) - { - try - { - _data->_streamData->os->seekp (_data->lineOffsetsPosition); - writeLineOffsets (*_data->_streamData->os, _data->lineOffsets); - - // - // Restore the original position. - // - _data->_streamData->os->seekp (originalPosition); - } - catch (...) - { - // - // We cannot safely throw any exceptions from here. - // This destructor may have been called because the - // stack is currently being unwound for another - // exception. - // - } - } - } - - if (_data->_deleteStream && _data->_streamData) - delete _data->_streamData->os; - - if (_data->partNumber == -1 && _data->_streamData) - delete _data->_streamData; - - delete _data; - } - -} - - -const char * -OutputFile::fileName () const -{ - return _data->_streamData->os->fileName(); -} - - -const Header & -OutputFile::header () const -{ - return _data->header; -} - - -void -OutputFile::setFrameBuffer (const FrameBuffer &frameBuffer) -{ - Lock lock (*_data->_streamData); - - // - // Check if the new frame buffer descriptor - // is compatible with the image file header. - // - - const ChannelList &channels = _data->header.channels(); - - for (ChannelList::ConstIterator i = channels.begin(); - i != channels.end(); - ++i) - { - FrameBuffer::ConstIterator j = frameBuffer.find (i.name()); - - if (j == frameBuffer.end()) - continue; - - if (i.channel().type != j.slice().type) - { - THROW (IEX_NAMESPACE::ArgExc, "Pixel type of \"" << i.name() << "\" channel " - "of output file \"" << fileName() << "\" is " - "not compatible with the frame buffer's " - "pixel type."); - } - - if (i.channel().xSampling != j.slice().xSampling || - i.channel().ySampling != j.slice().ySampling) - { - THROW (IEX_NAMESPACE::ArgExc, "X and/or y subsampling factors " - "of \"" << i.name() << "\" channel " - "of output file \"" << fileName() << "\" are " - "not compatible with the frame buffer's " - "subsampling factors."); - } - } - - // - // Initialize slice table for writePixels(). - // - - vector slices; - - for (ChannelList::ConstIterator i = channels.begin(); - i != channels.end(); - ++i) - { - FrameBuffer::ConstIterator j = frameBuffer.find (i.name()); - - if (j == frameBuffer.end()) - { - // - // Channel i is not present in the frame buffer. - // In the file, channel i will contain only zeroes. - // - - slices.push_back (OutSliceInfo (i.channel().type, - 0, // base - 0, // xStride, - 0, // yStride, - i.channel().xSampling, - i.channel().ySampling, - true)); // zero - } - else - { - // - // Channel i is present in the frame buffer. - // - - slices.push_back (OutSliceInfo (j.slice().type, - j.slice().base, - j.slice().xStride, - j.slice().yStride, - j.slice().xSampling, - j.slice().ySampling, - false)); // zero - } - } - - // - // Store the new frame buffer. - // - - _data->frameBuffer = frameBuffer; - _data->slices = slices; -} - - -const FrameBuffer & -OutputFile::frameBuffer () const -{ - Lock lock (*_data->_streamData); - return _data->frameBuffer; -} - - -void -OutputFile::writePixels (int numScanLines) -{ - try - { - Lock lock (*_data->_streamData); - - if (_data->slices.size() == 0) - throw IEX_NAMESPACE::ArgExc ("No frame buffer specified " - "as pixel data source."); - - // - // Maintain two iterators: - // nextWriteBuffer: next linebuffer to be written to the file - // nextCompressBuffer: next linebuffer to compress - // - - int first = (_data->currentScanLine - _data->minY) / - _data->linesInBuffer; - - int nextWriteBuffer = first; - int nextCompressBuffer; - int stop; - int step; - int scanLineMin; - int scanLineMax; - - { - // - // Create a task group for all line buffer tasks. When the - // taskgroup goes out of scope, the destructor waits until - // all tasks are complete. - // - - TaskGroup taskGroup; - - // - // Determine the range of lineBuffers that intersect the scan - // line range. Then add the initial compression tasks to the - // thread pool. We always add in at least one task but the - // individual task might not do anything if numScanLines == 0. - // - - if (_data->lineOrder == INCREASING_Y) - { - int last = (_data->currentScanLine + (numScanLines - 1) - - _data->minY) / _data->linesInBuffer; - - scanLineMin = _data->currentScanLine; - scanLineMax = _data->currentScanLine + numScanLines - 1; - - int numTasks = max (min ((int)_data->lineBuffers.size(), - last - first + 1), - 1); - - for (int i = 0; i < numTasks; i++) - { - ThreadPool::addGlobalTask - (new LineBufferTask (&taskGroup, _data, first + i, - scanLineMin, scanLineMax)); - } - - nextCompressBuffer = first + numTasks; - stop = last + 1; - step = 1; - } - else - { - int last = (_data->currentScanLine - (numScanLines - 1) - - _data->minY) / _data->linesInBuffer; - - scanLineMax = _data->currentScanLine; - scanLineMin = _data->currentScanLine - numScanLines + 1; - - int numTasks = max (min ((int)_data->lineBuffers.size(), - first - last + 1), - 1); - - for (int i = 0; i < numTasks; i++) - { - ThreadPool::addGlobalTask - (new LineBufferTask (&taskGroup, _data, first - i, - scanLineMin, scanLineMax)); - } - - nextCompressBuffer = first - numTasks; - stop = last - 1; - step = -1; - } - - while (true) - { - if (_data->missingScanLines <= 0) - { - throw IEX_NAMESPACE::ArgExc ("Tried to write more scan lines " - "than specified by the data window."); - } - - // - // Wait until the next line buffer is ready to be written - // - - LineBuffer *writeBuffer = - _data->getLineBuffer (nextWriteBuffer); - - writeBuffer->wait(); - - int numLines = writeBuffer->scanLineMax - - writeBuffer->scanLineMin + 1; - - _data->missingScanLines -= numLines; - - // - // If the line buffer is only partially full, then it is - // not complete and we cannot write it to disk yet. - // - - if (writeBuffer->partiallyFull) - { - _data->currentScanLine = _data->currentScanLine + - step * numLines; - writeBuffer->post(); - - return; - } - - // - // Write the line buffer - // - - writePixelData (_data->_streamData, _data, writeBuffer); - nextWriteBuffer += step; - - _data->currentScanLine = _data->currentScanLine + - step * numLines; - - #ifdef DEBUG - - assert (_data->currentScanLine == - ((_data->lineOrder == INCREASING_Y) ? - writeBuffer->scanLineMax + 1: - writeBuffer->scanLineMin - 1)); - - #endif - - // - // Release the lock on the line buffer - // - - writeBuffer->post(); - - // - // If this was the last line buffer in the scanline range - // - - if (nextWriteBuffer == stop) - break; - - // - // If there are no more line buffers to compress, - // then only continue to write out remaining lineBuffers - // - - if (nextCompressBuffer == stop) - continue; - - // - // Add nextCompressBuffer as a compression task - // - - ThreadPool::addGlobalTask - (new LineBufferTask (&taskGroup, _data, nextCompressBuffer, - scanLineMin, scanLineMax)); - - // - // Update the next line buffer we need to compress - // - - nextCompressBuffer += step; - } - - // - // Finish all tasks - // - } - - // - // Exeption handling: - // - // LineBufferTask::execute() may have encountered exceptions, but - // those exceptions occurred in another thread, not in the thread - // that is executing this call to OutputFile::writePixels(). - // LineBufferTask::execute() has caught all exceptions and stored - // the exceptions' what() strings in the line buffers. - // Now we check if any line buffer contains a stored exception; if - // this is the case then we re-throw the exception in this thread. - // (It is possible that multiple line buffers contain stored - // exceptions. We re-throw the first exception we find and - // ignore all others.) - // - - const string *exception = 0; - - for (size_t i = 0; i < _data->lineBuffers.size(); ++i) - { - LineBuffer *lineBuffer = _data->lineBuffers[i]; - - if (lineBuffer->hasException && !exception) - exception = &lineBuffer->exception; - - lineBuffer->hasException = false; - } - - if (exception) - throw IEX_NAMESPACE::IoExc (*exception); - } - catch (IEX_NAMESPACE::BaseExc &e) - { - REPLACE_EXC (e, "Failed to write pixel data to image " - "file \"" << fileName() << "\". " << e.what()); - throw; - } -} - - -int -OutputFile::currentScanLine () const -{ - Lock lock (*_data->_streamData); - return _data->currentScanLine; -} - - -void -OutputFile::copyPixels (InputFile &in) -{ - Lock lock (*_data->_streamData); - - // - // Check if this file's and and the InputFile's - // headers are compatible. - // - - const Header &hdr = _data->header; - const Header &inHdr = in.header(); - - if (inHdr.find("tiles") != inHdr.end()) - THROW (IEX_NAMESPACE::ArgExc, "Cannot copy pixels from image " - "file \"" << in.fileName() << "\" to image " - "file \"" << fileName() << "\". " - "The input file is tiled, but the output file is " - "not. Try using TiledOutputFile::copyPixels " - "instead."); - - if (!(hdr.dataWindow() == inHdr.dataWindow())) - THROW (IEX_NAMESPACE::ArgExc, "Cannot copy pixels from image " - "file \"" << in.fileName() << "\" to image " - "file \"" << fileName() << "\". " - "The files have different data windows."); - - if (!(hdr.lineOrder() == inHdr.lineOrder())) - THROW (IEX_NAMESPACE::ArgExc, "Quick pixel copy from image " - "file \"" << in.fileName() << "\" to image " - "file \"" << fileName() << "\" failed. " - "The files have different line orders."); - - if (!(hdr.compression() == inHdr.compression())) - THROW (IEX_NAMESPACE::ArgExc, "Quick pixel copy from image " - "file \"" << in.fileName() << "\" to image " - "file \"" << fileName() << "\" failed. " - "The files use different compression methods."); - - if (!(hdr.channels() == inHdr.channels())) - THROW (IEX_NAMESPACE::ArgExc, "Quick pixel copy from image " - "file \"" << in.fileName() << "\" to image " - "file \"" << fileName() << "\" failed. " - "The files have different channel lists."); - - // - // Verify that no pixel data have been written to this file yet. - // - - const Box2i &dataWindow = hdr.dataWindow(); - - if (_data->missingScanLines != dataWindow.max.y - dataWindow.min.y + 1) - THROW (IEX_NAMESPACE::LogicExc, "Quick pixel copy from image " - "file \"" << in.fileName() << "\" to image " - "file \"" << fileName() << "\" failed. " - "\"" << fileName() << "\" already contains " - "pixel data."); - - // - // Copy the pixel data. - // - - while (_data->missingScanLines > 0) - { - const char *pixelData; - int pixelDataSize; - - in.rawPixelData (_data->currentScanLine, pixelData, pixelDataSize); - - writePixelData (_data->_streamData, _data, lineBufferMinY (_data->currentScanLine, - _data->minY, - _data->linesInBuffer), - pixelData, pixelDataSize); - - _data->currentScanLine += (_data->lineOrder == INCREASING_Y)? - _data->linesInBuffer: -_data->linesInBuffer; - - _data->missingScanLines -= _data->linesInBuffer; - } -} - - -void -OutputFile::copyPixels( InputPart & in) -{ - copyPixels(*in.file); -} - - - -void -OutputFile::updatePreviewImage (const PreviewRgba newPixels[]) -{ - Lock lock (*_data->_streamData); - - if (_data->previewPosition <= 0) - THROW (IEX_NAMESPACE::LogicExc, "Cannot update preview image pixels. " - "File \"" << fileName() << "\" does not " - "contain a preview image."); - - // - // Store the new pixels in the header's preview image attribute. - // - - PreviewImageAttribute &pia = - _data->header.typedAttribute ("preview"); - - PreviewImage &pi = pia.value(); - PreviewRgba *pixels = pi.pixels(); - int numPixels = pi.width() * pi.height(); - - for (int i = 0; i < numPixels; ++i) - pixels[i] = newPixels[i]; - - // - // Save the current file position, jump to the position in - // the file where the preview image starts, store the new - // preview image, and jump back to the saved file position. - // - - Int64 savedPosition = _data->_streamData->os->tellp(); - - try - { - _data->_streamData->os->seekp (_data->previewPosition); - pia.writeValueTo (*_data->_streamData->os, _data->version); - _data->_streamData->os->seekp (savedPosition); - } - catch (IEX_NAMESPACE::BaseExc &e) - { - REPLACE_EXC (e, "Cannot update preview image pixels for " - "file \"" << fileName() << "\". " << e.what()); - throw; - } -} - - -void -OutputFile::breakScanLine (int y, int offset, int length, char c) -{ - Lock lock (*_data->_streamData); - - Int64 position = - _data->lineOffsets[(y - _data->minY) / _data->linesInBuffer]; - - if (!position) - THROW (IEX_NAMESPACE::ArgExc, "Cannot overwrite scan line " << y << ". " - "The scan line has not yet been stored in " - "file \"" << fileName() << "\"."); - - _data->_streamData->currentPosition = 0; - _data->_streamData->os->seekp (position + offset); - - for (int i = 0; i < length; ++i) - _data->_streamData->os->write (&c, 1); -} - - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_EXIT diff --git a/3rdparty/openexr/IlmImf/ImfOutputFile.h b/3rdparty/openexr/IlmImf/ImfOutputFile.h deleted file mode 100644 index 54d8baf027..0000000000 --- a/3rdparty/openexr/IlmImf/ImfOutputFile.h +++ /dev/null @@ -1,276 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - - -#ifndef INCLUDED_IMF_OUTPUT_FILE_H -#define INCLUDED_IMF_OUTPUT_FILE_H - -//----------------------------------------------------------------------------- -// -// class OutputFile -// -//----------------------------------------------------------------------------- - -#include "ImfHeader.h" -#include "ImfFrameBuffer.h" -#include "ImfThreading.h" -#include "ImfGenericOutputFile.h" -#include "ImfNamespace.h" -#include "ImfForward.h" -#include "ImfExport.h" - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER - - -class OutputFile : public GenericOutputFile -{ - public: - - //----------------------------------------------------------- - // Constructor -- opens the file and writes the file header. - // The file header is also copied into the OutputFile object, - // and can later be accessed via the header() method. - // Destroying this OutputFile object automatically closes - // the file. - // - // numThreads determines the number of threads that will be - // used to write the file (see ImfThreading.h). - //----------------------------------------------------------- - - IMF_EXPORT - OutputFile (const char fileName[], const Header &header, - int numThreads = globalThreadCount()); - - - //------------------------------------------------------------ - // Constructor -- attaches the new OutputFile object to a file - // that has already been opened, and writes the file header. - // The file header is also copied into the OutputFile object, - // and can later be accessed via the header() method. - // Destroying this OutputFile object does not automatically - // close the file. - // - // numThreads determines the number of threads that will be - // used to write the file (see ImfThreading.h). - //------------------------------------------------------------ - - IMF_EXPORT - OutputFile (OPENEXR_IMF_INTERNAL_NAMESPACE::OStream &os, const Header &header, - int numThreads = globalThreadCount()); - - - //------------------------------------------------- - // Destructor - // - // Destroying the OutputFile object before writing - // all scan lines within the data window results in - // an incomplete file. - //------------------------------------------------- - - IMF_EXPORT - virtual ~OutputFile (); - - - //------------------------ - // Access to the file name - //------------------------ - - IMF_EXPORT - const char * fileName () const; - - - //-------------------------- - // Access to the file header - //-------------------------- - - IMF_EXPORT - const Header & header () const; - - - //------------------------------------------------------- - // Set the current frame buffer -- copies the FrameBuffer - // object into the OutputFile object. - // - // The current frame buffer is the source of the pixel - // data written to the file. The current frame buffer - // must be set at least once before writePixels() is - // called. The current frame buffer can be changed - // after each call to writePixels. - //------------------------------------------------------- - - IMF_EXPORT - void setFrameBuffer (const FrameBuffer &frameBuffer); - - - //----------------------------------- - // Access to the current frame buffer - //----------------------------------- - - IMF_EXPORT - const FrameBuffer & frameBuffer () const; - - - //------------------------------------------------------------------- - // Write pixel data: - // - // writePixels(n) retrieves the next n scan lines worth of data from - // the current frame buffer, starting with the scan line indicated by - // currentScanLine(), and stores the data in the output file, and - // progressing in the direction indicated by header.lineOrder(). - // - // To produce a complete and correct file, exactly m scan lines must - // be written, where m is equal to - // header().dataWindow().max.y - header().dataWindow().min.y + 1. - //------------------------------------------------------------------- - - IMF_EXPORT - void writePixels (int numScanLines = 1); - - - //------------------------------------------------------------------ - // Access to the current scan line: - // - // currentScanLine() returns the y coordinate of the first scan line - // that will be read from the current frame buffer during the next - // call to writePixels(). - // - // If header.lineOrder() == INCREASING_Y: - // - // The current scan line before the first call to writePixels() - // is header().dataWindow().min.y. After writing each scan line, - // the current scan line is incremented by 1. - // - // If header.lineOrder() == DECREASING_Y: - // - // The current scan line before the first call to writePixels() - // is header().dataWindow().max.y. After writing each scan line, - // the current scan line is decremented by 1. - // - //------------------------------------------------------------------ - - IMF_EXPORT - int currentScanLine () const; - - - //-------------------------------------------------------------- - // Shortcut to copy all pixels from an InputFile into this file, - // without uncompressing and then recompressing the pixel data. - // This file's header must be compatible with the InputFile's - // header: The two header's "dataWindow", "compression", - // "lineOrder" and "channels" attributes must be the same. - //-------------------------------------------------------------- - - IMF_EXPORT - void copyPixels (InputFile &in); - - //------------------------------------------------------------- - // Shortcut to copy all pixels from an InputPart into this file - // - equivalent to copyPixel(InputFile &in) but for multipart files - //--------------------------------------------------------------- - - IMF_EXPORT - void copyPixels (InputPart &in); - - - - //-------------------------------------------------------------- - // Updating the preview image: - // - // updatePreviewImage() supplies a new set of pixels for the - // preview image attribute in the file's header. If the header - // does not contain a preview image, updatePreviewImage() throws - // an IEX_NAMESPACE::LogicExc. - // - // Note: updatePreviewImage() is necessary because images are - // often stored in a file incrementally, a few scan lines at a - // time, while the image is being generated. Since the preview - // image is an attribute in the file's header, it gets stored in - // the file as soon as the file is opened, but we may not know - // what the preview image should look like until we have written - // the last scan line of the main image. - // - //-------------------------------------------------------------- - - IMF_EXPORT - void updatePreviewImage (const PreviewRgba newPixels[]); - - - //--------------------------------------------------------- - // Break a scan line -- for testing and debugging only: - // - // breakScanLine(y,p,n,c) introduces an error into the - // output file by writing n copies of character c, starting - // p bytes from the beginning of the pixel data block that - // contains scan line y. - // - // Warning: Calling this function usually results in a - // broken image file. The file or parts of it may not - // be readable, or the file may contain bad data. - // - //--------------------------------------------------------- - - IMF_EXPORT - void breakScanLine (int y, int offset, int length, char c); - - - struct Data; - - private: - - //------------------------------------------------------------ - // Constructor -- attaches the OutputStreamMutex to the - // given one from MultiPartOutputFile. Set the previewPosition - // and lineOffsetsPosition which have been acquired from - // the constructor of MultiPartOutputFile as well. - //------------------------------------------------------------ - OutputFile (const OutputPartData* part); - - OutputFile (const OutputFile &); // not implemented - OutputFile & operator = (const OutputFile &); // not implemented - - void initialize (const Header &header); - - Data * _data; - - - friend class MultiPartOutputFile; - -}; - - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT - - -#endif diff --git a/3rdparty/openexr/IlmImf/ImfOutputPart.cpp b/3rdparty/openexr/IlmImf/ImfOutputPart.cpp deleted file mode 100644 index 920b4d3376..0000000000 --- a/3rdparty/openexr/IlmImf/ImfOutputPart.cpp +++ /dev/null @@ -1,105 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2011, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - -#include "ImfOutputPart.h" -#include "ImfNamespace.h" - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_ENTER - -OutputPart::OutputPart(MultiPartOutputFile& multiPartFile, int partNumber) -{ - file = multiPartFile.getOutputPart(partNumber); -} - -const char * -OutputPart::fileName () const -{ - return file->fileName(); -} - -const Header & -OutputPart::header () const -{ - return file->header(); -} - -void -OutputPart::setFrameBuffer (const FrameBuffer &frameBuffer) -{ - file->setFrameBuffer(frameBuffer); -} - -const FrameBuffer & -OutputPart::frameBuffer () const -{ - return file->frameBuffer(); -} - -void -OutputPart::writePixels (int numScanLines) -{ - file->writePixels(numScanLines); -} - -int -OutputPart::currentScanLine () const -{ - return file->currentScanLine(); -} - -void -OutputPart::copyPixels (InputFile &in) -{ - file->copyPixels(in); -} - -void -OutputPart::copyPixels (InputPart &in) -{ - file->copyPixels(in); -} - -void -OutputPart::updatePreviewImage (const PreviewRgba newPixels[]) -{ - file->updatePreviewImage(newPixels); -} - -void -OutputPart::breakScanLine (int y, int offset, int length, char c) -{ - file->breakScanLine(y, offset, length, c); -} - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_EXIT diff --git a/3rdparty/openexr/IlmImf/ImfOutputPart.h b/3rdparty/openexr/IlmImf/ImfOutputPart.h deleted file mode 100644 index 730396bf62..0000000000 --- a/3rdparty/openexr/IlmImf/ImfOutputPart.h +++ /dev/null @@ -1,88 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2011, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - -#ifndef IMFOUTPUTPART_H_ -#define IMFOUTPUTPART_H_ - -#include "ImfMultiPartOutputFile.h" -#include "ImfOutputFile.h" -#include "ImfForward.h" -#include "ImfNamespace.h" -#include "ImfExport.h" - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER - - -//--------------------------------------------------------------------- -// class OutputPart: -// -// Same interface as OutputFile. Please refer to OutputFile. -//--------------------------------------------------------------------- - -class OutputPart -{ - public: - IMF_EXPORT - OutputPart(MultiPartOutputFile& multiPartFile, int partNumber); - - IMF_EXPORT - const char * fileName () const; - IMF_EXPORT - const Header & header () const; - IMF_EXPORT - void setFrameBuffer (const FrameBuffer &frameBuffer); - IMF_EXPORT - const FrameBuffer & frameBuffer () const; - IMF_EXPORT - void writePixels (int numScanLines = 1); - IMF_EXPORT - int currentScanLine () const; - IMF_EXPORT - void copyPixels (InputFile &in); - IMF_EXPORT - void copyPixels (InputPart &in); - - IMF_EXPORT - void updatePreviewImage (const PreviewRgba newPixels[]); - IMF_EXPORT - void breakScanLine (int y, int offset, int length, char c); - - private: - OutputFile* file; -}; - - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT - -#endif /* IMFOUTPUTPART_H_ */ diff --git a/3rdparty/openexr/IlmImf/ImfOutputPartData.cpp b/3rdparty/openexr/IlmImf/ImfOutputPartData.cpp deleted file mode 100644 index b517a476a5..0000000000 --- a/3rdparty/openexr/IlmImf/ImfOutputPartData.cpp +++ /dev/null @@ -1,52 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2011, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - -#include "ImfOutputPartData.h" -#include "ImfNamespace.h" - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_ENTER - - -OutputPartData::OutputPartData(OutputStreamMutex* mutex, const Header &header, - int partNumber, int numThreads, bool multipart): - header(header), - numThreads(numThreads), - partNumber(partNumber), - multipart(multipart), - mutex(mutex) -{ -} - - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_EXIT diff --git a/3rdparty/openexr/IlmImf/ImfOutputPartData.h b/3rdparty/openexr/IlmImf/ImfOutputPartData.h deleted file mode 100644 index 67dcb590ce..0000000000 --- a/3rdparty/openexr/IlmImf/ImfOutputPartData.h +++ /dev/null @@ -1,63 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2011, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - -#ifndef IMFOUTPUTPARTDATA_H_ -#define IMFOUTPUTPARTDATA_H_ - -#include "ImfHeader.h" -#include "ImfForward.h" -#include "ImfNamespace.h" -#include "ImfExport.h" - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER - -struct OutputPartData -{ - Header header; - Int64 chunkOffsetTablePosition; - Int64 previewPosition; - int numThreads; - int partNumber; - bool multipart; - OutputStreamMutex* mutex; - - IMF_EXPORT - OutputPartData(OutputStreamMutex* mutex, const Header &header, - int partNumber, int numThreads, bool multipart); - -}; - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT - -#endif /* IMFOUTPUTPARTDATA_H_ */ diff --git a/3rdparty/openexr/IlmImf/ImfOutputStreamMutex.h b/3rdparty/openexr/IlmImf/ImfOutputStreamMutex.h deleted file mode 100644 index bf5e1c392b..0000000000 --- a/3rdparty/openexr/IlmImf/ImfOutputStreamMutex.h +++ /dev/null @@ -1,70 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2011, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - -#ifndef IMFOUTPUTSTREAMMUTEX_H_ -#define IMFOUTPUTSTREAMMUTEX_H_ - -#include - -#include "ImfIO.h" -#include "IlmThreadMutex.h" -#include "ImfGenericOutputFile.h" -#include "ImfNamespace.h" - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER - -using ILMTHREAD_NAMESPACE::Mutex; - -// -// Used to wrap OPENEXR_IMF_INTERNAL_NAMESPACE::OStream as a Mutex. -// -struct OutputStreamMutex : public Mutex -{ - OPENEXR_IMF_INTERNAL_NAMESPACE::OStream* os; - Int64 currentPosition; - - OutputStreamMutex() - { - os = 0; - currentPosition = 0; - } -}; - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT - - - - - -#endif /* IMFOUTPUTSTREAMMUTEX_H_ */ diff --git a/3rdparty/openexr/IlmImf/ImfPartHelper.h b/3rdparty/openexr/IlmImf/ImfPartHelper.h deleted file mode 100644 index d55cc7b43c..0000000000 --- a/3rdparty/openexr/IlmImf/ImfPartHelper.h +++ /dev/null @@ -1,262 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2012, Weta Digital Ltd -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Weta Digital nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - -#ifndef INCLUDED_IMF_PARTHELPER_H -#define INCLUDED_IMF_PARTHELPER_H - -//----------------------------------------------------------------------------- -// -// Functions to help split channels into separate parts: provide a list of -// channels, with desired views. call SplitChannels to assign a part to each -// layer, or correct the name of the channel. -// Also can enumerate the parts in a file and list which parts channels are in -// -// This is a good way to offer a 'create Multipart file' checkbox to the user in a -// write dialog box: Populate a list of MultiViewChannelName objects, -// call SplitChannels with whether single or multipart files are required. -// Then write the number of parts it specifies, using internal_name for the channel -// names in the ChannelList and FrameBuffer objects. There should be no need -// for different codepaths for single part and multipart files -// -// Similarly, on reading a file as a MultiPartInputFile, use GetChannelsInMultiPartFile to -// enumerate all channels in the file, using internal_name in FrameBuffer objects -// to read the channel -// -// -//----------------------------------------------------------------------------- - -#include "ImfForward.h" -#include "ImfNamespace.h" -#include "ImfExport.h" -#include "ImfMultiPartInputFile.h" -#include "ImfChannelList.h" -#include "ImfStringVectorAttribute.h" -#include "ImfStandardAttributes.h" -#include "ImfMultiView.h" - -#include -#include -#include - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER - -struct MultiViewChannelName{ - -public: - std::string name; ///< name of channel - std::string view; ///< view for channel - - int part_number; ///< part number: updated by SplitChannels - std::string internal_name;///< name used in headers: in singlepart mode, may contain viewname - - virtual ~MultiViewChannelName() {} - - //return layer for this channel, or "" if no layer - std::string getLayer() const - { - std::size_t q=name.rfind('.'); - if( q==name.npos ) - { - return ""; - } - return name.substr(0,q); - - } - - std::string getSuffix() const - { - std::size_t q=name.rfind('.'); - if( q==name.npos ) - { - return name; - } - return name.substr(q+1); - - } - -}; - - - -// -///\brief assigns individual channels to different parts based on their layer and view name -/// input is an array, list, vector etc of MultiViewChannelName objects -/// on entry, each MultiViewChannelName name/view must be set (view can be empty if not multiview) -/// -/// if singlepart set, then on exit part_number will be zero, and internal_name will have view name inserted -/// otherwise, each channel will be assigned to a different part based on its layer name and view name -/// -/// @param begin pointer to first MultiViewChannelName item -/// @param end pointer to end of MultiViewChannelName item array -/// @return total number of parts required -// - -template int -SplitChannels(const T & begin,const T & end,bool multipart=true,const std::string & heroView="") -{ - if(!multipart) - { - for(T i=begin;i!=end;i++) - { - i->part_number=0; - - //does this have a view name set? - if(i->view=="") - { - i->internal_name=i->name; - }else{ - - std::string lname = i->getLayer(); - - // no layer, only non-hero views get view name in layer name - - - if(lname=="") - { - if(i->view==heroView) - { - i->internal_name = i->name; - }else{ - i->internal_name = i->view+"."+i->name; - } - }else{ - i->internal_name = lname+"."+i->view+"."+i->getSuffix(); - } - } - } - // single part created - return 1; - }else{ - // step 1: extract individual layers and parts - // for each layer, enumerate which views are active - - std::map< std::string , std::set< std::string > > viewsInLayers; - for(T i=begin;i!=end;i++) - { - viewsInLayers[i->getLayer()].insert(i->view); - } - - // step 2: assign a part number to each layer/view - - std::map< std::pair , int > layerToPart; - - int partCount=0; - - for(std::map< std::string , std::set< std::string > >::const_iterator layer=viewsInLayers.begin(); - layer!=viewsInLayers.end();layer++) - { - // if this layer has a heroView, insert that first - bool layer_has_hero = layer->second.find(heroView)!=layer->second.end(); - if( layer_has_hero ) - { - layerToPart[ std::make_pair(layer->first,heroView) ] = partCount++; - } - - - // insert other layers which aren't the hero view - for(std::set< std::string >::const_iterator view=layer->second.begin(); - view!=layer->second.end();view++) - { - if(*view!=heroView) - { - layerToPart[ std::make_pair(layer->first,*view) ] = partCount++; - } - } - - } - - // step 3: update part number of each provided channel - - for( T i=begin;i!=end;i++) - { - i->internal_name=i->name; - i->part_number = layerToPart[ std::make_pair(i->getLayer(),i->view) ]; - } - - - // return number of parts created - return partCount; - } -} - -// -// populate the chans vector with a list of channels in the file -// and their corresponding part number -// -template void -GetChannelsInMultiPartFile(const MultiPartInputFile & file,T & chans) -{ - bool has_multiview=false; - StringVector mview; - if(file.parts()==1) - { - if(hasMultiView(file.header(0))) - { - mview=multiView(file.header(0)); - has_multiview=true; - } - } - - for(int p=0;p -#include "ImfNamespace.h" - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_ENTER - -using std::string; - -bool isImage(const string& name) -{ - return (name == SCANLINEIMAGE || name == TILEDIMAGE); -} - -bool isTiled(const string& name) -{ - return (name == TILEDIMAGE || name == DEEPTILE); -} - -bool isDeepData(const string& name) -{ - return (name == DEEPTILE || name == DEEPSCANLINE); -} - -bool isSupportedType(const string& name) -{ - return (name == SCANLINEIMAGE || name == TILEDIMAGE || - name == DEEPSCANLINE || name == DEEPTILE); -} - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_EXIT diff --git a/3rdparty/openexr/IlmImf/ImfPartType.h b/3rdparty/openexr/IlmImf/ImfPartType.h deleted file mode 100644 index 423bce038c..0000000000 --- a/3rdparty/openexr/IlmImf/ImfPartType.h +++ /dev/null @@ -1,62 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2011, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - -#ifndef IMFPARTTYPE_H_ -#define IMFPARTTYPE_H_ - -#include -#include "ImfNamespace.h" -#include "ImfExport.h" - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER - - -const std::string SCANLINEIMAGE = "scanlineimage"; -const std::string TILEDIMAGE = "tiledimage"; -const std::string DEEPSCANLINE = "deepscanline"; -const std::string DEEPTILE = "deeptile"; - -IMF_EXPORT bool isImage(const std::string& name); - -IMF_EXPORT bool isTiled(const std::string& name); - -IMF_EXPORT bool isDeepData(const std::string& name); - -IMF_EXPORT bool isSupportedType(const std::string& name); - - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT - - -#endif /* IMFPARTTYPE_H_ */ diff --git a/3rdparty/openexr/IlmImf/ImfPixelType.h b/3rdparty/openexr/IlmImf/ImfPixelType.h deleted file mode 100644 index 4b8005e95c..0000000000 --- a/3rdparty/openexr/IlmImf/ImfPixelType.h +++ /dev/null @@ -1,67 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - - -#ifndef INCLUDED_IMF_PIXEL_TYPE_H -#define INCLUDED_IMF_PIXEL_TYPE_H - -//----------------------------------------------------------------------------- -// -// enum PixelType -// -//----------------------------------------------------------------------------- - -#include "ImfNamespace.h" - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER - - -enum PixelType -{ - UINT = 0, // unsigned int (32 bit) - HALF = 1, // half (16 bit floating point) - FLOAT = 2, // float (32 bit floating point) - - NUM_PIXELTYPES // number of different pixel types -}; - - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT - - - - - -#endif diff --git a/3rdparty/openexr/IlmImf/ImfPizCompressor.cpp b/3rdparty/openexr/IlmImf/ImfPizCompressor.cpp deleted file mode 100644 index 8b3ee38c3c..0000000000 --- a/3rdparty/openexr/IlmImf/ImfPizCompressor.cpp +++ /dev/null @@ -1,673 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - -//----------------------------------------------------------------------------- -// -// class PizCompressor -// -//----------------------------------------------------------------------------- - -#include "ImfPizCompressor.h" -#include "ImfHeader.h" -#include "ImfChannelList.h" -#include "ImfHuf.h" -#include "ImfWav.h" -#include "ImfMisc.h" -#include "ImfCheckedArithmetic.h" -#include -#include -#include -#include "ImfIO.h" -#include "ImfXdr.h" -#include "ImfAutoArray.h" -#include -#include -#include "ImfNamespace.h" - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_ENTER - -using IMATH_NAMESPACE::divp; -using IMATH_NAMESPACE::modp; -using IMATH_NAMESPACE::Box2i; -using IMATH_NAMESPACE::V2i; -using IEX_NAMESPACE::InputExc; - -namespace { - -// -// Functions to compress the range of values in the pixel data -// - -const int USHORT_RANGE = (1 << 16); -const int BITMAP_SIZE = (USHORT_RANGE >> 3); - -void -bitmapFromData (const unsigned short data[/*nData*/], - int nData, - unsigned char bitmap[BITMAP_SIZE], - unsigned short &minNonZero, - unsigned short &maxNonZero) -{ - for (int i = 0; i < BITMAP_SIZE; ++i) - bitmap[i] = 0; - - for (int i = 0; i < nData; ++i) - bitmap[data[i] >> 3] |= (1 << (data[i] & 7)); - - bitmap[0] &= ~1; // zero is not explicitly stored in - // the bitmap; we assume that the - // data always contain zeroes - minNonZero = BITMAP_SIZE - 1; - maxNonZero = 0; - - for (int i = 0; i < BITMAP_SIZE; ++i) - { - if (bitmap[i]) - { - if (minNonZero > i) - minNonZero = i; - if (maxNonZero < i) - maxNonZero = i; - } - } -} - - -unsigned short -forwardLutFromBitmap (const unsigned char bitmap[BITMAP_SIZE], - unsigned short lut[USHORT_RANGE]) -{ - int k = 0; - - for (int i = 0; i < USHORT_RANGE; ++i) - { - if ((i == 0) || (bitmap[i >> 3] & (1 << (i & 7)))) - lut[i] = k++; - else - lut[i] = 0; - } - - return k - 1; // maximum value stored in lut[], -} // i.e. number of ones in bitmap minus 1 - - -unsigned short -reverseLutFromBitmap (const unsigned char bitmap[BITMAP_SIZE], - unsigned short lut[USHORT_RANGE]) -{ - int k = 0; - - for (int i = 0; i < USHORT_RANGE; ++i) - { - if ((i == 0) || (bitmap[i >> 3] & (1 << (i & 7)))) - lut[k++] = i; - } - - int n = k - 1; - - while (k < USHORT_RANGE) - lut[k++] = 0; - - return n; // maximum k where lut[k] is non-zero, -} // i.e. number of ones in bitmap minus 1 - - -void -applyLut (const unsigned short lut[USHORT_RANGE], - unsigned short data[/*nData*/], - int nData) -{ - for (int i = 0; i < nData; ++i) - data[i] = lut[data[i]]; -} - - -} // namespace - - -struct PizCompressor::ChannelData -{ - unsigned short * start; - unsigned short * end; - int nx; - int ny; - int ys; - int size; -}; - - -PizCompressor::PizCompressor - (const Header &hdr, - size_t maxScanLineSize, - size_t numScanLines) -: - Compressor (hdr), - _maxScanLineSize (maxScanLineSize), - _format (XDR), - _numScanLines (numScanLines), - _tmpBuffer (0), - _outBuffer (0), - _numChans (0), - _channels (hdr.channels()), - _channelData (0) -{ - size_t tmpBufferSize = - uiMult (maxScanLineSize, numScanLines) / 2; - - size_t outBufferSize = - uiAdd (uiMult (maxScanLineSize, numScanLines), - size_t (65536 + 8192)); - - _tmpBuffer = new unsigned short - [checkArraySize (tmpBufferSize, sizeof (unsigned short))]; - - _outBuffer = new char [outBufferSize]; - - const ChannelList &channels = header().channels(); - bool onlyHalfChannels = true; - - for (ChannelList::ConstIterator c = channels.begin(); - c != channels.end(); - ++c) - { - _numChans++; - - assert (pixelTypeSize (c.channel().type) % pixelTypeSize (HALF) == 0); - - if (c.channel().type != HALF) - onlyHalfChannels = false; - } - - _channelData = new ChannelData[_numChans]; - - const Box2i &dataWindow = hdr.dataWindow(); - - _minX = dataWindow.min.x; - _maxX = dataWindow.max.x; - _maxY = dataWindow.max.y; - - // - // We can support uncompressed data in the machine's native format - // if all image channels are of type HALF, and if the Xdr and the - // native represenations of a half have the same size. - // - - if (onlyHalfChannels && (sizeof (half) == pixelTypeSize (HALF))) - _format = NATIVE; -} - - -PizCompressor::~PizCompressor () -{ - delete [] _tmpBuffer; - delete [] _outBuffer; - delete [] _channelData; -} - - -int -PizCompressor::numScanLines () const -{ - return _numScanLines; -} - - -Compressor::Format -PizCompressor::format () const -{ - return _format; -} - - -int -PizCompressor::compress (const char *inPtr, - int inSize, - int minY, - const char *&outPtr) -{ - return compress (inPtr, - inSize, - Box2i (V2i (_minX, minY), - V2i (_maxX, minY + numScanLines() - 1)), - outPtr); -} - - -int -PizCompressor::compressTile (const char *inPtr, - int inSize, - IMATH_NAMESPACE::Box2i range, - const char *&outPtr) -{ - return compress (inPtr, inSize, range, outPtr); -} - - -int -PizCompressor::uncompress (const char *inPtr, - int inSize, - int minY, - const char *&outPtr) -{ - return uncompress (inPtr, - inSize, - Box2i (V2i (_minX, minY), - V2i (_maxX, minY + numScanLines() - 1)), - outPtr); -} - - -int -PizCompressor::uncompressTile (const char *inPtr, - int inSize, - IMATH_NAMESPACE::Box2i range, - const char *&outPtr) -{ - return uncompress (inPtr, inSize, range, outPtr); -} - - -int -PizCompressor::compress (const char *inPtr, - int inSize, - IMATH_NAMESPACE::Box2i range, - const char *&outPtr) -{ - // - // This is the compress function which is used by both the tiled and - // scanline compression routines. - // - - // - // Special case ďż˝- empty input buffer - // - - if (inSize == 0) - { - outPtr = _outBuffer; - return 0; - } - - // - // Rearrange the pixel data so that the wavelet - // and Huffman encoders can process them easily. - // - // The wavelet and Huffman encoders both handle only - // 16-bit data, so 32-bit data must be split into smaller - // pieces. We treat each 32-bit channel (UINT, FLOAT) as - // two interleaved 16-bit channels. - // - - int minX = range.min.x; - int maxX = range.max.x; - int minY = range.min.y; - int maxY = range.max.y; - - if (maxY > _maxY) - maxY = _maxY; - - if (maxX > _maxX) - maxX = _maxX; - - unsigned short *tmpBufferEnd = _tmpBuffer; - int i = 0; - - for (ChannelList::ConstIterator c = _channels.begin(); - c != _channels.end(); - ++c, ++i) - { - ChannelData &cd = _channelData[i]; - - cd.start = tmpBufferEnd; - cd.end = cd.start; - - cd.nx = numSamples (c.channel().xSampling, minX, maxX); - cd.ny = numSamples (c.channel().ySampling, minY, maxY); - cd.ys = c.channel().ySampling; - - cd.size = pixelTypeSize (c.channel().type) / pixelTypeSize (HALF); - - tmpBufferEnd += cd.nx * cd.ny * cd.size; - } - - if (_format == XDR) - { - // - // Machine-independent (Xdr) data format - // - - for (int y = minY; y <= maxY; ++y) - { - for (int i = 0; i < _numChans; ++i) - { - ChannelData &cd = _channelData[i]; - - if (modp (y, cd.ys) != 0) - continue; - - for (int x = cd.nx * cd.size; x > 0; --x) - { - Xdr::read (inPtr, *cd.end); - ++cd.end; - } - } - } - } - else - { - // - // Native, machine-dependent data format - // - - for (int y = minY; y <= maxY; ++y) - { - for (int i = 0; i < _numChans; ++i) - { - ChannelData &cd = _channelData[i]; - - if (modp (y, cd.ys) != 0) - continue; - - int n = cd.nx * cd.size; - memcpy (cd.end, inPtr, n * sizeof (unsigned short)); - inPtr += n * sizeof (unsigned short); - cd.end += n; - } - } - } - - #if defined (DEBUG) - - for (int i = 1; i < _numChans; ++i) - assert (_channelData[i-1].end == _channelData[i].start); - - assert (_channelData[_numChans-1].end == tmpBufferEnd); - - #endif - - // - // Compress the range of the pixel data - // - - AutoArray bitmap; - unsigned short minNonZero; - unsigned short maxNonZero; - - bitmapFromData (_tmpBuffer, - tmpBufferEnd - _tmpBuffer, - bitmap, - minNonZero, maxNonZero); - - AutoArray lut; - unsigned short maxValue = forwardLutFromBitmap (bitmap, lut); - applyLut (lut, _tmpBuffer, tmpBufferEnd - _tmpBuffer); - - // - // Store range compression info in _outBuffer - // - - char *buf = _outBuffer; - - Xdr::write (buf, minNonZero); - Xdr::write (buf, maxNonZero); - - if (minNonZero <= maxNonZero) - { - Xdr::write (buf, (char *) &bitmap[0] + minNonZero, - maxNonZero - minNonZero + 1); - } - - // - // Apply wavelet encoding - // - - for (int i = 0; i < _numChans; ++i) - { - ChannelData &cd = _channelData[i]; - - for (int j = 0; j < cd.size; ++j) - { - wav2Encode (cd.start + j, - cd.nx, cd.size, - cd.ny, cd.nx * cd.size, - maxValue); - } - } - - // - // Apply Huffman encoding; append the result to _outBuffer - // - - char *lengthPtr = buf; - Xdr::write (buf, int(0)); - - int length = hufCompress (_tmpBuffer, tmpBufferEnd - _tmpBuffer, buf); - Xdr::write (lengthPtr, length); - - outPtr = _outBuffer; - return buf - _outBuffer + length; -} - - -int -PizCompressor::uncompress (const char *inPtr, - int inSize, - IMATH_NAMESPACE::Box2i range, - const char *&outPtr) -{ - // - // This is the cunompress function which is used by both the tiled and - // scanline decompression routines. - // - - // - // Special case - empty input buffer - // - - if (inSize == 0) - { - outPtr = _outBuffer; - return 0; - } - - // - // Determine the layout of the compressed pixel data - // - - int minX = range.min.x; - int maxX = range.max.x; - int minY = range.min.y; - int maxY = range.max.y; - - if (maxY > _maxY) - maxY = _maxY; - - if (maxX > _maxX) - maxX = _maxX; - - unsigned short *tmpBufferEnd = _tmpBuffer; - int i = 0; - - for (ChannelList::ConstIterator c = _channels.begin(); - c != _channels.end(); - ++c, ++i) - { - ChannelData &cd = _channelData[i]; - - cd.start = tmpBufferEnd; - cd.end = cd.start; - - cd.nx = numSamples (c.channel().xSampling, minX, maxX); - cd.ny = numSamples (c.channel().ySampling, minY, maxY); - cd.ys = c.channel().ySampling; - - cd.size = pixelTypeSize (c.channel().type) / pixelTypeSize (HALF); - - tmpBufferEnd += cd.nx * cd.ny * cd.size; - } - - // - // Read range compression data - // - - unsigned short minNonZero; - unsigned short maxNonZero; - - AutoArray bitmap; - memset (bitmap, 0, sizeof (unsigned char) * BITMAP_SIZE); - - Xdr::read (inPtr, minNonZero); - Xdr::read (inPtr, maxNonZero); - - if (maxNonZero >= BITMAP_SIZE) - { - throw InputExc ("Error in header for PIZ-compressed data " - "(invalid bitmap size)."); - } - - if (minNonZero <= maxNonZero) - { - Xdr::read (inPtr, (char *) &bitmap[0] + minNonZero, - maxNonZero - minNonZero + 1); - } - - AutoArray lut; - unsigned short maxValue = reverseLutFromBitmap (bitmap, lut); - - // - // Huffman decoding - // - - int length; - Xdr::read (inPtr, length); - - if (length > inSize) - { - throw InputExc ("Error in header for PIZ-compressed data " - "(invalid array length)."); - } - - hufUncompress (inPtr, length, _tmpBuffer, tmpBufferEnd - _tmpBuffer); - - // - // Wavelet decoding - // - - for (int i = 0; i < _numChans; ++i) - { - ChannelData &cd = _channelData[i]; - - for (int j = 0; j < cd.size; ++j) - { - wav2Decode (cd.start + j, - cd.nx, cd.size, - cd.ny, cd.nx * cd.size, - maxValue); - } - } - - // - // Expand the pixel data to their original range - // - - applyLut (lut, _tmpBuffer, tmpBufferEnd - _tmpBuffer); - - // - // Rearrange the pixel data into the format expected by the caller. - // - - char *outEnd = _outBuffer; - - if (_format == XDR) - { - // - // Machine-independent (Xdr) data format - // - - for (int y = minY; y <= maxY; ++y) - { - for (int i = 0; i < _numChans; ++i) - { - ChannelData &cd = _channelData[i]; - - if (modp (y, cd.ys) != 0) - continue; - - for (int x = cd.nx * cd.size; x > 0; --x) - { - Xdr::write (outEnd, *cd.end); - ++cd.end; - } - } - } - } - else - { - // - // Native, machine-dependent data format - // - - for (int y = minY; y <= maxY; ++y) - { - for (int i = 0; i < _numChans; ++i) - { - ChannelData &cd = _channelData[i]; - - if (modp (y, cd.ys) != 0) - continue; - - int n = cd.nx * cd.size; - memcpy (outEnd, cd.end, n * sizeof (unsigned short)); - outEnd += n * sizeof (unsigned short); - cd.end += n; - } - } - } - - #if defined (DEBUG) - - for (int i = 1; i < _numChans; ++i) - assert (_channelData[i-1].end == _channelData[i].start); - - assert (_channelData[_numChans-1].end == tmpBufferEnd); - - #endif - - outPtr = _outBuffer; - return outEnd - _outBuffer; -} - - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_EXIT diff --git a/3rdparty/openexr/IlmImf/ImfPizCompressor.h b/3rdparty/openexr/IlmImf/ImfPizCompressor.h deleted file mode 100644 index 703f55214c..0000000000 --- a/3rdparty/openexr/IlmImf/ImfPizCompressor.h +++ /dev/null @@ -1,125 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - -#ifndef INCLUDED_IMF_PIZ_COMPRESSOR_H -#define INCLUDED_IMF_PIZ_COMPRESSOR_H - -//----------------------------------------------------------------------------- -// -// class PizCompressor -- uses Wavelet and Huffman encoding. -// -//----------------------------------------------------------------------------- - -#include "ImfCompressor.h" -#include "ImfNamespace.h" -#include "ImfExport.h" -#include "ImfForward.h" - - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER - - -class PizCompressor: public Compressor -{ - public: - - IMF_EXPORT - PizCompressor (const Header &hdr, - size_t maxScanLineSize, - size_t numScanLines); - - IMF_EXPORT - virtual ~PizCompressor (); - - IMF_EXPORT - virtual int numScanLines () const; - - IMF_EXPORT - virtual Format format () const; - - IMF_EXPORT - virtual int compress (const char *inPtr, - int inSize, - int minY, - const char *&outPtr); - - IMF_EXPORT - virtual int compressTile (const char *inPtr, - int inSize, - IMATH_NAMESPACE::Box2i range, - const char *&outPtr); - - IMF_EXPORT - virtual int uncompress (const char *inPtr, - int inSize, - int minY, - const char *&outPtr); - - IMF_EXPORT - virtual int uncompressTile (const char *inPtr, - int inSize, - IMATH_NAMESPACE::Box2i range, - const char *&outPtr); - private: - - struct ChannelData; - - int compress (const char *inPtr, - int inSize, - IMATH_NAMESPACE::Box2i range, - const char *&outPtr); - - int uncompress (const char *inPtr, - int inSize, - IMATH_NAMESPACE::Box2i range, - const char *&outPtr); - - int _maxScanLineSize; - Format _format; - int _numScanLines; - unsigned short * _tmpBuffer; - char * _outBuffer; - int _numChans; - const ChannelList & _channels; - ChannelData * _channelData; - int _minX; - int _maxX; - int _maxY; -}; - - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT - -#endif diff --git a/3rdparty/openexr/IlmImf/ImfPreviewImage.cpp b/3rdparty/openexr/IlmImf/ImfPreviewImage.cpp deleted file mode 100644 index 8027d0f3c3..0000000000 --- a/3rdparty/openexr/IlmImf/ImfPreviewImage.cpp +++ /dev/null @@ -1,104 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2003, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - -//----------------------------------------------------------------------------- -// -// class PreviewImage -// -//----------------------------------------------------------------------------- - -#include "ImfPreviewImage.h" -#include "ImfCheckedArithmetic.h" -#include "Iex.h" -#include "ImfNamespace.h" - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_ENTER - - -PreviewImage::PreviewImage (unsigned int width, - unsigned int height, - const PreviewRgba pixels[]) -{ - _width = width; - _height = height; - _pixels = new PreviewRgba - [checkArraySize (uiMult (_width, _height), sizeof (PreviewRgba))]; - - if (pixels) - { - for (unsigned int i = 0; i < _width * _height; ++i) - _pixels[i] = pixels[i]; - } - else - { - for (unsigned int i = 0; i < _width * _height; ++i) - _pixels[i] = PreviewRgba(); - } -} - - -PreviewImage::PreviewImage (const PreviewImage &other): - _width (other._width), - _height (other._height), - _pixels (new PreviewRgba [other._width * other._height]) -{ - for (unsigned int i = 0; i < _width * _height; ++i) - _pixels[i] = other._pixels[i]; -} - - -PreviewImage::~PreviewImage () -{ - delete [] _pixels; -} - - -PreviewImage & -PreviewImage::operator = (const PreviewImage &other) -{ - delete [] _pixels; - - _width = other._width; - _height = other._height; - _pixels = new PreviewRgba [other._width * other._height]; - - for (unsigned int i = 0; i < _width * _height; ++i) - _pixels[i] = other._pixels[i]; - - return *this; -} - - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_EXIT diff --git a/3rdparty/openexr/IlmImf/ImfPreviewImage.h b/3rdparty/openexr/IlmImf/ImfPreviewImage.h deleted file mode 100644 index 20a2253c34..0000000000 --- a/3rdparty/openexr/IlmImf/ImfPreviewImage.h +++ /dev/null @@ -1,145 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2003, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - -#ifndef INCLUDED_IMF_PREVIEW_IMAGE_H -#define INCLUDED_IMF_PREVIEW_IMAGE_H - -#include "ImfNamespace.h" -#include "ImfExport.h" - -//----------------------------------------------------------------------------- -// -// class PreviewImage -- a usually small, low-dynamic range image, -// that is intended to be stored in an image file's header. -// -// struct PreviewRgba -- holds the value of a PreviewImage pixel. -// -//----------------------------------------------------------------------------- - - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER - - -struct PreviewRgba -{ - unsigned char r; // Red, green and blue components of - unsigned char g; // the pixel's color; intensity is - unsigned char b; // proportional to pow (x/255, 2.2), - // where x is r, g, or b. - - unsigned char a; // The pixel's alpha; 0 == transparent, - // 255 == opaque. - - PreviewRgba (unsigned char r = 0, - unsigned char g = 0, - unsigned char b = 0, - unsigned char a = 255) - : r(r), g(g), b(b), a(a) {} -}; - - -class PreviewImage -{ - public: - - //-------------------------------------------------------------------- - // Constructor: - // - // PreviewImage(w,h,p) constructs a preview image with w by h pixels - // whose initial values are specified in pixel array p. The x and y - // coordinates of the pixels in p go from 0 to w-1, and from 0 to h-1. - // The pixel with coordinates (x, y) is at address p + y*w + x. - // Pixel (0, 0) is in the upper left corner of the preview image. - // If p is zero, the pixels in the preview image are initialized with - // (r = 0, b = 0, g = 0, a = 255). - // - //-------------------------------------------------------------------- - - IMF_EXPORT - PreviewImage (unsigned int width = 0, - unsigned int height = 0, - const PreviewRgba pixels[] = 0); - - //----------------------------------------------------- - // Copy constructor, destructor and assignment operator - //----------------------------------------------------- - - IMF_EXPORT - PreviewImage (const PreviewImage &other); - IMF_EXPORT - ~PreviewImage (); - - IMF_EXPORT - PreviewImage & operator = (const PreviewImage &other); - - - //----------------------------------------------- - // Access to width, height and to the pixel array - //----------------------------------------------- - - IMF_EXPORT - unsigned int width () const {return _width;} - IMF_EXPORT - unsigned int height () const {return _height;} - - IMF_EXPORT - PreviewRgba * pixels () {return _pixels;} - IMF_EXPORT - const PreviewRgba * pixels () const {return _pixels;} - - - //---------------------------- - // Access to individual pixels - //---------------------------- - - IMF_EXPORT - PreviewRgba & pixel (unsigned int x, unsigned int y) - {return _pixels[y * _width + x];} - - IMF_EXPORT - const PreviewRgba & pixel (unsigned int x, unsigned int y) const - {return _pixels[y * _width + x];} - - private: - - unsigned int _width; - unsigned int _height; - PreviewRgba * _pixels; -}; - - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT - -#endif diff --git a/3rdparty/openexr/IlmImf/ImfPreviewImageAttribute.cpp b/3rdparty/openexr/IlmImf/ImfPreviewImageAttribute.cpp deleted file mode 100644 index 8729f88eaa..0000000000 --- a/3rdparty/openexr/IlmImf/ImfPreviewImageAttribute.cpp +++ /dev/null @@ -1,103 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - -//----------------------------------------------------------------------------- -// -// class PreviewImageAttribute -// -//----------------------------------------------------------------------------- - -#include - - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_ENTER - -using namespace OPENEXR_IMF_INTERNAL_NAMESPACE; - -template <> -const char * -PreviewImageAttribute::staticTypeName () -{ - return "preview"; -} - - -template <> -void -PreviewImageAttribute::writeValueTo (OPENEXR_IMF_INTERNAL_NAMESPACE::OStream &os, int version) const -{ - Xdr::write (os, _value.width()); - Xdr::write (os, _value.height()); - - int numPixels = _value.width() * _value.height(); - const PreviewRgba *pixels = _value.pixels(); - - for (int i = 0; i < numPixels; ++i) - { - Xdr::write (os, pixels[i].r); - Xdr::write (os, pixels[i].g); - Xdr::write (os, pixels[i].b); - Xdr::write (os, pixels[i].a); - } -} - - -template <> -void -PreviewImageAttribute::readValueFrom (OPENEXR_IMF_INTERNAL_NAMESPACE::IStream &is, int size, int version) -{ - int width, height; - - Xdr::read (is, width); - Xdr::read (is, height); - - PreviewImage p (width, height); - - int numPixels = p.width() * p.height(); - PreviewRgba *pixels = p.pixels(); - - for (int i = 0; i < numPixels; ++i) - { - Xdr::read (is, pixels[i].r); - Xdr::read (is, pixels[i].g); - Xdr::read (is, pixels[i].b); - Xdr::read (is, pixels[i].a); - } - - _value = p; -} - - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_EXIT diff --git a/3rdparty/openexr/IlmImf/ImfPreviewImageAttribute.h b/3rdparty/openexr/IlmImf/ImfPreviewImageAttribute.h deleted file mode 100644 index 160e409551..0000000000 --- a/3rdparty/openexr/IlmImf/ImfPreviewImageAttribute.h +++ /dev/null @@ -1,70 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - -#ifndef INCLUDED_IMF_PREVIEW_IMAGE_ATTRIBUTE_H -#define INCLUDED_IMF_PREVIEW_IMAGE_ATTRIBUTE_H - -//----------------------------------------------------------------------------- -// -// class PreviewImageAttribute -// -//----------------------------------------------------------------------------- - -#include "ImfAttribute.h" -#include "ImfPreviewImage.h" - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER - - -typedef TypedAttribute PreviewImageAttribute; - -template <> -IMF_EXPORT -const char *PreviewImageAttribute::staticTypeName (); - -template <> -IMF_EXPORT -void PreviewImageAttribute::writeValueTo (OPENEXR_IMF_INTERNAL_NAMESPACE::OStream &, - int) const; - -template <> -IMF_EXPORT -void PreviewImageAttribute::readValueFrom (OPENEXR_IMF_INTERNAL_NAMESPACE::IStream &, - int, int); - - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT - -#endif diff --git a/3rdparty/openexr/IlmImf/ImfPxr24Compressor.cpp b/3rdparty/openexr/IlmImf/ImfPxr24Compressor.cpp deleted file mode 100644 index 6489576ad5..0000000000 --- a/3rdparty/openexr/IlmImf/ImfPxr24Compressor.cpp +++ /dev/null @@ -1,553 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2004, Pixar Animation Studios -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Pixar Animation Studios nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -///////////////////////////////////////////////////////////////////////////// - -//----------------------------------------------------------------------------- -// -// class Pxr24Compressor -// -// This compressor is based on source code that was contributed to -// OpenEXR by Pixar Animation Studios. The compression method was -// developed by Loren Carpenter. -// -// The compressor preprocesses the pixel data to reduce entropy, -// and then calls zlib. -// -// Compression of HALF and UINT channels is lossless, but compressing -// FLOAT channels is lossy: 32-bit floating-point numbers are converted -// to 24 bits by rounding the significand to 15 bits. -// -// When the compressor is invoked, the caller has already arranged -// the pixel data so that the values for each channel appear in a -// contiguous block of memory. The compressor converts the pixel -// values to unsigned integers: For UINT, this is a no-op. HALF -// values are simply re-interpreted as 16-bit integers. FLOAT -// values are converted to 24 bits, and the resulting bit patterns -// are interpreted as integers. The compressor then replaces each -// value with the difference between the value and its left neighbor. -// This turns flat fields in the image into zeroes, and ramps into -// strings of similar values. Next, each difference is split into -// 2, 3 or 4 bytes, and the bytes are transposed so that all the -// most significant bytes end up in a contiguous block, followed -// by the second most significant bytes, and so on. The resulting -// string of bytes is compressed with zlib. -// -//----------------------------------------------------------------------------- - -#include "ImfPxr24Compressor.h" -#include "ImfHeader.h" -#include "ImfChannelList.h" -#include "ImfMisc.h" -#include "ImfCheckedArithmetic.h" -#include "ImfNamespace.h" - -#include -#include - -#include -#include -#include -#include - -using namespace std; -using namespace IMATH_NAMESPACE; - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_ENTER - -namespace { - -// -// Conversion from 32-bit to 24-bit floating-point numbers. -// Conversion back to 32 bits is simply an 8-bit shift to the left. -// - -inline unsigned int -floatToFloat24 (float f) -{ - union - { - float f; - unsigned int i; - } u; - - u.f = f; - - // - // Disassemble the 32-bit floating point number, f, - // into sign, s, exponent, e, and significand, m. - // - - unsigned int s = u.i & 0x80000000; - unsigned int e = u.i & 0x7f800000; - unsigned int m = u.i & 0x007fffff; - unsigned int i; - - if (e == 0x7f800000) - { - if (m) - { - // - // F is a NAN; we preserve the sign bit and - // the 15 leftmost bits of the significand, - // with one exception: If the 15 leftmost - // bits are all zero, the NAN would turn - // into an infinity, so we have to set at - // least one bit in the significand. - // - - m >>= 8; - i = (e >> 8) | m | (m == 0); - } - else - { - // - // F is an infinity. - // - - i = e >> 8; - } - } - else - { - // - // F is finite, round the significand to 15 bits. - // - - i = ((e | m) + (m & 0x00000080)) >> 8; - - if (i >= 0x7f8000) - { - // - // F was close to FLT_MAX, and the significand was - // rounded up, resulting in an exponent overflow. - // Avoid the overflow by truncating the significand - // instead of rounding it. - // - - i = (e | m) >> 8; - } - } - - return (s >> 8) | i; -} - - -void -notEnoughData () -{ - throw IEX_NAMESPACE::InputExc ("Error decompressing data " - "(input data are shorter than expected)."); -} - - -void -tooMuchData () -{ - throw IEX_NAMESPACE::InputExc ("Error decompressing data " - "(input data are longer than expected)."); -} - -} // namespace - - -Pxr24Compressor::Pxr24Compressor (const Header &hdr, - size_t maxScanLineSize, - size_t numScanLines) -: - Compressor (hdr), - _maxScanLineSize (maxScanLineSize), - _numScanLines (numScanLines), - _tmpBuffer (0), - _outBuffer (0), - _channels (hdr.channels()) -{ - size_t maxInBytes = - uiMult (maxScanLineSize, numScanLines); - - size_t maxOutBytes = - uiAdd (uiAdd (maxInBytes, - size_t (ceil (maxInBytes * 0.01))), - size_t (100)); - - _tmpBuffer = new unsigned char [maxInBytes]; - _outBuffer = new char [maxOutBytes]; - - const Box2i &dataWindow = hdr.dataWindow(); - - _minX = dataWindow.min.x; - _maxX = dataWindow.max.x; - _maxY = dataWindow.max.y; -} - - -Pxr24Compressor::~Pxr24Compressor () -{ - delete [] _tmpBuffer; - delete [] _outBuffer; -} - - -int -Pxr24Compressor::numScanLines () const -{ - return _numScanLines; -} - - -Compressor::Format -Pxr24Compressor::format () const -{ - return NATIVE; -} - - -int -Pxr24Compressor::compress (const char *inPtr, - int inSize, - int minY, - const char *&outPtr) -{ - return compress (inPtr, - inSize, - Box2i (V2i (_minX, minY), - V2i (_maxX, minY + _numScanLines - 1)), - outPtr); -} - - -int -Pxr24Compressor::compressTile (const char *inPtr, - int inSize, - Box2i range, - const char *&outPtr) -{ - return compress (inPtr, inSize, range, outPtr); -} - - -int -Pxr24Compressor::uncompress (const char *inPtr, - int inSize, - int minY, - const char *&outPtr) -{ - return uncompress (inPtr, - inSize, - Box2i (V2i (_minX, minY), - V2i (_maxX, minY + _numScanLines - 1)), - outPtr); -} - - -int -Pxr24Compressor::uncompressTile (const char *inPtr, - int inSize, - Box2i range, - const char *&outPtr) -{ - return uncompress (inPtr, inSize, range, outPtr); -} - - -int -Pxr24Compressor::compress (const char *inPtr, - int inSize, - Box2i range, - const char *&outPtr) -{ - if (inSize == 0) - { - outPtr = _outBuffer; - return 0; - } - - int minX = range.min.x; - int maxX = min (range.max.x, _maxX); - int minY = range.min.y; - int maxY = min (range.max.y, _maxY); - - unsigned char *tmpBufferEnd = _tmpBuffer; - - for (int y = minY; y <= maxY; ++y) - { - for (ChannelList::ConstIterator i = _channels.begin(); - i != _channels.end(); - ++i) - { - const Channel &c = i.channel(); - - if (modp (y, c.ySampling) != 0) - continue; - - int n = numSamples (c.xSampling, minX, maxX); - - unsigned char *ptr[4]; - unsigned int previousPixel = 0; - - switch (c.type) - { - case OPENEXR_IMF_INTERNAL_NAMESPACE::UINT: - - ptr[0] = tmpBufferEnd; - ptr[1] = ptr[0] + n; - ptr[2] = ptr[1] + n; - ptr[3] = ptr[2] + n; - tmpBufferEnd = ptr[3] + n; - - for (int j = 0; j < n; ++j) - { - unsigned int pixel; - char *pPtr = (char *) &pixel; - - for (size_t k = 0; k < sizeof (pixel); ++k) - *pPtr++ = *inPtr++; - - unsigned int diff = pixel - previousPixel; - previousPixel = pixel; - - *(ptr[0]++) = diff >> 24; - *(ptr[1]++) = diff >> 16; - *(ptr[2]++) = diff >> 8; - *(ptr[3]++) = diff; - } - - break; - - case OPENEXR_IMF_INTERNAL_NAMESPACE::HALF: - - ptr[0] = tmpBufferEnd; - ptr[1] = ptr[0] + n; - tmpBufferEnd = ptr[1] + n; - - for (int j = 0; j < n; ++j) - { - half pixel; - - pixel = *(const half *) inPtr; - inPtr += sizeof (half); - - unsigned int diff = pixel.bits() - previousPixel; - previousPixel = pixel.bits(); - - *(ptr[0]++) = diff >> 8; - *(ptr[1]++) = diff; - } - - break; - - case OPENEXR_IMF_INTERNAL_NAMESPACE::FLOAT: - - ptr[0] = tmpBufferEnd; - ptr[1] = ptr[0] + n; - ptr[2] = ptr[1] + n; - tmpBufferEnd = ptr[2] + n; - - for (int j = 0; j < n; ++j) - { - float pixel; - char *pPtr = (char *) &pixel; - - for (size_t k = 0; k < sizeof (pixel); ++k) - *pPtr++ = *inPtr++; - - unsigned int pixel24 = floatToFloat24 (pixel); - unsigned int diff = pixel24 - previousPixel; - previousPixel = pixel24; - - *(ptr[0]++) = diff >> 16; - *(ptr[1]++) = diff >> 8; - *(ptr[2]++) = diff; - } - - break; - - default: - - assert (false); - } - } - } - - uLongf outSize = int (ceil ((tmpBufferEnd - _tmpBuffer) * 1.01)) + 100; - - if (Z_OK != ::compress ((Bytef *) _outBuffer, - &outSize, - (const Bytef *) _tmpBuffer, - tmpBufferEnd - _tmpBuffer)) - { - throw IEX_NAMESPACE::BaseExc ("Data compression (zlib) failed."); - } - - outPtr = _outBuffer; - return outSize; -} - - -int -Pxr24Compressor::uncompress (const char *inPtr, - int inSize, - Box2i range, - const char *&outPtr) -{ - if (inSize == 0) - { - outPtr = _outBuffer; - return 0; - } - - uLongf tmpSize = _maxScanLineSize * _numScanLines; - - if (Z_OK != ::uncompress ((Bytef *)_tmpBuffer, - &tmpSize, - (const Bytef *) inPtr, - inSize)) - { - throw IEX_NAMESPACE::InputExc ("Data decompression (zlib) failed."); - } - - int minX = range.min.x; - int maxX = min (range.max.x, _maxX); - int minY = range.min.y; - int maxY = min (range.max.y, _maxY); - - const unsigned char *tmpBufferEnd = _tmpBuffer; - char *writePtr = _outBuffer; - - for (int y = minY; y <= maxY; ++y) - { - for (ChannelList::ConstIterator i = _channels.begin(); - i != _channels.end(); - ++i) - { - const Channel &c = i.channel(); - - if (modp (y, c.ySampling) != 0) - continue; - - int n = numSamples (c.xSampling, minX, maxX); - - const unsigned char *ptr[4]; - unsigned int pixel = 0; - - switch (c.type) - { - case OPENEXR_IMF_INTERNAL_NAMESPACE::UINT: - - ptr[0] = tmpBufferEnd; - ptr[1] = ptr[0] + n; - ptr[2] = ptr[1] + n; - ptr[3] = ptr[2] + n; - tmpBufferEnd = ptr[3] + n; - - if ( (uLongf)(tmpBufferEnd - _tmpBuffer) > tmpSize) - notEnoughData(); - - for (int j = 0; j < n; ++j) - { - unsigned int diff = (*(ptr[0]++) << 24) | - (*(ptr[1]++) << 16) | - (*(ptr[2]++) << 8) | - *(ptr[3]++); - - pixel += diff; - - char *pPtr = (char *) &pixel; - - for (size_t k = 0; k < sizeof (pixel); ++k) - *writePtr++ = *pPtr++; - } - - break; - - case OPENEXR_IMF_INTERNAL_NAMESPACE::HALF: - - ptr[0] = tmpBufferEnd; - ptr[1] = ptr[0] + n; - tmpBufferEnd = ptr[1] + n; - - if ( (uLongf)(tmpBufferEnd - _tmpBuffer) > tmpSize) - notEnoughData(); - - for (int j = 0; j < n; ++j) - { - unsigned int diff = (*(ptr[0]++) << 8) | - *(ptr[1]++); - - pixel += diff; - - half * hPtr = (half *) writePtr; - hPtr->setBits ((unsigned short) pixel); - writePtr += sizeof (half); - } - - break; - - case OPENEXR_IMF_INTERNAL_NAMESPACE::FLOAT: - - ptr[0] = tmpBufferEnd; - ptr[1] = ptr[0] + n; - ptr[2] = ptr[1] + n; - tmpBufferEnd = ptr[2] + n; - - if ( (uLongf) (tmpBufferEnd - _tmpBuffer) > tmpSize) - notEnoughData(); - - for (int j = 0; j < n; ++j) - { - unsigned int diff = (*(ptr[0]++) << 24) | - (*(ptr[1]++) << 16) | - (*(ptr[2]++) << 8); - pixel += diff; - - char *pPtr = (char *) &pixel; - - for (size_t k = 0; k < sizeof (pixel); ++k) - *writePtr++ = *pPtr++; - } - - break; - - default: - - assert (false); - } - } - } - - if ((uLongf) (tmpBufferEnd - _tmpBuffer) < tmpSize) - tooMuchData(); - - outPtr = _outBuffer; - return writePtr - _outBuffer; -} - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_EXIT diff --git a/3rdparty/openexr/IlmImf/ImfPxr24Compressor.h b/3rdparty/openexr/IlmImf/ImfPxr24Compressor.h deleted file mode 100644 index d8c7091c33..0000000000 --- a/3rdparty/openexr/IlmImf/ImfPxr24Compressor.h +++ /dev/null @@ -1,117 +0,0 @@ -#ifndef INCLUDED_IMF_PXR24_COMPRESSOR_H -#define INCLUDED_IMF_PXR24_COMPRESSOR_H - -///////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2004, Pixar Animation Studios -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Pixar Animation Studios nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -///////////////////////////////////////////////////////////////////////////// - -//----------------------------------------------------------------------------- -// -// class Pxr24Compressor -- Loren Carpenter's 24-bit float compressor -// -//----------------------------------------------------------------------------- - -#include "ImfCompressor.h" -#include "ImfNamespace.h" -#include "ImfExport.h" -#include "ImfForward.h" - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER - - -class Pxr24Compressor: public Compressor -{ - public: - - IMF_EXPORT - Pxr24Compressor (const Header &hdr, - size_t maxScanLineSize, - size_t numScanLines); - - IMF_EXPORT - virtual ~Pxr24Compressor (); - - IMF_EXPORT - virtual int numScanLines () const; - - IMF_EXPORT - virtual Format format () const; - - IMF_EXPORT - virtual int compress (const char *inPtr, - int inSize, - int minY, - const char *&outPtr); - - IMF_EXPORT - virtual int compressTile (const char *inPtr, - int inSize, - IMATH_NAMESPACE::Box2i range, - const char *&outPtr); - - IMF_EXPORT - virtual int uncompress (const char *inPtr, - int inSize, - int minY, - const char *&outPtr); - - IMF_EXPORT - virtual int uncompressTile (const char *inPtr, - int inSize, - IMATH_NAMESPACE::Box2i range, - const char *&outPtr); - private: - - int compress (const char *inPtr, - int inSize, - IMATH_NAMESPACE::Box2i range, - const char *&outPtr); - - int uncompress (const char *inPtr, - int inSize, - IMATH_NAMESPACE::Box2i range, - const char *&outPtr); - - int _maxScanLineSize; - int _numScanLines; - unsigned char * _tmpBuffer; - char * _outBuffer; - const ChannelList & _channels; - int _minX; - int _maxX; - int _maxY; -}; - - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT - -#endif diff --git a/3rdparty/openexr/IlmImf/ImfRational.cpp b/3rdparty/openexr/IlmImf/ImfRational.cpp deleted file mode 100644 index fda7fc937a..0000000000 --- a/3rdparty/openexr/IlmImf/ImfRational.cpp +++ /dev/null @@ -1,127 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2006, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - -//----------------------------------------------------------------------------- -// -// Rational numbers -// -// The double-to-Rational conversion code below -// was contributed to OpenEXR by Greg Ward. -// -//----------------------------------------------------------------------------- - -#include -#include - -using namespace std; -#include "ImfNamespace.h" - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_ENTER - -namespace { - -double -frac (double x, double e) -{ - return x - floor (x + e); -} - - -double -square (double x) -{ - return x * x; -} - - -double -denom (double x, double e) -{ - if (e > frac (x, e)) - { - return 1; - } - else - { - double r = frac (1 / x, e); - - if (e > r) - { - return floor (1 / x + e); - } - else - { - return denom (frac (1 / r, e), e / square (x * r)) + - floor (1 / x + e) * denom (frac (1 / x, e), e / square (x)); - } - } -} - -} // namespace - - -Rational::Rational (double x) -{ - int sign; - - if (x >= 0) - { - sign = 1; // positive - } - else if (x < 0) - { - sign = -1; // negative - x = -x; - } - else - { - n = 0; // NaN - d = 0; - return; - } - - if (x >= (1U << 31) - 0.5) - { - n = sign; // infinity - d = 0; - return; - } - - double e = (x < 1? 1: x) / (1U << 30); - d = (unsigned int) denom (x, e); - n = sign * (int) floor (x * d + 0.5); -} - - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_EXIT diff --git a/3rdparty/openexr/IlmImf/ImfRational.h b/3rdparty/openexr/IlmImf/ImfRational.h deleted file mode 100644 index 9dfe806a94..0000000000 --- a/3rdparty/openexr/IlmImf/ImfRational.h +++ /dev/null @@ -1,99 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2006, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - -#ifndef INCLUDED_IMF_RATIONAL_H -#define INCLUDED_IMF_RATIONAL_H - -#include "ImfExport.h" -#include "ImfNamespace.h" - -//----------------------------------------------------------------------------- -// -// Rational numbers -// -// A rational number is represented as pair of integers, n and d. -// The value of of the rational number is -// -// n/d for d > 0 -// positive infinity for n > 0, d == 0 -// negative infinity for n < 0, d == 0 -// not a number (NaN) for n == 0, d == 0 -// -//----------------------------------------------------------------------------- - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER - - -class Rational -{ - public: - - int n; // numerator - unsigned int d; // denominator - - - //---------------------------------------- - // Default constructor, sets value to zero - //---------------------------------------- - - Rational (): n (0), d (1) {} - - - //------------------------------------- - // Constructor, explicitly sets n and d - //------------------------------------- - - Rational (int n, int d): n (n), d (d) {} - - - //---------------------------- - // Constructor, approximates x - //---------------------------- - - IMF_EXPORT - explicit Rational (double x); - - - //--------------------------------- - // Approximate conversion to double - //--------------------------------- - - operator double () const {return double (n) / double (d);} -}; - - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT - -#endif diff --git a/3rdparty/openexr/IlmImf/ImfRationalAttribute.cpp b/3rdparty/openexr/IlmImf/ImfRationalAttribute.cpp deleted file mode 100644 index a41646832b..0000000000 --- a/3rdparty/openexr/IlmImf/ImfRationalAttribute.cpp +++ /dev/null @@ -1,74 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2006, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - -//----------------------------------------------------------------------------- -// -// class RationalAttribute -// -//----------------------------------------------------------------------------- - -#include - - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_ENTER - -using namespace OPENEXR_IMF_INTERNAL_NAMESPACE; - -template <> -const char * -RationalAttribute::staticTypeName () -{ - return "rational"; -} - - -template <> -void -RationalAttribute::writeValueTo (OPENEXR_IMF_INTERNAL_NAMESPACE::OStream &os, int version) const -{ - Xdr::write (os, _value.n); - Xdr::write (os, _value.d); -} - - -template <> -void -RationalAttribute::readValueFrom (OPENEXR_IMF_INTERNAL_NAMESPACE::IStream &is, int size, int version) -{ - Xdr::read (is, _value.n); - Xdr::read (is, _value.d); -} - - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_EXIT diff --git a/3rdparty/openexr/IlmImf/ImfRationalAttribute.h b/3rdparty/openexr/IlmImf/ImfRationalAttribute.h deleted file mode 100644 index 988fe01ab4..0000000000 --- a/3rdparty/openexr/IlmImf/ImfRationalAttribute.h +++ /dev/null @@ -1,69 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - -#ifndef INCLUDED_IMF_RATIONAL_ATTRIBUTE_H -#define INCLUDED_IMF_RATIONAL_ATTRIBUTE_H - -//----------------------------------------------------------------------------- -// -// class RationalAttribute -// -//----------------------------------------------------------------------------- - -#include "ImfAttribute.h" -#include "ImfRational.h" - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER - - -typedef TypedAttribute RationalAttribute; - -template <> -IMF_EXPORT -const char *RationalAttribute::staticTypeName (); - -template <> -IMF_EXPORT -void RationalAttribute::writeValueTo (OPENEXR_IMF_INTERNAL_NAMESPACE::OStream &, - int) const; - -template <> -IMF_EXPORT -void RationalAttribute::readValueFrom (OPENEXR_IMF_INTERNAL_NAMESPACE::IStream &, - int, int); - - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT - -#endif diff --git a/3rdparty/openexr/IlmImf/ImfRgba.h b/3rdparty/openexr/IlmImf/ImfRgba.h deleted file mode 100644 index dccba9f0ac..0000000000 --- a/3rdparty/openexr/IlmImf/ImfRgba.h +++ /dev/null @@ -1,109 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - -#ifndef INCLUDED_IMF_RGBA_H -#define INCLUDED_IMF_RGBA_H - -//----------------------------------------------------------------------------- -// -// class Rgba -// -//----------------------------------------------------------------------------- - -#include "half.h" -#include "ImfNamespace.h" - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER - - -// -// RGBA pixel -// - -struct Rgba -{ - half r; - half g; - half b; - half a; - - Rgba () {} - Rgba (half r, half g, half b, half a = 1.f): r (r), g (g), b (b), a (a) {} - - Rgba & operator = (const Rgba &other) - { - r = other.r; - g = other.g; - b = other.b; - a = other.a; - - return *this; - } -}; - - -// -// Channels in an RGBA file -// - -enum RgbaChannels -{ - WRITE_R = 0x01, // Red - WRITE_G = 0x02, // Green - WRITE_B = 0x04, // Blue - WRITE_A = 0x08, // Alpha - - WRITE_Y = 0x10, // Luminance, for black-and-white images, - // or in combination with chroma - - WRITE_C = 0x20, // Chroma (two subsampled channels, RY and BY, - // supported only for scanline-based files) - - WRITE_RGB = 0x07, // Red, green, blue - WRITE_RGBA = 0x0f, // Red, green, blue, alpha - - WRITE_YC = 0x30, // Luminance, chroma - WRITE_YA = 0x18, // Luminance, alpha - WRITE_YCA = 0x38 // Luminance, chroma, alpha -}; - - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT - - - - - -#endif diff --git a/3rdparty/openexr/IlmImf/ImfRgbaFile.cpp b/3rdparty/openexr/IlmImf/ImfRgbaFile.cpp deleted file mode 100644 index c2b604a196..0000000000 --- a/3rdparty/openexr/IlmImf/ImfRgbaFile.cpp +++ /dev/null @@ -1,1405 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - -//----------------------------------------------------------------------------- -// -// class RgbaOutputFile -// class RgbaInputFile -// -//----------------------------------------------------------------------------- - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "ImfNamespace.h" - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_ENTER - -using namespace std; -using namespace IMATH_NAMESPACE; -using namespace RgbaYca; -using namespace ILMTHREAD_NAMESPACE; - -namespace { - -void -insertChannels (Header &header, RgbaChannels rgbaChannels) -{ - ChannelList ch; - - if (rgbaChannels & (WRITE_Y | WRITE_C)) - { - if (rgbaChannels & WRITE_Y) - { - ch.insert ("Y", Channel (HALF, 1, 1)); - } - - if (rgbaChannels & WRITE_C) - { - ch.insert ("RY", Channel (HALF, 2, 2, true)); - ch.insert ("BY", Channel (HALF, 2, 2, true)); - } - } - else - { - if (rgbaChannels & WRITE_R) - ch.insert ("R", Channel (HALF, 1, 1)); - - if (rgbaChannels & WRITE_G) - ch.insert ("G", Channel (HALF, 1, 1)); - - if (rgbaChannels & WRITE_B) - ch.insert ("B", Channel (HALF, 1, 1)); - } - - if (rgbaChannels & WRITE_A) - ch.insert ("A", Channel (HALF, 1, 1)); - - header.channels() = ch; -} - - -RgbaChannels -rgbaChannels (const ChannelList &ch, const string &channelNamePrefix = "") -{ - int i = 0; - - if (ch.findChannel (channelNamePrefix + "R")) - i |= WRITE_R; - - if (ch.findChannel (channelNamePrefix + "G")) - i |= WRITE_G; - - if (ch.findChannel (channelNamePrefix + "B")) - i |= WRITE_B; - - if (ch.findChannel (channelNamePrefix + "A")) - i |= WRITE_A; - - if (ch.findChannel (channelNamePrefix + "Y")) - i |= WRITE_Y; - - if (ch.findChannel (channelNamePrefix + "RY") || - ch.findChannel (channelNamePrefix + "BY")) - i |= WRITE_C; - - return RgbaChannels (i); -} - - -string -prefixFromLayerName (const string &layerName, const Header &header) -{ - if (layerName.empty()) - return ""; - - if (hasMultiView (header) && multiView(header)[0] == layerName) - return ""; - - return layerName + "."; -} - - -V3f -ywFromHeader (const Header &header) -{ - Chromaticities cr; - - if (hasChromaticities (header)) - cr = chromaticities (header); - - return computeYw (cr); -} - - -ptrdiff_t -cachePadding (ptrdiff_t size) -{ - // - // Some of the buffers that are allocated by classes ToYca and - // FromYca, below, may need to be padded to avoid cache thrashing. - // If the difference between the buffer size and the nearest power - // of two is less than CACHE_LINE_SIZE, then we add an appropriate - // amount of padding. - // - // CACHE_LINE_SIZE must be a power of two, and it must be at - // least as big as the true size of a cache line on the machine - // we are running on. (It is ok if CACHE_LINE_SIZE is larger - // than a real cache line.) - // - - static int LOG2_CACHE_LINE_SIZE = 8; - static const ptrdiff_t CACHE_LINE_SIZE = (1 << LOG2_CACHE_LINE_SIZE); - - int i = LOG2_CACHE_LINE_SIZE + 2; - - while ((size >> i) > 1) - ++i; - - if (size > (1 << (i + 1)) - 64) - return 64 + ((1 << (i + 1)) - size); - - if (size < (1 << i) + 64) - return 64 + ((1 << i) - size); - - return 0; -} - -} // namespace - - -class RgbaOutputFile::ToYca: public Mutex -{ - public: - - ToYca (OutputFile &outputFile, RgbaChannels rgbaChannels); - ~ToYca (); - - void setYCRounding (unsigned int roundY, - unsigned int roundC); - - void setFrameBuffer (const Rgba *base, - size_t xStride, - size_t yStride); - - void writePixels (int numScanLines); - int currentScanLine () const; - - private: - - void padTmpBuf (); - void rotateBuffers (); - void duplicateLastBuffer (); - void duplicateSecondToLastBuffer (); - void decimateChromaVertAndWriteScanLine (); - - OutputFile & _outputFile; - bool _writeY; - bool _writeC; - bool _writeA; - int _xMin; - int _width; - int _height; - int _linesConverted; - LineOrder _lineOrder; - int _currentScanLine; - V3f _yw; - Rgba * _bufBase; - Rgba * _buf[N]; - Rgba * _tmpBuf; - const Rgba * _fbBase; - size_t _fbXStride; - size_t _fbYStride; - int _roundY; - int _roundC; -}; - - -RgbaOutputFile::ToYca::ToYca (OutputFile &outputFile, - RgbaChannels rgbaChannels) -: - _outputFile (outputFile) -{ - _writeY = (rgbaChannels & WRITE_Y)? true: false; - _writeC = (rgbaChannels & WRITE_C)? true: false; - _writeA = (rgbaChannels & WRITE_A)? true: false; - - const Box2i dw = _outputFile.header().dataWindow(); - - _xMin = dw.min.x; - _width = dw.max.x - dw.min.x + 1; - _height = dw.max.y - dw.min.y + 1; - - _linesConverted = 0; - _lineOrder = _outputFile.header().lineOrder(); - - if (_lineOrder == INCREASING_Y) - _currentScanLine = dw.min.y; - else - _currentScanLine = dw.max.y; - - _yw = ywFromHeader (_outputFile.header()); - - ptrdiff_t pad = cachePadding (_width * sizeof (Rgba)) / sizeof (Rgba); - - _bufBase = new Rgba[(_width + pad) * N]; - - for (int i = 0; i < N; ++i) - _buf[i] = _bufBase + (i * (_width + pad)); - - _tmpBuf = new Rgba[_width + N - 1]; - - _fbBase = 0; - _fbXStride = 0; - _fbYStride = 0; - - _roundY = 7; - _roundC = 5; -} - - -RgbaOutputFile::ToYca::~ToYca () -{ - delete [] _bufBase; - delete [] _tmpBuf; -} - - -void -RgbaOutputFile::ToYca::setYCRounding (unsigned int roundY, - unsigned int roundC) -{ - _roundY = roundY; - _roundC = roundC; -} - - -void -RgbaOutputFile::ToYca::setFrameBuffer (const Rgba *base, - size_t xStride, - size_t yStride) -{ - if (_fbBase == 0) - { - FrameBuffer fb; - - if (_writeY) - { - fb.insert ("Y", - Slice (HALF, // type - (char *) &_tmpBuf[-_xMin].g, // base - sizeof (Rgba), // xStride - 0, // yStride - 1, // xSampling - 1)); // ySampling - } - - if (_writeC) - { - fb.insert ("RY", - Slice (HALF, // type - (char *) &_tmpBuf[-_xMin].r, // base - sizeof (Rgba) * 2, // xStride - 0, // yStride - 2, // xSampling - 2)); // ySampling - - fb.insert ("BY", - Slice (HALF, // type - (char *) &_tmpBuf[-_xMin].b, // base - sizeof (Rgba) * 2, // xStride - 0, // yStride - 2, // xSampling - 2)); // ySampling - } - - if (_writeA) - { - fb.insert ("A", - Slice (HALF, // type - (char *) &_tmpBuf[-_xMin].a, // base - sizeof (Rgba), // xStride - 0, // yStride - 1, // xSampling - 1)); // ySampling - } - - _outputFile.setFrameBuffer (fb); - } - - _fbBase = base; - _fbXStride = xStride; - _fbYStride = yStride; -} - - -void -RgbaOutputFile::ToYca::writePixels (int numScanLines) -{ - if (_fbBase == 0) - { - THROW (IEX_NAMESPACE::ArgExc, "No frame buffer was specified as the " - "pixel data source for image file " - "\"" << _outputFile.fileName() << "\"."); - } - - if (_writeY && !_writeC) - { - // - // We are writing only luminance; filtering - // and subsampling are not necessary. - // - - for (int i = 0; i < numScanLines; ++i) - { - // - // Copy the next scan line from the caller's - // frame buffer into _tmpBuf. - // - - for (int j = 0; j < _width; ++j) - { - _tmpBuf[j] = _fbBase[_fbYStride * _currentScanLine + - _fbXStride * (j + _xMin)]; - } - - // - // Convert the scan line from RGB to luminance/chroma, - // and store the result in the output file. - // - - RGBAtoYCA (_yw, _width, _writeA, _tmpBuf, _tmpBuf); - _outputFile.writePixels (1); - - ++_linesConverted; - - if (_lineOrder == INCREASING_Y) - ++_currentScanLine; - else - --_currentScanLine; - } - } - else - { - // - // We are writing chroma; the pixels must be filtered and subsampled. - // - - for (int i = 0; i < numScanLines; ++i) - { - // - // Copy the next scan line from the caller's - // frame buffer into _tmpBuf. - // - - for (int j = 0; j < _width; ++j) - { - _tmpBuf[j + N2] = _fbBase[_fbYStride * _currentScanLine + - _fbXStride * (j + _xMin)]; - } - - // - // Convert the scan line from RGB to luminance/chroma. - // - - RGBAtoYCA (_yw, _width, _writeA, _tmpBuf + N2, _tmpBuf + N2); - - // - // Append N2 copies of the first and last pixel to the - // beginning and end of the scan line. - // - - padTmpBuf (); - - // - // Filter and subsample the scan line's chroma channels - // horizontally; store the result in _buf. - // - - rotateBuffers(); - decimateChromaHoriz (_width, _tmpBuf, _buf[N - 1]); - - // - // If this is the first scan line in the image, - // store N2 more copies of the scan line in _buf. - // - - if (_linesConverted == 0) - { - for (int j = 0; j < N2; ++j) - duplicateLastBuffer(); - } - - ++_linesConverted; - - // - // If we have have converted at least N2 scan lines from - // RGBA to luminance/chroma, then we can start to filter - // and subsample vertically, and store pixels in the - // output file. - // - - if (_linesConverted > N2) - decimateChromaVertAndWriteScanLine(); - - // - // If we have already converted the last scan line in - // the image to luminance/chroma, filter, subsample and - // store the remaining scan lines in _buf. - // - - if (_linesConverted >= _height) - { - for (int j = 0; j < N2 - _height; ++j) - duplicateLastBuffer(); - - duplicateSecondToLastBuffer(); - ++_linesConverted; - decimateChromaVertAndWriteScanLine(); - - for (int j = 1; j < min (_height, N2); ++j) - { - duplicateLastBuffer(); - ++_linesConverted; - decimateChromaVertAndWriteScanLine(); - } - } - - if (_lineOrder == INCREASING_Y) - ++_currentScanLine; - else - --_currentScanLine; - } - } -} - - -int -RgbaOutputFile::ToYca::currentScanLine () const -{ - return _currentScanLine; -} - - -void -RgbaOutputFile::ToYca::padTmpBuf () -{ - for (int i = 0; i < N2; ++i) - { - _tmpBuf[i] = _tmpBuf[N2]; - _tmpBuf[_width + N2 + i] = _tmpBuf[_width + N2 - 2]; - } -} - - -void -RgbaOutputFile::ToYca::rotateBuffers () -{ - Rgba *tmp = _buf[0]; - - for (int i = 0; i < N - 1; ++i) - _buf[i] = _buf[i + 1]; - - _buf[N - 1] = tmp; -} - - -void -RgbaOutputFile::ToYca::duplicateLastBuffer () -{ - rotateBuffers(); - memcpy (_buf[N - 1], _buf[N - 2], _width * sizeof (Rgba)); -} - - -void -RgbaOutputFile::ToYca::duplicateSecondToLastBuffer () -{ - rotateBuffers(); - memcpy (_buf[N - 1], _buf[N - 3], _width * sizeof (Rgba)); -} - - -void -RgbaOutputFile::ToYca::decimateChromaVertAndWriteScanLine () -{ - if (_linesConverted & 1) - memcpy (_tmpBuf, _buf[N2], _width * sizeof (Rgba)); - else - decimateChromaVert (_width, _buf, _tmpBuf); - - if (_writeY && _writeC) - roundYCA (_width, _roundY, _roundC, _tmpBuf, _tmpBuf); - - _outputFile.writePixels (1); -} - - -RgbaOutputFile::RgbaOutputFile (const char name[], - const Header &header, - RgbaChannels rgbaChannels, - int numThreads): - _outputFile (0), - _toYca (0) -{ - Header hd (header); - insertChannels (hd, rgbaChannels); - _outputFile = new OutputFile (name, hd, numThreads); - - if (rgbaChannels & (WRITE_Y | WRITE_C)) - _toYca = new ToYca (*_outputFile, rgbaChannels); -} - - -RgbaOutputFile::RgbaOutputFile (OPENEXR_IMF_INTERNAL_NAMESPACE::OStream &os, - const Header &header, - RgbaChannels rgbaChannels, - int numThreads): - _outputFile (0), - _toYca (0) -{ - Header hd (header); - insertChannels (hd, rgbaChannels); - _outputFile = new OutputFile (os, hd, numThreads); - - if (rgbaChannels & (WRITE_Y | WRITE_C)) - _toYca = new ToYca (*_outputFile, rgbaChannels); -} - - -RgbaOutputFile::RgbaOutputFile (const char name[], - const IMATH_NAMESPACE::Box2i &displayWindow, - const IMATH_NAMESPACE::Box2i &dataWindow, - RgbaChannels rgbaChannels, - float pixelAspectRatio, - const IMATH_NAMESPACE::V2f screenWindowCenter, - float screenWindowWidth, - LineOrder lineOrder, - Compression compression, - int numThreads): - _outputFile (0), - _toYca (0) -{ - Header hd (displayWindow, - dataWindow.isEmpty()? displayWindow: dataWindow, - pixelAspectRatio, - screenWindowCenter, - screenWindowWidth, - lineOrder, - compression); - - insertChannels (hd, rgbaChannels); - _outputFile = new OutputFile (name, hd, numThreads); - - if (rgbaChannels & (WRITE_Y | WRITE_C)) - _toYca = new ToYca (*_outputFile, rgbaChannels); -} - - -RgbaOutputFile::RgbaOutputFile (const char name[], - int width, - int height, - RgbaChannels rgbaChannels, - float pixelAspectRatio, - const IMATH_NAMESPACE::V2f screenWindowCenter, - float screenWindowWidth, - LineOrder lineOrder, - Compression compression, - int numThreads): - _outputFile (0), - _toYca (0) -{ - Header hd (width, - height, - pixelAspectRatio, - screenWindowCenter, - screenWindowWidth, - lineOrder, - compression); - - insertChannels (hd, rgbaChannels); - _outputFile = new OutputFile (name, hd, numThreads); - - if (rgbaChannels & (WRITE_Y | WRITE_C)) - _toYca = new ToYca (*_outputFile, rgbaChannels); -} - - -RgbaOutputFile::~RgbaOutputFile () -{ - delete _toYca; - delete _outputFile; -} - - -void -RgbaOutputFile::setFrameBuffer (const Rgba *base, - size_t xStride, - size_t yStride) -{ - if (_toYca) - { - Lock lock (*_toYca); - _toYca->setFrameBuffer (base, xStride, yStride); - } - else - { - size_t xs = xStride * sizeof (Rgba); - size_t ys = yStride * sizeof (Rgba); - - FrameBuffer fb; - - fb.insert ("R", Slice (HALF, (char *) &base[0].r, xs, ys)); - fb.insert ("G", Slice (HALF, (char *) &base[0].g, xs, ys)); - fb.insert ("B", Slice (HALF, (char *) &base[0].b, xs, ys)); - fb.insert ("A", Slice (HALF, (char *) &base[0].a, xs, ys)); - - _outputFile->setFrameBuffer (fb); - } -} - - -void -RgbaOutputFile::writePixels (int numScanLines) -{ - if (_toYca) - { - Lock lock (*_toYca); - _toYca->writePixels (numScanLines); - } - else - { - _outputFile->writePixels (numScanLines); - } -} - - -int -RgbaOutputFile::currentScanLine () const -{ - if (_toYca) - { - Lock lock (*_toYca); - return _toYca->currentScanLine(); - } - else - { - return _outputFile->currentScanLine(); - } -} - - -const Header & -RgbaOutputFile::header () const -{ - return _outputFile->header(); -} - - -const FrameBuffer & -RgbaOutputFile::frameBuffer () const -{ - return _outputFile->frameBuffer(); -} - - -const IMATH_NAMESPACE::Box2i & -RgbaOutputFile::displayWindow () const -{ - return _outputFile->header().displayWindow(); -} - - -const IMATH_NAMESPACE::Box2i & -RgbaOutputFile::dataWindow () const -{ - return _outputFile->header().dataWindow(); -} - - -float -RgbaOutputFile::pixelAspectRatio () const -{ - return _outputFile->header().pixelAspectRatio(); -} - - -const IMATH_NAMESPACE::V2f -RgbaOutputFile::screenWindowCenter () const -{ - return _outputFile->header().screenWindowCenter(); -} - - -float -RgbaOutputFile::screenWindowWidth () const -{ - return _outputFile->header().screenWindowWidth(); -} - - -LineOrder -RgbaOutputFile::lineOrder () const -{ - return _outputFile->header().lineOrder(); -} - - -Compression -RgbaOutputFile::compression () const -{ - return _outputFile->header().compression(); -} - - -RgbaChannels -RgbaOutputFile::channels () const -{ - return rgbaChannels (_outputFile->header().channels()); -} - - -void -RgbaOutputFile::updatePreviewImage (const PreviewRgba newPixels[]) -{ - _outputFile->updatePreviewImage (newPixels); -} - - -void -RgbaOutputFile::setYCRounding (unsigned int roundY, unsigned int roundC) -{ - if (_toYca) - { - Lock lock (*_toYca); - _toYca->setYCRounding (roundY, roundC); - } -} - - -void -RgbaOutputFile::breakScanLine (int y, int offset, int length, char c) -{ - _outputFile->breakScanLine (y, offset, length, c); -} - - -class RgbaInputFile::FromYca: public Mutex -{ - public: - - FromYca (InputFile &inputFile, RgbaChannels rgbaChannels); - ~FromYca (); - - void setFrameBuffer (Rgba *base, - size_t xStride, - size_t yStride, - const string &channelNamePrefix); - - void readPixels (int scanLine1, int scanLine2); - - private: - - void readPixels (int scanLine); - void rotateBuf1 (int d); - void rotateBuf2 (int d); - void readYCAScanLine (int y, Rgba buf[]); - void padTmpBuf (); - - InputFile & _inputFile; - bool _readC; - int _xMin; - int _yMin; - int _yMax; - int _width; - int _height; - int _currentScanLine; - LineOrder _lineOrder; - V3f _yw; - Rgba * _bufBase; - Rgba * _buf1[N + 2]; - Rgba * _buf2[3]; - Rgba * _tmpBuf; - Rgba * _fbBase; - size_t _fbXStride; - size_t _fbYStride; -}; - - -RgbaInputFile::FromYca::FromYca (InputFile &inputFile, - RgbaChannels rgbaChannels) -: - _inputFile (inputFile) -{ - _readC = (rgbaChannels & WRITE_C)? true: false; - - const Box2i dw = _inputFile.header().dataWindow(); - - _xMin = dw.min.x; - _yMin = dw.min.y; - _yMax = dw.max.y; - _width = dw.max.x - dw.min.x + 1; - _height = dw.max.y - dw.min.y + 1; - _currentScanLine = dw.min.y - N - 2; - _lineOrder = _inputFile.header().lineOrder(); - _yw = ywFromHeader (_inputFile.header()); - - ptrdiff_t pad = cachePadding (_width * sizeof (Rgba)) / sizeof (Rgba); - - _bufBase = new Rgba[(_width + pad) * (N + 2 + 3)]; - - for (int i = 0; i < N + 2; ++i) - _buf1[i] = _bufBase + (i * (_width + pad)); - - for (int i = 0; i < 3; ++i) - _buf2[i] = _bufBase + ((i + N + 2) * (_width + pad)); - - _tmpBuf = new Rgba[_width + N - 1]; - - _fbBase = 0; - _fbXStride = 0; - _fbYStride = 0; -} - - -RgbaInputFile::FromYca::~FromYca () -{ - delete [] _bufBase; - delete [] _tmpBuf; -} - - -void -RgbaInputFile::FromYca::setFrameBuffer (Rgba *base, - size_t xStride, - size_t yStride, - const string &channelNamePrefix) -{ - if (_fbBase == 0) - { - FrameBuffer fb; - - fb.insert (channelNamePrefix + "Y", - Slice (HALF, // type - (char *) &_tmpBuf[N2 - _xMin].g, // base - sizeof (Rgba), // xStride - 0, // yStride - 1, // xSampling - 1, // ySampling - 0.5)); // fillValue - - if (_readC) - { - fb.insert (channelNamePrefix + "RY", - Slice (HALF, // type - (char *) &_tmpBuf[N2 - _xMin].r, // base - sizeof (Rgba) * 2, // xStride - 0, // yStride - 2, // xSampling - 2, // ySampling - 0.0)); // fillValue - - fb.insert (channelNamePrefix + "BY", - Slice (HALF, // type - (char *) &_tmpBuf[N2 - _xMin].b, // base - sizeof (Rgba) * 2, // xStride - 0, // yStride - 2, // xSampling - 2, // ySampling - 0.0)); // fillValue - } - - fb.insert (channelNamePrefix + "A", - Slice (HALF, // type - (char *) &_tmpBuf[N2 - _xMin].a, // base - sizeof (Rgba), // xStride - 0, // yStride - 1, // xSampling - 1, // ySampling - 1.0)); // fillValue - - _inputFile.setFrameBuffer (fb); - } - - _fbBase = base; - _fbXStride = xStride; - _fbYStride = yStride; -} - - -void -RgbaInputFile::FromYca::readPixels (int scanLine1, int scanLine2) -{ - int minY = min (scanLine1, scanLine2); - int maxY = max (scanLine1, scanLine2); - - if (_lineOrder == INCREASING_Y) - { - for (int y = minY; y <= maxY; ++y) - readPixels (y); - } - else - { - for (int y = maxY; y >= minY; --y) - readPixels (y); - } -} - - -void -RgbaInputFile::FromYca::readPixels (int scanLine) -{ - if (_fbBase == 0) - { - THROW (IEX_NAMESPACE::ArgExc, "No frame buffer was specified as the " - "pixel data destination for image file " - "\"" << _inputFile.fileName() << "\"."); - } - - // - // In order to convert one scan line to RGB format, we need that - // scan line plus N2+1 extra scan lines above and N2+1 scan lines - // below in luminance/chroma format. - // - // We allow random access to scan lines, but we buffer partially - // processed luminance/chroma data in order to make reading pixels - // in increasing y or decreasing y order reasonably efficient: - // - // _currentScanLine holds the y coordinate of the scan line - // that was most recently read. - // - // _buf1 contains scan lines _currentScanLine-N2-1 - // through _currentScanLine+N2+1 in - // luminance/chroma format. Odd-numbered - // lines contain no chroma data. Even-numbered - // lines have valid chroma data for all pixels. - // - // _buf2 contains scan lines _currentScanLine-1 - // through _currentScanLine+1, in RGB format. - // Super-saturated pixels (see ImfRgbaYca.h) - // have not yet been eliminated. - // - // If the scan line we are trying to read now is close enough to - // _currentScanLine, we don't have to recompute the contents of _buf1 - // and _buf2 from scratch. We can rotate _buf1 and _buf2, and fill - // in the missing data. - // - - int dy = scanLine - _currentScanLine; - - if (abs (dy) < N + 2) - rotateBuf1 (dy); - - if (abs (dy) < 3) - rotateBuf2 (dy); - - if (dy < 0) - { - { - int n = min (-dy, N + 2); - int yMin = scanLine - N2 - 1; - - for (int i = n - 1; i >= 0; --i) - readYCAScanLine (yMin + i, _buf1[i]); - } - - { - int n = min (-dy, 3); - - for (int i = 0; i < n; ++i) - { - if ((scanLine + i) & 1) - { - YCAtoRGBA (_yw, _width, _buf1[N2 + i], _buf2[i]); - } - else - { - reconstructChromaVert (_width, _buf1 + i, _buf2[i]); - YCAtoRGBA (_yw, _width, _buf2[i], _buf2[i]); - } - } - } - } - else - { - { - int n = min (dy, N + 2); - int yMax = scanLine + N2 + 1; - - for (int i = n - 1; i >= 0; --i) - readYCAScanLine (yMax - i, _buf1[N + 1 - i]); - } - - { - int n = min (dy, 3); - - for (int i = 2; i > 2 - n; --i) - { - if ((scanLine + i) & 1) - { - YCAtoRGBA (_yw, _width, _buf1[N2 + i], _buf2[i]); - } - else - { - reconstructChromaVert (_width, _buf1 + i, _buf2[i]); - YCAtoRGBA (_yw, _width, _buf2[i], _buf2[i]); - } - } - } - } - - fixSaturation (_yw, _width, _buf2, _tmpBuf); - - for (int i = 0; i < _width; ++i) - _fbBase[_fbYStride * scanLine + _fbXStride * (i + _xMin)] = _tmpBuf[i]; - - _currentScanLine = scanLine; -} - - -void -RgbaInputFile::FromYca::rotateBuf1 (int d) -{ - d = modp (d, N + 2); - - Rgba *tmp[N + 2]; - - for (int i = 0; i < N + 2; ++i) - tmp[i] = _buf1[i]; - - for (int i = 0; i < N + 2; ++i) - _buf1[i] = tmp[(i + d) % (N + 2)]; -} - - -void -RgbaInputFile::FromYca::rotateBuf2 (int d) -{ - d = modp (d, 3); - - Rgba *tmp[3]; - - for (int i = 0; i < 3; ++i) - tmp[i] = _buf2[i]; - - for (int i = 0; i < 3; ++i) - _buf2[i] = tmp[(i + d) % 3]; -} - - -void -RgbaInputFile::FromYca::readYCAScanLine (int y, Rgba *buf) -{ - // - // Clamp y. - // - - if (y < _yMin) - y = _yMin; - else if (y > _yMax) - y = _yMax - 1; - - // - // Read scan line y into _tmpBuf. - // - - _inputFile.readPixels (y); - - // - // Reconstruct missing chroma samples and copy - // the scan line into buf. - // - - if (!_readC) - { - for (int i = 0; i < _width; ++i) - { - _tmpBuf[i + N2].r = 0; - _tmpBuf[i + N2].b = 0; - } - } - - if (y & 1) - { - memcpy (buf, _tmpBuf + N2, _width * sizeof (Rgba)); - } - else - { - padTmpBuf(); - reconstructChromaHoriz (_width, _tmpBuf, buf); - } -} - - -void -RgbaInputFile::FromYca::padTmpBuf () -{ - for (int i = 0; i < N2; ++i) - { - _tmpBuf[i] = _tmpBuf[N2]; - _tmpBuf[_width + N2 + i] = _tmpBuf[_width + N2 - 2]; - } -} - - -RgbaInputFile::RgbaInputFile (const char name[], int numThreads): - _inputFile (new InputFile (name, numThreads)), - _fromYca (0), - _channelNamePrefix ("") -{ - RgbaChannels rgbaChannels = channels(); - - if (rgbaChannels & (WRITE_Y | WRITE_C)) - _fromYca = new FromYca (*_inputFile, rgbaChannels); -} - - -RgbaInputFile::RgbaInputFile (OPENEXR_IMF_INTERNAL_NAMESPACE::IStream &is, int numThreads): - _inputFile (new InputFile (is, numThreads)), - _fromYca (0), - _channelNamePrefix ("") -{ - RgbaChannels rgbaChannels = channels(); - - if (rgbaChannels & (WRITE_Y | WRITE_C)) - _fromYca = new FromYca (*_inputFile, rgbaChannels); -} - - -RgbaInputFile::RgbaInputFile (const char name[], - const string &layerName, - int numThreads) -: - _inputFile (new InputFile (name, numThreads)), - _fromYca (0), - _channelNamePrefix (prefixFromLayerName (layerName, _inputFile->header())) -{ - RgbaChannels rgbaChannels = channels(); - - if (rgbaChannels & (WRITE_Y | WRITE_C)) - _fromYca = new FromYca (*_inputFile, rgbaChannels); -} - - -RgbaInputFile::RgbaInputFile (OPENEXR_IMF_INTERNAL_NAMESPACE::IStream &is, - const string &layerName, - int numThreads) -: - _inputFile (new InputFile (is, numThreads)), - _fromYca (0), - _channelNamePrefix (prefixFromLayerName (layerName, _inputFile->header())) -{ - RgbaChannels rgbaChannels = channels(); - - if (rgbaChannels & (WRITE_Y | WRITE_C)) - _fromYca = new FromYca (*_inputFile, rgbaChannels); -} - - -RgbaInputFile::~RgbaInputFile () -{ - delete _inputFile; - delete _fromYca; -} - - -void -RgbaInputFile::setFrameBuffer (Rgba *base, size_t xStride, size_t yStride) -{ - if (_fromYca) - { - Lock lock (*_fromYca); - _fromYca->setFrameBuffer (base, xStride, yStride, _channelNamePrefix); - } - else - { - size_t xs = xStride * sizeof (Rgba); - size_t ys = yStride * sizeof (Rgba); - - FrameBuffer fb; - - fb.insert (_channelNamePrefix + "R", - Slice (HALF, - (char *) &base[0].r, - xs, ys, - 1, 1, // xSampling, ySampling - 0.0)); // fillValue - - fb.insert (_channelNamePrefix + "G", - Slice (HALF, - (char *) &base[0].g, - xs, ys, - 1, 1, // xSampling, ySampling - 0.0)); // fillValue - - fb.insert (_channelNamePrefix + "B", - Slice (HALF, - (char *) &base[0].b, - xs, ys, - 1, 1, // xSampling, ySampling - 0.0)); // fillValue - - fb.insert (_channelNamePrefix + "A", - Slice (HALF, - (char *) &base[0].a, - xs, ys, - 1, 1, // xSampling, ySampling - 1.0)); // fillValue - - _inputFile->setFrameBuffer (fb); - } -} - - -void -RgbaInputFile::setLayerName (const string &layerName) -{ - delete _fromYca; - _fromYca = 0; - - _channelNamePrefix = prefixFromLayerName (layerName, _inputFile->header()); - - RgbaChannels rgbaChannels = channels(); - - if (rgbaChannels & (WRITE_Y | WRITE_C)) - _fromYca = new FromYca (*_inputFile, rgbaChannels); - - FrameBuffer fb; - _inputFile->setFrameBuffer (fb); -} - - -void -RgbaInputFile::readPixels (int scanLine1, int scanLine2) -{ - if (_fromYca) - { - Lock lock (*_fromYca); - _fromYca->readPixels (scanLine1, scanLine2); - } - else - { - _inputFile->readPixels (scanLine1, scanLine2); - } -} - - -void -RgbaInputFile::readPixels (int scanLine) -{ - readPixels (scanLine, scanLine); -} - - -bool -RgbaInputFile::isComplete () const -{ - return _inputFile->isComplete(); -} - - -const Header & -RgbaInputFile::header () const -{ - return _inputFile->header(); -} - - -const char * -RgbaInputFile::fileName () const -{ - return _inputFile->fileName(); -} - - -const FrameBuffer & -RgbaInputFile::frameBuffer () const -{ - return _inputFile->frameBuffer(); -} - - -const IMATH_NAMESPACE::Box2i & -RgbaInputFile::displayWindow () const -{ - return _inputFile->header().displayWindow(); -} - - -const IMATH_NAMESPACE::Box2i & -RgbaInputFile::dataWindow () const -{ - return _inputFile->header().dataWindow(); -} - - -float -RgbaInputFile::pixelAspectRatio () const -{ - return _inputFile->header().pixelAspectRatio(); -} - - -const IMATH_NAMESPACE::V2f -RgbaInputFile::screenWindowCenter () const -{ - return _inputFile->header().screenWindowCenter(); -} - - -float -RgbaInputFile::screenWindowWidth () const -{ - return _inputFile->header().screenWindowWidth(); -} - - -LineOrder -RgbaInputFile::lineOrder () const -{ - return _inputFile->header().lineOrder(); -} - - -Compression -RgbaInputFile::compression () const -{ - return _inputFile->header().compression(); -} - - -RgbaChannels -RgbaInputFile::channels () const -{ - return rgbaChannels (_inputFile->header().channels(), _channelNamePrefix); -} - - -int -RgbaInputFile::version () const -{ - return _inputFile->version(); -} - - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_EXIT diff --git a/3rdparty/openexr/IlmImf/ImfRgbaFile.h b/3rdparty/openexr/IlmImf/ImfRgbaFile.h deleted file mode 100644 index ace1859899..0000000000 --- a/3rdparty/openexr/IlmImf/ImfRgbaFile.h +++ /dev/null @@ -1,389 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - - -#ifndef INCLUDED_IMF_RGBA_FILE_H -#define INCLUDED_IMF_RGBA_FILE_H - - -//----------------------------------------------------------------------------- -// -// Simplified RGBA image I/O -// -// class RgbaOutputFile -// class RgbaInputFile -// -//----------------------------------------------------------------------------- - -#include "ImfHeader.h" -#include "ImfFrameBuffer.h" -#include "ImfRgba.h" -#include "ImathVec.h" -#include "ImathBox.h" -#include "half.h" -#include "ImfThreading.h" -#include -#include "ImfNamespace.h" -#include "ImfForward.h" - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER - - -// -// RGBA output file. -// - -class RgbaOutputFile -{ - public: - - //--------------------------------------------------- - // Constructor -- header is constructed by the caller - //--------------------------------------------------- - - IMF_EXPORT - RgbaOutputFile (const char name[], - const Header &header, - RgbaChannels rgbaChannels = WRITE_RGBA, - int numThreads = globalThreadCount()); - - - //---------------------------------------------------- - // Constructor -- header is constructed by the caller, - // file is opened by the caller, destructor will not - // automatically close the file. - //---------------------------------------------------- - - IMF_EXPORT - RgbaOutputFile (OPENEXR_IMF_INTERNAL_NAMESPACE::OStream &os, - const Header &header, - RgbaChannels rgbaChannels = WRITE_RGBA, - int numThreads = globalThreadCount()); - - - //---------------------------------------------------------------- - // Constructor -- header data are explicitly specified as function - // call arguments (empty dataWindow means "same as displayWindow") - //---------------------------------------------------------------- - - IMF_EXPORT - RgbaOutputFile (const char name[], - const IMATH_NAMESPACE::Box2i &displayWindow, - const IMATH_NAMESPACE::Box2i &dataWindow = IMATH_NAMESPACE::Box2i(), - RgbaChannels rgbaChannels = WRITE_RGBA, - float pixelAspectRatio = 1, - const IMATH_NAMESPACE::V2f screenWindowCenter = IMATH_NAMESPACE::V2f (0, 0), - float screenWindowWidth = 1, - LineOrder lineOrder = INCREASING_Y, - Compression compression = PIZ_COMPRESSION, - int numThreads = globalThreadCount()); - - - //----------------------------------------------- - // Constructor -- like the previous one, but both - // the display window and the data window are - // Box2i (V2i (0, 0), V2i (width - 1, height -1)) - //----------------------------------------------- - - IMF_EXPORT - RgbaOutputFile (const char name[], - int width, - int height, - RgbaChannels rgbaChannels = WRITE_RGBA, - float pixelAspectRatio = 1, - const IMATH_NAMESPACE::V2f screenWindowCenter = IMATH_NAMESPACE::V2f (0, 0), - float screenWindowWidth = 1, - LineOrder lineOrder = INCREASING_Y, - Compression compression = PIZ_COMPRESSION, - int numThreads = globalThreadCount()); - - - //----------- - // Destructor - //----------- - - IMF_EXPORT - virtual ~RgbaOutputFile (); - - - //------------------------------------------------ - // Define a frame buffer as the pixel data source: - // Pixel (x, y) is at address - // - // base + x * xStride + y * yStride - // - //------------------------------------------------ - - IMF_EXPORT - void setFrameBuffer (const Rgba *base, - size_t xStride, - size_t yStride); - - - //--------------------------------------------- - // Write pixel data (see class Imf::OutputFile) - //--------------------------------------------- - - IMF_EXPORT - void writePixels (int numScanLines = 1); - IMF_EXPORT - int currentScanLine () const; - - - //-------------------------- - // Access to the file header - //-------------------------- - - IMF_EXPORT - const Header & header () const; - IMF_EXPORT - const FrameBuffer & frameBuffer () const; - IMF_EXPORT - const IMATH_NAMESPACE::Box2i & displayWindow () const; - IMF_EXPORT - const IMATH_NAMESPACE::Box2i & dataWindow () const; - IMF_EXPORT - float pixelAspectRatio () const; - IMF_EXPORT - const IMATH_NAMESPACE::V2f screenWindowCenter () const; - IMF_EXPORT - float screenWindowWidth () const; - IMF_EXPORT - LineOrder lineOrder () const; - IMF_EXPORT - Compression compression () const; - IMF_EXPORT - RgbaChannels channels () const; - - - // -------------------------------------------------------------------- - // Update the preview image (see Imf::OutputFile::updatePreviewImage()) - // -------------------------------------------------------------------- - - IMF_EXPORT - void updatePreviewImage (const PreviewRgba[]); - - - //----------------------------------------------------------------------- - // Rounding control for luminance/chroma images: - // - // If the output file contains luminance and chroma channels (WRITE_YC - // or WRITE_YCA), then the the significands of the luminance and - // chroma values are rounded to roundY and roundC bits respectively (see - // function half::round()). Rounding improves compression with minimal - // image degradation, usually much less than the degradation caused by - // chroma subsampling. By default, roundY is 7, and roundC is 5. - // - // If the output file contains RGB channels or a luminance channel, - // without chroma, then no rounding is performed. - //----------------------------------------------------------------------- - - IMF_EXPORT - void setYCRounding (unsigned int roundY, - unsigned int roundC); - - - //---------------------------------------------------- - // Break a scan line -- for testing and debugging only - // (see Imf::OutputFile::updatePreviewImage() - // - // Warning: Calling this function usually results in a - // broken image file. The file or parts of it may not - // be readable, or the file may contain bad data. - // - //---------------------------------------------------- - - IMF_EXPORT - void breakScanLine (int y, - int offset, - int length, - char c); - private: - - RgbaOutputFile (const RgbaOutputFile &); // not implemented - RgbaOutputFile & operator = (const RgbaOutputFile &); // not implemented - - class ToYca; - - OutputFile * _outputFile; - ToYca * _toYca; -}; - - -// -// RGBA input file -// - -class RgbaInputFile -{ - public: - - //------------------------------------------------------- - // Constructor -- opens the file with the specified name, - // destructor will automatically close the file. - //------------------------------------------------------- - - IMF_EXPORT - RgbaInputFile (const char name[], int numThreads = globalThreadCount()); - - - //----------------------------------------------------------- - // Constructor -- attaches the new RgbaInputFile object to a - // file that has already been opened by the caller. - // Destroying the RgbaInputFile object will not automatically - // close the file. - //----------------------------------------------------------- - - IMF_EXPORT - RgbaInputFile (OPENEXR_IMF_INTERNAL_NAMESPACE::IStream &is, int numThreads = globalThreadCount()); - - - //-------------------------------------------------------------- - // Constructors -- the same as the previous two, but the names - // of the red, green, blue, alpha, luminance and chroma channels - // are expected to be layerName.R, layerName.G, etc. - //-------------------------------------------------------------- - - IMF_EXPORT - RgbaInputFile (const char name[], - const std::string &layerName, - int numThreads = globalThreadCount()); - - IMF_EXPORT - RgbaInputFile (OPENEXR_IMF_INTERNAL_NAMESPACE::IStream &is, - const std::string &layerName, - int numThreads = globalThreadCount()); - - - //----------- - // Destructor - //----------- - - IMF_EXPORT - virtual ~RgbaInputFile (); - - - //----------------------------------------------------- - // Define a frame buffer as the pixel data destination: - // Pixel (x, y) is at address - // - // base + x * xStride + y * yStride - // - //----------------------------------------------------- - - IMF_EXPORT - void setFrameBuffer (Rgba *base, - size_t xStride, - size_t yStride); - - - //---------------------------------------------------------------- - // Switch to a different layer -- subsequent calls to readPixels() - // will read channels layerName.R, layerName.G, etc. - // After each call to setLayerName(), setFrameBuffer() must be - // called at least once before the next call to readPixels(). - //---------------------------------------------------------------- - - IMF_EXPORT - void setLayerName (const std::string &layerName); - - - //------------------------------------------- - // Read pixel data (see class Imf::InputFile) - //------------------------------------------- - - IMF_EXPORT - void readPixels (int scanLine1, int scanLine2); - IMF_EXPORT - void readPixels (int scanLine); - - - //-------------------------- - // Access to the file header - //-------------------------- - - IMF_EXPORT - const Header & header () const; - IMF_EXPORT - const FrameBuffer & frameBuffer () const; - IMF_EXPORT - const IMATH_NAMESPACE::Box2i & displayWindow () const; - IMF_EXPORT - const IMATH_NAMESPACE::Box2i & dataWindow () const; - IMF_EXPORT - float pixelAspectRatio () const; - IMF_EXPORT - const IMATH_NAMESPACE::V2f screenWindowCenter () const; - IMF_EXPORT - float screenWindowWidth () const; - IMF_EXPORT - LineOrder lineOrder () const; - IMF_EXPORT - Compression compression () const; - IMF_EXPORT - RgbaChannels channels () const; - IMF_EXPORT - const char * fileName () const; - IMF_EXPORT - bool isComplete () const; - - - //---------------------------------- - // Access to the file format version - //---------------------------------- - - IMF_EXPORT - int version () const; - - private: - - RgbaInputFile (const RgbaInputFile &); // not implemented - RgbaInputFile & operator = (const RgbaInputFile &); // not implemented - - class FromYca; - - InputFile * _inputFile; - FromYca * _fromYca; - std::string _channelNamePrefix; -}; - - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT - - - - - -#endif diff --git a/3rdparty/openexr/IlmImf/ImfRgbaYca.cpp b/3rdparty/openexr/IlmImf/ImfRgbaYca.cpp deleted file mode 100644 index c6212f3ac4..0000000000 --- a/3rdparty/openexr/IlmImf/ImfRgbaYca.cpp +++ /dev/null @@ -1,497 +0,0 @@ -////////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2004, Industrial Light & Magic, a division of Lucasfilm -// Entertainment Company Ltd. Portions contributed and copyright held by -// others as indicated. All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above -// copyright notice, this list of conditions and the following -// disclaimer. -// -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following -// disclaimer in the documentation and/or other materials provided with -// the distribution. -// -// * Neither the name of Industrial Light & Magic nor the names of -// any other contributors to this software may be used to endorse or -// promote products derived from this software without specific prior -// written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS -// IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, -// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -////////////////////////////////////////////////////////////////////////////// - -//----------------------------------------------------------------------------- -// -// Conversion between RGBA and YCA data. -// -//----------------------------------------------------------------------------- - -#include -#include -#include - -using namespace IMATH_NAMESPACE; -using namespace std; -#include "ImfNamespace.h" - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_ENTER - -namespace RgbaYca { - - -V3f -computeYw (const Chromaticities &cr) -{ - M44f m = RGBtoXYZ (cr, 1); - return V3f (m[0][1], m[1][1], m[2][1]) / (m[0][1] + m[1][1] + m[2][1]); -} - - -void -RGBAtoYCA (const V3f &yw, - int n, - bool aIsValid, - const Rgba rgbaIn[/*n*/], - Rgba ycaOut[/*n*/]) -{ - for (int i = 0; i < n; ++i) - { - Rgba in = rgbaIn[i]; - Rgba &out = ycaOut[i]; - - // - // Conversion to YCA and subsequent chroma subsampling - // work only if R, G and B are finite and non-negative. - // - - if (!in.r.isFinite() || in.r < 0) - in.r = 0; - - if (!in.g.isFinite() || in.g < 0) - in.g = 0; - - if (!in.b.isFinite() || in.b < 0) - in.b = 0; - - if (in.r == in.g && in.g == in.b) - { - // - // Special case -- R, G and B are equal. To avoid rounding - // errors, we explicitly set the output luminance channel - // to G, and the chroma channels to 0. - // - // The special cases here and in YCAtoRGBA() ensure that - // converting black-and white images from RGBA to YCA and - // back is lossless. - // - - out.r = 0; - out.g = in.g; - out.b = 0; - } - else - { - out.g = in.r * yw.x + in.g * yw.y + in.b * yw.z; - - float Y = out.g; - - if (abs (in.r - Y) < HALF_MAX * Y) - out.r = (in.r - Y) / Y; - else - out.r = 0; - - if (abs (in.b - Y) < HALF_MAX * Y) - out.b = (in.b - Y) / Y; - else - out.b = 0; - } - - if (aIsValid) - out.a = in.a; - else - out.a = 1; - } -} - - -void -decimateChromaHoriz (int n, - const Rgba ycaIn[/*n+N-1*/], - Rgba ycaOut[/*n*/]) -{ - #ifdef DEBUG - assert (ycaIn != ycaOut); - #endif - - int begin = N2; - int end = begin + n; - - for (int i = begin, j = 0; i < end; ++i, ++j) - { - if ((j & 1) == 0) - { - ycaOut[j].r = ycaIn[i - 13].r * 0.001064f + - ycaIn[i - 11].r * -0.003771f + - ycaIn[i - 9].r * 0.009801f + - ycaIn[i - 7].r * -0.021586f + - ycaIn[i - 5].r * 0.043978f + - ycaIn[i - 3].r * -0.093067f + - ycaIn[i - 1].r * 0.313659f + - ycaIn[i ].r * 0.499846f + - ycaIn[i + 1].r * 0.313659f + - ycaIn[i + 3].r * -0.093067f + - ycaIn[i + 5].r * 0.043978f + - ycaIn[i + 7].r * -0.021586f + - ycaIn[i + 9].r * 0.009801f + - ycaIn[i + 11].r * -0.003771f + - ycaIn[i + 13].r * 0.001064f; - - ycaOut[j].b = ycaIn[i - 13].b * 0.001064f + - ycaIn[i - 11].b * -0.003771f + - ycaIn[i - 9].b * 0.009801f + - ycaIn[i - 7].b * -0.021586f + - ycaIn[i - 5].b * 0.043978f + - ycaIn[i - 3].b * -0.093067f + - ycaIn[i - 1].b * 0.313659f + - ycaIn[i ].b * 0.499846f + - ycaIn[i + 1].b * 0.313659f + - ycaIn[i + 3].b * -0.093067f + - ycaIn[i + 5].b * 0.043978f + - ycaIn[i + 7].b * -0.021586f + - ycaIn[i + 9].b * 0.009801f + - ycaIn[i + 11].b * -0.003771f + - ycaIn[i + 13].b * 0.001064f; - } - - ycaOut[j].g = ycaIn[i].g; - ycaOut[j].a = ycaIn[i].a; - } -} - - -void -decimateChromaVert (int n, - const Rgba * const ycaIn[N], - Rgba ycaOut[/*n*/]) -{ - for (int i = 0; i < n; ++i) - { - if ((i & 1) == 0) - { - ycaOut[i].r = ycaIn[ 0][i].r * 0.001064f + - ycaIn[ 2][i].r * -0.003771f + - ycaIn[ 4][i].r * 0.009801f + - ycaIn[ 6][i].r * -0.021586f + - ycaIn[ 8][i].r * 0.043978f + - ycaIn[10][i].r * -0.093067f + - ycaIn[12][i].r * 0.313659f + - ycaIn[13][i].r * 0.499846f + - ycaIn[14][i].r * 0.313659f + - ycaIn[16][i].r * -0.093067f + - ycaIn[18][i].r * 0.043978f + - ycaIn[20][i].r * -0.021586f + - ycaIn[22][i].r * 0.009801f + - ycaIn[24][i].r * -0.003771f + - ycaIn[26][i].r * 0.001064f; - - ycaOut[i].b = ycaIn[ 0][i].b * 0.001064f + - ycaIn[ 2][i].b * -0.003771f + - ycaIn[ 4][i].b * 0.009801f + - ycaIn[ 6][i].b * -0.021586f + - ycaIn[ 8][i].b * 0.043978f + - ycaIn[10][i].b * -0.093067f + - ycaIn[12][i].b * 0.313659f + - ycaIn[13][i].b * 0.499846f + - ycaIn[14][i].b * 0.313659f + - ycaIn[16][i].b * -0.093067f + - ycaIn[18][i].b * 0.043978f + - ycaIn[20][i].b * -0.021586f + - ycaIn[22][i].b * 0.009801f + - ycaIn[24][i].b * -0.003771f + - ycaIn[26][i].b * 0.001064f; - } - - ycaOut[i].g = ycaIn[13][i].g; - ycaOut[i].a = ycaIn[13][i].a; - } -} - - -void -roundYCA (int n, - unsigned int roundY, - unsigned int roundC, - const Rgba ycaIn[/*n*/], - Rgba ycaOut[/*n*/]) -{ - for (int i = 0; i < n; ++i) - { - ycaOut[i].g = ycaIn[i].g.round (roundY); - ycaOut[i].a = ycaIn[i].a; - - if ((i & 1) == 0) - { - ycaOut[i].r = ycaIn[i].r.round (roundC); - ycaOut[i].b = ycaIn[i].b.round (roundC); - } - } -} - - -void -reconstructChromaHoriz (int n, - const Rgba ycaIn[/*n+N-1*/], - Rgba ycaOut[/*n*/]) -{ - #ifdef DEBUG - assert (ycaIn != ycaOut); - #endif - - int begin = N2; - int end = begin + n; - - for (int i = begin, j = 0; i < end; ++i, ++j) - { - if (j & 1) - { - ycaOut[j].r = ycaIn[i - 13].r * 0.002128f + - ycaIn[i - 11].r * -0.007540f + - ycaIn[i - 9].r * 0.019597f + - ycaIn[i - 7].r * -0.043159f + - ycaIn[i - 5].r * 0.087929f + - ycaIn[i - 3].r * -0.186077f + - ycaIn[i - 1].r * 0.627123f + - ycaIn[i + 1].r * 0.627123f + - ycaIn[i + 3].r * -0.186077f + - ycaIn[i + 5].r * 0.087929f + - ycaIn[i + 7].r * -0.043159f + - ycaIn[i + 9].r * 0.019597f + - ycaIn[i + 11].r * -0.007540f + - ycaIn[i + 13].r * 0.002128f; - - ycaOut[j].b = ycaIn[i - 13].b * 0.002128f + - ycaIn[i - 11].b * -0.007540f + - ycaIn[i - 9].b * 0.019597f + - ycaIn[i - 7].b * -0.043159f + - ycaIn[i - 5].b * 0.087929f + - ycaIn[i - 3].b * -0.186077f + - ycaIn[i - 1].b * 0.627123f + - ycaIn[i + 1].b * 0.627123f + - ycaIn[i + 3].b * -0.186077f + - ycaIn[i + 5].b * 0.087929f + - ycaIn[i + 7].b * -0.043159f + - ycaIn[i + 9].b * 0.019597f + - ycaIn[i + 11].b * -0.007540f + - ycaIn[i + 13].b * 0.002128f; - } - else - { - ycaOut[j].r = ycaIn[i].r; - ycaOut[j].b = ycaIn[i].b; - } - - ycaOut[j].g = ycaIn[i].g; - ycaOut[j].a = ycaIn[i].a; - } -} - - -void -reconstructChromaVert (int n, - const Rgba * const ycaIn[N], - Rgba ycaOut[/*n*/]) -{ - for (int i = 0; i < n; ++i) - { - ycaOut[i].r = ycaIn[ 0][i].r * 0.002128f + - ycaIn[ 2][i].r * -0.007540f + - ycaIn[ 4][i].r * 0.019597f + - ycaIn[ 6][i].r * -0.043159f + - ycaIn[ 8][i].r * 0.087929f + - ycaIn[10][i].r * -0.186077f + - ycaIn[12][i].r * 0.627123f + - ycaIn[14][i].r * 0.627123f + - ycaIn[16][i].r * -0.186077f + - ycaIn[18][i].r * 0.087929f + - ycaIn[20][i].r * -0.043159f + - ycaIn[22][i].r * 0.019597f + - ycaIn[24][i].r * -0.007540f + - ycaIn[26][i].r * 0.002128f; - - ycaOut[i].b = ycaIn[ 0][i].b * 0.002128f + - ycaIn[ 2][i].b * -0.007540f + - ycaIn[ 4][i].b * 0.019597f + - ycaIn[ 6][i].b * -0.043159f + - ycaIn[ 8][i].b * 0.087929f + - ycaIn[10][i].b * -0.186077f + - ycaIn[12][i].b * 0.627123f + - ycaIn[14][i].b * 0.627123f + - ycaIn[16][i].b * -0.186077f + - ycaIn[18][i].b * 0.087929f + - ycaIn[20][i].b * -0.043159f + - ycaIn[22][i].b * 0.019597f + - ycaIn[24][i].b * -0.007540f + - ycaIn[26][i].b * 0.002128f; - - ycaOut[i].g = ycaIn[13][i].g; - ycaOut[i].a = ycaIn[13][i].a; - } -} - - -void -YCAtoRGBA (const IMATH_NAMESPACE::V3f &yw, - int n, - const Rgba ycaIn[/*n*/], - Rgba rgbaOut[/*n*/]) -{ - for (int i = 0; i < n; ++i) - { - const Rgba &in = ycaIn[i]; - Rgba &out = rgbaOut[i]; - - if (in.r == 0 && in.b == 0) - { - // - // Special case -- both chroma channels are 0. To avoid - // rounding errors, we explicitly set the output R, G and B - // channels equal to the input luminance. - // - // The special cases here and in RGBAtoYCA() ensure that - // converting black-and white images from RGBA to YCA and - // back is lossless. - // - - out.r = in.g; - out.g = in.g; - out.b = in.g; - out.a = in.a; - } - else - { - float Y = in.g; - float r = (in.r + 1) * Y; - float b = (in.b + 1) * Y; - float g = (Y - r * yw.x - b * yw.z) / yw.y; - - out.r = r; - out.g = g; - out.b = b; - out.a = in.a; - } - } -} - - -namespace { - -inline float -saturation (const Rgba &in) -{ - float rgbMax = max (in.r, max (in.g, in.b)); - float rgbMin = min (in.r, min (in.g, in.b)); - - if (rgbMax > 0) - return 1 - rgbMin / rgbMax; - else - return 0; -} - - -void -desaturate (const Rgba &in, float f, const V3f &yw, Rgba &out) -{ - float rgbMax = max (in.r, max (in.g, in.b)); - - out.r = max (float (rgbMax - (rgbMax - in.r) * f), 0.0f); - out.g = max (float (rgbMax - (rgbMax - in.g) * f), 0.0f); - out.b = max (float (rgbMax - (rgbMax - in.b) * f), 0.0f); - out.a = in.a; - - float Yin = in.r * yw.x + in.g * yw.y + in.b * yw.z; - float Yout = out.r * yw.x + out.g * yw.y + out.b * yw.z; - - if (Yout > 0) - { - out.r *= Yin / Yout; - out.g *= Yin / Yout; - out.b *= Yin / Yout; - } -} - -} // namespace - - -void -fixSaturation (const IMATH_NAMESPACE::V3f &yw, - int n, - const Rgba * const rgbaIn[3], - Rgba rgbaOut[/*n*/]) -{ - float neighborA2 = saturation (rgbaIn[0][0]); - float neighborA1 = neighborA2; - - float neighborB2 = saturation (rgbaIn[2][0]); - float neighborB1 = neighborB2; - - for (int i = 0; i < n; ++i) - { - float neighborA0 = neighborA1; - neighborA1 = neighborA2; - - float neighborB0 = neighborB1; - neighborB1 = neighborB2; - - if (i < n - 1) - { - neighborA2 = saturation (rgbaIn[0][i + 1]); - neighborB2 = saturation (rgbaIn[2][i + 1]); - } - - // - // A0 A1 A2 - // rgbaOut[i] - // B0 B1 B2 - // - - float sMean = min (1.0f, 0.25f * (neighborA0 + neighborA2 + - neighborB0 + neighborB2)); - - const Rgba &in = rgbaIn[1][i]; - Rgba &out = rgbaOut[i]; - - float s = saturation (in); - - if (s > sMean) - { - float sMax = min (1.0f, 1 - (1 - sMean) * 0.25f); - - if (s > sMax) - { - desaturate (in, sMax / s, yw, out); - continue; - } - } - - out = in; - } -} - -} // namespace RgbaYca -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_EXIT diff --git a/3rdparty/openexr/IlmImf/ImfRgbaYca.h b/3rdparty/openexr/IlmImf/ImfRgbaYca.h deleted file mode 100644 index c4c6775c52..0000000000 --- a/3rdparty/openexr/IlmImf/ImfRgbaYca.h +++ /dev/null @@ -1,259 +0,0 @@ -#ifndef INCLUDED_IMF_RGBA_YCA_H -#define INCLUDED_IMF_RGBA_YCA_H - -////////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2004, Industrial Light & Magic, a division of Lucasfilm -// Entertainment Company Ltd. Portions contributed and copyright held by -// others as indicated. All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above -// copyright notice, this list of conditions and the following -// disclaimer. -// -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following -// disclaimer in the documentation and/or other materials provided with -// the distribution. -// -// * Neither the name of Industrial Light & Magic nor the names of -// any other contributors to this software may be used to endorse or -// promote products derived from this software without specific prior -// written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS -// IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, -// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -////////////////////////////////////////////////////////////////////////////// - -//----------------------------------------------------------------------------- -// -// Conversion between RGBA (red, green, blue alpha) -// and YCA (luminance, subsampled chroma, alpha) data: -// -// Luminance, Y, is computed as a weighted sum of R, G, and B: -// -// Y = yw.x * R + yw.y * G + yw.z * B -// -// Function computeYw() computes a set of RGB-to-Y weights, yw, -// from a set of primary and white point chromaticities. -// -// Chroma, C, consists of two components, RY and BY: -// -// RY = (R - Y) / Y -// BY = (B - Y) / Y -// -// For efficiency, the x and y subsampling rates for chroma are -// hardwired to 2, and the chroma subsampling and reconstruction -// filters are fixed 27-pixel wide windowed sinc functions. -// -// Starting with an image that has RGBA data for all pixels, -// -// RGBA RGBA RGBA RGBA ... RGBA RGBA -// RGBA RGBA RGBA RGBA ... RGBA RGBA -// RGBA RGBA RGBA RGBA ... RGBA RGBA -// RGBA RGBA RGBA RGBA ... RGBA RGBA -// ... -// RGBA RGBA RGBA RGBA ... RGBA RGBA -// RGBA RGBA RGBA RGBA ... RGBA RGBA -// -// function RGBAtoYCA() converts the pixels to YCA format: -// -// YCA YCA YCA YCA ... YCA YCA -// YCA YCA YCA YCA ... YCA YCA -// YCA YCA YCA YCA ... YCA YCA -// YCA YCA YCA YCA ... YCA YCA -// ... -// YCA YCA YCA YCA ... YCA YCA -// YCA YCA YCA YCA ... YCA YCA -// -// Next, decimateChomaHoriz() eliminates the chroma values from -// the odd-numbered pixels in every scan line: -// -// YCA YA YCA YA ... YCA YA -// YCA YA YCA YA ... YCA YA -// YCA YA YCA YA ... YCA YA -// YCA YA YCA YA ... YCA YA -// ... -// YCA YA YCA YA ... YCA YA -// YCA YA YCA YA ... YCA YA -// -// decimateChromaVert() eliminates all chroma values from the -// odd-numbered scan lines: -// -// YCA YA YCA YA ... YCA YA -// YA YA YA YA ... YA YA -// YCA YA YCA YA ... YCA YA -// YA YA YA YA ... YA YA -// ... -// YCA YA YCA YA ... YCA YA -// YA YA YA YA ... YA YA -// -// Finally, roundYCA() reduces the precision of the luminance -// and chroma values so that the pixel data shrink more when -// they are saved in a compressed file. -// -// The output of roundYCA() can be converted back to a set -// of RGBA pixel data that is visually very similar to the -// original RGBA image, by calling reconstructChromaHoriz(), -// reconstructChromaVert(), YCAtoRGBA(), and finally -// fixSaturation(). -// -//----------------------------------------------------------------------------- - -#include "ImfRgba.h" -#include "ImfChromaticities.h" -#include "ImfNamespace.h" - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER - -namespace RgbaYca { - - -// -// Width of the chroma subsampling and reconstruction filters -// - -static const int N = 27; -static const int N2 = N / 2; - - -// -// Convert a set of primary chromaticities into a set of weighting -// factors for computing a pixels's luminance, Y, from R, G and B -// - -IMF_EXPORT -IMATH_NAMESPACE::V3f computeYw (const Chromaticities &cr); - - -// -// Convert an array of n RGBA pixels, rgbaIn, to YCA (luminance/chroma/alpha): -// -// ycaOut[i].g = Y (rgbaIn[i]); -// ycaOut[i].r = RY (rgbaIn[i]); -// ycaOut[i].b = BY (rgbaIn[i]); -// ycaOut[i].a = aIsValid? rgbaIn[i].a: 1 -// -// yw is a set of RGB-to-Y weighting factors, as computed by computeYw(). -// - -IMF_EXPORT -void RGBAtoYCA (const IMATH_NAMESPACE::V3f &yw, - int n, - bool aIsValid, - const Rgba rgbaIn[/*n*/], - Rgba ycaOut[/*n*/]); - -// -// Perform horizontal low-pass filtering and subsampling of -// the chroma channels of an array of n pixels. In order -// to avoid indexing off the ends of the input array during -// low-pass filtering, ycaIn must have N2 extra pixels at -// both ends. Before calling decimateChromaHoriz(), the extra -// pixels should be filled with copies of the first and last -// "real" input pixel. -// - -IMF_EXPORT -void decimateChromaHoriz (int n, - const Rgba ycaIn[/*n+N-1*/], - Rgba ycaOut[/*n*/]); - -// -// Perform vertical chroma channel low-pass filtering and subsampling. -// N scan lines of input pixels are combined into a single scan line -// of output pixels. -// - -IMF_EXPORT -void decimateChromaVert (int n, - const Rgba * const ycaIn[N], - Rgba ycaOut[/*n*/]); - -// -// Round the luminance and chroma channels of an array of YCA -// pixels that has already been filtered and subsampled. -// The signifcands of the pixels' luminance and chroma values -// are rounded to roundY and roundC bits respectively. -// - -IMF_EXPORT -void roundYCA (int n, - unsigned int roundY, - unsigned int roundC, - const Rgba ycaIn[/*n*/], - Rgba ycaOut[/*n*/]); - -// -// For a scan line that has valid chroma data only for every other pixel, -// reconstruct the missing chroma values. -// - -IMF_EXPORT -void reconstructChromaHoriz (int n, - const Rgba ycaIn[/*n+N-1*/], - Rgba ycaOut[/*n*/]); - -// -// For a scan line that has only luminance and no valid chroma data, -// reconstruct chroma from the surronding N scan lines. -// - -IMF_EXPORT -void reconstructChromaVert (int n, - const Rgba * const ycaIn[N], - Rgba ycaOut[/*n*/]); - -// -// Convert an array of n YCA (luminance/chroma/alpha) pixels to RGBA. -// This function is the inverse of RGBAtoYCA(). -// yw is a set of RGB-to-Y weighting factors, as computed by computeYw(). -// - -IMF_EXPORT -void YCAtoRGBA (const IMATH_NAMESPACE::V3f &yw, - int n, - const Rgba ycaIn[/*n*/], - Rgba rgbaOut[/*n*/]); - -// -// Eliminate super-saturated pixels: -// -// Converting an image from RGBA to YCA, low-pass filtering chroma, -// and converting the result back to RGBA can produce pixels with -// super-saturated colors, where one or two of the RGB components -// become zero or negative. (The low-pass and reconstruction filters -// introduce some amount of ringing into the chroma components. -// This can lead to negative RGB values near high-contrast edges.) -// -// The fixSaturation() function finds super-saturated pixels and -// corrects them by desaturating their colors while maintaining -// their luminance. fixSaturation() takes three adjacent input -// scan lines, rgbaIn[0], rgbaIn[1], rgbaIn[2], adjusts the -// saturation of rgbaIn[1], and stores the result in rgbaOut. -// - -IMF_EXPORT -void fixSaturation (const IMATH_NAMESPACE::V3f &yw, - int n, - const Rgba * const rgbaIn[3], - Rgba rgbaOut[/*n*/]); - -} // namespace RgbaYca -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT - -#endif diff --git a/3rdparty/openexr/IlmImf/ImfRle.cpp b/3rdparty/openexr/IlmImf/ImfRle.cpp deleted file mode 100644 index 7be6ac44ae..0000000000 --- a/3rdparty/openexr/IlmImf/ImfRle.cpp +++ /dev/null @@ -1,157 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - -#include -#include "ImfRle.h" -#include "ImfNamespace.h" - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_ENTER - -namespace { - -const int MIN_RUN_LENGTH = 3; -const int MAX_RUN_LENGTH = 127; - -} - -// -// Compress an array of bytes, using run-length encoding, -// and return the length of the compressed data. -// - -int -rleCompress (int inLength, const char in[], signed char out[]) -{ - const char *inEnd = in + inLength; - const char *runStart = in; - const char *runEnd = in + 1; - signed char *outWrite = out; - - while (runStart < inEnd) - { - while (runEnd < inEnd && - *runStart == *runEnd && - runEnd - runStart - 1 < MAX_RUN_LENGTH) - { - ++runEnd; - } - - if (runEnd - runStart >= MIN_RUN_LENGTH) - { - // - // Compressable run - // - - *outWrite++ = (runEnd - runStart) - 1; - *outWrite++ = *(signed char *) runStart; - runStart = runEnd; - } - else - { - // - // Uncompressable run - // - - while (runEnd < inEnd && - ((runEnd + 1 >= inEnd || - *runEnd != *(runEnd + 1)) || - (runEnd + 2 >= inEnd || - *(runEnd + 1) != *(runEnd + 2))) && - runEnd - runStart < MAX_RUN_LENGTH) - { - ++runEnd; - } - - *outWrite++ = runStart - runEnd; - - while (runStart < runEnd) - { - *outWrite++ = *(signed char *) (runStart++); - } - } - - ++runEnd; - } - - return outWrite - out; -} - - -// -// Uncompress an array of bytes compressed with rleCompress(). -// Returns the length of the oncompressed data, or 0 if the -// length of the uncompressed data would be more than maxLength. -// - -int -rleUncompress (int inLength, int maxLength, const signed char in[], char out[]) -{ - char *outStart = out; - - while (inLength > 0) - { - if (*in < 0) - { - int count = -((int)*in++); - inLength -= count + 1; - - if (0 > (maxLength -= count)) - return 0; - - memcpy(out, in, count); - out += count; - in += count; - } - else - { - int count = *in++; - inLength -= 2; - - if (0 > (maxLength -= count + 1)) - return 0; - - memset(out, *(char*)in, count+1); - out += count+1; - - in++; - } - } - - return out - outStart; -} - - - - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_EXIT diff --git a/3rdparty/openexr/IlmImf/ImfRle.h b/3rdparty/openexr/IlmImf/ImfRle.h deleted file mode 100644 index 0def33654d..0000000000 --- a/3rdparty/openexr/IlmImf/ImfRle.h +++ /dev/null @@ -1,63 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - -#ifndef INCLUDED_IMF_RLE_H_ -#define INCLUDED_IMF_RLE_H_ - -#include "ImfNamespace.h" -#include "ImfExport.h" - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER - -// -// Compress an array of bytes, using run-length encoding, -// and return the length of the compressed data. -// - -IMF_EXPORT -int rleCompress (int inLength, const char in[], signed char out[]); - -// -// Uncompress an array of bytes compressed with rleCompress(). -// Returns the length of the uncompressed data, or 0 if the -// length of the uncompressed data would be more than maxLength. -// - -IMF_EXPORT -int rleUncompress (int inLength, int maxLength, - const signed char in[], char out[]); - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT - -#endif diff --git a/3rdparty/openexr/IlmImf/ImfRleCompressor.cpp b/3rdparty/openexr/IlmImf/ImfRleCompressor.cpp deleted file mode 100644 index 33914e8d19..0000000000 --- a/3rdparty/openexr/IlmImf/ImfRleCompressor.cpp +++ /dev/null @@ -1,220 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - - -//----------------------------------------------------------------------------- -// -// class RleCompressor -// -//----------------------------------------------------------------------------- - -#include "ImfRleCompressor.h" -#include "ImfCheckedArithmetic.h" -#include "ImfRle.h" -#include "Iex.h" -#include "ImfNamespace.h" - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_ENTER - -RleCompressor::RleCompressor (const Header &hdr, size_t maxScanLineSize): - Compressor (hdr), - _maxScanLineSize (maxScanLineSize), - _tmpBuffer (0), - _outBuffer (0) -{ - _tmpBuffer = new char [maxScanLineSize]; - _outBuffer = new char [uiMult (maxScanLineSize, size_t (3)) / 2]; -} - - -RleCompressor::~RleCompressor () -{ - delete [] _tmpBuffer; - delete [] _outBuffer; -} - - -int -RleCompressor::numScanLines () const -{ - // - // This compressor compresses individual scan lines. - // - - return 1; -} - - -int -RleCompressor::compress (const char *inPtr, - int inSize, - int minY, - const char *&outPtr) -{ - // - // Special case ďż˝- empty input buffer - // - - if (inSize == 0) - { - outPtr = _outBuffer; - return 0; - } - - // - // Reorder the pixel data. - // - - { - char *t1 = _tmpBuffer; - char *t2 = _tmpBuffer + (inSize + 1) / 2; - const char *stop = inPtr + inSize; - - while (true) - { - if (inPtr < stop) - *(t1++) = *(inPtr++); - else - break; - - if (inPtr < stop) - *(t2++) = *(inPtr++); - else - break; - } - } - - // - // Predictor. - // - - { - unsigned char *t = (unsigned char *) _tmpBuffer + 1; - unsigned char *stop = (unsigned char *) _tmpBuffer + inSize; - int p = t[-1]; - - while (t < stop) - { - int d = int (t[0]) - p + (128 + 256); - p = t[0]; - t[0] = d; - ++t; - } - } - - // - // Run-length encode the data. - // - - outPtr = _outBuffer; - return rleCompress (inSize, _tmpBuffer, (signed char *) _outBuffer); -} - - -int -RleCompressor::uncompress (const char *inPtr, - int inSize, - int minY, - const char *&outPtr) -{ - // - // Special case ďż˝- empty input buffer - // - - if (inSize == 0) - { - outPtr = _outBuffer; - return 0; - } - - // - // Decode the run-length encoded data - // - - int outSize; - - if (0 == (outSize = rleUncompress (inSize, _maxScanLineSize, - (const signed char *) inPtr, - _tmpBuffer))) - { - throw IEX_NAMESPACE::InputExc ("Data decoding (rle) failed."); - } - - // - // Predictor. - // - - { - unsigned char *t = (unsigned char *) _tmpBuffer + 1; - unsigned char *stop = (unsigned char *) _tmpBuffer + outSize; - - while (t < stop) - { - int d = int (t[-1]) + int (t[0]) - 128; - t[0] = d; - ++t; - } - } - - // - // Reorder the pixel data. - // - - { - const char *t1 = _tmpBuffer; - const char *t2 = _tmpBuffer + (outSize + 1) / 2; - char *s = _outBuffer; - char *stop = s + outSize; - - while (true) - { - if (s < stop) - *(s++) = *(t1++); - else - break; - - if (s < stop) - *(s++) = *(t2++); - else - break; - } - } - - outPtr = _outBuffer; - return outSize; -} - - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_EXIT diff --git a/3rdparty/openexr/IlmImf/ImfRleCompressor.h b/3rdparty/openexr/IlmImf/ImfRleCompressor.h deleted file mode 100644 index 7bb253abb7..0000000000 --- a/3rdparty/openexr/IlmImf/ImfRleCompressor.h +++ /dev/null @@ -1,85 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - - -#ifndef INCLUDED_IMF_RLE_COMPRESSOR_H -#define INCLUDED_IMF_RLE_COMPRESSOR_H - -//----------------------------------------------------------------------------- -// -// class RleCompressor -- performs run-length encoding -// -//----------------------------------------------------------------------------- - -#include "ImfCompressor.h" -#include "ImfNamespace.h" - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER - - -class RleCompressor: public Compressor -{ - public: - - IMF_EXPORT - RleCompressor (const Header &hdr, size_t maxScanLineSize); - IMF_EXPORT - virtual ~RleCompressor (); - - IMF_EXPORT - virtual int numScanLines () const; - - IMF_EXPORT - virtual int compress (const char *inPtr, - int inSize, - int minY, - const char *&outPtr); - - IMF_EXPORT - virtual int uncompress (const char *inPtr, - int inSize, - int minY, - const char *&outPtr); - private: - - int _maxScanLineSize; - char * _tmpBuffer; - char * _outBuffer; -}; - - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT - -#endif diff --git a/3rdparty/openexr/IlmImf/ImfScanLineInputFile.cpp b/3rdparty/openexr/IlmImf/ImfScanLineInputFile.cpp deleted file mode 100644 index c3eadb7941..0000000000 --- a/3rdparty/openexr/IlmImf/ImfScanLineInputFile.cpp +++ /dev/null @@ -1,1738 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - -//----------------------------------------------------------------------------- -// -// class ScanLineInputFile -// -//----------------------------------------------------------------------------- - -#include "ImfScanLineInputFile.h" -#include "ImfChannelList.h" -#include "ImfMisc.h" -#include "ImfStdIO.h" -#include "ImfCompressor.h" -#include "ImathBox.h" -#include "ImathFun.h" -#include -#include -#include -#include -#include "IlmThreadPool.h" -#include "IlmThreadSemaphore.h" -#include "IlmThreadMutex.h" -#include "Iex.h" -#include "ImfVersion.h" -#include "ImfOptimizedPixelReading.h" -#include "ImfNamespace.h" -#include "ImfStandardAttributes.h" - -#include -#include -#include -#include -#include - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_ENTER - - -using IMATH_NAMESPACE::Box2i; -using IMATH_NAMESPACE::divp; -using IMATH_NAMESPACE::modp; -using std::string; -using std::vector; -using std::ifstream; -using std::min; -using std::max; -using std::sort; -using ILMTHREAD_NAMESPACE::Mutex; -using ILMTHREAD_NAMESPACE::Lock; -using ILMTHREAD_NAMESPACE::Semaphore; -using ILMTHREAD_NAMESPACE::Task; -using ILMTHREAD_NAMESPACE::TaskGroup; -using ILMTHREAD_NAMESPACE::ThreadPool; - -namespace { - -struct InSliceInfo -{ - PixelType typeInFrameBuffer; - PixelType typeInFile; - char * base; - size_t xStride; - size_t yStride; - int xSampling; - int ySampling; - bool fill; - bool skip; - double fillValue; - - InSliceInfo (PixelType typeInFrameBuffer = HALF, - PixelType typeInFile = HALF, - char *base = 0, - size_t xStride = 0, - size_t yStride = 0, - int xSampling = 1, - int ySampling = 1, - bool fill = false, - bool skip = false, - double fillValue = 0.0); -}; - - -InSliceInfo::InSliceInfo (PixelType tifb, - PixelType tifl, - char *b, - size_t xs, size_t ys, - int xsm, int ysm, - bool f, bool s, - double fv) -: - typeInFrameBuffer (tifb), - typeInFile (tifl), - base (b), - xStride (xs), - yStride (ys), - xSampling (xsm), - ySampling (ysm), - fill (f), - skip (s), - fillValue (fv) -{ - // empty -} - - -struct LineBuffer -{ - const char * uncompressedData; - char * buffer; - int dataSize; - int minY; - int maxY; - Compressor * compressor; - Compressor::Format format; - int number; - bool hasException; - string exception; - - LineBuffer (Compressor * const comp); - ~LineBuffer (); - - inline void wait () {_sem.wait();} - inline void post () {_sem.post();} - - private: - - Semaphore _sem; -}; - - -LineBuffer::LineBuffer (Compressor *comp): - uncompressedData (0), - buffer (0), - dataSize (0), - compressor (comp), - format (defaultFormat(compressor)), - number (-1), - hasException (false), - exception (), - _sem (1) -{ - // empty -} - - -LineBuffer::~LineBuffer () -{ - delete compressor; -} - -/// helper struct used to detect the order that the channels are stored - -struct sliceOptimizationData -{ - const char * base; ///< pointer to pixel data - bool fill; ///< is this channel being filled with constant, instead of read? - half fillValue; ///< if filling, the value to use - size_t offset; ///< position this channel will be in the read buffer, accounting for previous channels, as well as their type - PixelType type; ///< type of channel - size_t xStride; ///< x-stride of channel in buffer (must be set to cause channels to interleave) - size_t yStride; ///< y-stride of channel in buffer (must be same in all channels, else order will change, which is bad) - int xSampling; ///< channel x sampling - int ySampling; ///< channel y sampling - - - /// we need to keep the list sorted in the order they'll be written to memory - bool operator<(const sliceOptimizationData& other ) const - { - return base < other.base; - } -}; - - -} // namespace - - -struct ScanLineInputFile::Data: public Mutex -{ - Header header; // the image header - int version; // file's version - FrameBuffer frameBuffer; // framebuffer to write into - LineOrder lineOrder; // order of the scanlines in file - int minX; // data window's min x coord - int maxX; // data window's max x coord - int minY; // data window's min y coord - int maxY; // data window's max x coord - vector lineOffsets; // stores offsets in file for - // each line - bool fileIsComplete; // True if no scanlines are missing - // in the file - int nextLineBufferMinY; // minimum y of the next linebuffer - vector bytesPerLine; // combined size of a line over all - // channels - vector offsetInLineBuffer; // offset for each scanline in its - // linebuffer - vector slices; // info about channels in file - - vector lineBuffers; // each holds one line buffer - int linesInBuffer; // number of scanlines each buffer - // holds - size_t lineBufferSize; // size of the line buffer - int partNumber; // part number - - bool memoryMapped; // if the stream is memory mapped - OptimizationMode optimizationMode; // optimizibility of the input file - vector optimizationData; ///< channel ordering for optimized reading - - Data (int numThreads); - ~Data (); - - inline LineBuffer * getLineBuffer (int number); // hash function from line - // buffer indices into our - // vector of line buffers - - -}; - - -ScanLineInputFile::Data::Data (int numThreads): - partNumber(-1), - memoryMapped(false) -{ - // - // We need at least one lineBuffer, but if threading is used, - // to keep n threads busy we need 2*n lineBuffers - // - - lineBuffers.resize (max (1, 2 * numThreads)); -} - - -ScanLineInputFile::Data::~Data () -{ - for (size_t i = 0; i < lineBuffers.size(); i++) - delete lineBuffers[i]; -} - - -inline LineBuffer * -ScanLineInputFile::Data::getLineBuffer (int lineBufferNumber) -{ - return lineBuffers[lineBufferNumber % lineBuffers.size()]; -} - - -namespace { - - -void -reconstructLineOffsets (OPENEXR_IMF_INTERNAL_NAMESPACE::IStream &is, - LineOrder lineOrder, - vector &lineOffsets) -{ - Int64 position = is.tellg(); - - try - { - for (unsigned int i = 0; i < lineOffsets.size(); i++) - { - Int64 lineOffset = is.tellg(); - - int y; - OPENEXR_IMF_INTERNAL_NAMESPACE::Xdr::read (is, y); - - int dataSize; - OPENEXR_IMF_INTERNAL_NAMESPACE::Xdr::read (is, dataSize); - - Xdr::skip (is, dataSize); - - if (lineOrder == INCREASING_Y) - lineOffsets[i] = lineOffset; - else - lineOffsets[lineOffsets.size() - i - 1] = lineOffset; - } - } - catch (...) - { - // - // Suppress all exceptions. This functions is - // called only to reconstruct the line offset - // table for incomplete files, and exceptions - // are likely. - // - } - - is.clear(); - is.seekg (position); -} - - -void -readLineOffsets (OPENEXR_IMF_INTERNAL_NAMESPACE::IStream &is, - LineOrder lineOrder, - vector &lineOffsets, - bool &complete) -{ - for (unsigned int i = 0; i < lineOffsets.size(); i++) - { - OPENEXR_IMF_INTERNAL_NAMESPACE::Xdr::read (is, lineOffsets[i]); - } - - complete = true; - - for (unsigned int i = 0; i < lineOffsets.size(); i++) - { - if (lineOffsets[i] <= 0) - { - // - // Invalid data in the line offset table mean that - // the file is probably incomplete (the table is - // the last thing written to the file). Either - // some process is still busy writing the file, - // or writing the file was aborted. - // - // We should still be able to read the existing - // parts of the file. In order to do this, we - // have to make a sequential scan over the scan - // line data to reconstruct the line offset table. - // - - complete = false; - reconstructLineOffsets (is, lineOrder, lineOffsets); - break; - } - } -} - - -void -readPixelData (InputStreamMutex *streamData, - ScanLineInputFile::Data *ifd, - int minY, - char *&buffer, - int &dataSize) -{ - // - // Read a single line buffer from the input file. - // - // If the input file is not memory-mapped, we copy the pixel data into - // into the array pointed to by buffer. If the file is memory-mapped, - // then we change where buffer points to instead of writing into the - // array (hence buffer needs to be a reference to a char *). - // - - int lineBufferNumber = (minY - ifd->minY) / ifd->linesInBuffer; - if (lineBufferNumber < 0 || lineBufferNumber >= int(ifd->lineOffsets.size())) - THROW (IEX_NAMESPACE::InputExc, "Invalid scan line " << minY << " requested or missing."); - - Int64 lineOffset = ifd->lineOffsets[lineBufferNumber]; - - if (lineOffset == 0) - THROW (IEX_NAMESPACE::InputExc, "Scan line " << minY << " is missing."); - - // - // Seek to the start of the scan line in the file, - // if necessary. - // - - if ( !isMultiPart(ifd->version) ) - { - if (ifd->nextLineBufferMinY != minY) - streamData->is->seekg (lineOffset); - } - else - { - // - // In a multi-part file, the file pointer may have been moved by - // other parts, so we have to ask tellg() where we are. - // - if (streamData->is->tellg() != ifd->lineOffsets[lineBufferNumber]) - streamData->is->seekg (lineOffset); - } - - // - // Read the data block's header. - // - - int yInFile; - - // - // Read the part number when we are dealing with a multi-part file. - // - if (isMultiPart(ifd->version)) - { - int partNumber; - OPENEXR_IMF_INTERNAL_NAMESPACE::Xdr::read (*streamData->is, partNumber); - if (partNumber != ifd->partNumber) - { - THROW (IEX_NAMESPACE::ArgExc, "Unexpected part number " << partNumber - << ", should be " << ifd->partNumber << "."); - } - } - - OPENEXR_IMF_INTERNAL_NAMESPACE::Xdr::read (*streamData->is, yInFile); - OPENEXR_IMF_INTERNAL_NAMESPACE::Xdr::read (*streamData->is, dataSize); - - if (yInFile != minY) - throw IEX_NAMESPACE::InputExc ("Unexpected data block y coordinate."); - - if (dataSize > (int) ifd->lineBufferSize) - throw IEX_NAMESPACE::InputExc ("Unexpected data block length."); - - // - // Read the pixel data. - // - - if (streamData->is->isMemoryMapped ()) - buffer = streamData->is->readMemoryMapped (dataSize); - else - streamData->is->read (buffer, dataSize); - - // - // Keep track of which scan line is the next one in - // the file, so that we can avoid redundant seekg() - // operations (seekg() can be fairly expensive). - // - - if (ifd->lineOrder == INCREASING_Y) - ifd->nextLineBufferMinY = minY + ifd->linesInBuffer; - else - ifd->nextLineBufferMinY = minY - ifd->linesInBuffer; -} - - - -// -// A LineBufferTask encapsulates the task uncompressing a set of -// scanlines (line buffer) and copying them into the frame buffer. -// - -class LineBufferTask : public Task -{ - public: - - LineBufferTask (TaskGroup *group, - ScanLineInputFile::Data *ifd, - LineBuffer *lineBuffer, - int scanLineMin, - int scanLineMax, - OptimizationMode optimizationMode); - - virtual ~LineBufferTask (); - - virtual void execute (); - - private: - - ScanLineInputFile::Data * _ifd; - LineBuffer * _lineBuffer; - int _scanLineMin; - int _scanLineMax; - OptimizationMode _optimizationMode; -}; - - -LineBufferTask::LineBufferTask - (TaskGroup *group, - ScanLineInputFile::Data *ifd, - LineBuffer *lineBuffer, - int scanLineMin, - int scanLineMax,OptimizationMode optimizationMode) -: - Task (group), - _ifd (ifd), - _lineBuffer (lineBuffer), - _scanLineMin (scanLineMin), - _scanLineMax (scanLineMax), - _optimizationMode(optimizationMode) -{ - // empty -} - - -LineBufferTask::~LineBufferTask () -{ - // - // Signal that the line buffer is now free - // - - _lineBuffer->post (); -} - - -void -LineBufferTask::execute () -{ - try - { - // - // Uncompress the data, if necessary - // - - if (_lineBuffer->uncompressedData == 0) - { - int uncompressedSize = 0; - int maxY = min (_lineBuffer->maxY, _ifd->maxY); - - for (int i = _lineBuffer->minY - _ifd->minY; - i <= maxY - _ifd->minY; - ++i) - { - uncompressedSize += (int) _ifd->bytesPerLine[i]; - } - - if (_lineBuffer->compressor && - _lineBuffer->dataSize < uncompressedSize) - { - _lineBuffer->format = _lineBuffer->compressor->format(); - - _lineBuffer->dataSize = _lineBuffer->compressor->uncompress - (_lineBuffer->buffer, - _lineBuffer->dataSize, - _lineBuffer->minY, - _lineBuffer->uncompressedData); - } - else - { - // - // If the line is uncompressed, it's in XDR format, - // regardless of the compressor's output format. - // - - _lineBuffer->format = Compressor::XDR; - _lineBuffer->uncompressedData = _lineBuffer->buffer; - } - } - - int yStart, yStop, dy; - - if (_ifd->lineOrder == INCREASING_Y) - { - yStart = _scanLineMin; - yStop = _scanLineMax + 1; - dy = 1; - } - else - { - yStart = _scanLineMax; - yStop = _scanLineMin - 1; - dy = -1; - } - - for (int y = yStart; y != yStop; y += dy) - { - // - // Convert one scan line's worth of pixel data back - // from the machine-independent representation, and - // store the result in the frame buffer. - // - - const char *readPtr = _lineBuffer->uncompressedData + - _ifd->offsetInLineBuffer[y - _ifd->minY]; - - // - // Iterate over all image channels. - // - - for (unsigned int i = 0; i < _ifd->slices.size(); ++i) - { - // - // Test if scan line y of this channel contains any data - // (the scan line contains data only if y % ySampling == 0). - // - - const InSliceInfo &slice = _ifd->slices[i]; - - if (modp (y, slice.ySampling) != 0) - continue; - - // - // Find the x coordinates of the leftmost and rightmost - // sampled pixels (i.e. pixels within the data window - // for which x % xSampling == 0). - // - - int dMinX = divp (_ifd->minX, slice.xSampling); - int dMaxX = divp (_ifd->maxX, slice.xSampling); - - // - // Fill the frame buffer with pixel data. - // - - if (slice.skip) - { - // - // The file contains data for this channel, but - // the frame buffer contains no slice for this channel. - // - - skipChannel (readPtr, slice.typeInFile, dMaxX - dMinX + 1); - } - else - { - // - // The frame buffer contains a slice for this channel. - // - - char *linePtr = slice.base + - divp (y, slice.ySampling) * - slice.yStride; - - char *writePtr = linePtr + dMinX * slice.xStride; - char *endPtr = linePtr + dMaxX * slice.xStride; - - copyIntoFrameBuffer (readPtr, writePtr, endPtr, - slice.xStride, slice.fill, - slice.fillValue, _lineBuffer->format, - slice.typeInFrameBuffer, - slice.typeInFile); - } - } - } - } - catch (std::exception &e) - { - if (!_lineBuffer->hasException) - { - _lineBuffer->exception = e.what(); - _lineBuffer->hasException = true; - } - } - catch (...) - { - if (!_lineBuffer->hasException) - { - _lineBuffer->exception = "unrecognized exception"; - _lineBuffer->hasException = true; - } - } -} - - -#ifdef IMF_HAVE_SSE2 -// -// IIF format is more restricted than a perfectly generic one, -// so it is possible to perform some optimizations. -// -class LineBufferTaskIIF : public Task -{ - public: - - LineBufferTaskIIF (TaskGroup *group, - ScanLineInputFile::Data *ifd, - LineBuffer *lineBuffer, - int scanLineMin, - int scanLineMax, - OptimizationMode optimizationMode); - - virtual ~LineBufferTaskIIF (); - - virtual void execute (); - - template - void getWritePointer (int y, - unsigned short*& pOutWritePointerRight, - size_t& outPixelsToCopySSE, - size_t& outPixelsToCopyNormal,int bank=0) const; - - template - void getWritePointerStereo (int y, - unsigned short*& outWritePointerRight, - unsigned short*& outWritePointerLeft, - size_t& outPixelsToCopySSE, - size_t& outPixelsToCopyNormal) const; - - private: - - ScanLineInputFile::Data * _ifd; - LineBuffer * _lineBuffer; - int _scanLineMin; - int _scanLineMax; - OptimizationMode _optimizationMode; - -}; - -LineBufferTaskIIF::LineBufferTaskIIF - (TaskGroup *group, - ScanLineInputFile::Data *ifd, - LineBuffer *lineBuffer, - int scanLineMin, - int scanLineMax, - OptimizationMode optimizationMode - ) - : - Task (group), - _ifd (ifd), - _lineBuffer (lineBuffer), - _scanLineMin (scanLineMin), - _scanLineMax (scanLineMax), - _optimizationMode (optimizationMode) -{ - /* - // - // indicates the optimised path has been taken - // - static bool could_optimise=false; - if(could_optimise==false) - { - std::cerr << " optimised path\n"; - could_optimise=true; - } - */ -} - -LineBufferTaskIIF::~LineBufferTaskIIF () -{ - // - // Signal that the line buffer is now free - // - - _lineBuffer->post (); -} - -// Return 0 if we are to skip because of sampling -// channelBank is 0 for the first group of channels, 1 for the second -template -void LineBufferTaskIIF::getWritePointer - (int y, - unsigned short*& outWritePointerRight, - size_t& outPixelsToCopySSE, - size_t& outPixelsToCopyNormal, - int channelBank - ) const -{ - // Channels are saved alphabetically, so the order is B G R. - // The last slice (R) will give us the location of our write pointer. - // The only slice that we support skipping is alpha, i.e. the first one. - // This does not impact the write pointer or the pixels to copy at all. - - size_t nbSlicesInBank = _ifd->optimizationData.size(); - - int sizeOfSingleValue = sizeof(TYPE); - - if(_ifd->optimizationData.size()>4) - { - // there are two banks - we only copy one at once - nbSlicesInBank/=2; - } - - - size_t firstChannel = 0; - if(channelBank==1) - { - firstChannel = _ifd->optimizationData.size()/2; - } - - sliceOptimizationData& firstSlice = _ifd->optimizationData[firstChannel]; - - if (modp (y, firstSlice.ySampling) != 0) - { - outPixelsToCopySSE = 0; - outPixelsToCopyNormal = 0; - outWritePointerRight = 0; - } - - const char* linePtr1 = firstSlice.base + - divp (y, firstSlice.ySampling) * - firstSlice.yStride; - - int dMinX1 = divp (_ifd->minX, firstSlice.xSampling); - int dMaxX1 = divp (_ifd->maxX, firstSlice.xSampling); - - // Construct the writePtr so that we start writing at - // linePtr + Min offset in the line. - outWritePointerRight = (unsigned short*)(linePtr1 + - dMinX1 * firstSlice.xStride ); - - size_t bytesToCopy = ((linePtr1 + dMaxX1 * firstSlice.xStride ) - - (linePtr1 + dMinX1 * firstSlice.xStride )) + 2; - size_t shortsToCopy = bytesToCopy / sizeOfSingleValue; - size_t pixelsToCopy = (shortsToCopy / nbSlicesInBank ) + 1; - - // We only support writing to SSE if we have no pixels to copy normally - outPixelsToCopySSE = pixelsToCopy / 8; - outPixelsToCopyNormal = pixelsToCopy % 8; - -} - - -template -void LineBufferTaskIIF::getWritePointerStereo - (int y, - unsigned short*& outWritePointerRight, - unsigned short*& outWritePointerLeft, - size_t& outPixelsToCopySSE, - size_t& outPixelsToCopyNormal) const -{ - getWritePointer(y,outWritePointerRight,outPixelsToCopySSE,outPixelsToCopyNormal,0); - - - if(outWritePointerRight) - { - getWritePointer(y,outWritePointerLeft,outPixelsToCopySSE,outPixelsToCopyNormal,1); - } - -} - -void -LineBufferTaskIIF::execute() -{ - try - { - // - // Uncompress the data, if necessary - // - - if (_lineBuffer->uncompressedData == 0) - { - int uncompressedSize = 0; - int maxY = min (_lineBuffer->maxY, _ifd->maxY); - - for (int i = _lineBuffer->minY - _ifd->minY; - i <= maxY - _ifd->minY; - ++i) - { - uncompressedSize += (int) _ifd->bytesPerLine[i]; - } - - if (_lineBuffer->compressor && - _lineBuffer->dataSize < uncompressedSize) - { - _lineBuffer->format = _lineBuffer->compressor->format(); - - _lineBuffer->dataSize = - _lineBuffer->compressor->uncompress (_lineBuffer->buffer, - _lineBuffer->dataSize, - _lineBuffer->minY, - _lineBuffer->uncompressedData); - } - else - { - // - // If the line is uncompressed, it's in XDR format, - // regardless of the compressor's output format. - // - - _lineBuffer->format = Compressor::XDR; - _lineBuffer->uncompressedData = _lineBuffer->buffer; - } - } - - int yStart, yStop, dy; - - if (_ifd->lineOrder == INCREASING_Y) - { - yStart = _scanLineMin; - yStop = _scanLineMax + 1; - dy = 1; - } - else - { - yStart = _scanLineMax; - yStop = _scanLineMin - 1; - dy = -1; - } - - for (int y = yStart; y != yStop; y += dy) - { - if (modp (y, _optimizationMode._ySampling) != 0) - continue; - - // - // Convert one scan line's worth of pixel data back - // from the machine-independent representation, and - // store the result in the frame buffer. - // - - // Set the readPtr to read at the start of uncompressedData - // but with an offet based on calculated array. - // _ifd->offsetInLineBuffer contains offsets based on which - // line we are currently processing. - // Stride will be taken into consideration later. - - - const char* readPtr = _lineBuffer->uncompressedData + - _ifd->offsetInLineBuffer[y - _ifd->minY]; - - size_t pixelsToCopySSE = 0; - size_t pixelsToCopyNormal = 0; - - unsigned short* writePtrLeft = 0; - unsigned short* writePtrRight = 0; - - size_t channels = _ifd->optimizationData.size(); - - if(channels>4) - { - getWritePointerStereo(y, writePtrRight, writePtrLeft, pixelsToCopySSE, pixelsToCopyNormal); - } - else - { - getWritePointer(y, writePtrRight, pixelsToCopySSE, pixelsToCopyNormal); - } - - if (writePtrRight == 0 && pixelsToCopySSE == 0 && pixelsToCopyNormal == 0) - { - continue; - } - - - // - // support reading up to eight channels - // - unsigned short* readPointers[8]; - - for (size_t i = 0; i < channels ; ++i) - { - readPointers[i] = (unsigned short*)readPtr + (_ifd->optimizationData[i].offset * (pixelsToCopySSE * 8 + pixelsToCopyNormal)); - } - - //RGB only - if(channels==3 || channels == 6 ) - { - optimizedWriteToRGB(readPointers[0], readPointers[1], readPointers[2], writePtrRight, pixelsToCopySSE, pixelsToCopyNormal); - - //stereo RGB - if( channels == 6) - { - optimizedWriteToRGB(readPointers[3], readPointers[4], readPointers[5], writePtrLeft, pixelsToCopySSE, pixelsToCopyNormal); - } - //RGBA - }else if(channels==4 || channels==8) - { - - if(_ifd->optimizationData[3].fill) - { - optimizedWriteToRGBAFillA(readPointers[0], readPointers[1], readPointers[2], _ifd->optimizationData[3].fillValue.bits() , writePtrRight, pixelsToCopySSE, pixelsToCopyNormal); - }else{ - optimizedWriteToRGBA(readPointers[0], readPointers[1], readPointers[2], readPointers[3] , writePtrRight, pixelsToCopySSE, pixelsToCopyNormal); - } - - //stereo RGBA - if( channels == 8) - { - if(_ifd->optimizationData[7].fill) - { - optimizedWriteToRGBAFillA(readPointers[4], readPointers[5], readPointers[6], _ifd->optimizationData[7].fillValue.bits() , writePtrLeft, pixelsToCopySSE, pixelsToCopyNormal); - }else{ - optimizedWriteToRGBA(readPointers[4], readPointers[5], readPointers[6], readPointers[7] , writePtrLeft, pixelsToCopySSE, pixelsToCopyNormal); - } - } - } - else { - throw(IEX_NAMESPACE::LogicExc("IIF mode called with incorrect channel pattern")); - } - - // If we are in NO_OPTIMIZATION mode, this class will never - // get instantiated, so no need to check for it and duplicate - // the code. - } - } - catch (std::exception &e) - { - if (!_lineBuffer->hasException) - { - _lineBuffer->exception = e.what(); - _lineBuffer->hasException = true; - } - } - catch (...) - { - if (!_lineBuffer->hasException) - { - _lineBuffer->exception = "unrecognized exception"; - _lineBuffer->hasException = true; - } - } -} -#endif - - -Task * -newLineBufferTask (TaskGroup *group, - InputStreamMutex *streamData, - ScanLineInputFile::Data *ifd, - int number, - int scanLineMin, - int scanLineMax, - OptimizationMode optimizationMode) -{ - // - // Wait for a line buffer to become available, fill the line - // buffer with raw data from the file if necessary, and create - // a new LineBufferTask whose execute() method will uncompress - // the contents of the buffer and copy the pixels into the - // frame buffer. - // - - LineBuffer *lineBuffer = ifd->getLineBuffer (number); - - try - { - lineBuffer->wait (); - - if (lineBuffer->number != number) - { - lineBuffer->minY = ifd->minY + number * ifd->linesInBuffer; - lineBuffer->maxY = lineBuffer->minY + ifd->linesInBuffer - 1; - - lineBuffer->number = number; - lineBuffer->uncompressedData = 0; - - readPixelData (streamData, ifd, lineBuffer->minY, - lineBuffer->buffer, - lineBuffer->dataSize); - } - } - catch (std::exception &e) - { - if (!lineBuffer->hasException) - { - lineBuffer->exception = e.what(); - lineBuffer->hasException = true; - } - lineBuffer->number = -1; - lineBuffer->post(); - throw; - } - catch (...) - { - // - // Reading from the file caused an exception. - // Signal that the line buffer is free, and - // re-throw the exception. - // - - lineBuffer->exception = "unrecognized exception"; - lineBuffer->hasException = true; - lineBuffer->number = -1; - lineBuffer->post(); - throw; - } - - scanLineMin = max (lineBuffer->minY, scanLineMin); - scanLineMax = min (lineBuffer->maxY, scanLineMax); - - - Task* retTask = 0; - -#ifdef IMF_HAVE_SSE2 - if (optimizationMode._optimizable) - { - - retTask = new LineBufferTaskIIF (group, ifd, lineBuffer, - scanLineMin, scanLineMax, - optimizationMode); - - } - else -#endif - { - retTask = new LineBufferTask (group, ifd, lineBuffer, - scanLineMin, scanLineMax, - optimizationMode); - } - - return retTask; - - } - - - - -} // namespace - - -void ScanLineInputFile::initialize(const Header& header) -{ - try - { - _data->header = header; - - _data->lineOrder = _data->header.lineOrder(); - - const Box2i &dataWindow = _data->header.dataWindow(); - - _data->minX = dataWindow.min.x; - _data->maxX = dataWindow.max.x; - _data->minY = dataWindow.min.y; - _data->maxY = dataWindow.max.y; - - size_t maxBytesPerLine = bytesPerLineTable (_data->header, - _data->bytesPerLine); - - for (size_t i = 0; i < _data->lineBuffers.size(); i++) - { - _data->lineBuffers[i] = new LineBuffer (newCompressor - (_data->header.compression(), - maxBytesPerLine, - _data->header)); - } - - _data->linesInBuffer = - numLinesInBuffer (_data->lineBuffers[0]->compressor); - - _data->lineBufferSize = maxBytesPerLine * _data->linesInBuffer; - - if (!_streamData->is->isMemoryMapped()) - { - for (size_t i = 0; i < _data->lineBuffers.size(); i++) - { - _data->lineBuffers[i]->buffer = (char *) EXRAllocAligned(_data->lineBufferSize*sizeof(char),16); - } - } - _data->nextLineBufferMinY = _data->minY - 1; - - offsetInLineBufferTable (_data->bytesPerLine, - _data->linesInBuffer, - _data->offsetInLineBuffer); - - int lineOffsetSize = (dataWindow.max.y - dataWindow.min.y + - _data->linesInBuffer) / _data->linesInBuffer; - - _data->lineOffsets.resize (lineOffsetSize); - } - catch (...) - { - delete _data; - _data=NULL; - throw; - } -} - - -ScanLineInputFile::ScanLineInputFile(InputPartData* part) -{ - if (part->header.type() != SCANLINEIMAGE) - throw IEX_NAMESPACE::ArgExc("Can't build a ScanLineInputFile from a type-mismatched part."); - - _data = new Data(part->numThreads); - _streamData = part->mutex; - _data->memoryMapped = _streamData->is->isMemoryMapped(); - - _data->version = part->version; - - initialize(part->header); - - _data->lineOffsets = part->chunkOffsets; - - _data->partNumber = part->partNumber; - // - // (TODO) change this code later. - // The completeness of the file should be detected in MultiPartInputFile. - // - _data->fileIsComplete = true; -} - - -ScanLineInputFile::ScanLineInputFile - (const Header &header, - OPENEXR_IMF_INTERNAL_NAMESPACE::IStream *is, - int numThreads) -: - _data (new Data (numThreads)), - _streamData (new InputStreamMutex()) -{ - _streamData->is = is; - _data->memoryMapped = is->isMemoryMapped(); - - initialize(header); - - // - // (TODO) this is nasty - we need a better way of working out what type of file has been used. - // in any case I believe this constructor only gets used with single part files - // and 'version' currently only tracks multipart state, so setting to 0 (not multipart) works for us - // - - _data->version=0; - readLineOffsets (*_streamData->is, - _data->lineOrder, - _data->lineOffsets, - _data->fileIsComplete); -} - - -ScanLineInputFile::~ScanLineInputFile () -{ - if (!_data->memoryMapped) - { - for (size_t i = 0; i < _data->lineBuffers.size(); i++) - { - EXRFreeAligned(_data->lineBuffers[i]->buffer); - } - } - - - // - // ScanLineInputFile should never delete the stream, - // because it does not own the stream. - // We just delete the Mutex here. - // - if (_data->partNumber == -1) - delete _streamData; - - delete _data; -} - - -const char * -ScanLineInputFile::fileName () const -{ - return _streamData->is->fileName(); -} - - -const Header & -ScanLineInputFile::header () const -{ - return _data->header; -} - - -int -ScanLineInputFile::version () const -{ - return _data->version; -} - - -namespace -{ - - -// returns the optimization state for the given arrangement of frame bufers -// this assumes: -// both the file and framebuffer are half float data -// both the file and framebuffer have xSampling and ySampling=1 -// entries in optData are sorted into their interleave order (i.e. by base address) -// These tests are done by SetFrameBuffer as it is building optData -// -OptimizationMode -detectOptimizationMode (const vector& optData) -{ - OptimizationMode w; - - // need to be compiled with SSE optimisations: if not, just returns false -#ifdef IMF_HAVE_SSE2 - - - // only handle reading 3,4,6 or 8 channels - switch(optData.size()) - { - case 3 : break; - case 4 : break; - case 6 : break; - case 8 : break; - default : - return w; - } - - // - // the point at which data switches between the primary and secondary bank - // - size_t bankSize = optData.size()>4 ? optData.size()/2 : optData.size(); - - for(size_t i=0;iheader.channels(); - for (FrameBuffer::ConstIterator j = frameBuffer.begin(); - j != frameBuffer.end(); - ++j) - { - ChannelList::ConstIterator i = channels.find (j.name()); - - if (i == channels.end()) - continue; - - if (i.channel().xSampling != j.slice().xSampling || - i.channel().ySampling != j.slice().ySampling) - THROW (IEX_NAMESPACE::ArgExc, "X and/or y subsampling factors " - "of \"" << i.name() << "\" channel " - "of input file \"" << fileName() << "\" are " - "not compatible with the frame buffer's " - "subsampling factors."); - } - - // optimization is possible if this is a little endian system - // and both inputs and outputs are half floats - // - bool optimizationPossible = true; - - if (!GLOBAL_SYSTEM_LITTLE_ENDIAN) - { - optimizationPossible =false; - } - - vector optData; - - - // - // Initialize the slice table for readPixels(). - // - - vector slices; - ChannelList::ConstIterator i = channels.begin(); - - // current offset of channel: pixel data starts at offset*width into the - // decompressed scanline buffer - size_t offset = 0; - - for (FrameBuffer::ConstIterator j = frameBuffer.begin(); - j != frameBuffer.end(); - ++j) - { - while (i != channels.end() && strcmp (i.name(), j.name()) < 0) - { - // - // Channel i is present in the file but not - // in the frame buffer; data for channel i - // will be skipped during readPixels(). - // - - slices.push_back (InSliceInfo (i.channel().type, - i.channel().type, - 0, // base - 0, // xStride - 0, // yStride - i.channel().xSampling, - i.channel().ySampling, - false, // fill - true, // skip - 0.0)); // fillValue - - switch(i.channel().type) - { - case OPENEXR_IMF_INTERNAL_NAMESPACE::HALF : - offset++; - break; - case OPENEXR_IMF_INTERNAL_NAMESPACE::FLOAT : - offset+=2; - break; - case OPENEXR_IMF_INTERNAL_NAMESPACE::UINT : - offset+=2; - break; - } - ++i; - } - - bool fill = false; - - if (i == channels.end() || strcmp (i.name(), j.name()) > 0) - { - // - // Channel i is present in the frame buffer, but not in the file. - // In the frame buffer, slice j will be filled with a default value. - // - - fill = true; - } - - slices.push_back (InSliceInfo (j.slice().type, - fill? j.slice().type: - i.channel().type, - j.slice().base, - j.slice().xStride, - j.slice().yStride, - j.slice().xSampling, - j.slice().ySampling, - fill, - false, // skip - j.slice().fillValue)); - - if(!fill && i.channel().type!=OPENEXR_IMF_INTERNAL_NAMESPACE::HALF) - { - optimizationPossible = false; - } - - if(j.slice().type != OPENEXR_IMF_INTERNAL_NAMESPACE::HALF) - { - optimizationPossible = false; - } - if(j.slice().xSampling!=1 || j.slice().ySampling!=1) - { - optimizationPossible = false; - } - - - if(optimizationPossible) - { - sliceOptimizationData dat; - dat.base = j.slice().base; - dat.fill = fill; - dat.fillValue = j.slice().fillValue; - dat.offset = offset; - dat.xStride = j.slice().xStride; - dat.yStride = j.slice().yStride; - dat.xSampling = j.slice().xSampling; - dat.ySampling = j.slice().ySampling; - optData.push_back(dat); - } - - if(!fill) - { - switch(i.channel().type) - { - case OPENEXR_IMF_INTERNAL_NAMESPACE::HALF : - offset++; - break; - case OPENEXR_IMF_INTERNAL_NAMESPACE::FLOAT : - offset+=2; - break; - case OPENEXR_IMF_INTERNAL_NAMESPACE::UINT : - offset+=2; - break; - } - } - - - - if (i != channels.end() && !fill) - ++i; - } - - - if(optimizationPossible) - { - // - // check optimisibility - // based on channel ordering and fill channel positions - // - sort(optData.begin(),optData.end()); - _data->optimizationMode = detectOptimizationMode(optData); - } - - if(!optimizationPossible || _data->optimizationMode._optimizable==false) - { - optData = vector(); - _data->optimizationMode._optimizable=false; - } - - // - // Store the new frame buffer. - // - - _data->frameBuffer = frameBuffer; - _data->slices = slices; - _data->optimizationData = optData; -} - - -const FrameBuffer & -ScanLineInputFile::frameBuffer () const -{ - Lock lock (*_streamData); - return _data->frameBuffer; -} - - -bool -ScanLineInputFile::isComplete () const -{ - return _data->fileIsComplete; -} - -bool ScanLineInputFile::isOptimizationEnabled() const -{ - if (_data->slices.size() == 0) - throw IEX_NAMESPACE::ArgExc ("No frame buffer specified " - "as pixel data destination."); - - return _data->optimizationMode._optimizable; -} - - -void -ScanLineInputFile::readPixels (int scanLine1, int scanLine2) -{ - try - { - Lock lock (*_streamData); - - if (_data->slices.size() == 0) - throw IEX_NAMESPACE::ArgExc ("No frame buffer specified " - "as pixel data destination."); - - int scanLineMin = min (scanLine1, scanLine2); - int scanLineMax = max (scanLine1, scanLine2); - - if (scanLineMin < _data->minY || scanLineMax > _data->maxY) - throw IEX_NAMESPACE::ArgExc ("Tried to read scan line outside " - "the image file's data window."); - - // - // We impose a numbering scheme on the lineBuffers where the first - // scanline is contained in lineBuffer 1. - // - // Determine the first and last lineBuffer numbers in this scanline - // range. We always attempt to read the scanlines in the order that - // they are stored in the file. - // - - int start, stop, dl; - - if (_data->lineOrder == INCREASING_Y) - { - start = (scanLineMin - _data->minY) / _data->linesInBuffer; - stop = (scanLineMax - _data->minY) / _data->linesInBuffer + 1; - dl = 1; - } - else - { - start = (scanLineMax - _data->minY) / _data->linesInBuffer; - stop = (scanLineMin - _data->minY) / _data->linesInBuffer - 1; - dl = -1; - } - - // - // Create a task group for all line buffer tasks. When the - // task group goes out of scope, the destructor waits until - // all tasks are complete. - // - - { - TaskGroup taskGroup; - - // - // Add the line buffer tasks. - // - // The tasks will execute in the order that they are created - // because we lock the line buffers during construction and the - // constructors are called by the main thread. Hence, in order - // for a successive task to execute the previous task which - // used that line buffer must have completed already. - // - - for (int l = start; l != stop; l += dl) - { - ThreadPool::addGlobalTask (newLineBufferTask (&taskGroup, - _streamData, - _data, l, - scanLineMin, - scanLineMax, - _data->optimizationMode)); - } - - // - // finish all tasks - // - } - - // - // Exeption handling: - // - // LineBufferTask::execute() may have encountered exceptions, but - // those exceptions occurred in another thread, not in the thread - // that is executing this call to ScanLineInputFile::readPixels(). - // LineBufferTask::execute() has caught all exceptions and stored - // the exceptions' what() strings in the line buffers. - // Now we check if any line buffer contains a stored exception; if - // this is the case then we re-throw the exception in this thread. - // (It is possible that multiple line buffers contain stored - // exceptions. We re-throw the first exception we find and - // ignore all others.) - // - - const string *exception = 0; - - for (size_t i = 0; i < _data->lineBuffers.size(); ++i) - { - LineBuffer *lineBuffer = _data->lineBuffers[i]; - - if (lineBuffer->hasException && !exception) - exception = &lineBuffer->exception; - - lineBuffer->hasException = false; - } - - if (exception) - throw IEX_NAMESPACE::IoExc (*exception); - } - catch (IEX_NAMESPACE::BaseExc &e) - { - REPLACE_EXC (e, "Error reading pixel data from image " - "file \"" << fileName() << "\". " << e.what()); - throw; - } -} - - -void -ScanLineInputFile::readPixels (int scanLine) -{ - readPixels (scanLine, scanLine); -} - - -void -ScanLineInputFile::rawPixelData (int firstScanLine, - const char *&pixelData, - int &pixelDataSize) -{ - try - { - Lock lock (*_streamData); - - if (firstScanLine < _data->minY || firstScanLine > _data->maxY) - { - throw IEX_NAMESPACE::ArgExc ("Tried to read scan line outside " - "the image file's data window."); - } - - int minY = lineBufferMinY - (firstScanLine, _data->minY, _data->linesInBuffer); - - readPixelData - (_streamData, _data, minY, _data->lineBuffers[0]->buffer, pixelDataSize); - - pixelData = _data->lineBuffers[0]->buffer; - } - catch (IEX_NAMESPACE::BaseExc &e) - { - REPLACE_EXC (e, "Error reading pixel data from image " - "file \"" << fileName() << "\". " << e.what()); - throw; - } -} - - -void ScanLineInputFile::rawPixelDataToBuffer(int scanLine, - char *pixelData, - int &pixelDataSize) const -{ - if (_data->memoryMapped) { - throw IEX_NAMESPACE::ArgExc ("Reading raw pixel data to a buffer " - "is not supported for memory mapped " - "streams." ); - } - - try - { - Lock lock (*_streamData); - - if (scanLine < _data->minY || scanLine > _data->maxY) - { - throw IEX_NAMESPACE::ArgExc ("Tried to read scan line outside " - "the image file's data window."); - } - - readPixelData - (_streamData, _data, scanLine, pixelData, pixelDataSize); - - } - catch (IEX_NAMESPACE::BaseExc &e) - { - REPLACE_EXC (e, "Error reading pixel data from image " - "file \"" << fileName() << "\". " << e.what()); - throw; - } -} - - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_EXIT diff --git a/3rdparty/openexr/IlmImf/ImfScanLineInputFile.h b/3rdparty/openexr/IlmImf/ImfScanLineInputFile.h deleted file mode 100644 index 3165a716d3..0000000000 --- a/3rdparty/openexr/IlmImf/ImfScanLineInputFile.h +++ /dev/null @@ -1,245 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - -#ifndef INCLUDED_IMF_SCAN_LINE_INPUT_FILE_H -#define INCLUDED_IMF_SCAN_LINE_INPUT_FILE_H - -//----------------------------------------------------------------------------- -// -// class ScanLineInputFile -// -//----------------------------------------------------------------------------- - -#include "ImfHeader.h" -#include "ImfFrameBuffer.h" -#include "ImfThreading.h" -#include "ImfInputStreamMutex.h" -#include "ImfInputPartData.h" -#include "ImfGenericInputFile.h" -#include "ImfExport.h" -#include "ImfNamespace.h" - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER - - -class ScanLineInputFile : public GenericInputFile -{ - public: - - //------------ - // Constructor - //------------ - - IMF_EXPORT - ScanLineInputFile (const Header &header, OPENEXR_IMF_INTERNAL_NAMESPACE::IStream *is, - int numThreads = globalThreadCount()); - - - //----------------------------------------- - // Destructor -- deallocates internal data - // structures, but does not close the file. - //----------------------------------------- - - IMF_EXPORT - virtual ~ScanLineInputFile (); - - - //------------------------ - // Access to the file name - //------------------------ - - IMF_EXPORT - const char * fileName () const; - - - //-------------------------- - // Access to the file header - //-------------------------- - - IMF_EXPORT - const Header & header () const; - - - //---------------------------------- - // Access to the file format version - //---------------------------------- - - IMF_EXPORT - int version () const; - - - //----------------------------------------------------------- - // Set the current frame buffer -- copies the FrameBuffer - // object into the InputFile object. - // - // The current frame buffer is the destination for the pixel - // data read from the file. The current frame buffer must be - // set at least once before readPixels() is called. - // The current frame buffer can be changed after each call - // to readPixels(). - //----------------------------------------------------------- - - IMF_EXPORT - void setFrameBuffer (const FrameBuffer &frameBuffer); - - - //----------------------------------- - // Access to the current frame buffer - //----------------------------------- - - IMF_EXPORT - const FrameBuffer & frameBuffer () const; - - - //--------------------------------------------------------------- - // Check if the file is complete: - // - // isComplete() returns true if all pixels in the data window are - // present in the input file, or false if any pixels are missing. - // (Another program may still be busy writing the file, or file - // writing may have been aborted prematurely.) - //--------------------------------------------------------------- - - IMF_EXPORT - bool isComplete () const; - - - - //--------------------------------------------------------------- - // Check if SSE optimisation is enabled - // - // Call after setFrameBuffer() to query whether optimised file decoding - // is available - decode times will be faster if returns true - // - // Optimisation depends on the framebuffer channels and channel types - // as well as the file/part channels and channel types, as well as - // whether SSE2 instruction support was detected at compile time - // - // Calling before setFrameBuffer will throw an exception - // - //--------------------------------------------------------------- - - IMF_EXPORT - bool isOptimizationEnabled () const; - - - - - //--------------------------------------------------------------- - // Read pixel data: - // - // readPixels(s1,s2) reads all scan lines with y coordinates - // in the interval [min (s1, s2), max (s1, s2)] from the file, - // and stores them in the current frame buffer. - // - // Both s1 and s2 must be within the interval - // [header().dataWindow().min.y, header.dataWindow().max.y] - // - // The scan lines can be read from the file in random order, and - // individual scan lines may be skipped or read multiple times. - // For maximum efficiency, the scan lines should be read in the - // order in which they were written to the file. - // - // readPixels(s) calls readPixels(s,s). - // - // If threading is enabled, readPixels (s1, s2) tries to perform - // decopmression of multiple scanlines in parallel. - // - //--------------------------------------------------------------- - - IMF_EXPORT - void readPixels (int scanLine1, int scanLine2); - IMF_EXPORT - void readPixels (int scanLine); - - - //---------------------------------------------- - // Read a block of raw pixel data from the file, - // without uncompressing it (this function is - // used to implement OutputFile::copyPixels()). - //---------------------------------------------- - - IMF_EXPORT - void rawPixelData (int firstScanLine, - const char *&pixelData, - int &pixelDataSize); - - - //---------------------------------------------- - // Read a scanline's worth of raw pixel data - // from the file, without uncompressing it, and - // store in an external buffer, pixelData. - // pixelData should be pre-allocated with space - // for pixelDataSize chars. - // - // This function can be used to separate the - // reading of a raw scan line from the - // decompression of that scan line, for - // example to allow multiple scan lines to be - // decompressed in parallel by an application's - // own threads, where it is not convenient to - // use the threading within the library. - //---------------------------------------------- - - IMF_EXPORT - void rawPixelDataToBuffer(int scanLine, - char *pixelData, - int &pixelDataSize) const; - - - struct Data; - - private: - - Data * _data; - - InputStreamMutex* _streamData; - - ScanLineInputFile (InputPartData* part); - - void initialize(const Header& header); - - friend class MultiPartInputFile; - friend class InputFile; -}; - - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT - - - - - -#endif diff --git a/3rdparty/openexr/IlmImf/ImfSimd.h b/3rdparty/openexr/IlmImf/ImfSimd.h deleted file mode 100644 index 908fe0ed0a..0000000000 --- a/3rdparty/openexr/IlmImf/ImfSimd.h +++ /dev/null @@ -1,68 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2012, Autodesk, Inc. -// -// All rights reserved. -// -// Implementation of IIF-specific file format and speed optimizations -// provided by Innobec Technologies inc on behalf of Autodesk. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - -#ifndef INCLUDED_IMF_SIMD_H -#define INCLUDED_IMF_SIMD_H - -// -// Compile time SSE detection: -// IMF_HAVE_SSE2 - Defined if it's safe to compile SSE2 optimizations -// IMF_HAVE_SSE4_1 - Defined if it's safe to compile SSE4.1 optimizations -// - - -// GCC and Visual Studio SSE2 compiler flags -#if defined __SSE2__ || (defined(_M_X64) || _M_IX86_FP == 2) - #define IMF_HAVE_SSE2 1 -#endif - -#if defined __SSE4_1__ - #define IMF_HAVE_SSE4_1 1 -#endif - -extern "C" -{ -#ifdef IMF_HAVE_SSE2 - #include - #include -#endif - -#ifdef IMF_HAVE_SSE4_1 - #include -#endif -} - -#endif diff --git a/3rdparty/openexr/IlmImf/ImfStandardAttributes.cpp b/3rdparty/openexr/IlmImf/ImfStandardAttributes.cpp deleted file mode 100644 index df952c2574..0000000000 --- a/3rdparty/openexr/IlmImf/ImfStandardAttributes.cpp +++ /dev/null @@ -1,125 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2003, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - -//----------------------------------------------------------------------------- -// -// Optional Standard Attributes -// -//----------------------------------------------------------------------------- - -#include - - -#define IMF_STRING(name) #name - -#define IMF_STD_ATTRIBUTE_IMP(name,suffix,type) \ - \ - void \ - add##suffix (Header &header, const type &value) \ - { \ - header.insert (IMF_STRING (name), TypedAttribute (value)); \ - } \ - \ - bool \ - has##suffix (const Header &header) \ - { \ - return header.findTypedAttribute > \ - (IMF_STRING (name)) != 0; \ - } \ - \ - const TypedAttribute & \ - name##Attribute (const Header &header) \ - { \ - return header.typedAttribute > \ - (IMF_STRING (name)); \ - } \ - \ - TypedAttribute & \ - name##Attribute (Header &header) \ - { \ - return header.typedAttribute > \ - (IMF_STRING (name)); \ - } \ - \ - const type & \ - name (const Header &header) \ - { \ - return name##Attribute(header).value(); \ - } \ - \ - type & \ - name (Header &header) \ - { \ - return name##Attribute(header).value(); \ - } - -#include "ImfNamespace.h" - -using namespace IMATH_NAMESPACE; -using namespace std; - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_ENTER - - -IMF_STD_ATTRIBUTE_IMP (chromaticities, Chromaticities, Chromaticities) -IMF_STD_ATTRIBUTE_IMP (whiteLuminance, WhiteLuminance, float) -IMF_STD_ATTRIBUTE_IMP (adoptedNeutral, AdoptedNeutral, V2f) -IMF_STD_ATTRIBUTE_IMP (renderingTransform, RenderingTransform, string) -IMF_STD_ATTRIBUTE_IMP (lookModTransform, LookModTransform, string) -IMF_STD_ATTRIBUTE_IMP (xDensity, XDensity, float) -IMF_STD_ATTRIBUTE_IMP (owner, Owner, string) -IMF_STD_ATTRIBUTE_IMP (comments, Comments, string) -IMF_STD_ATTRIBUTE_IMP (capDate, CapDate, string) -IMF_STD_ATTRIBUTE_IMP (utcOffset, UtcOffset, float) -IMF_STD_ATTRIBUTE_IMP (longitude, Longitude, float) -IMF_STD_ATTRIBUTE_IMP (latitude, Latitude, float) -IMF_STD_ATTRIBUTE_IMP (altitude, Altitude, float) -IMF_STD_ATTRIBUTE_IMP (focus, Focus, float) -IMF_STD_ATTRIBUTE_IMP (expTime, ExpTime, float) -IMF_STD_ATTRIBUTE_IMP (aperture, Aperture, float) -IMF_STD_ATTRIBUTE_IMP (isoSpeed, IsoSpeed, float) -IMF_STD_ATTRIBUTE_IMP (envmap, Envmap, Envmap) -IMF_STD_ATTRIBUTE_IMP (keyCode, KeyCode, KeyCode) -IMF_STD_ATTRIBUTE_IMP (timeCode, TimeCode, TimeCode) -IMF_STD_ATTRIBUTE_IMP (wrapmodes, Wrapmodes, string) -IMF_STD_ATTRIBUTE_IMP (framesPerSecond, FramesPerSecond, Rational) -IMF_STD_ATTRIBUTE_IMP (multiView, MultiView, StringVector) -IMF_STD_ATTRIBUTE_IMP (worldToCamera, WorldToCamera, M44f) -IMF_STD_ATTRIBUTE_IMP (worldToNDC, WorldToNDC, M44f) -IMF_STD_ATTRIBUTE_IMP (deepImageState, DeepImageState, DeepImageState) -IMF_STD_ATTRIBUTE_IMP (originalDataWindow, OriginalDataWindow, Box2i) -IMF_STD_ATTRIBUTE_IMP (dwaCompressionLevel, DwaCompressionLevel, float) - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_EXIT diff --git a/3rdparty/openexr/IlmImf/ImfStandardAttributes.h b/3rdparty/openexr/IlmImf/ImfStandardAttributes.h deleted file mode 100644 index 4280ac4c1c..0000000000 --- a/3rdparty/openexr/IlmImf/ImfStandardAttributes.h +++ /dev/null @@ -1,382 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - -#ifndef INCLUDED_IMF_STANDARD_ATTRIBUTES_H -#define INCLUDED_IMF_STANDARD_ATTRIBUTES_H - -//----------------------------------------------------------------------------- -// -// Optional Standard Attributes -- these attributes are "optional" -// because not every image file header has them, but they define a -// "standard" way to represent commonly used data in the file header. -// -// For each attribute, with name "foo", and type "T", the following -// functions are automatically generated via macros: -// -// void addFoo (Header &header, const T &value); -// bool hasFoo (const Header &header); -// const TypedAttribute & fooAttribute (const Header &header); -// TypedAttribute & fooAttribute (Header &header); -// const T & foo (const Header &Header); -// T & foo (Header &Header); -// -//----------------------------------------------------------------------------- - -#include "ImfHeader.h" -#include "ImfBoxAttribute.h" -#include "ImfChromaticitiesAttribute.h" -#include "ImfEnvmapAttribute.h" -#include "ImfDeepImageStateAttribute.h" -#include "ImfFloatAttribute.h" -#include "ImfKeyCodeAttribute.h" -#include "ImfMatrixAttribute.h" -#include "ImfRationalAttribute.h" -#include "ImfStringAttribute.h" -#include "ImfStringVectorAttribute.h" -#include "ImfTimeCodeAttribute.h" -#include "ImfVecAttribute.h" -#include "ImfNamespace.h" -#include "ImfExport.h" - -#define IMF_STD_ATTRIBUTE_DEF(name,suffix,object) \ - \ - OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER \ - IMF_EXPORT void add##suffix (Header &header, const object &v); \ - IMF_EXPORT bool has##suffix (const Header &header); \ - IMF_EXPORT const TypedAttribute & \ - name##Attribute (const Header &header); \ - IMF_EXPORT TypedAttribute & \ - name##Attribute (Header &header); \ - IMF_EXPORT const object & \ - name (const Header &header); \ - IMF_EXPORT object & name (Header &header); \ - OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT \ - -// -// chromaticities -- for RGB images, specifies the CIE (x,y) -// chromaticities of the primaries and the white point -// - -IMF_STD_ATTRIBUTE_DEF (chromaticities, Chromaticities, Chromaticities) - - -// -// whiteLuminance -- for RGB images, defines the luminance, in Nits -// (candelas per square meter) of the RGB value (1.0, 1.0, 1.0). -// -// If the chromaticities and the whiteLuminance of an RGB image are -// known, then it is possible to convert the image's pixels from RGB -// to CIE XYZ tristimulus values (see function RGBtoXYZ() in header -// file ImfChromaticities.h). -// -// - -IMF_STD_ATTRIBUTE_DEF (whiteLuminance, WhiteLuminance, float) - - -// -// adoptedNeutral -- specifies the CIE (x,y) coordinates that should -// be considered neutral during color rendering. Pixels in the image -// file whose (x,y) coordinates match the adoptedNeutral value should -// be mapped to neutral values on the display. -// - -IMF_STD_ATTRIBUTE_DEF (adoptedNeutral, AdoptedNeutral, IMATH_NAMESPACE::V2f) - - -// -// renderingTransform, lookModTransform -- specify the names of the -// CTL functions that implements the intended color rendering and look -// modification transforms for this image. -// - -IMF_STD_ATTRIBUTE_DEF (renderingTransform, RenderingTransform, std::string) -IMF_STD_ATTRIBUTE_DEF (lookModTransform, LookModTransform, std::string) - - -// -// xDensity -- horizontal output density, in pixels per inch. -// The image's vertical output density is xDensity * pixelAspectRatio. -// - -IMF_STD_ATTRIBUTE_DEF (xDensity, XDensity, float) - - -// -// owner -- name of the owner of the image -// - -IMF_STD_ATTRIBUTE_DEF (owner, Owner, std::string) - - -// -// comments -- additional image information in human-readable -// form, for example a verbal description of the image -// - -IMF_STD_ATTRIBUTE_DEF (comments, Comments, std::string) - - -// -// capDate -- the date when the image was created or captured, -// in local time, and formatted as -// -// YYYY:MM:DD hh:mm:ss -// -// where YYYY is the year (4 digits, e.g. 2003), MM is the month -// (2 digits, 01, 02, ... 12), DD is the day of the month (2 digits, -// 01, 02, ... 31), hh is the hour (2 digits, 00, 01, ... 23), mm -// is the minute, and ss is the second (2 digits, 00, 01, ... 59). -// -// - -IMF_STD_ATTRIBUTE_DEF (capDate, CapDate, std::string) - - -// -// utcOffset -- offset of local time at capDate from -// Universal Coordinated Time (UTC), in seconds: -// -// UTC == local time + utcOffset -// - -IMF_STD_ATTRIBUTE_DEF (utcOffset, UtcOffset, float) - - -// -// longitude, latitude, altitude -- for images of real objects, the -// location where the image was recorded. Longitude and latitude are -// in degrees east of Greenwich and north of the equator. Altitude -// is in meters above sea level. For example, Kathmandu, Nepal is -// at longitude 85.317, latitude 27.717, altitude 1305. -// - -IMF_STD_ATTRIBUTE_DEF (longitude, Longitude, float) -IMF_STD_ATTRIBUTE_DEF (latitude, Latitude, float) -IMF_STD_ATTRIBUTE_DEF (altitude, Altitude, float) - - -// -// focus -- the camera's focus distance, in meters -// - -IMF_STD_ATTRIBUTE_DEF (focus, Focus, float) - - -// -// exposure -- exposure time, in seconds -// - -IMF_STD_ATTRIBUTE_DEF (expTime, ExpTime, float) - - -// -// aperture -- the camera's lens aperture, in f-stops (focal length -// of the lens divided by the diameter of the iris opening) -// - -IMF_STD_ATTRIBUTE_DEF (aperture, Aperture, float) - - -// -// isoSpeed -- the ISO speed of the film or image sensor -// that was used to record the image -// - -IMF_STD_ATTRIBUTE_DEF (isoSpeed, IsoSpeed, float) - - -// -// envmap -- if this attribute is present, the image represents -// an environment map. The attribute's value defines how 3D -// directions are mapped to 2D pixel locations. For details -// see header file ImfEnvmap.h -// - -IMF_STD_ATTRIBUTE_DEF (envmap, Envmap, Envmap) - - -// -// keyCode -- for motion picture film frames. Identifies film -// manufacturer, film type, film roll and frame position within -// the roll. -// - -IMF_STD_ATTRIBUTE_DEF (keyCode, KeyCode, KeyCode) - - -// -// timeCode -- time and control code -// - -IMF_STD_ATTRIBUTE_DEF (timeCode, TimeCode, TimeCode) - - -// -// wrapmodes -- determines how texture map images are extrapolated. -// If an OpenEXR file is used as a texture map for 3D rendering, -// texture coordinates (0.0, 0.0) and (1.0, 1.0) correspond to -// the upper left and lower right corners of the data window. -// If the image is mapped onto a surface with texture coordinates -// outside the zero-to-one range, then the image must be extrapolated. -// This attribute tells the renderer how to do this extrapolation. -// The attribute contains either a pair of comma-separated keywords, -// to specify separate extrapolation modes for the horizontal and -// vertical directions; or a single keyword, to specify extrapolation -// in both directions (e.g. "clamp,periodic" or "clamp"). Extra white -// space surrounding the keywords is allowed, but should be ignored -// by the renderer ("clamp, black " is equivalent to "clamp,black"). -// The keywords listed below are predefined; some renderers may support -// additional extrapolation modes: -// -// black pixels outside the zero-to-one range are black -// -// clamp texture coordinates less than 0.0 and greater -// than 1.0 are clamped to 0.0 and 1.0 respectively -// -// periodic the texture image repeats periodically -// -// mirror the texture image repeats periodically, but -// every other instance is mirrored -// - -IMF_STD_ATTRIBUTE_DEF (wrapmodes, Wrapmodes, std::string) - - -// -// framesPerSecond -- defines the nominal playback frame rate for image -// sequences, in frames per second. Every image in a sequence should -// have a framesPerSecond attribute, and the attribute value should be -// the same for all images in the sequence. If an image sequence has -// no framesPerSecond attribute, playback software should assume that -// the frame rate for the sequence is 24 frames per second. -// -// In order to allow exact representation of NTSC frame and field rates, -// framesPerSecond is stored as a rational number. A rational number is -// a pair of integers, n and d, that represents the value n/d. -// -// For the exact values of commonly used frame rates, please see header -// file ImfFramesPerSecond.h. -// - -IMF_STD_ATTRIBUTE_DEF (framesPerSecond, FramesPerSecond, Rational) - - -// -// multiView -- defines the view names for multi-view image files. -// A multi-view image contains two or more views of the same scene, -// as seen from different viewpoints, for example a left-eye and -// a right-eye view for stereo displays. The multiView attribute -// lists the names of the views in an image, and a naming convention -// identifies the channels that belong to each view. -// -// For details, please see header file ImfMultiView.h -// - -IMF_STD_ATTRIBUTE_DEF (multiView , MultiView, StringVector) - - -// -// worldToCamera -- for images generated by 3D computer graphics rendering, -// a matrix that transforms 3D points from the world to the camera coordinate -// space of the renderer. -// -// The camera coordinate space is left-handed. Its origin indicates the -// location of the camera. The positive x and y axes correspond to the -// "right" and "up" directions in the rendered image. The positive z -// axis indicates the camera's viewing direction. (Objects in front of -// the camera have positive z coordinates.) -// -// Camera coordinate space in OpenEXR is the same as in Pixar's Renderman. -// - -IMF_STD_ATTRIBUTE_DEF (worldToCamera, WorldToCamera, IMATH_NAMESPACE::M44f) - - -// -// worldToNDC -- for images generated by 3D computer graphics rendering, a -// matrix that transforms 3D points from the world to the Normalized Device -// Coordinate (NDC) space of the renderer. -// -// NDC is a 2D coordinate space that corresponds to the image plane, with -// positive x and pointing to the right and y positive pointing down. The -// coordinates (0, 0) and (1, 1) correspond to the upper left and lower right -// corners of the OpenEXR display window. -// -// To transform a 3D point in word space into a 2D point in NDC space, -// multiply the 3D point by the worldToNDC matrix and discard the z -// coordinate. -// -// NDC space in OpenEXR is the same as in Pixar's Renderman. -// - -IMF_STD_ATTRIBUTE_DEF (worldToNDC, WorldToNDC, IMATH_NAMESPACE::M44f) - - -// -// deepImageState -- specifies whether the pixels in a deep image are -// sorted and non-overlapping. -// -// Note: this attribute can be set by application code that writes a file -// in order to tell applications that read the file whether the pixel data -// must be cleaned up prior to image processing operations such as flattening. -// The IlmImf library does not verify that the attribute is consistent with -// the actual state of the pixels. Application software may assume that the -// attribute is valid, as long as the software will not crash or lock up if -// any pixels are inconsistent with the deepImageState attribute. -// - -IMF_STD_ATTRIBUTE_DEF (deepImageState, DeepImageState, DeepImageState) - - -// -// originalDataWindow -- if application software crops an image, then it -// should save the data window of the original, un-cropped image in the -// originalDataWindow attribute. -// - -IMF_STD_ATTRIBUTE_DEF - (originalDataWindow, OriginalDataWindow, IMATH_NAMESPACE::Box2i) - - -// -// dwaCompressionLevel -- sets the quality level for images compressed -// with the DWAA or DWAB method. -// - -IMF_STD_ATTRIBUTE_DEF (dwaCompressionLevel, DwaCompressionLevel, float) - - -#endif diff --git a/3rdparty/openexr/IlmImf/ImfStdIO.cpp b/3rdparty/openexr/IlmImf/ImfStdIO.cpp deleted file mode 100644 index 91252dffd6..0000000000 --- a/3rdparty/openexr/IlmImf/ImfStdIO.cpp +++ /dev/null @@ -1,274 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.67 -// -/////////////////////////////////////////////////////////////////////////// - - -//----------------------------------------------------------------------------- -// -// Low-level file input and output for OpenEXR -// based on C++ standard iostreams. -// -//----------------------------------------------------------------------------- - -#include -#include "Iex.h" -#include -#ifdef _MSC_VER -# define VC_EXTRALEAN -# include -# include -#endif - -using namespace std; -#include "ImfNamespace.h" - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_ENTER - -namespace { - -#ifdef _MSC_VER -std::wstring WidenFilename (const char *filename) -{ - std::wstring ret; - int fnlen = static_cast( strlen(filename) ); - int len = MultiByteToWideChar(CP_UTF8, 0, filename, fnlen, NULL, 0 ); - if (len > 0) - { - ret.resize(len); - MultiByteToWideChar(CP_UTF8, 0, filename, fnlen, &ret[0], len); - } - return ret; -} -#endif - -void -clearError () -{ - errno = 0; -} - - -bool -checkError (istream &is, streamsize expected = 0) -{ - if (!is) - { - if (errno) - IEX_NAMESPACE::throwErrnoExc(); - - if (is.gcount() < expected) - { - THROW (IEX_NAMESPACE::InputExc, "Early end of file: read " << is.gcount() - << " out of " << expected << " requested bytes."); - } - return false; - } - - return true; -} - - -void -checkError (ostream &os) -{ - if (!os) - { - if (errno) - IEX_NAMESPACE::throwErrnoExc(); - - throw IEX_NAMESPACE::ErrnoExc ("File output failed."); - } -} - -} // namespace - - -StdIFStream::StdIFStream (const char fileName[]): - OPENEXR_IMF_INTERNAL_NAMESPACE::IStream (fileName), - _is (new ifstream ( -#ifdef _MSC_VER - WidenFilename(fileName).c_str(), -#else - fileName, -#endif - ios_base::binary)), - _deleteStream (true) -{ - if (!*_is) - { - delete _is; - IEX_NAMESPACE::throwErrnoExc(); - } -} - - -StdIFStream::StdIFStream (ifstream &is, const char fileName[]): - OPENEXR_IMF_INTERNAL_NAMESPACE::IStream (fileName), - _is (&is), - _deleteStream (false) -{ - // empty -} - - -StdIFStream::~StdIFStream () -{ - if (_deleteStream) - delete _is; -} - - -bool -StdIFStream::read (char c[/*n*/], int n) -{ - if (!*_is) - throw IEX_NAMESPACE::InputExc ("Unexpected end of file."); - - clearError(); - _is->read (c, n); - return checkError (*_is, n); -} - - -Int64 -StdIFStream::tellg () -{ - return std::streamoff (_is->tellg()); -} - - -void -StdIFStream::seekg (Int64 pos) -{ - _is->seekg (pos); - checkError (*_is); -} - - -void -StdIFStream::clear () -{ - _is->clear(); -} - - -StdOFStream::StdOFStream (const char fileName[]): - OPENEXR_IMF_INTERNAL_NAMESPACE::OStream (fileName), - _os (new ofstream ( -#ifdef _MSC_VER - WidenFilename(fileName).c_str(), -#else - fileName, -#endif - ios_base::binary)), - _deleteStream (true) -{ - if (!*_os) - { - delete _os; - IEX_NAMESPACE::throwErrnoExc(); - } -} - - -StdOFStream::StdOFStream (ofstream &os, const char fileName[]): - OPENEXR_IMF_INTERNAL_NAMESPACE::OStream (fileName), - _os (&os), - _deleteStream (false) -{ - // empty -} - - -StdOFStream::~StdOFStream () -{ - if (_deleteStream) - delete _os; -} - - -void -StdOFStream::write (const char c[/*n*/], int n) -{ - clearError(); - _os->write (c, n); - checkError (*_os); -} - - -Int64 -StdOFStream::tellp () -{ - return std::streamoff (_os->tellp()); -} - - -void -StdOFStream::seekp (Int64 pos) -{ - _os->seekp (pos); - checkError (*_os); -} - - -StdOSStream::StdOSStream (): OPENEXR_IMF_INTERNAL_NAMESPACE::OStream ("(string)") -{ - // empty -} - - -void -StdOSStream::write (const char c[/*n*/], int n) -{ - clearError(); - _os.write (c, n); - checkError (_os); -} - - -Int64 -StdOSStream::tellp () -{ - return std::streamoff (_os.tellp()); -} - - -void -StdOSStream::seekp (Int64 pos) -{ - _os.seekp (pos); - checkError (_os); -} - - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_EXIT diff --git a/3rdparty/openexr/IlmImf/ImfStdIO.h b/3rdparty/openexr/IlmImf/ImfStdIO.h deleted file mode 100644 index 24c7cb5007..0000000000 --- a/3rdparty/openexr/IlmImf/ImfStdIO.h +++ /dev/null @@ -1,178 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - -#ifndef INCLUDED_IMF_STD_IO_H -#define INCLUDED_IMF_STD_IO_H - -//----------------------------------------------------------------------------- -// -// Low-level file input and output for OpenEXR -// based on C++ standard iostreams. -// -//----------------------------------------------------------------------------- - -#include "ImfIO.h" -#include "ImfNamespace.h" -#include "ImfExport.h" - -#include -#include - - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER - -//------------------------------------------- -// class StdIFStream -- an implementation of -// class OPENEXR_IMF_INTERNAL_NAMESPACE::IStream based on class std::ifstream -//------------------------------------------- - -class StdIFStream: public OPENEXR_IMF_INTERNAL_NAMESPACE::IStream -{ - public: - - //------------------------------------------------------- - // A constructor that opens the file with the given name. - // The destructor will close the file. - //------------------------------------------------------- - - IMF_EXPORT - StdIFStream (const char fileName[]); - - - //--------------------------------------------------------- - // A constructor that uses a std::ifstream that has already - // been opened by the caller. The StdIFStream's destructor - // will not close the std::ifstream. - //--------------------------------------------------------- - - IMF_EXPORT - StdIFStream (std::ifstream &is, const char fileName[]); - - - IMF_EXPORT - virtual ~StdIFStream (); - - IMF_EXPORT - virtual bool read (char c[/*n*/], int n); - IMF_EXPORT - virtual Int64 tellg (); - IMF_EXPORT - virtual void seekg (Int64 pos); - IMF_EXPORT - virtual void clear (); - - private: - - std::ifstream * _is; - bool _deleteStream; -}; - - -//------------------------------------------- -// class StdOFStream -- an implementation of -// class OPENEXR_IMF_INTERNAL_NAMESPACE::OStream based on class std::ofstream -//------------------------------------------- - -class StdOFStream: public OPENEXR_IMF_INTERNAL_NAMESPACE::OStream -{ - public: - - //------------------------------------------------------- - // A constructor that opens the file with the given name. - // The destructor will close the file. - //------------------------------------------------------- - - IMF_EXPORT - StdOFStream (const char fileName[]); - - - //--------------------------------------------------------- - // A constructor that uses a std::ofstream that has already - // been opened by the caller. The StdOFStream's destructor - // will not close the std::ofstream. - //--------------------------------------------------------- - - IMF_EXPORT - StdOFStream (std::ofstream &os, const char fileName[]); - - - IMF_EXPORT - virtual ~StdOFStream (); - - IMF_EXPORT - virtual void write (const char c[/*n*/], int n); - IMF_EXPORT - virtual Int64 tellp (); - IMF_EXPORT - virtual void seekp (Int64 pos); - - private: - - std::ofstream * _os; - bool _deleteStream; -}; - - -//------------------------------------------------ -// class StdOSStream -- an implementation of class -// OPENEXR_IMF_INTERNAL_NAMESPACE::OStream, based on class std::ostringstream -//------------------------------------------------ - -class StdOSStream: public OPENEXR_IMF_INTERNAL_NAMESPACE::OStream -{ - public: - - IMF_EXPORT - StdOSStream (); - - IMF_EXPORT - virtual void write (const char c[/*n*/], int n); - IMF_EXPORT - virtual Int64 tellp (); - IMF_EXPORT - virtual void seekp (Int64 pos); - - IMF_EXPORT - std::string str () const {return _os.str();} - - private: - - std::ostringstream _os; -}; - - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT - -#endif diff --git a/3rdparty/openexr/IlmImf/ImfStringAttribute.cpp b/3rdparty/openexr/IlmImf/ImfStringAttribute.cpp deleted file mode 100644 index cd241bacd4..0000000000 --- a/3rdparty/openexr/IlmImf/ImfStringAttribute.cpp +++ /dev/null @@ -1,80 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - - -//----------------------------------------------------------------------------- -// -// class StringAttribute -// -//----------------------------------------------------------------------------- - -#include - - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_ENTER - -using namespace OPENEXR_IMF_INTERNAL_NAMESPACE; - -template <> -const char * -StringAttribute::staticTypeName () -{ - return "string"; -} - - -template <> -void -StringAttribute::writeValueTo (OPENEXR_IMF_INTERNAL_NAMESPACE::OStream &os, int version) const -{ - int size = _value.size(); - - for (int i = 0; i < size; i++) - Xdr::write (os, _value[i]); -} - - -template <> -void -StringAttribute::readValueFrom (OPENEXR_IMF_INTERNAL_NAMESPACE::IStream &is, int size, int version) -{ - _value.resize (size); - - for (int i = 0; i < size; i++) - Xdr::read (is, _value[i]); -} - - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_EXIT diff --git a/3rdparty/openexr/IlmImf/ImfStringAttribute.h b/3rdparty/openexr/IlmImf/ImfStringAttribute.h deleted file mode 100644 index f5d62d7b0b..0000000000 --- a/3rdparty/openexr/IlmImf/ImfStringAttribute.h +++ /dev/null @@ -1,71 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - - -#ifndef INCLUDED_IMF_STRING_ATTRIBUTE_H -#define INCLUDED_IMF_STRING_ATTRIBUTE_H - -//----------------------------------------------------------------------------- -// -// class StringAttribute -// -//----------------------------------------------------------------------------- - -#include "ImfAttribute.h" -#include - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER - - -typedef TypedAttribute StringAttribute; - -template <> -IMF_EXPORT -const char *StringAttribute::staticTypeName (); - -template <> -IMF_EXPORT -void StringAttribute::writeValueTo (OPENEXR_IMF_INTERNAL_NAMESPACE::OStream &, - int) const; - -template <> -IMF_EXPORT -void StringAttribute::readValueFrom (OPENEXR_IMF_INTERNAL_NAMESPACE::IStream &, - int, int); - - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT - -#endif diff --git a/3rdparty/openexr/IlmImf/ImfStringVectorAttribute.cpp b/3rdparty/openexr/IlmImf/ImfStringVectorAttribute.cpp deleted file mode 100644 index 88fdf8e8c1..0000000000 --- a/3rdparty/openexr/IlmImf/ImfStringVectorAttribute.cpp +++ /dev/null @@ -1,100 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2007, Weta Digital Ltd -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Weta Digital nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - -//----------------------------------------------------------------------------- -// -// class StringVectorAttribute -// -//----------------------------------------------------------------------------- - -#include - - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_ENTER - - -using namespace OPENEXR_IMF_INTERNAL_NAMESPACE; - - -template <> -const char * -StringVectorAttribute::staticTypeName () -{ - return "stringvector"; -} - - -template <> -void -StringVectorAttribute::writeValueTo (OPENEXR_IMF_INTERNAL_NAMESPACE::OStream &os, int version) const -{ - int size = _value.size(); - - for (int i = 0; i < size; i++) - { - int strSize = _value[i].size(); - Xdr::write (os, strSize); - Xdr::write (os, &_value[i][0], strSize); - } -} - - -template <> -void -StringVectorAttribute::readValueFrom (OPENEXR_IMF_INTERNAL_NAMESPACE::IStream &is, int size, int version) -{ - int read = 0; - - while (read < size) - { - int strSize; - Xdr::read (is, strSize); - read += Xdr::size(); - - std::string str; - str.resize (strSize); - - if( strSize>0 ) - { - Xdr::read (is, &str[0], strSize); - } - - read += strSize; - - _value.push_back (str); - } -} - - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_EXIT diff --git a/3rdparty/openexr/IlmImf/ImfStringVectorAttribute.h b/3rdparty/openexr/IlmImf/ImfStringVectorAttribute.h deleted file mode 100644 index d13ef96cb1..0000000000 --- a/3rdparty/openexr/IlmImf/ImfStringVectorAttribute.h +++ /dev/null @@ -1,74 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2007, Weta Digital Ltd -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Weta Digital nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - - -#ifndef INCLUDED_IMF_STRINGVECTOR_ATTRIBUTE_H -#define INCLUDED_IMF_STRINGVECTOR_ATTRIBUTE_H - -//----------------------------------------------------------------------------- -// -// class StringVectorAttribute -// -//----------------------------------------------------------------------------- - -#include "ImfAttribute.h" -#include "ImfNamespace.h" - -#include -#include - - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER - -typedef std::vector StringVector; -typedef TypedAttribute StringVectorAttribute; - -template <> -IMF_EXPORT -const char *StringVectorAttribute::staticTypeName (); - -template <> -IMF_EXPORT -void StringVectorAttribute::writeValueTo (OPENEXR_IMF_INTERNAL_NAMESPACE::OStream &, - int) const; - -template <> -IMF_EXPORT -void StringVectorAttribute::readValueFrom (OPENEXR_IMF_INTERNAL_NAMESPACE::IStream &, - int, int); - - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT - -#endif diff --git a/3rdparty/openexr/IlmImf/ImfSystemSpecific.cpp b/3rdparty/openexr/IlmImf/ImfSystemSpecific.cpp deleted file mode 100644 index fe1d8a20be..0000000000 --- a/3rdparty/openexr/IlmImf/ImfSystemSpecific.cpp +++ /dev/null @@ -1,138 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2009-2014 DreamWorks Animation LLC. -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of DreamWorks Animation nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - -#include "ImfSimd.h" -#include "ImfSystemSpecific.h" -#include "ImfNamespace.h" -#include "OpenEXRConfig.h" - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_ENTER - -namespace { -#if defined(IMF_HAVE_SSE2) && defined(__GNUC__) && !defined(__ANDROID__) - - // Helper functions for gcc + SSE enabled - void cpuid(int n, int &eax, int &ebx, int &ecx, int &edx) - { - __asm__ __volatile__ ( - "cpuid" - : /* Output */ "=a"(eax), "=b"(ebx), "=c"(ecx), "=d"(edx) - : /* Input */ "a"(n) - : /* Clobber */); - } - -#else // IMF_HAVE_SSE2 && __GNUC__ - - // Helper functions for generic compiler - all disabled - void cpuid(int n, int &eax, int &ebx, int &ecx, int &edx) - { - eax = ebx = ecx = edx = 0; - } - -#endif // IMF_HAVE_SSE2 && __GNUC__ - - -#ifdef OPENEXR_IMF_HAVE_GCC_INLINE_ASM_AVX - - void xgetbv(int n, int &eax, int &edx) - { - __asm__ __volatile__ ( - "xgetbv" - : /* Output */ "=a"(eax), "=d"(edx) - : /* Input */ "c"(n) - : /* Clobber */); - } - -#else // OPENEXR_IMF_HAVE_GCC_INLINE_ASM_AVX - - void xgetbv(int n, int &eax, int &edx) - { - eax = edx = 0; - } - -#endif // OPENEXR_IMF_HAVE_GCC_INLINE_ASM_AVX - -} // namespace - -CpuId::CpuId(): - sse2(false), - sse3(false), - ssse3(false), - sse4_1(false), - sse4_2(false), - avx(false), - f16c(false) -{ - bool osxsave = false; - int max = 0; - int eax, ebx, ecx, edx; - - cpuid(0, max, ebx, ecx, edx); - if (max > 0) - { - cpuid(1, eax, ebx, ecx, edx); - sse2 = ( edx & (1<<26) ); - sse3 = ( ecx & (1<< 0) ); - ssse3 = ( ecx & (1<< 9) ); - sse4_1 = ( ecx & (1<<19) ); - sse4_2 = ( ecx & (1<<20) ); - osxsave = ( ecx & (1<<27) ); - avx = ( ecx & (1<<28) ); - f16c = ( ecx & (1<<29) ); - - if (!osxsave) - { - avx = f16c = false; - } - else - { - xgetbv(0, eax, edx); - // eax bit 1 - SSE managed, bit 2 - AVX managed - if ((eax & 6) != 6) - { - avx = f16c = false; - } - } - } - -#if defined(IMF_HAVE_SSE2) && defined(__ANDROID__) - sse2 = true; - sse3 = true; -#ifdef __x86_64__ - ssse3 = true; - sse4_1 = true; -#endif -#endif -} - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_EXIT diff --git a/3rdparty/openexr/IlmImf/ImfSystemSpecific.h b/3rdparty/openexr/IlmImf/ImfSystemSpecific.h deleted file mode 100644 index ad6b6197e9..0000000000 --- a/3rdparty/openexr/IlmImf/ImfSystemSpecific.h +++ /dev/null @@ -1,183 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2012, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - -#ifndef INCLUDED_IMF_COMPILER_SPECIFIC_H -#define INCLUDED_IMF_COMPILER_SPECIFIC_H - -#include "ImfNamespace.h" -#include "ImfSimd.h" -#include -#include "ImfExport.h" - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER - - -static unsigned long systemEndianCheckValue = 0x12345678; -static unsigned long* systemEndianCheckPointer = &systemEndianCheckValue; - -// EXR files are little endian - check processor architecture is too -// (optimisation currently not supported for big endian machines) -static bool GLOBAL_SYSTEM_LITTLE_ENDIAN = - (*(unsigned char*)systemEndianCheckPointer == 0x78 ? true : false); - - -#ifdef IMF_HAVE_SSE2 - -#if defined(__GNUC__) -// Causes issues on certain gcc versions -//#define EXR_FORCEINLINE inline __attribute__((always_inline)) -#define EXR_FORCEINLINE inline -#define EXR_RESTRICT __restrict - -static void* EXRAllocAligned(size_t size, size_t alignment) -{ - // GNUC is used for things like mingw to (cross-)compile for windows -#ifdef _WIN32 - return _aligned_malloc(size, alignment); -#elif defined(__ANDROID__) - return memalign(alignment, size); -#else - void* ptr = 0; - posix_memalign(&ptr, alignment, size); - return ptr; -#endif -} - - -static void EXRFreeAligned(void* ptr) -{ -#ifdef _WIN32 - _aligned_free(ptr); -#else - free(ptr); -#endif -} - -#elif defined _MSC_VER - -#define EXR_FORCEINLINE __forceinline -#define EXR_RESTRICT __restrict - -static void* EXRAllocAligned(size_t size, size_t alignment) -{ - return _aligned_malloc(size, alignment); -} - - -static void EXRFreeAligned(void* ptr) -{ - _aligned_free(ptr); -} - -#elif defined (__INTEL_COMPILER) || \ - defined(__ICL) || \ - defined(__ICC) || \ - defined(__ECC) - -#define EXR_FORCEINLINE inline -#define EXR_RESTRICT restrict - -static void* EXRAllocAligned(size_t size, size_t alignment) -{ - return _mm_malloc(size, alignment); -} - - -static void EXRFreeAligned(void* ptr) -{ - _mm_free(ptr); -} - -#else - -// generic compiler -#define EXR_FORCEINLINE inline -#define EXR_RESTRICT - -static void* EXRAllocAligned(size_t size, size_t alignment) -{ - return malloc(size); -} - - -static void EXRFreeAligned(void* ptr) -{ - free(ptr); -} - -#endif // compiler switch - - -#else // IMF_HAVE_SSE2 - - -#define EXR_FORCEINLINE inline -#define EXR_RESTRICT - -static void* EXRAllocAligned(size_t size, size_t alignment) -{ - return malloc(size); -} - - -static void EXRFreeAligned(void* ptr) -{ - free(ptr); -} - - -#endif // IMF_HAVE_SSE2 - -// -// Simple CPUID based runtime detection of various capabilities -// -class IMF_EXPORT CpuId -{ - public: - CpuId(); - - bool sse2; - bool sse3; - bool ssse3; - bool sse4_1; - bool sse4_2; - bool avx; - bool f16c; -}; - - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT - - -#endif //include guard diff --git a/3rdparty/openexr/IlmImf/ImfTestFile.cpp b/3rdparty/openexr/IlmImf/ImfTestFile.cpp deleted file mode 100644 index 198a4d5364..0000000000 --- a/3rdparty/openexr/IlmImf/ImfTestFile.cpp +++ /dev/null @@ -1,216 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - -//----------------------------------------------------------------------------- -// -// Utility routines to test quickly if a given -// file is an OpenEXR file, and whether the -// file is scanline-based or tiled. -// -//----------------------------------------------------------------------------- - - -#include -#include -#include -#include -#include "ImfNamespace.h" - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_ENTER - - -bool -isOpenExrFile - (const char fileName[], - bool &tiled, - bool &deep, - bool &multiPart) -{ - try - { - StdIFStream is (fileName); - - int magic, version; - Xdr::read (is, magic); - Xdr::read (is, version); - - tiled = isTiled (version); - deep = isNonImage (version); - multiPart = isMultiPart (version); - return magic == MAGIC; - } - catch (...) - { - tiled = false; - return false; - } -} - - -bool -isOpenExrFile (const char fileName[], bool &tiled, bool &deep) -{ - bool multiPart; - return isOpenExrFile (fileName, tiled, deep, multiPart); -} - - -bool -isOpenExrFile (const char fileName[], bool &tiled) -{ - bool deep, multiPart; - return isOpenExrFile (fileName, tiled, deep, multiPart); -} - - -bool -isOpenExrFile (const char fileName[]) -{ - bool tiled, deep, multiPart; - return isOpenExrFile (fileName, tiled, deep, multiPart); -} - - -bool -isTiledOpenExrFile (const char fileName[]) -{ - bool exr, tiled, deep, multiPart; - exr = isOpenExrFile (fileName, tiled, deep, multiPart); - return exr && tiled; -} - - -bool -isDeepOpenExrFile (const char fileName[]) -{ - bool exr, tiled, deep, multiPart; - exr = isOpenExrFile (fileName, tiled, deep, multiPart); - return exr && deep; -} - - -bool -isMultiPartOpenExrFile (const char fileName[]) -{ - bool exr, tiled, deep, multiPart; - exr = isOpenExrFile (fileName, tiled, deep, multiPart); - return exr && multiPart; -} - - -bool -isOpenExrFile - (IStream &is, - bool &tiled, - bool &deep, - bool &multiPart) -{ - try - { - Int64 pos = is.tellg(); - - if (pos != 0) - is.seekg (0); - - int magic, version; - Xdr::read (is, magic); - Xdr::read (is, version); - - is.seekg (pos); - - tiled = isTiled (version); - deep = isNonImage (version); - multiPart = isMultiPart (version); - return magic == MAGIC; - } - catch (...) - { - is.clear(); - tiled = false; - return false; - } -} - - -bool -isOpenExrFile (IStream &is, bool &tiled, bool &deep) -{ - bool multiPart; - return isOpenExrFile (is, tiled, deep, multiPart); -} - - -bool -isOpenExrFile (IStream &is, bool &tiled) -{ - bool deep, multiPart; - return isOpenExrFile (is, tiled, deep, multiPart); -} - - -bool -isOpenExrFile (OPENEXR_IMF_INTERNAL_NAMESPACE::IStream &is) -{ - bool tiled, deep, multiPart; - return isOpenExrFile (is, tiled, deep, multiPart); -} - - -bool -isTiledOpenExrFile (OPENEXR_IMF_INTERNAL_NAMESPACE::IStream &is) -{ - bool exr, tiled, deep, multiPart; - exr = isOpenExrFile (is, tiled, deep, multiPart); - return exr && tiled; -} - - -bool -isDeepOpenExrFile (OPENEXR_IMF_INTERNAL_NAMESPACE::IStream &is) -{ - bool exr, tiled, deep, multiPart; - exr = isOpenExrFile (is, tiled, deep, multiPart); - return exr && deep; -} - - -bool -isMultiPartOpenExrFile (OPENEXR_IMF_INTERNAL_NAMESPACE::IStream &is) -{ - bool exr, tiled, deep, multiPart; - exr = isOpenExrFile (is, tiled, deep, multiPart); - return exr && multiPart; -} - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_EXIT diff --git a/3rdparty/openexr/IlmImf/ImfTestFile.h b/3rdparty/openexr/IlmImf/ImfTestFile.h deleted file mode 100644 index d02d3bc742..0000000000 --- a/3rdparty/openexr/IlmImf/ImfTestFile.h +++ /dev/null @@ -1,97 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - -#ifndef INCLUDED_IMF_TEST_FILE_H -#define INCLUDED_IMF_TEST_FILE_H - -//----------------------------------------------------------------------------- -// -// Utility routines to test quickly if a given -// file is an OpenEXR file, and whether the -// file is scanline-based or tiled. -// -//----------------------------------------------------------------------------- - -#include "ImfForward.h" -#include "ImfExport.h" -#include "ImfNamespace.h" - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER - - -IMF_EXPORT bool isOpenExrFile (const char fileName[]); - -IMF_EXPORT bool isOpenExrFile (const char fileName[], - bool &isTiled); - -IMF_EXPORT bool isOpenExrFile (const char fileName[], - bool &isTiled, - bool &isDeep); - -IMF_EXPORT bool isOpenExrFile (const char fileName[], - bool &isTiled, - bool &isDeep, - bool &isMultiPart); - -IMF_EXPORT bool isTiledOpenExrFile (const char fileName[]); - -IMF_EXPORT bool isDeepOpenExrFile (const char fileName[]); - -IMF_EXPORT bool isMultiPartOpenExrFile (const char fileName[]); - -IMF_EXPORT bool isOpenExrFile (IStream &is); - -IMF_EXPORT bool isOpenExrFile (IStream &is, - bool &isTiled); - -IMF_EXPORT bool isOpenExrFile (IStream &is, - bool &isTiled, - bool &isDeep); - -IMF_EXPORT bool isOpenExrFile (IStream &is, - bool &isTiled, - bool &isDeep, - bool &isMultiPart); - -IMF_EXPORT bool isTiledOpenExrFile (IStream &is); - -IMF_EXPORT bool isDeepOpenExrFile (IStream &is); - -IMF_EXPORT bool isMultiPartOpenExrFile (IStream &is); - - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT - -#endif diff --git a/3rdparty/openexr/IlmImf/ImfThreading.cpp b/3rdparty/openexr/IlmImf/ImfThreading.cpp deleted file mode 100644 index a3cf3839c2..0000000000 --- a/3rdparty/openexr/IlmImf/ImfThreading.cpp +++ /dev/null @@ -1,62 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2005, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - -//----------------------------------------------------------------------------- -// -// Threading support for the IlmImf library -// -//----------------------------------------------------------------------------- - -#include "ImfThreading.h" -#include "IlmThreadPool.h" -#include "ImfNamespace.h" - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_ENTER - - -int -globalThreadCount () -{ - return ILMTHREAD_NAMESPACE::ThreadPool::globalThreadPool().numThreads(); -} - - -void -setGlobalThreadCount (int count) -{ - ILMTHREAD_NAMESPACE::ThreadPool::globalThreadPool().setNumThreads (count); -} - - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_EXIT diff --git a/3rdparty/openexr/IlmImf/ImfThreading.h b/3rdparty/openexr/IlmImf/ImfThreading.h deleted file mode 100644 index 4d1db040d5..0000000000 --- a/3rdparty/openexr/IlmImf/ImfThreading.h +++ /dev/null @@ -1,95 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2005, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - -#ifndef INCLUDED_IMF_THREADING_H -#define INCLUDED_IMF_THREADING_H - -#include "ImfExport.h" -#include "ImfNamespace.h" - -//----------------------------------------------------------------------------- -// -// Threading support for the IlmImf library -// -// The IlmImf library uses threads to perform reading and writing -// of OpenEXR files in parallel. The thread that calls the library -// always performs the actual file IO (this is usually the main -// application thread) whereas a several worker threads perform -// data compression and decompression. The number of worker -// threads can be any non-negative value (a value of zero reverts -// to single-threaded operation). As long as there is at least -// one worker thread, file IO and compression can potentially be -// done concurrently through pinelining. If there are two or more -// worker threads, then pipelining as well as concurrent compression -// of multiple blocks can be performed. -// -// Threading in the Imf library is controllable at two granularities: -// -// * The functions in this file query and control the total number -// of worker threads, which will be created globally for the whole -// library. Regardless of how many input or output files are -// opened simultaneously, the library will use at most this number -// of worker threads to perform all work. The default number of -// global worker threads is zero (i.e. single-threaded operation; -// everything happens in the thread that calls the library). -// -// * Furthermore, it is possible to set the number of threads that -// each input or output file should keep busy. This number can -// be explicitly set for each file. The default behavior is for -// each file to try to occupy all worker threads in the library's -// thread pool. -// -//----------------------------------------------------------------------------- - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER - - -//----------------------------------------------------------------------------- -// Return the number of Imf-global worker threads used for parallel -// compression and decompression of OpenEXR files. -//----------------------------------------------------------------------------- - -IMF_EXPORT int globalThreadCount (); - - -//----------------------------------------------------------------------------- -// Change the number of Imf-global worker threads -//----------------------------------------------------------------------------- - -IMF_EXPORT void setGlobalThreadCount (int count); - - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT - -#endif diff --git a/3rdparty/openexr/IlmImf/ImfTileDescription.h b/3rdparty/openexr/IlmImf/ImfTileDescription.h deleted file mode 100644 index 7b219c8445..0000000000 --- a/3rdparty/openexr/IlmImf/ImfTileDescription.h +++ /dev/null @@ -1,107 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - -#ifndef INCLUDED_IMF_TILE_DESCRIPTION_H -#define INCLUDED_IMF_TILE_DESCRIPTION_H - -//----------------------------------------------------------------------------- -// -// class TileDescription and enum LevelMode -// -//----------------------------------------------------------------------------- -#include "ImfNamespace.h" - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER - - -enum LevelMode -{ - ONE_LEVEL = 0, - MIPMAP_LEVELS = 1, - RIPMAP_LEVELS = 2, - - NUM_LEVELMODES // number of different level modes -}; - - -enum LevelRoundingMode -{ - ROUND_DOWN = 0, - ROUND_UP = 1, - - NUM_ROUNDINGMODES // number of different rounding modes -}; - - -class TileDescription -{ - public: - - unsigned int xSize; // size of a tile in the x dimension - unsigned int ySize; // size of a tile in the y dimension - LevelMode mode; - LevelRoundingMode roundingMode; - - TileDescription (unsigned int xs = 32, - unsigned int ys = 32, - LevelMode m = ONE_LEVEL, - LevelRoundingMode r = ROUND_DOWN) - : - xSize (xs), - ySize (ys), - mode (m), - roundingMode (r) - { - // empty - } - - bool - operator == (const TileDescription &other) const - { - return xSize == other.xSize && - ySize == other.ySize && - mode == other.mode && - roundingMode == other.roundingMode; - } -}; - - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT - - - - - -#endif diff --git a/3rdparty/openexr/IlmImf/ImfTileDescriptionAttribute.cpp b/3rdparty/openexr/IlmImf/ImfTileDescriptionAttribute.cpp deleted file mode 100644 index 18aead598e..0000000000 --- a/3rdparty/openexr/IlmImf/ImfTileDescriptionAttribute.cpp +++ /dev/null @@ -1,86 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - -//----------------------------------------------------------------------------- -// -// class TileDescriptionAttribute -// -//----------------------------------------------------------------------------- - -#include - - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_ENTER - -using namespace OPENEXR_IMF_INTERNAL_NAMESPACE; - -template <> -const char * -TileDescriptionAttribute::staticTypeName () -{ - return "tiledesc"; -} - - -template <> -void -TileDescriptionAttribute::writeValueTo (OPENEXR_IMF_INTERNAL_NAMESPACE::OStream &os, int version) const -{ - Xdr::write (os, _value.xSize); - Xdr::write (os, _value.ySize); - - unsigned char tmp = _value.mode | (_value.roundingMode << 4); - Xdr::write (os, tmp); -} - - -template <> -void -TileDescriptionAttribute::readValueFrom (OPENEXR_IMF_INTERNAL_NAMESPACE::IStream &is, - int size, - int version) -{ - Xdr::read (is, _value.xSize); - Xdr::read (is, _value.ySize); - - unsigned char tmp; - Xdr::read (is, tmp); - _value.mode = LevelMode (tmp & 0x0f); - _value.roundingMode = LevelRoundingMode ((tmp >> 4) & 0x0f); - -} - - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_EXIT diff --git a/3rdparty/openexr/IlmImf/ImfTileDescriptionAttribute.h b/3rdparty/openexr/IlmImf/ImfTileDescriptionAttribute.h deleted file mode 100644 index a8b69b9200..0000000000 --- a/3rdparty/openexr/IlmImf/ImfTileDescriptionAttribute.h +++ /dev/null @@ -1,72 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - -#ifndef INCLUDED_IMF_TILE_DESCRIPTION_ATTRIBUTE_H -#define INCLUDED_IMF_TILE_DESCRIPTION_ATTRIBUTE_H - -//----------------------------------------------------------------------------- -// -// class TileDescriptionAttribute -// -//----------------------------------------------------------------------------- - -#include "ImfAttribute.h" -#include "ImfTileDescription.h" - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER - -typedef TypedAttribute TileDescriptionAttribute; - -template <> -IMF_EXPORT -const char * -TileDescriptionAttribute::staticTypeName (); - -template <> -IMF_EXPORT -void -TileDescriptionAttribute::writeValueTo (OPENEXR_IMF_INTERNAL_NAMESPACE::OStream &, - int) const; - -template <> -IMF_EXPORT -void -TileDescriptionAttribute::readValueFrom (OPENEXR_IMF_INTERNAL_NAMESPACE::IStream &, - int, int); - - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT - -#endif diff --git a/3rdparty/openexr/IlmImf/ImfTileOffsets.cpp b/3rdparty/openexr/IlmImf/ImfTileOffsets.cpp deleted file mode 100644 index b0b40f637c..0000000000 --- a/3rdparty/openexr/IlmImf/ImfTileOffsets.cpp +++ /dev/null @@ -1,552 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - -//----------------------------------------------------------------------------- -// -// class TileOffsets -// -//----------------------------------------------------------------------------- - -#include -#include -#include -#include "Iex.h" -#include "ImfNamespace.h" -#include - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_ENTER - - -TileOffsets::TileOffsets (LevelMode mode, - int numXLevels, int numYLevels, - const int *numXTiles, const int *numYTiles) -: - _mode (mode), - _numXLevels (numXLevels), - _numYLevels (numYLevels) -{ - switch (_mode) - { - case ONE_LEVEL: - case MIPMAP_LEVELS: - - _offsets.resize (_numXLevels); - - for (unsigned int l = 0; l < _offsets.size(); ++l) - { - _offsets[l].resize (numYTiles[l]); - - for (unsigned int dy = 0; dy < _offsets[l].size(); ++dy) - { - _offsets[l][dy].resize (numXTiles[l]); - } - } - break; - - case RIPMAP_LEVELS: - - _offsets.resize (_numXLevels * _numYLevels); - - for (int ly = 0; ly < _numYLevels; ++ly) - { - for (int lx = 0; lx < _numXLevels; ++lx) - { - int l = ly * _numXLevels + lx; - _offsets[l].resize (numYTiles[ly]); - - for (size_t dy = 0; dy < _offsets[l].size(); ++dy) - { - _offsets[l][dy].resize (numXTiles[lx]); - } - } - } - break; - - case NUM_LEVELMODES : - throw IEX_NAMESPACE::ArgExc("Bad initialisation of TileOffsets object"); - } -} - - -bool -TileOffsets::anyOffsetsAreInvalid () const -{ - for (unsigned int l = 0; l < _offsets.size(); ++l) - for (unsigned int dy = 0; dy < _offsets[l].size(); ++dy) - for (unsigned int dx = 0; dx < _offsets[l][dy].size(); ++dx) - if (_offsets[l][dy][dx] <= 0) - return true; - - return false; -} - - -void -TileOffsets::findTiles (OPENEXR_IMF_INTERNAL_NAMESPACE::IStream &is, bool isMultiPartFile, bool isDeep, bool skipOnly) -{ - for (unsigned int l = 0; l < _offsets.size(); ++l) - { - for (unsigned int dy = 0; dy < _offsets[l].size(); ++dy) - { - for (unsigned int dx = 0; dx < _offsets[l][dy].size(); ++dx) - { - Int64 tileOffset = is.tellg(); - - if (isMultiPartFile) - { - int partNumber; - OPENEXR_IMF_INTERNAL_NAMESPACE::Xdr::read (is, partNumber); - } - - int tileX; - OPENEXR_IMF_INTERNAL_NAMESPACE::Xdr::read (is, tileX); - - int tileY; - OPENEXR_IMF_INTERNAL_NAMESPACE::Xdr::read (is, tileY); - - int levelX; - OPENEXR_IMF_INTERNAL_NAMESPACE::Xdr::read (is, levelX); - - int levelY; - OPENEXR_IMF_INTERNAL_NAMESPACE::Xdr::read (is, levelY); - - if(isDeep) - { - Int64 packed_offset_table_size; - Int64 packed_sample_size; - - OPENEXR_IMF_INTERNAL_NAMESPACE::Xdr::read (is, packed_offset_table_size); - OPENEXR_IMF_INTERNAL_NAMESPACE::Xdr::read (is, packed_sample_size); - - // next Int64 is unpacked sample size - skip that too - Xdr::skip (is, packed_offset_table_size+packed_sample_size+8); - - }else{ - - int dataSize; - OPENEXR_IMF_INTERNAL_NAMESPACE::Xdr::read (is, dataSize); - - Xdr::skip (is, dataSize); - } - if (skipOnly) continue; - - if (!isValidTile(tileX, tileY, levelX, levelY)) - return; - - operator () (tileX, tileY, levelX, levelY) = tileOffset; - } - } - } -} - - -void -TileOffsets::reconstructFromFile (OPENEXR_IMF_INTERNAL_NAMESPACE::IStream &is,bool isMultiPart,bool isDeep) -{ - // - // Try to reconstruct a missing tile offset table by sequentially - // scanning through the file, and recording the offsets in the file - // of the tiles we find. - // - - Int64 position = is.tellg(); - - try - { - findTiles (is,isMultiPart,isDeep,false); - } - catch (...) - { - // - // Suppress all exceptions. This function is called only to - // reconstruct the tile offset table for incomplete files, - // and exceptions are likely. - // - } - - is.clear(); - is.seekg (position); -} - - -void -TileOffsets::readFrom (OPENEXR_IMF_INTERNAL_NAMESPACE::IStream &is, bool &complete,bool isMultiPartFile, bool isDeep) -{ - // - // Read in the tile offsets from the file's tile offset table - // - - for (unsigned int l = 0; l < _offsets.size(); ++l) - for (unsigned int dy = 0; dy < _offsets[l].size(); ++dy) - for (unsigned int dx = 0; dx < _offsets[l][dy].size(); ++dx) - OPENEXR_IMF_INTERNAL_NAMESPACE::Xdr::read (is, _offsets[l][dy][dx]); - - // - // Check if any tile offsets are invalid. - // - // Invalid offsets mean that the file is probably incomplete - // (the offset table is the last thing written to the file). - // Either some process is still busy writing the file, or - // writing the file was aborted. - // - // We should still be able to read the existing parts of the - // file. In order to do this, we have to make a sequential - // scan over the scan tile to reconstruct the tile offset - // table. - // - - if (anyOffsetsAreInvalid()) - { - complete = false; - reconstructFromFile (is,isMultiPartFile,isDeep); - } - else - { - complete = true; - } - -} - - -void -TileOffsets::readFrom (std::vector chunkOffsets,bool &complete) -{ - size_t totalSize = 0; - - for (unsigned int l = 0; l < _offsets.size(); ++l) - for (unsigned int dy = 0; dy < _offsets[l].size(); ++dy) - totalSize += _offsets[l][dy].size(); - - if (chunkOffsets.size() != totalSize) - throw IEX_NAMESPACE::ArgExc ("Wrong offset count, not able to read from this array"); - - - - int pos = 0; - for (size_t l = 0; l < _offsets.size(); ++l) - for (size_t dy = 0; dy < _offsets[l].size(); ++dy) - for (size_t dx = 0; dx < _offsets[l][dy].size(); ++dx) - { - _offsets[l][dy][dx] = chunkOffsets[pos]; - pos++; - } - - complete = !anyOffsetsAreInvalid(); - -} - - -Int64 -TileOffsets::writeTo (OPENEXR_IMF_INTERNAL_NAMESPACE::OStream &os) const -{ - // - // Write the tile offset table to the file, and - // return the position of the start of the table - // in the file. - // - - Int64 pos = os.tellp(); - - if (pos == -1) - IEX_NAMESPACE::throwErrnoExc ("Cannot determine current file position (%T)."); - - for (unsigned int l = 0; l < _offsets.size(); ++l) - for (unsigned int dy = 0; dy < _offsets[l].size(); ++dy) - for (unsigned int dx = 0; dx < _offsets[l][dy].size(); ++dx) - OPENEXR_IMF_INTERNAL_NAMESPACE::Xdr::write (os, _offsets[l][dy][dx]); - - return pos; -} - -namespace { -struct tilepos{ - Int64 filePos; - int dx; - int dy; - int l; - bool operator <(const tilepos & other) const - { - return filePos < other.filePos; - } -}; -} -//------------------------------------- -// fill array with tile coordinates in the order they appear in the file -// -// each input array must be of size (totalTiles) -// -// -// if the tile order is not RANDOM_Y, it is more efficient to compute the -// tile ordering rather than using this function -// -//------------------------------------- -void TileOffsets::getTileOrder(int dx_table[],int dy_table[],int lx_table[],int ly_table[]) const -{ - // - // helper class - // - - // how many entries? - size_t entries=0; - for (unsigned int l = 0; l < _offsets.size(); ++l) - for (unsigned int dy = 0; dy < _offsets[l].size(); ++dy) - entries+=_offsets[l][dy].size(); - - std::vector table(entries); - - size_t i = 0; - for (unsigned int l = 0; l < _offsets.size(); ++l) - for (unsigned int dy = 0; dy < _offsets[l].size(); ++dy) - for (unsigned int dx = 0; dx < _offsets[l][dy].size(); ++dx) - { - table[i].filePos = _offsets[l][dy][dx]; - table[i].dx = dx; - table[i].dy = dy; - table[i].l = l; - - ++i; - - } - - std::sort(table.begin(),table.end()); - - // - // write out the values - // - - // pass 1: write out dx and dy, since these are independent of level mode - - for(size_t i=0;i 0 && - int(_offsets[0].size()) > dy && - int(_offsets[0][dy].size()) > dx) - { - return true; - } - - break; - - case MIPMAP_LEVELS: - - if (lx < _numXLevels && - ly < _numYLevels && - int(_offsets.size()) > lx && - int(_offsets[lx].size()) > dy && - int(_offsets[lx][dy].size()) > dx) - { - return true; - } - - break; - - case RIPMAP_LEVELS: - - if (lx < _numXLevels && - ly < _numYLevels && - (_offsets.size() > (size_t) lx+ ly * (size_t) _numXLevels) && - int(_offsets[lx + ly * _numXLevels].size()) > dy && - int(_offsets[lx + ly * _numXLevels][dy].size()) > dx) - { - return true; - } - - break; - - default: - - return false; - } - - return false; -} - - -Int64 & -TileOffsets::operator () (int dx, int dy, int lx, int ly) -{ - // - // Looks up the value of the tile with tile coordinate (dx, dy) - // and level number (lx, ly) in the _offsets array, and returns - // the cooresponding offset. - // - - switch (_mode) - { - case ONE_LEVEL: - - return _offsets[0][dy][dx]; - break; - - case MIPMAP_LEVELS: - - return _offsets[lx][dy][dx]; - break; - - case RIPMAP_LEVELS: - - return _offsets[lx + ly * _numXLevels][dy][dx]; - break; - - default: - - throw IEX_NAMESPACE::ArgExc ("Unknown LevelMode format."); - } -} - - -Int64 & -TileOffsets::operator () (int dx, int dy, int l) -{ - return operator () (dx, dy, l, l); -} - - -const Int64 & -TileOffsets::operator () (int dx, int dy, int lx, int ly) const -{ - // - // Looks up the value of the tile with tile coordinate (dx, dy) - // and level number (lx, ly) in the _offsets array, and returns - // the cooresponding offset. - // - - switch (_mode) - { - case ONE_LEVEL: - - return _offsets[0][dy][dx]; - break; - - case MIPMAP_LEVELS: - - return _offsets[lx][dy][dx]; - break; - - case RIPMAP_LEVELS: - - return _offsets[lx + ly * _numXLevels][dy][dx]; - break; - - default: - - throw IEX_NAMESPACE::ArgExc ("Unknown LevelMode format."); - } -} - - -const Int64 & -TileOffsets::operator () (int dx, int dy, int l) const -{ - return operator () (dx, dy, l, l); -} - -const std::vector > >& -TileOffsets::getOffsets() const -{ - return _offsets; -} - - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_EXIT diff --git a/3rdparty/openexr/IlmImf/ImfTileOffsets.h b/3rdparty/openexr/IlmImf/ImfTileOffsets.h deleted file mode 100644 index 383dfc44c3..0000000000 --- a/3rdparty/openexr/IlmImf/ImfTileOffsets.h +++ /dev/null @@ -1,137 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - -#ifndef INCLUDED_IMF_TILE_OFFSETS_H -#define INCLUDED_IMF_TILE_OFFSETS_H - -//----------------------------------------------------------------------------- -// -// class TileOffsets -// -//----------------------------------------------------------------------------- - -#include "ImfTileDescription.h" -#include "ImfInt64.h" -#include -#include "ImfNamespace.h" -#include "ImfForward.h" -#include "ImfExport.h" - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER - - -class TileOffsets -{ - public: - - IMF_EXPORT - TileOffsets (LevelMode mode = ONE_LEVEL, - int numXLevels = 0, - int numYLevels = 0, - const int *numXTiles = 0, - const int *numYTiles = 0); - - // -------- - // File I/O - // -------- - - IMF_EXPORT - void readFrom (OPENEXR_IMF_INTERNAL_NAMESPACE::IStream &is, bool &complete,bool isMultiPart,bool isDeep); - IMF_EXPORT - void readFrom (std::vector chunkOffsets,bool &complete); - IMF_EXPORT - Int64 writeTo (OPENEXR_IMF_INTERNAL_NAMESPACE::OStream &os) const; - - - //----------------------------------------------------------- - // Test if the tileOffsets array is empty (all entries are 0) - //----------------------------------------------------------- - - IMF_EXPORT - bool isEmpty () const; - - - - //----------------------------------------------------------- - // populate 'list' with tiles coordinates in the order they appear - // in the offset table (assumes full table! - // each array myst be at leat totalTiles long - //----------------------------------------------------------- - IMF_EXPORT - void getTileOrder(int dx_table[], int dy_table[], int lx_table[], int ly_table[]) const; - - - //----------------------- - // Access to the elements - //----------------------- - - IMF_EXPORT - Int64 & operator () (int dx, int dy, int lx, int ly); - IMF_EXPORT - Int64 & operator () (int dx, int dy, int l); - IMF_EXPORT - const Int64 & operator () (int dx, int dy, int lx, int ly) const; - IMF_EXPORT - const Int64 & operator () (int dx, int dy, int l) const; - IMF_EXPORT - bool isValidTile (int dx, int dy, int lx, int ly) const; - IMF_EXPORT - const std::vector > >& getOffsets() const; - - private: - - void findTiles (OPENEXR_IMF_INTERNAL_NAMESPACE::IStream &is, bool isMultiPartFile, - bool isDeep, - bool skipOnly); - void reconstructFromFile (OPENEXR_IMF_INTERNAL_NAMESPACE::IStream &is,bool isMultiPartFile,bool isDeep); - bool readTile (OPENEXR_IMF_INTERNAL_NAMESPACE::IStream &is); - bool anyOffsetsAreInvalid () const; - - LevelMode _mode; - int _numXLevels; - int _numYLevels; - - std::vector > > _offsets; - -}; - - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT - - - - - -#endif diff --git a/3rdparty/openexr/IlmImf/ImfTiledInputFile.cpp b/3rdparty/openexr/IlmImf/ImfTiledInputFile.cpp deleted file mode 100644 index b5fbeb7043..0000000000 --- a/3rdparty/openexr/IlmImf/ImfTiledInputFile.cpp +++ /dev/null @@ -1,1533 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - -//----------------------------------------------------------------------------- -// -// class TiledInputFile -// -//----------------------------------------------------------------------------- - -#include "ImfTiledInputFile.h" -#include "ImfTileDescriptionAttribute.h" -#include "ImfChannelList.h" -#include "ImfMisc.h" -#include "ImfTiledMisc.h" -#include "ImfStdIO.h" -#include "ImfCompressor.h" -#include "ImfXdr.h" -#include "ImfConvert.h" -#include "ImfVersion.h" -#include "ImfTileOffsets.h" -#include "ImfThreading.h" -#include "ImfPartType.h" -#include "ImfMultiPartInputFile.h" -#include "ImfInputStreamMutex.h" -#include "IlmThreadPool.h" -#include "IlmThreadSemaphore.h" -#include "IlmThreadMutex.h" -#include "ImathVec.h" -#include "Iex.h" -#include -#include -#include -#include -#include "ImfInputPartData.h" -#include "ImfNamespace.h" - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_ENTER - -using IMATH_NAMESPACE::Box2i; -using IMATH_NAMESPACE::V2i; -using std::string; -using std::vector; -using std::min; -using std::max; -using ILMTHREAD_NAMESPACE::Mutex; -using ILMTHREAD_NAMESPACE::Lock; -using ILMTHREAD_NAMESPACE::Semaphore; -using ILMTHREAD_NAMESPACE::Task; -using ILMTHREAD_NAMESPACE::TaskGroup; -using ILMTHREAD_NAMESPACE::ThreadPool; - -namespace { - -struct TInSliceInfo -{ - PixelType typeInFrameBuffer; - PixelType typeInFile; - char * base; - size_t xStride; - size_t yStride; - bool fill; - bool skip; - double fillValue; - int xTileCoords; - int yTileCoords; - - TInSliceInfo (PixelType typeInFrameBuffer = HALF, - PixelType typeInFile = HALF, - char *base = 0, - size_t xStride = 0, - size_t yStride = 0, - bool fill = false, - bool skip = false, - double fillValue = 0.0, - int xTileCoords = 0, - int yTileCoords = 0); -}; - - -TInSliceInfo::TInSliceInfo (PixelType tifb, - PixelType tifl, - char *b, - size_t xs, size_t ys, - bool f, bool s, - double fv, - int xtc, - int ytc) -: - typeInFrameBuffer (tifb), - typeInFile (tifl), - base (b), - xStride (xs), - yStride (ys), - fill (f), - skip (s), - fillValue (fv), - xTileCoords (xtc), - yTileCoords (ytc) -{ - // empty -} - - -struct TileBuffer -{ - const char * uncompressedData; - char * buffer; - int dataSize; - Compressor * compressor; - Compressor::Format format; - int dx; - int dy; - int lx; - int ly; - bool hasException; - string exception; - - TileBuffer (Compressor * const comp); - ~TileBuffer (); - - inline void wait () {_sem.wait();} - inline void post () {_sem.post();} - - protected: - - Semaphore _sem; -}; - - -TileBuffer::TileBuffer (Compressor *comp): - uncompressedData (0), - buffer (0), - dataSize (0), - compressor (comp), - format (defaultFormat (compressor)), - dx (-1), - dy (-1), - lx (-1), - ly (-1), - hasException (false), - exception (), - _sem (1) -{ - // empty -} - - -TileBuffer::~TileBuffer () -{ - delete compressor; -} - -} // namespace - - -class MultiPartInputFile; - - -// -// struct TiledInputFile::Data stores things that will be -// needed between calls to readTile() -// - -struct TiledInputFile::Data: public Mutex -{ - Header header; // the image header - TileDescription tileDesc; // describes the tile layout - int version; // file's version - FrameBuffer frameBuffer; // framebuffer to write into - LineOrder lineOrder; // the file's lineorder - int minX; // data window's min x coord - int maxX; // data window's max x coord - int minY; // data window's min y coord - int maxY; // data window's max x coord - - int numXLevels; // number of x levels - int numYLevels; // number of y levels - int * numXTiles; // number of x tiles at a level - int * numYTiles; // number of y tiles at a level - - TileOffsets tileOffsets; // stores offsets in file for - // each tile - - bool fileIsComplete; // True if no tiles are missing - // in the file - - vector slices; // info about channels in file - - size_t bytesPerPixel; // size of an uncompressed pixel - - size_t maxBytesPerTileLine; // combined size of a line - // over all channels - - int partNumber; // part number - - bool multiPartBackwardSupport; // if we are reading a multipart file - // using OpenEXR 1.7 API - - int numThreads; // number of threads - - MultiPartInputFile* multiPartFile; // the MultiPartInputFile used to - // support backward compatibility - - vector tileBuffers; // each holds a single tile - size_t tileBufferSize; // size of the tile buffers - - bool memoryMapped; // if the stream is memory mapped - - InputStreamMutex * _streamData; - bool _deleteStream; - - Data (int numThreads); - ~Data (); - - inline TileBuffer * getTileBuffer (int number); - // hash function from tile indices - // into our vector of tile buffers -}; - - -TiledInputFile::Data::Data (int numThreads): - numXTiles (0), - numYTiles (0), - partNumber (-1), - multiPartBackwardSupport(false), - numThreads(numThreads), - memoryMapped(false), - _streamData(NULL), - _deleteStream(false) -{ - // - // We need at least one tileBuffer, but if threading is used, - // to keep n threads busy we need 2*n tileBuffers - // - - tileBuffers.resize (max (1, 2 * numThreads)); -} - - -TiledInputFile::Data::~Data () -{ - delete [] numXTiles; - delete [] numYTiles; - - for (size_t i = 0; i < tileBuffers.size(); i++) - delete tileBuffers[i]; - - if (multiPartBackwardSupport) - delete multiPartFile; -} - - -TileBuffer* -TiledInputFile::Data::getTileBuffer (int number) -{ - return tileBuffers[number % tileBuffers.size()]; -} - - -namespace { - -void -readTileData (InputStreamMutex *streamData, - TiledInputFile::Data *ifd, - int dx, int dy, - int lx, int ly, - char *&buffer, - int &dataSize) -{ - // - // Read a single tile block from the file and into the array pointed - // to by buffer. If the file is memory-mapped, then we change where - // buffer points instead of writing into the array (hence buffer needs - // to be a reference to a char *). - // - - // - // Look up the location for this tile in the Index and - // seek to that position if necessary - // - - Int64 tileOffset = ifd->tileOffsets (dx, dy, lx, ly); - - if (tileOffset == 0) - { - THROW (IEX_NAMESPACE::InputExc, "Tile (" << dx << ", " << dy << ", " << - lx << ", " << ly << ") is missing."); - } - - - // - // In a multi-part file, the next chunk does not need to - // belong to the same part, so we have to compare the - // offset here. - // - - if (!isMultiPart(ifd->version)) - { - if (streamData->currentPosition != tileOffset) - streamData->is->seekg (tileOffset); - } - else - { - // - // In a multi-part file, the file pointer may be moved by other - // parts, so we have to ask tellg() where we are. - // - if (streamData->is->tellg() != tileOffset) - streamData->is->seekg (tileOffset); - } - - // - // Read the first few bytes of the tile (the header). - // Verify that the tile coordinates and the level number - // are correct. - // - - int tileXCoord, tileYCoord, levelX, levelY; - - if (isMultiPart(ifd->version)) - { - int partNumber; - Xdr::read (*streamData->is, partNumber); - if (partNumber != ifd->partNumber) - { - THROW (IEX_NAMESPACE::ArgExc, "Unexpected part number " << partNumber - << ", should be " << ifd->partNumber << "."); - } - } - - OPENEXR_IMF_INTERNAL_NAMESPACE::Xdr::read (*streamData->is, tileXCoord); - OPENEXR_IMF_INTERNAL_NAMESPACE::Xdr::read (*streamData->is, tileYCoord); - OPENEXR_IMF_INTERNAL_NAMESPACE::Xdr::read (*streamData->is, levelX); - OPENEXR_IMF_INTERNAL_NAMESPACE::Xdr::read (*streamData->is, levelY); - OPENEXR_IMF_INTERNAL_NAMESPACE::Xdr::read (*streamData->is, dataSize); - - if (tileXCoord != dx) - throw IEX_NAMESPACE::InputExc ("Unexpected tile x coordinate."); - - if (tileYCoord != dy) - throw IEX_NAMESPACE::InputExc ("Unexpected tile y coordinate."); - - if (levelX != lx) - throw IEX_NAMESPACE::InputExc ("Unexpected tile x level number coordinate."); - - if (levelY != ly) - throw IEX_NAMESPACE::InputExc ("Unexpected tile y level number coordinate."); - - if (dataSize > (int) ifd->tileBufferSize) - throw IEX_NAMESPACE::InputExc ("Unexpected tile block length."); - - // - // Read the pixel data. - // - - if (streamData->is->isMemoryMapped ()) - buffer = streamData->is->readMemoryMapped (dataSize); - else - streamData->is->read (buffer, dataSize); - - // - // Keep track of which tile is the next one in - // the file, so that we can avoid redundant seekg() - // operations (seekg() can be fairly expensive). - // - - streamData->currentPosition = tileOffset + 5 * Xdr::size() + dataSize; -} - - -void -readNextTileData (InputStreamMutex *streamData, - TiledInputFile::Data *ifd, - int &dx, int &dy, - int &lx, int &ly, - char * & buffer, - int &dataSize) -{ - // - // Read the next tile block from the file - // - - if(isMultiPart(ifd->version)) - { - int part; - Xdr::read (*streamData->is, part); - if(part!=ifd->partNumber) - { - throw IEX_NAMESPACE::InputExc("Unexpected part number in readNextTileData"); - } - } - - // - // Read the first few bytes of the tile (the header). - // - - Xdr::read (*streamData->is, dx); - Xdr::read (*streamData->is, dy); - Xdr::read (*streamData->is, lx); - Xdr::read (*streamData->is, ly); - Xdr::read (*streamData->is, dataSize); - - if (dataSize > (int) ifd->tileBufferSize) - throw IEX_NAMESPACE::InputExc ("Unexpected tile block length."); - - // - // Read the pixel data. - // - - streamData->is->read (buffer, dataSize); - - // - // Keep track of which tile is the next one in - // the file, so that we can avoid redundant seekg() - // operations (seekg() can be fairly expensive). - // - - streamData->currentPosition += 5 * Xdr::size() + dataSize; -} - - -// -// A TileBufferTask encapsulates the task of uncompressing -// a single tile and copying it into the frame buffer. -// - -class TileBufferTask : public Task -{ - public: - - TileBufferTask (TaskGroup *group, - TiledInputFile::Data *ifd, - TileBuffer *tileBuffer); - - virtual ~TileBufferTask (); - - virtual void execute (); - - private: - - TiledInputFile::Data * _ifd; - TileBuffer * _tileBuffer; -}; - - -TileBufferTask::TileBufferTask - (TaskGroup *group, - TiledInputFile::Data *ifd, - TileBuffer *tileBuffer) -: - Task (group), - _ifd (ifd), - _tileBuffer (tileBuffer) -{ - // empty -} - - -TileBufferTask::~TileBufferTask () -{ - // - // Signal that the tile buffer is now free - // - - _tileBuffer->post (); -} - - -void -TileBufferTask::execute () -{ - try - { - // - // Calculate information about the tile - // - - Box2i tileRange = OPENEXR_IMF_INTERNAL_NAMESPACE::dataWindowForTile ( - _ifd->tileDesc, - _ifd->minX, _ifd->maxX, - _ifd->minY, _ifd->maxY, - _tileBuffer->dx, - _tileBuffer->dy, - _tileBuffer->lx, - _tileBuffer->ly); - - int numPixelsPerScanLine = tileRange.max.x - tileRange.min.x + 1; - - int numPixelsInTile = numPixelsPerScanLine * - (tileRange.max.y - tileRange.min.y + 1); - - int sizeOfTile = _ifd->bytesPerPixel * numPixelsInTile; - - - // - // Uncompress the data, if necessary - // - - if (_tileBuffer->compressor && _tileBuffer->dataSize < sizeOfTile) - { - _tileBuffer->format = _tileBuffer->compressor->format(); - - _tileBuffer->dataSize = _tileBuffer->compressor->uncompressTile - (_tileBuffer->buffer, _tileBuffer->dataSize, - tileRange, _tileBuffer->uncompressedData); - } - else - { - // - // If the line is uncompressed, it's in XDR format, - // regardless of the compressor's output format. - // - - _tileBuffer->format = Compressor::XDR; - _tileBuffer->uncompressedData = _tileBuffer->buffer; - } - - // - // Convert the tile of pixel data back from the machine-independent - // representation, and store the result in the frame buffer. - // - - const char *readPtr = _tileBuffer->uncompressedData; - // points to where we - // read from in the - // tile block - - // - // Iterate over the scan lines in the tile. - // - - for (int y = tileRange.min.y; y <= tileRange.max.y; ++y) - { - // - // Iterate over all image channels. - // - - for (unsigned int i = 0; i < _ifd->slices.size(); ++i) - { - const TInSliceInfo &slice = _ifd->slices[i]; - - // - // These offsets are used to facilitate both - // absolute and tile-relative pixel coordinates. - // - - int xOffset = slice.xTileCoords * tileRange.min.x; - int yOffset = slice.yTileCoords * tileRange.min.y; - - // - // Fill the frame buffer with pixel data. - // - - if (slice.skip) - { - // - // The file contains data for this channel, but - // the frame buffer contains no slice for this channel. - // - - skipChannel (readPtr, slice.typeInFile, - numPixelsPerScanLine); - } - else - { - // - // The frame buffer contains a slice for this channel. - // - - char *writePtr = slice.base + - (y - yOffset) * slice.yStride + - (tileRange.min.x - xOffset) * - slice.xStride; - - char *endPtr = writePtr + - (numPixelsPerScanLine - 1) * slice.xStride; - - copyIntoFrameBuffer (readPtr, writePtr, endPtr, - slice.xStride, - slice.fill, slice.fillValue, - _tileBuffer->format, - slice.typeInFrameBuffer, - slice.typeInFile); - } - } - } - } - catch (std::exception &e) - { - if (!_tileBuffer->hasException) - { - _tileBuffer->exception = e.what (); - _tileBuffer->hasException = true; - } - } - catch (...) - { - if (!_tileBuffer->hasException) - { - _tileBuffer->exception = "unrecognized exception"; - _tileBuffer->hasException = true; - } - } -} - - -TileBufferTask * -newTileBufferTask - (TaskGroup *group, - InputStreamMutex *streamData, - TiledInputFile::Data *ifd, - int number, - int dx, int dy, - int lx, int ly) -{ - // - // Wait for a tile buffer to become available, - // fill the buffer with raw data from the file, - // and create a new TileBufferTask whose execute() - // method will uncompress the tile and copy the - // tile's pixels into the frame buffer. - // - - TileBuffer *tileBuffer = ifd->getTileBuffer (number); - - try - { - tileBuffer->wait(); - - tileBuffer->dx = dx; - tileBuffer->dy = dy; - tileBuffer->lx = lx; - tileBuffer->ly = ly; - - tileBuffer->uncompressedData = 0; - - readTileData (streamData, ifd, dx, dy, lx, ly, - tileBuffer->buffer, - tileBuffer->dataSize); - } - catch (...) - { - // - // Reading from the file caused an exception. - // Signal that the tile buffer is free, and - // re-throw the exception. - // - - tileBuffer->post(); - throw; - } - - return new TileBufferTask (group, ifd, tileBuffer); -} - - -} // namespace - - -TiledInputFile::TiledInputFile (const char fileName[], int numThreads): - _data (new Data (numThreads)) -{ - _data->_streamData=NULL; - _data->_deleteStream=true; - - // - // This constructor is called when a user - // explicitly wants to read a tiled file. - // - - - IStream* is = 0; - try - { - is = new StdIFStream (fileName); - readMagicNumberAndVersionField(*is, _data->version); - - // - // Backward compatibility to read multpart file. - // - if (isMultiPart(_data->version)) - { - compatibilityInitialize(*is); - return; - } - - _data->_streamData = new InputStreamMutex(); - _data->_streamData->is = is; - _data->header.readFrom (*_data->_streamData->is, _data->version); - initialize(); - //read tile offsets - we are not multipart or deep - _data->tileOffsets.readFrom (*(_data->_streamData->is), _data->fileIsComplete,false,false); - _data->_streamData->currentPosition = _data->_streamData->is->tellg(); - } - catch (IEX_NAMESPACE::BaseExc &e) - { - if (_data->_streamData != 0) - { - if (_data->_streamData->is != 0) - { - delete _data->_streamData->is; - _data->_streamData->is = is = 0; - } - - delete _data->_streamData; - } - - if (is != 0) - delete is; - - REPLACE_EXC (e, "Cannot open image file " - "\"" << fileName << "\". " << e.what()); - throw; - } - catch (...) - { - if ( _data->_streamData != 0) - { - if ( _data->_streamData->is != 0) - { - delete _data->_streamData->is; - _data->_streamData->is = is = 0; - } - - delete _data->_streamData; - } - - if (is != 0) - delete is; - throw; - } -} - - -TiledInputFile::TiledInputFile (OPENEXR_IMF_INTERNAL_NAMESPACE::IStream &is, int numThreads): - _data (new Data (numThreads)) -{ - _data->_deleteStream=false; - // - // This constructor is called when a user - // explicitly wants to read a tiled file. - // - - bool streamDataCreated = false; - - try - { - readMagicNumberAndVersionField(is, _data->version); - - // - // Backward compatibility to read multpart file. - // - if (isMultiPart(_data->version)) - { - compatibilityInitialize(is); - return; - } - - streamDataCreated = true; - _data->_streamData = new InputStreamMutex(); - _data->_streamData->is = &is; - _data->header.readFrom (*_data->_streamData->is, _data->version); - initialize(); - // file is guaranteed to be single part, regular image - _data->tileOffsets.readFrom (*(_data->_streamData->is), _data->fileIsComplete,false,false); - _data->memoryMapped = _data->_streamData->is->isMemoryMapped(); - _data->_streamData->currentPosition = _data->_streamData->is->tellg(); - } - catch (IEX_NAMESPACE::BaseExc &e) - { - if (streamDataCreated) delete _data->_streamData; - delete _data; - - REPLACE_EXC (e, "Cannot open image file " - "\"" << is.fileName() << "\". " << e.what()); - throw; - } - catch (...) - { - if (streamDataCreated) delete _data->_streamData; - delete _data; - throw; - } -} - - -TiledInputFile::TiledInputFile (const Header &header, - OPENEXR_IMF_INTERNAL_NAMESPACE::IStream *is, - int version, - int numThreads) : - _data (new Data (numThreads)) -{ - _data->_deleteStream=false; - _data->_streamData = new InputStreamMutex(); - // - // This constructor called by class Imf::InputFile - // when a user wants to just read an image file, and - // doesn't care or know if the file is tiled. - // No need to have backward compatibility here, because - // we have somehow got the header. - // - - _data->_streamData->is = is; - _data->header = header; - _data->version = version; - initialize(); - _data->tileOffsets.readFrom (*(_data->_streamData->is),_data->fileIsComplete,false,false); - _data->memoryMapped = is->isMemoryMapped(); - _data->_streamData->currentPosition = _data->_streamData->is->tellg(); -} - - -TiledInputFile::TiledInputFile (InputPartData* part) -{ - _data = new Data (part->numThreads); - _data->_deleteStream=false; - multiPartInitialize(part); -} - - -void -TiledInputFile::compatibilityInitialize(OPENEXR_IMF_INTERNAL_NAMESPACE::IStream& is) -{ - is.seekg(0); - // - // Construct a MultiPartInputFile, initialize TiledInputFile - // with the part 0 data. - // (TODO) maybe change the third parameter of the constructor of MultiPartInputFile later. - // - _data->multiPartBackwardSupport = true; - _data->multiPartFile = new MultiPartInputFile(is, _data->numThreads); - InputPartData* part = _data->multiPartFile->getPart(0); - - multiPartInitialize(part); -} - - -void -TiledInputFile::multiPartInitialize(InputPartData* part) -{ - if (part->header.type() != TILEDIMAGE) - throw IEX_NAMESPACE::ArgExc("Can't build a TiledInputFile from a type-mismatched part."); - - _data->_streamData = part->mutex; - _data->header = part->header; - _data->version = part->version; - _data->partNumber = part->partNumber; - _data->memoryMapped = _data->_streamData->is->isMemoryMapped(); - initialize(); - _data->tileOffsets.readFrom(part->chunkOffsets,_data->fileIsComplete); - _data->_streamData->currentPosition = _data->_streamData->is->tellg(); -} - - -void -TiledInputFile::initialize () -{ - // fix bad types in header (arises when a tool built against an older version of - // OpenEXR converts a scanline image to tiled) - // only applies when file is a single part, regular image, tiled file - // - if(!isMultiPart(_data->version) && - !isNonImage(_data->version) && - isTiled(_data->version) && - _data->header.hasType() ) - { - _data->header.setType(TILEDIMAGE); - } - - if (_data->partNumber == -1) - { - if (!isTiled (_data->version)) - throw IEX_NAMESPACE::ArgExc ("Expected a tiled file but the file is not tiled."); - - } - else - { - if(_data->header.hasType() && _data->header.type()!=TILEDIMAGE) - { - throw IEX_NAMESPACE::ArgExc ("TiledInputFile used for non-tiledimage part."); - } - } - - _data->header.sanityCheck (true); - - _data->tileDesc = _data->header.tileDescription(); - _data->lineOrder = _data->header.lineOrder(); - - // - // Save the dataWindow information - // - - const Box2i &dataWindow = _data->header.dataWindow(); - _data->minX = dataWindow.min.x; - _data->maxX = dataWindow.max.x; - _data->minY = dataWindow.min.y; - _data->maxY = dataWindow.max.y; - - // - // Precompute level and tile information to speed up utility functions - // - - precalculateTileInfo (_data->tileDesc, - _data->minX, _data->maxX, - _data->minY, _data->maxY, - _data->numXTiles, _data->numYTiles, - _data->numXLevels, _data->numYLevels); - - _data->bytesPerPixel = calculateBytesPerPixel (_data->header); - - _data->maxBytesPerTileLine = _data->bytesPerPixel * _data->tileDesc.xSize; - - _data->tileBufferSize = _data->maxBytesPerTileLine * _data->tileDesc.ySize; - - // - // Create all the TileBuffers and allocate their internal buffers - // - - for (size_t i = 0; i < _data->tileBuffers.size(); i++) - { - _data->tileBuffers[i] = new TileBuffer (newTileCompressor - (_data->header.compression(), - _data->maxBytesPerTileLine, - _data->tileDesc.ySize, - _data->header)); - - if (!_data->_streamData->is->isMemoryMapped ()) - _data->tileBuffers[i]->buffer = new char [_data->tileBufferSize]; - } - - _data->tileOffsets = TileOffsets (_data->tileDesc.mode, - _data->numXLevels, - _data->numYLevels, - _data->numXTiles, - _data->numYTiles); -} - - -TiledInputFile::~TiledInputFile () -{ - if (!_data->memoryMapped) - for (size_t i = 0; i < _data->tileBuffers.size(); i++) - delete [] _data->tileBuffers[i]->buffer; - - if (_data->_deleteStream) - delete _data->_streamData->is; - - if (_data->partNumber == -1) - delete _data->_streamData; - - delete _data; -} - - -const char * -TiledInputFile::fileName () const -{ - return _data->_streamData->is->fileName(); -} - - -const Header & -TiledInputFile::header () const -{ - return _data->header; -} - - -int -TiledInputFile::version () const -{ - return _data->version; -} - - -void -TiledInputFile::setFrameBuffer (const FrameBuffer &frameBuffer) -{ - Lock lock (*_data->_streamData); - - // - // Set the frame buffer - // - - // - // Check if the new frame buffer descriptor is - // compatible with the image file header. - // - - const ChannelList &channels = _data->header.channels(); - - for (FrameBuffer::ConstIterator j = frameBuffer.begin(); - j != frameBuffer.end(); - ++j) - { - ChannelList::ConstIterator i = channels.find (j.name()); - - if (i == channels.end()) - continue; - - if (i.channel().xSampling != j.slice().xSampling || - i.channel().ySampling != j.slice().ySampling) - THROW (IEX_NAMESPACE::ArgExc, "X and/or y subsampling factors " - "of \"" << i.name() << "\" channel " - "of input file \"" << fileName() << "\" are " - "not compatible with the frame buffer's " - "subsampling factors."); - } - - // - // Initialize the slice table for readPixels(). - // - - vector slices; - ChannelList::ConstIterator i = channels.begin(); - - for (FrameBuffer::ConstIterator j = frameBuffer.begin(); - j != frameBuffer.end(); - ++j) - { - while (i != channels.end() && strcmp (i.name(), j.name()) < 0) - { - // - // Channel i is present in the file but not - // in the frame buffer; data for channel i - // will be skipped during readPixels(). - // - - slices.push_back (TInSliceInfo (i.channel().type, - i.channel().type, - 0, // base - 0, // xStride - 0, // yStride - false, // fill - true, // skip - 0.0)); // fillValue - ++i; - } - - bool fill = false; - - if (i == channels.end() || strcmp (i.name(), j.name()) > 0) - { - // - // Channel i is present in the frame buffer, but not in the file. - // In the frame buffer, slice j will be filled with a default value. - // - - fill = true; - } - - slices.push_back (TInSliceInfo (j.slice().type, - fill? j.slice().type: i.channel().type, - j.slice().base, - j.slice().xStride, - j.slice().yStride, - fill, - false, // skip - j.slice().fillValue, - (j.slice().xTileCoords)? 1: 0, - (j.slice().yTileCoords)? 1: 0)); - - if (i != channels.end() && !fill) - ++i; - } - - while (i != channels.end()) - { - // - // Channel i is present in the file but not - // in the frame buffer; data for channel i - // will be skipped during readPixels(). - // - - slices.push_back (TInSliceInfo (i.channel().type, - i.channel().type, - 0, // base - 0, // xStride - 0, // yStride - false, // fill - true, // skip - 0.0)); // fillValue - ++i; - } - - // - // Store the new frame buffer. - // - - _data->frameBuffer = frameBuffer; - _data->slices = slices; -} - - -const FrameBuffer & -TiledInputFile::frameBuffer () const -{ - Lock lock (*_data->_streamData); - return _data->frameBuffer; -} - - -bool -TiledInputFile::isComplete () const -{ - return _data->fileIsComplete; -} - - -void -TiledInputFile::readTiles (int dx1, int dx2, int dy1, int dy2, int lx, int ly) -{ - // - // Read a range of tiles from the file into the framebuffer - // - - try - { - Lock lock (*_data->_streamData); - - if (_data->slices.size() == 0) - throw IEX_NAMESPACE::ArgExc ("No frame buffer specified " - "as pixel data destination."); - - if (!isValidLevel (lx, ly)) - THROW (IEX_NAMESPACE::ArgExc, - "Level coordinate " - "(" << lx << ", " << ly << ") " - "is invalid."); - - // - // Determine the first and last tile coordinates in both dimensions. - // We always attempt to read the range of tiles in the order that - // they are stored in the file. - // - - if (dx1 > dx2) - std::swap (dx1, dx2); - - if (dy1 > dy2) - std::swap (dy1, dy2); - - int dyStart = dy1; - int dyStop = dy2 + 1; - int dY = 1; - - if (_data->lineOrder == DECREASING_Y) - { - dyStart = dy2; - dyStop = dy1 - 1; - dY = -1; - } - - // - // Create a task group for all tile buffer tasks. When the - // task group goes out of scope, the destructor waits until - // all tasks are complete. - // - - { - TaskGroup taskGroup; - int tileNumber = 0; - - for (int dy = dyStart; dy != dyStop; dy += dY) - { - for (int dx = dx1; dx <= dx2; dx++) - { - if (!isValidTile (dx, dy, lx, ly)) - THROW (IEX_NAMESPACE::ArgExc, - "Tile (" << dx << ", " << dy << ", " << - lx << "," << ly << ") is not a valid tile."); - - ThreadPool::addGlobalTask (newTileBufferTask (&taskGroup, - _data->_streamData, - _data, - tileNumber++, - dx, dy, - lx, ly)); - } - } - - // - // finish all tasks - // - } - - // - // Exeption handling: - // - // TileBufferTask::execute() may have encountered exceptions, but - // those exceptions occurred in another thread, not in the thread - // that is executing this call to TiledInputFile::readTiles(). - // TileBufferTask::execute() has caught all exceptions and stored - // the exceptions' what() strings in the tile buffers. - // Now we check if any tile buffer contains a stored exception; if - // this is the case then we re-throw the exception in this thread. - // (It is possible that multiple tile buffers contain stored - // exceptions. We re-throw the first exception we find and - // ignore all others.) - // - - const string *exception = 0; - - for (size_t i = 0; i < _data->tileBuffers.size(); ++i) - { - TileBuffer *tileBuffer = _data->tileBuffers[i]; - - if (tileBuffer->hasException && !exception) - exception = &tileBuffer->exception; - - tileBuffer->hasException = false; - } - - if (exception) - throw IEX_NAMESPACE::IoExc (*exception); - } - catch (IEX_NAMESPACE::BaseExc &e) - { - REPLACE_EXC (e, "Error reading pixel data from image " - "file \"" << fileName() << "\". " << e.what()); - throw; - } -} - - -void -TiledInputFile::readTiles (int dx1, int dx2, int dy1, int dy2, int l) -{ - readTiles (dx1, dx2, dy1, dy2, l, l); -} - - -void -TiledInputFile::readTile (int dx, int dy, int lx, int ly) -{ - readTiles (dx, dx, dy, dy, lx, ly); -} - - -void -TiledInputFile::readTile (int dx, int dy, int l) -{ - readTile (dx, dy, l, l); -} - - -void -TiledInputFile::rawTileData (int &dx, int &dy, - int &lx, int &ly, - const char *&pixelData, - int &pixelDataSize) -{ - try - { - Lock lock (*_data->_streamData); - - if (!isValidTile (dx, dy, lx, ly)) - throw IEX_NAMESPACE::ArgExc ("Tried to read a tile outside " - "the image file's data window."); - - TileBuffer *tileBuffer = _data->getTileBuffer (0); - - // - // if file is a multipart file, we have to seek to the required tile - // since we don't know where the file pointer is - // - int old_dx=dx; - int old_dy=dy; - int old_lx=lx; - int old_ly=ly; - if(isMultiPart(version())) - { - _data->_streamData->is->seekg(_data->tileOffsets(dx,dy,lx,ly)); - } - readNextTileData (_data->_streamData, _data, dx, dy, lx, ly, - tileBuffer->buffer, - pixelDataSize); - if(isMultiPart(version())) - { - if (old_dx!=dx || old_dy !=dy || old_lx!=lx || old_ly!=ly) - { - throw IEX_NAMESPACE::ArgExc ("rawTileData read the wrong tile"); - } - } - pixelData = tileBuffer->buffer; - } - catch (IEX_NAMESPACE::BaseExc &e) - { - REPLACE_EXC (e, "Error reading pixel data from image " - "file \"" << fileName() << "\". " << e.what()); - throw; - } -} - - -unsigned int -TiledInputFile::tileXSize () const -{ - return _data->tileDesc.xSize; -} - - -unsigned int -TiledInputFile::tileYSize () const -{ - return _data->tileDesc.ySize; -} - - -LevelMode -TiledInputFile::levelMode () const -{ - return _data->tileDesc.mode; -} - - -LevelRoundingMode -TiledInputFile::levelRoundingMode () const -{ - return _data->tileDesc.roundingMode; -} - - -int -TiledInputFile::numLevels () const -{ - if (levelMode() == RIPMAP_LEVELS) - THROW (IEX_NAMESPACE::LogicExc, "Error calling numLevels() on image " - "file \"" << fileName() << "\" " - "(numLevels() is not defined for files " - "with RIPMAP level mode)."); - - return _data->numXLevels; -} - - -int -TiledInputFile::numXLevels () const -{ - return _data->numXLevels; -} - - -int -TiledInputFile::numYLevels () const -{ - return _data->numYLevels; -} - - -bool -TiledInputFile::isValidLevel (int lx, int ly) const -{ - if (lx < 0 || ly < 0) - return false; - - if (levelMode() == MIPMAP_LEVELS && lx != ly) - return false; - - if (lx >= numXLevels() || ly >= numYLevels()) - return false; - - return true; -} - - -int -TiledInputFile::levelWidth (int lx) const -{ - try - { - return levelSize (_data->minX, _data->maxX, lx, - _data->tileDesc.roundingMode); - } - catch (IEX_NAMESPACE::BaseExc &e) - { - REPLACE_EXC (e, "Error calling levelWidth() on image " - "file \"" << fileName() << "\". " << e.what()); - throw; - } -} - - -int -TiledInputFile::levelHeight (int ly) const -{ - try - { - return levelSize (_data->minY, _data->maxY, ly, - _data->tileDesc.roundingMode); - } - catch (IEX_NAMESPACE::BaseExc &e) - { - REPLACE_EXC (e, "Error calling levelHeight() on image " - "file \"" << fileName() << "\". " << e.what()); - throw; - } -} - - -int -TiledInputFile::numXTiles (int lx) const -{ - if (lx < 0 || lx >= _data->numXLevels) - { - THROW (IEX_NAMESPACE::ArgExc, "Error calling numXTiles() on image " - "file \"" << _data->_streamData->is->fileName() << "\" " - "(Argument is not in valid range)."); - - } - - return _data->numXTiles[lx]; -} - - -int -TiledInputFile::numYTiles (int ly) const -{ - if (ly < 0 || ly >= _data->numYLevels) - { - THROW (IEX_NAMESPACE::ArgExc, "Error calling numYTiles() on image " - "file \"" << _data->_streamData->is->fileName() << "\" " - "(Argument is not in valid range)."); - } - - return _data->numYTiles[ly]; -} - - -Box2i -TiledInputFile::dataWindowForLevel (int l) const -{ - return dataWindowForLevel (l, l); -} - - -Box2i -TiledInputFile::dataWindowForLevel (int lx, int ly) const -{ - try - { - return OPENEXR_IMF_INTERNAL_NAMESPACE::dataWindowForLevel ( - _data->tileDesc, - _data->minX, _data->maxX, - _data->minY, _data->maxY, - lx, ly); - } - catch (IEX_NAMESPACE::BaseExc &e) - { - REPLACE_EXC (e, "Error calling dataWindowForLevel() on image " - "file \"" << fileName() << "\". " << e.what()); - throw; - } -} - - -Box2i -TiledInputFile::dataWindowForTile (int dx, int dy, int l) const -{ - return dataWindowForTile (dx, dy, l, l); -} - - -Box2i -TiledInputFile::dataWindowForTile (int dx, int dy, int lx, int ly) const -{ - try - { - if (!isValidTile (dx, dy, lx, ly)) - throw IEX_NAMESPACE::ArgExc ("Arguments not in valid range."); - - return OPENEXR_IMF_INTERNAL_NAMESPACE::dataWindowForTile ( - _data->tileDesc, - _data->minX, _data->maxX, - _data->minY, _data->maxY, - dx, dy, lx, ly); - } - catch (IEX_NAMESPACE::BaseExc &e) - { - REPLACE_EXC (e, "Error calling dataWindowForTile() on image " - "file \"" << fileName() << "\". " << e.what()); - throw; - } -} - - -bool -TiledInputFile::isValidTile (int dx, int dy, int lx, int ly) const -{ - return ((lx < _data->numXLevels && lx >= 0) && - (ly < _data->numYLevels && ly >= 0) && - (dx < _data->numXTiles[lx] && dx >= 0) && - (dy < _data->numYTiles[ly] && dy >= 0)); -} - -void TiledInputFile::tileOrder(int dx[], int dy[], int lx[], int ly[]) const -{ - return _data->tileOffsets.getTileOrder(dx,dy,lx,ly); -} - - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_EXIT diff --git a/3rdparty/openexr/IlmImf/ImfTiledInputFile.h b/3rdparty/openexr/IlmImf/ImfTiledInputFile.h deleted file mode 100644 index 5ea872d3cf..0000000000 --- a/3rdparty/openexr/IlmImf/ImfTiledInputFile.h +++ /dev/null @@ -1,431 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - -#ifndef INCLUDED_IMF_TILED_INPUT_FILE_H -#define INCLUDED_IMF_TILED_INPUT_FILE_H - -//----------------------------------------------------------------------------- -// -// class TiledInputFile -// -//----------------------------------------------------------------------------- - -#include "ImfHeader.h" -#include "ImfFrameBuffer.h" -#include "ImathBox.h" -#include "ImfTileDescription.h" -#include "ImfThreading.h" -#include "ImfGenericInputFile.h" -#include "ImfTiledOutputFile.h" -#include "ImfNamespace.h" -#include "ImfExport.h" - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER - - -class TiledInputFile : public GenericInputFile -{ - public: - - //-------------------------------------------------------------------- - // A constructor that opens the file with the specified name, and - // reads the file header. The constructor throws an IEX_NAMESPACE::ArgExc - // exception if the file is not tiled. - // The numThreads parameter specifies how many worker threads this - // file will try to keep busy when decompressing individual tiles. - // Destroying TiledInputFile objects constructed with this constructor - // automatically closes the corresponding files. - //-------------------------------------------------------------------- - - IMF_EXPORT - TiledInputFile (const char fileName[], - int numThreads = globalThreadCount ()); - - - // ---------------------------------------------------------- - // A constructor that attaches the new TiledInputFile object - // to a file that has already been opened. - // Destroying TiledInputFile objects constructed with this - // constructor does not automatically close the corresponding - // files. - // ---------------------------------------------------------- - - IMF_EXPORT - TiledInputFile (OPENEXR_IMF_INTERNAL_NAMESPACE::IStream &is, int numThreads = globalThreadCount ()); - - - //----------- - // Destructor - //----------- - - IMF_EXPORT - virtual ~TiledInputFile (); - - - //------------------------ - // Access to the file name - //------------------------ - - IMF_EXPORT - const char * fileName () const; - - - //-------------------------- - // Access to the file header - //-------------------------- - - IMF_EXPORT - const Header & header () const; - - - //---------------------------------- - // Access to the file format version - //---------------------------------- - - IMF_EXPORT - int version () const; - - - //----------------------------------------------------------- - // Set the current frame buffer -- copies the FrameBuffer - // object into the TiledInputFile object. - // - // The current frame buffer is the destination for the pixel - // data read from the file. The current frame buffer must be - // set at least once before readTile() is called. - // The current frame buffer can be changed after each call - // to readTile(). - //----------------------------------------------------------- - - IMF_EXPORT - void setFrameBuffer (const FrameBuffer &frameBuffer); - - - //----------------------------------- - // Access to the current frame buffer - //----------------------------------- - - IMF_EXPORT - const FrameBuffer & frameBuffer () const; - - - //------------------------------------------------------------ - // Check if the file is complete: - // - // isComplete() returns true if all pixels in the data window - // (in all levels) are present in the input file, or false if - // any pixels are missing. (Another program may still be busy - // writing the file, or file writing may have been aborted - // prematurely.) - //------------------------------------------------------------ - - IMF_EXPORT - bool isComplete () const; - - - //-------------------------------------------------- - // Utility functions: - //-------------------------------------------------- - - //--------------------------------------------------------- - // Multiresolution mode and tile size: - // The following functions return the xSize, ySize and mode - // fields of the file header's TileDescriptionAttribute. - //--------------------------------------------------------- - - IMF_EXPORT - unsigned int tileXSize () const; - IMF_EXPORT - unsigned int tileYSize () const; - IMF_EXPORT - LevelMode levelMode () const; - IMF_EXPORT - LevelRoundingMode levelRoundingMode () const; - - - //-------------------------------------------------------------------- - // Number of levels: - // - // numXLevels() returns the file's number of levels in x direction. - // - // if levelMode() == ONE_LEVEL: - // return value is: 1 - // - // if levelMode() == MIPMAP_LEVELS: - // return value is: rfunc (log (max (w, h)) / log (2)) + 1 - // - // if levelMode() == RIPMAP_LEVELS: - // return value is: rfunc (log (w) / log (2)) + 1 - // - // where - // w is the width of the image's data window, max.x - min.x + 1, - // y is the height of the image's data window, max.y - min.y + 1, - // and rfunc(x) is either floor(x), or ceil(x), depending on - // whether levelRoundingMode() returns ROUND_DOWN or ROUND_UP. - // - // numYLevels() returns the file's number of levels in y direction. - // - // if levelMode() == ONE_LEVEL or levelMode() == MIPMAP_LEVELS: - // return value is the same as for numXLevels() - // - // if levelMode() == RIPMAP_LEVELS: - // return value is: rfunc (log (h) / log (2)) + 1 - // - // - // numLevels() is a convenience function for use with - // MIPMAP_LEVELS files. - // - // if levelMode() == ONE_LEVEL or levelMode() == MIPMAP_LEVELS: - // return value is the same as for numXLevels() - // - // if levelMode() == RIPMAP_LEVELS: - // an IEX_NAMESPACE::LogicExc exception is thrown - // - // isValidLevel(lx, ly) returns true if the file contains - // a level with level number (lx, ly), false if not. - // - //-------------------------------------------------------------------- - - IMF_EXPORT - int numLevels () const; - IMF_EXPORT - int numXLevels () const; - IMF_EXPORT - int numYLevels () const; - IMF_EXPORT - bool isValidLevel (int lx, int ly) const; - - - //---------------------------------------------------------- - // Dimensions of a level: - // - // levelWidth(lx) returns the width of a level with level - // number (lx, *), where * is any number. - // - // return value is: - // max (1, rfunc (w / pow (2, lx))) - // - // - // levelHeight(ly) returns the height of a level with level - // number (*, ly), where * is any number. - // - // return value is: - // max (1, rfunc (h / pow (2, ly))) - // - //---------------------------------------------------------- - - IMF_EXPORT - int levelWidth (int lx) const; - IMF_EXPORT - int levelHeight (int ly) const; - - - //-------------------------------------------------------------- - // Number of tiles: - // - // numXTiles(lx) returns the number of tiles in x direction - // that cover a level with level number (lx, *), where * is - // any number. - // - // return value is: - // (levelWidth(lx) + tileXSize() - 1) / tileXSize() - // - // - // numYTiles(ly) returns the number of tiles in y direction - // that cover a level with level number (*, ly), where * is - // any number. - // - // return value is: - // (levelHeight(ly) + tileXSize() - 1) / tileXSize() - // - //-------------------------------------------------------------- - - IMF_EXPORT - int numXTiles (int lx = 0) const; - IMF_EXPORT - int numYTiles (int ly = 0) const; - - - //--------------------------------------------------------------- - // Level pixel ranges: - // - // dataWindowForLevel(lx, ly) returns a 2-dimensional region of - // valid pixel coordinates for a level with level number (lx, ly) - // - // return value is a Box2i with min value: - // (dataWindow.min.x, dataWindow.min.y) - // - // and max value: - // (dataWindow.min.x + levelWidth(lx) - 1, - // dataWindow.min.y + levelHeight(ly) - 1) - // - // dataWindowForLevel(level) is a convenience function used - // for ONE_LEVEL and MIPMAP_LEVELS files. It returns - // dataWindowForLevel(level, level). - // - //--------------------------------------------------------------- - - IMF_EXPORT - IMATH_NAMESPACE::Box2i dataWindowForLevel (int l = 0) const; - IMF_EXPORT - IMATH_NAMESPACE::Box2i dataWindowForLevel (int lx, int ly) const; - - - //------------------------------------------------------------------- - // Tile pixel ranges: - // - // dataWindowForTile(dx, dy, lx, ly) returns a 2-dimensional - // region of valid pixel coordinates for a tile with tile coordinates - // (dx,dy) and level number (lx, ly). - // - // return value is a Box2i with min value: - // (dataWindow.min.x + dx * tileXSize(), - // dataWindow.min.y + dy * tileYSize()) - // - // and max value: - // (dataWindow.min.x + (dx + 1) * tileXSize() - 1, - // dataWindow.min.y + (dy + 1) * tileYSize() - 1) - // - // dataWindowForTile(dx, dy, level) is a convenience function - // used for ONE_LEVEL and MIPMAP_LEVELS files. It returns - // dataWindowForTile(dx, dy, level, level). - // - //------------------------------------------------------------------- - - IMF_EXPORT - IMATH_NAMESPACE::Box2i dataWindowForTile (int dx, int dy, int l = 0) const; - - IMF_EXPORT - IMATH_NAMESPACE::Box2i dataWindowForTile (int dx, int dy, - int lx, int ly) const; - - //------------------------------------------------------------ - // Read pixel data: - // - // readTile(dx, dy, lx, ly) reads the tile with tile - // coordinates (dx, dy), and level number (lx, ly), - // and stores it in the current frame buffer. - // - // dx must lie in the interval [0, numXTiles(lx)-1] - // dy must lie in the interval [0, numYTiles(ly)-1] - // - // lx must lie in the interval [0, numXLevels()-1] - // ly must lie in the inverval [0, numYLevels()-1] - // - // readTile(dx, dy, level) is a convenience function used - // for ONE_LEVEL and MIPMAP_LEVELS files. It calls - // readTile(dx, dy, level, level). - // - // The two readTiles(dx1, dx2, dy1, dy2, ...) functions allow - // reading multiple tiles at once. If multi-threading is used - // the multiple tiles are read concurrently. - // - // Pixels that are outside the pixel coordinate range for the - // tile's level, are never accessed by readTile(). - // - // Attempting to access a tile that is not present in the file - // throws an InputExc exception. - // - //------------------------------------------------------------ - - IMF_EXPORT - void readTile (int dx, int dy, int l = 0); - IMF_EXPORT - void readTile (int dx, int dy, int lx, int ly); - - IMF_EXPORT - void readTiles (int dx1, int dx2, int dy1, int dy2, - int lx, int ly); - - IMF_EXPORT - void readTiles (int dx1, int dx2, int dy1, int dy2, - int l = 0); - - - //-------------------------------------------------- - // Read a tile of raw pixel data from the file, - // without uncompressing it (this function is - // used to implement TiledOutputFile::copyPixels()). - // - // for single part files, reads the next tile in the file - // for multipart files, reads the tile specified by dx,dy,lx,ly - // - //-------------------------------------------------- - - IMF_EXPORT - void rawTileData (int &dx, int &dy, - int &lx, int &ly, - const char *&pixelData, - int &pixelDataSize); - - struct Data; - - private: - - friend class InputFile; - friend class MultiPartInputFile; - - TiledInputFile (InputPartData* part); - - TiledInputFile (const TiledInputFile &); // not implemented - TiledInputFile & operator = (const TiledInputFile &); // not implemented - - TiledInputFile (const Header &header, OPENEXR_IMF_INTERNAL_NAMESPACE::IStream *is, int version, - int numThreads); - - void initialize (); - void multiPartInitialize(InputPartData* part); - void compatibilityInitialize(OPENEXR_IMF_INTERNAL_NAMESPACE::IStream& is); - - bool isValidTile (int dx, int dy, - int lx, int ly) const; - - size_t bytesPerLineForTile (int dx, int dy, - int lx, int ly) const; - - void tileOrder(int dx[],int dy[],int lx[],int ly[]) const; - Data * _data; - - friend void TiledOutputFile::copyPixels(TiledInputFile &); -}; - - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT - - - - - -#endif diff --git a/3rdparty/openexr/IlmImf/ImfTiledInputPart.cpp b/3rdparty/openexr/IlmImf/ImfTiledInputPart.cpp deleted file mode 100644 index 3f89d95dc4..0000000000 --- a/3rdparty/openexr/IlmImf/ImfTiledInputPart.cpp +++ /dev/null @@ -1,208 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2011, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - -#include "ImfTiledInputPart.h" -#include "ImfNamespace.h" - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_ENTER - -TiledInputPart::TiledInputPart(MultiPartInputFile& multiPartFile, int partNumber) -{ - file = multiPartFile.getInputPart(partNumber); -} - -const char * -TiledInputPart::fileName () const -{ - return file->fileName(); -} - -const Header & -TiledInputPart::header () const -{ - return file->header(); -} - -int -TiledInputPart::version () const -{ - return file->version(); -} - -void -TiledInputPart::setFrameBuffer (const FrameBuffer &frameBuffer) -{ - file->setFrameBuffer(frameBuffer); -} - -const FrameBuffer & -TiledInputPart::frameBuffer () const -{ - return file->frameBuffer(); -} - -bool -TiledInputPart::isComplete () const -{ - return file->isComplete(); -} - -unsigned int -TiledInputPart::tileXSize () const -{ - return file->tileXSize(); -} - -unsigned int -TiledInputPart::tileYSize () const -{ - return file->tileYSize(); -} - -LevelMode -TiledInputPart::levelMode () const -{ - return file->levelMode(); -} - -LevelRoundingMode -TiledInputPart::levelRoundingMode () const -{ - return file->levelRoundingMode(); -} - -int -TiledInputPart::numLevels () const -{ - return file->numLevels(); -} - -int -TiledInputPart::numXLevels () const -{ - return file->numXLevels(); -} - -int -TiledInputPart::numYLevels () const -{ - return file->numYLevels(); -} - -bool -TiledInputPart::isValidLevel (int lx, int ly) const -{ - return file->isValidLevel(lx, ly); -} - -int -TiledInputPart::levelWidth (int lx) const -{ - return file->levelWidth(lx); -} - -int -TiledInputPart::levelHeight (int ly) const -{ - return file->levelHeight(ly); -} - -int -TiledInputPart::numXTiles (int lx) const -{ - return file->numXTiles(lx); -} - -int -TiledInputPart::numYTiles (int ly) const -{ - return file->numYTiles(ly); -} - -IMATH_NAMESPACE::Box2i -TiledInputPart::dataWindowForLevel (int l) const -{ - return file->dataWindowForLevel(l); -} - -IMATH_NAMESPACE::Box2i -TiledInputPart::dataWindowForLevel (int lx, int ly) const -{ - return file->dataWindowForLevel(lx, ly); -} - -IMATH_NAMESPACE::Box2i -TiledInputPart::dataWindowForTile (int dx, int dy, int l) const -{ - return file->dataWindowForTile(dx, dy, l); -} - -IMATH_NAMESPACE::Box2i -TiledInputPart::dataWindowForTile (int dx, int dy, int lx, int ly) const -{ - return file->dataWindowForTile(dx, dy, lx, ly); -} - -void -TiledInputPart::readTile (int dx, int dy, int l) -{ - file->readTile(dx, dy, l); -} - -void -TiledInputPart::readTile (int dx, int dy, int lx, int ly) -{ - file->readTile(dx, dy, lx, ly); -} - -void -TiledInputPart::readTiles (int dx1, int dx2, int dy1, int dy2, int lx, int ly) -{ - file->readTiles(dx1, dx2, dy1, dy2, lx, ly); -} - -void -TiledInputPart::readTiles (int dx1, int dx2, int dy1, int dy2, int l) -{ - file->readTiles(dx1, dx2, dy1, dy2, l); -} - -void -TiledInputPart::rawTileData (int &dx, int &dy, int &lx, int &ly, - const char *&pixelData, int &pixelDataSize) -{ - file->rawTileData(dx, dy, lx, ly, pixelData, pixelDataSize); -} - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_EXIT diff --git a/3rdparty/openexr/IlmImf/ImfTiledInputPart.h b/3rdparty/openexr/IlmImf/ImfTiledInputPart.h deleted file mode 100644 index 4132ab8cec..0000000000 --- a/3rdparty/openexr/IlmImf/ImfTiledInputPart.h +++ /dev/null @@ -1,128 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2011, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - -#ifndef IMFTILEDINPUTPART_H_ -#define IMFTILEDINPUTPART_H_ - -#include "ImfMultiPartInputFile.h" -#include "ImfTiledInputFile.h" -#include "ImfNamespace.h" -#include "ImfForward.h" -#include "ImfExport.h" - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER - -//----------------------------------------------------------------------------- -// class TiledInputPart: -// -// Same interface as TiledInputFile. Please have a reference to TiledInputFile. -//----------------------------------------------------------------------------- - -class TiledInputPart -{ - public: - IMF_EXPORT - TiledInputPart(MultiPartInputFile& multiPartFile, int partNumber); - - IMF_EXPORT - const char * fileName () const; - IMF_EXPORT - const Header & header () const; - IMF_EXPORT - int version () const; - IMF_EXPORT - void setFrameBuffer (const FrameBuffer &frameBuffer); - IMF_EXPORT - const FrameBuffer & frameBuffer () const; - IMF_EXPORT - bool isComplete () const; - IMF_EXPORT - unsigned int tileXSize () const; - IMF_EXPORT - unsigned int tileYSize () const; - IMF_EXPORT - LevelMode levelMode () const; - IMF_EXPORT - LevelRoundingMode levelRoundingMode () const; - IMF_EXPORT - int numLevels () const; - IMF_EXPORT - int numXLevels () const; - IMF_EXPORT - int numYLevels () const; - IMF_EXPORT - bool isValidLevel (int lx, int ly) const; - IMF_EXPORT - int levelWidth (int lx) const; - IMF_EXPORT - int levelHeight (int ly) const; - IMF_EXPORT - int numXTiles (int lx = 0) const; - IMF_EXPORT - int numYTiles (int ly = 0) const; - IMF_EXPORT - IMATH_NAMESPACE::Box2i dataWindowForLevel (int l = 0) const; - IMF_EXPORT - IMATH_NAMESPACE::Box2i dataWindowForLevel (int lx, int ly) const; - IMF_EXPORT - IMATH_NAMESPACE::Box2i dataWindowForTile (int dx, int dy, int l = 0) const; - IMF_EXPORT - IMATH_NAMESPACE::Box2i dataWindowForTile (int dx, int dy, - int lx, int ly) const; - IMF_EXPORT - void readTile (int dx, int dy, int l = 0); - IMF_EXPORT - void readTile (int dx, int dy, int lx, int ly); - IMF_EXPORT - void readTiles (int dx1, int dx2, int dy1, int dy2, - int lx, int ly); - IMF_EXPORT - void readTiles (int dx1, int dx2, int dy1, int dy2, - int l = 0); - IMF_EXPORT - void rawTileData (int &dx, int &dy, - int &lx, int &ly, - const char *&pixelData, - int &pixelDataSize); - - private: - TiledInputFile* file; - // for internal use - allow TiledOutputFile access to file for copyPixels - friend class TiledOutputFile; - -}; - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT - -#endif /* IMFTILEDINPUTPART_H_ */ diff --git a/3rdparty/openexr/IlmImf/ImfTiledMisc.cpp b/3rdparty/openexr/IlmImf/ImfTiledMisc.cpp deleted file mode 100644 index d72d823ad7..0000000000 --- a/3rdparty/openexr/IlmImf/ImfTiledMisc.cpp +++ /dev/null @@ -1,389 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - -//----------------------------------------------------------------------------- -// -// Miscellaneous stuff related to tiled files -// -//----------------------------------------------------------------------------- - -#include -#include "Iex.h" -#include -#include -#include -#include - -#include "ImfNamespace.h" - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_ENTER - -using IMATH_NAMESPACE::Box2i; -using IMATH_NAMESPACE::V2i; - - -int -levelSize (int min, int max, int l, LevelRoundingMode rmode) -{ - if (l < 0) - throw IEX_NAMESPACE::ArgExc ("Argument not in valid range."); - - int a = max - min + 1; - int b = (1 << l); - int size = a / b; - - if (rmode == ROUND_UP && size * b < a) - size += 1; - - return std::max (size, 1); -} - - -Box2i -dataWindowForLevel (const TileDescription &tileDesc, - int minX, int maxX, - int minY, int maxY, - int lx, int ly) -{ - V2i levelMin = V2i (minX, minY); - - V2i levelMax = levelMin + - V2i (levelSize (minX, maxX, lx, tileDesc.roundingMode) - 1, - levelSize (minY, maxY, ly, tileDesc.roundingMode) - 1); - - return Box2i(levelMin, levelMax); -} - - -Box2i -dataWindowForTile (const TileDescription &tileDesc, - int minX, int maxX, - int minY, int maxY, - int dx, int dy, - int lx, int ly) -{ - V2i tileMin = V2i (minX + dx * tileDesc.xSize, - minY + dy * tileDesc.ySize); - - V2i tileMax = tileMin + V2i (tileDesc.xSize - 1, tileDesc.ySize - 1); - - V2i levelMax = dataWindowForLevel - (tileDesc, minX, maxX, minY, maxY, lx, ly).max; - - tileMax = V2i (std::min (tileMax[0], levelMax[0]), - std::min (tileMax[1], levelMax[1])); - - return Box2i (tileMin, tileMax); -} - - -size_t -calculateBytesPerPixel (const Header &header) -{ - const ChannelList &channels = header.channels(); - - size_t bytesPerPixel = 0; - - for (ChannelList::ConstIterator c = channels.begin(); - c != channels.end(); - ++c) - { - bytesPerPixel += pixelTypeSize (c.channel().type); - } - - return bytesPerPixel; -} - - -void -calculateBytesPerLine (const Header &header, - char* sampleCountBase, - int sampleCountXStride, - int sampleCountYStride, - int minX, int maxX, - int minY, int maxY, - std::vector& xOffsets, - std::vector& yOffsets, - std::vector& bytesPerLine) -{ - const ChannelList &channels = header.channels(); - - int pos = 0; - for (ChannelList::ConstIterator c = channels.begin(); - c != channels.end(); - ++c, ++pos) - { - int xOffset = xOffsets[pos]; - int yOffset = yOffsets[pos]; - int i = 0; - for (int y = minY - yOffset; y <= maxY - yOffset; y++, i++) - for (int x = minX - xOffset; x <= maxX - xOffset; x++) - { - bytesPerLine[i] += sampleCount(sampleCountBase, - sampleCountXStride, - sampleCountYStride, - x, y) - * pixelTypeSize (c.channel().type); - } - } -} - - -namespace { - -int -floorLog2 (int x) -{ - // - // For x > 0, floorLog2(y) returns floor(log(x)/log(2)). - // - - int y = 0; - - while (x > 1) - { - y += 1; - x >>= 1; - } - - return y; -} - - -int -ceilLog2 (int x) -{ - // - // For x > 0, ceilLog2(y) returns ceil(log(x)/log(2)). - // - - int y = 0; - int r = 0; - - while (x > 1) - { - if (x & 1) - r = 1; - - y += 1; - x >>= 1; - } - - return y + r; -} - - -int -roundLog2 (int x, LevelRoundingMode rmode) -{ - return (rmode == ROUND_DOWN)? floorLog2 (x): ceilLog2 (x); -} - - -int -calculateNumXLevels (const TileDescription& tileDesc, - int minX, int maxX, - int minY, int maxY) -{ - int num = 0; - - switch (tileDesc.mode) - { - case ONE_LEVEL: - - num = 1; - break; - - case MIPMAP_LEVELS: - - { - int w = maxX - minX + 1; - int h = maxY - minY + 1; - num = roundLog2 (std::max (w, h), tileDesc.roundingMode) + 1; - } - break; - - case RIPMAP_LEVELS: - - { - int w = maxX - minX + 1; - num = roundLog2 (w, tileDesc.roundingMode) + 1; - } - break; - - default: - - throw IEX_NAMESPACE::ArgExc ("Unknown LevelMode format."); - } - - return num; -} - - -int -calculateNumYLevels (const TileDescription& tileDesc, - int minX, int maxX, - int minY, int maxY) -{ - int num = 0; - - switch (tileDesc.mode) - { - case ONE_LEVEL: - - num = 1; - break; - - case MIPMAP_LEVELS: - - { - int w = maxX - minX + 1; - int h = maxY - minY + 1; - num = roundLog2 (std::max (w, h), tileDesc.roundingMode) + 1; - } - break; - - case RIPMAP_LEVELS: - - { - int h = maxY - minY + 1; - num = roundLog2 (h, tileDesc.roundingMode) + 1; - } - break; - - default: - - throw IEX_NAMESPACE::ArgExc ("Unknown LevelMode format."); - } - - return num; -} - - -void -calculateNumTiles (int *numTiles, - int numLevels, - int min, int max, - int size, - LevelRoundingMode rmode) -{ - for (int i = 0; i < numLevels; i++) - { - numTiles[i] = (levelSize (min, max, i, rmode) + size - 1) / size; - } -} - -} // namespace - - -void -precalculateTileInfo (const TileDescription& tileDesc, - int minX, int maxX, - int minY, int maxY, - int *&numXTiles, int *&numYTiles, - int &numXLevels, int &numYLevels) -{ - numXLevels = calculateNumXLevels(tileDesc, minX, maxX, minY, maxY); - numYLevels = calculateNumYLevels(tileDesc, minX, maxX, minY, maxY); - - numXTiles = new int[numXLevels]; - numYTiles = new int[numYLevels]; - - calculateNumTiles (numXTiles, - numXLevels, - minX, maxX, - tileDesc.xSize, - tileDesc.roundingMode); - - calculateNumTiles (numYTiles, - numYLevels, - minY, maxY, - tileDesc.ySize, - tileDesc.roundingMode); -} - - -int -getTiledChunkOffsetTableSize(const Header& header) -{ - // - // Save the dataWindow information - // - - const Box2i &dataWindow = header.dataWindow(); - - // - // Precompute level and tile information. - // - - int* numXTiles; - int* numYTiles; - int numXLevels; - int numYLevels; - precalculateTileInfo (header.tileDescription(), - dataWindow.min.x, dataWindow.max.x, - dataWindow.min.y, dataWindow.max.y, - numXTiles, numYTiles, - numXLevels, numYLevels); - - // - // Calculate lineOffsetSize. - // - int lineOffsetSize = 0; - const TileDescription &desc = header.tileDescription(); - switch (desc.mode) - { - case ONE_LEVEL: - case MIPMAP_LEVELS: - for (int i = 0; i < numXLevels; i++) - lineOffsetSize += numXTiles[i] * numYTiles[i]; - break; - case RIPMAP_LEVELS: - for (int i = 0; i < numXLevels; i++) - for (int j = 0; j < numYLevels; j++) - lineOffsetSize += numXTiles[i] * numYTiles[j]; - break; - case NUM_LEVELMODES : - throw IEX_NAMESPACE::LogicExc("Bad level mode getting chunk offset table size"); - } - - delete[] numXTiles; - delete[] numYTiles; - - return lineOffsetSize; -} - - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_EXIT diff --git a/3rdparty/openexr/IlmImf/ImfTiledMisc.h b/3rdparty/openexr/IlmImf/ImfTiledMisc.h deleted file mode 100644 index 2696663651..0000000000 --- a/3rdparty/openexr/IlmImf/ImfTiledMisc.h +++ /dev/null @@ -1,106 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - -#ifndef INCLUDED_IMF_TILED_MISC_H -#define INCLUDED_IMF_TILED_MISC_H - -//----------------------------------------------------------------------------- -// -// Miscellaneous stuff related to tiled files -// -//----------------------------------------------------------------------------- - -#include "ImathBox.h" -#include "ImfHeader.h" -#include "ImfNamespace.h" - -#include -#include - - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER - -IMF_EXPORT -int levelSize (int min, int max, int l, LevelRoundingMode rmode); - -IMF_EXPORT -IMATH_NAMESPACE::Box2i dataWindowForLevel (const TileDescription &tileDesc, - int minX, int maxX, - int minY, int maxY, - int lx, int ly); - -IMF_EXPORT -IMATH_NAMESPACE::Box2i dataWindowForTile (const TileDescription &tileDesc, - int minX, int maxX, - int minY, int maxY, - int dx, int dy, - int lx, int ly); - -IMF_EXPORT -size_t calculateBytesPerPixel (const Header &header); - -// -// Calculate the count of bytes for each lines in range [minY, maxY], -// and pixels in range [minX, maxX]. -// Data will be saved in bytesPerLine. -// sampleCountBase, sampleCountXStride and sampleCountYStride are -// used to get the sample count values. -// - -IMF_EXPORT -void calculateBytesPerLine (const Header &header, - char* sampleCountBase, - int sampleCountXStride, - int sampleCountYStride, - int minX, int maxX, - int minY, int maxY, - std::vector& xOffsets, - std::vector& yOffsets, - std::vector& bytesPerLine); - -IMF_EXPORT -void precalculateTileInfo (const TileDescription& tileDesc, - int minX, int maxX, - int minY, int maxY, - int *&numXTiles, int *&numYTiles, - int &numXLevels, int &numYLevels); - -IMF_EXPORT -int getTiledChunkOffsetTableSize(const Header& header); - - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT - -#endif diff --git a/3rdparty/openexr/IlmImf/ImfTiledOutputFile.cpp b/3rdparty/openexr/IlmImf/ImfTiledOutputFile.cpp deleted file mode 100644 index b9572d0bc2..0000000000 --- a/3rdparty/openexr/IlmImf/ImfTiledOutputFile.cpp +++ /dev/null @@ -1,1845 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - -//----------------------------------------------------------------------------- -// -// class TiledOutputFile -// -//----------------------------------------------------------------------------- - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "ImathBox.h" -#include -#include -#include -#include -#include -#include -#include "IlmThreadPool.h" -#include "IlmThreadSemaphore.h" -#include "IlmThreadMutex.h" -#include "ImfOutputStreamMutex.h" -#include "ImfOutputPartData.h" -#include "Iex.h" -#include -#include -#include -#include -#include -#include - -#include "ImfNamespace.h" - - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_ENTER - -using IMATH_NAMESPACE::Box2i; -using IMATH_NAMESPACE::V2i; -using std::string; -using std::vector; -using std::ofstream; -using std::map; -using std::min; -using std::max; -using std::swap; -using ILMTHREAD_NAMESPACE::Mutex; -using ILMTHREAD_NAMESPACE::Lock; -using ILMTHREAD_NAMESPACE::Semaphore; -using ILMTHREAD_NAMESPACE::Task; -using ILMTHREAD_NAMESPACE::TaskGroup; -using ILMTHREAD_NAMESPACE::ThreadPool; - -namespace { - -struct TOutSliceInfo -{ - PixelType type; - const char * base; - size_t xStride; - size_t yStride; - bool zero; - int xTileCoords; - int yTileCoords; - - TOutSliceInfo (PixelType type = HALF, - const char *base = 0, - size_t xStride = 0, - size_t yStride = 0, - bool zero = false, - int xTileCoords = 0, - int yTileCoords = 0); -}; - - -TOutSliceInfo::TOutSliceInfo (PixelType t, - const char *b, - size_t xs, size_t ys, - bool z, - int xtc, - int ytc) -: - type (t), - base (b), - xStride (xs), - yStride (ys), - zero (z), - xTileCoords (xtc), - yTileCoords (ytc) -{ - // empty -} - - -struct TileCoord -{ - int dx; - int dy; - int lx; - int ly; - - - TileCoord (int xTile = 0, int yTile = 0, - int xLevel = 0, int yLevel = 0) - : - dx (xTile), dy (yTile), - lx (xLevel), ly (yLevel) - { - // empty - } - - - bool - operator < (const TileCoord &other) const - { - return (ly < other.ly) || - (ly == other.ly && lx < other.lx) || - ((ly == other.ly && lx == other.lx) && - ((dy < other.dy) || (dy == other.dy && dx < other.dx))); - } - - - bool - operator == (const TileCoord &other) const - { - return lx == other.lx && - ly == other.ly && - dx == other.dx && - dy == other.dy; - } -}; - - -struct BufferedTile -{ - char * pixelData; - int pixelDataSize; - - BufferedTile (const char *data, int size): - pixelData (0), - pixelDataSize(size) - { - pixelData = new char[pixelDataSize]; - memcpy (pixelData, data, pixelDataSize); - } - - ~BufferedTile() - { - delete [] pixelData; - } -}; - - -typedef map TileMap; - - -struct TileBuffer -{ - Array buffer; - const char * dataPtr; - int dataSize; - Compressor * compressor; - TileCoord tileCoord; - bool hasException; - string exception; - - TileBuffer (Compressor *comp); - ~TileBuffer (); - - inline void wait () {_sem.wait();} - inline void post () {_sem.post();} - - protected: - - Semaphore _sem; -}; - - -TileBuffer::TileBuffer (Compressor *comp): - dataPtr (0), - dataSize (0), - compressor (comp), - hasException (false), - exception (), - _sem (1) -{ - // empty -} - - -TileBuffer::~TileBuffer () -{ - delete compressor; -} - - -} // namespace - - -struct TiledOutputFile::Data -{ - Header header; // the image header - int version; // file format version - bool multipart; // part came from a multipart file - TileDescription tileDesc; // describes the tile layout - FrameBuffer frameBuffer; // framebuffer to write into - Int64 previewPosition; - LineOrder lineOrder; // the file's lineorder - int minX; // data window's min x coord - int maxX; // data window's max x coord - int minY; // data window's min y coord - int maxY; // data window's max x coord - - int numXLevels; // number of x levels - int numYLevels; // number of y levels - int * numXTiles; // number of x tiles at a level - int * numYTiles; // number of y tiles at a level - - TileOffsets tileOffsets; // stores offsets in file for - // each tile - - Compressor::Format format; // compressor's data format - vector slices; // info about channels in file - - size_t maxBytesPerTileLine; // combined size of a tile line - // over all channels - - - vector tileBuffers; - size_t tileBufferSize; // size of a tile buffer - - Int64 tileOffsetsPosition; // position of the tile index - - TileMap tileMap; - TileCoord nextTileToWrite; - - int partNumber; // the output part number - - Data (int numThreads); - ~Data (); - - inline TileBuffer * getTileBuffer (int number); - // hash function from tile - // buffer coords into our - // vector of tile buffers - - TileCoord nextTileCoord (const TileCoord &a); -}; - - -TiledOutputFile::Data::Data (int numThreads): - multipart(false), - numXTiles(0), - numYTiles(0), - tileOffsetsPosition (0), - partNumber(-1) -{ - // - // We need at least one tileBuffer, but if threading is used, - // to keep n threads busy we need 2*n tileBuffers - // - - tileBuffers.resize (max (1, 2 * numThreads)); -} - - -TiledOutputFile::Data::~Data () -{ - delete [] numXTiles; - delete [] numYTiles; - - // - // Delete all the tile buffers, if any still happen to exist - // - - for (TileMap::iterator i = tileMap.begin(); i != tileMap.end(); ++i) - delete i->second; - - for (size_t i = 0; i < tileBuffers.size(); i++) - delete tileBuffers[i]; -} - - -TileBuffer* -TiledOutputFile::Data::getTileBuffer (int number) -{ - return tileBuffers[number % tileBuffers.size()]; -} - - -TileCoord -TiledOutputFile::Data::nextTileCoord (const TileCoord &a) -{ - TileCoord b = a; - - if (lineOrder == INCREASING_Y) - { - b.dx++; - - if (b.dx >= numXTiles[b.lx]) - { - b.dx = 0; - b.dy++; - - if (b.dy >= numYTiles[b.ly]) - { - // - // the next tile is in the next level - // - - b.dy = 0; - - switch (tileDesc.mode) - { - case ONE_LEVEL: - case MIPMAP_LEVELS: - - b.lx++; - b.ly++; - break; - - case RIPMAP_LEVELS: - - b.lx++; - - if (b.lx >= numXLevels) - { - b.lx = 0; - b.ly++; - - #ifdef DEBUG - assert (b.ly <= numYLevels); - #endif - } - break; - case NUM_LEVELMODES: - throw(IEX_NAMESPACE::ArgExc("Invalid tile description")); - - } - } - } - } - else if (lineOrder == DECREASING_Y) - { - b.dx++; - - if (b.dx >= numXTiles[b.lx]) - { - b.dx = 0; - b.dy--; - - if (b.dy < 0) - { - // - // the next tile is in the next level - // - - switch (tileDesc.mode) - { - case ONE_LEVEL: - case MIPMAP_LEVELS: - - b.lx++; - b.ly++; - break; - - case RIPMAP_LEVELS: - - b.lx++; - - if (b.lx >= numXLevels) - { - b.lx = 0; - b.ly++; - - #ifdef DEBUG - assert (b.ly <= numYLevels); - #endif - } - break; - case NUM_LEVELMODES: - throw(IEX_NAMESPACE::ArgExc("Invalid tile description")); - - } - - if (b.ly < numYLevels) - b.dy = numYTiles[b.ly] - 1; - } - } - } - - return b; -} - - -namespace { - -void -writeTileData (OutputStreamMutex *streamData, - TiledOutputFile::Data *ofd, - int dx, int dy, - int lx, int ly, - const char pixelData[], - int pixelDataSize) -{ - // - // Store a block of pixel data in the output file, and try - // to keep track of the current writing position the file, - // without calling tellp() (tellp() can be fairly expensive). - // - - Int64 currentPosition = streamData->currentPosition; - streamData->currentPosition = 0; - - if (currentPosition == 0) - currentPosition = streamData->os->tellp(); - - ofd->tileOffsets (dx, dy, lx, ly) = currentPosition; - - #ifdef DEBUG - assert (streamData->os->tellp() == currentPosition); - #endif - - // - // Write the tile header. - // - - if (ofd->multipart) - { - Xdr::write (*streamData->os, ofd->partNumber); - } - Xdr::write (*streamData->os, dx); - Xdr::write (*streamData->os, dy); - Xdr::write (*streamData->os, lx); - Xdr::write (*streamData->os, ly); - Xdr::write (*streamData->os, pixelDataSize); - - streamData->os->write (pixelData, pixelDataSize); - - // - // Keep current position in the file so that we can avoid - // redundant seekg() operations (seekg() can be fairly expensive). - // - - streamData->currentPosition = currentPosition + - 5 * Xdr::size() + - pixelDataSize; - - if (ofd->multipart) - { - streamData->currentPosition += Xdr::size(); - } -} - - - -void -bufferedTileWrite (OutputStreamMutex *streamData, - TiledOutputFile::Data *ofd, - int dx, int dy, - int lx, int ly, - const char pixelData[], - int pixelDataSize) -{ - // - // Check if a tile with coordinates (dx,dy,lx,ly) has already been written. - // - - if (ofd->tileOffsets (dx, dy, lx, ly)) - { - THROW (IEX_NAMESPACE::ArgExc, - "Attempt to write tile " - "(" << dx << ", " << dy << ", " << lx << ", " << ly << ") " - "more than once."); - } - - // - // If tiles can be written in random order, then don't buffer anything. - // - - if (ofd->lineOrder == RANDOM_Y) - { - writeTileData (streamData, ofd, dx, dy, lx, ly, pixelData, pixelDataSize); - return; - } - - // - // If the tiles cannot be written in random order, then check if a - // tile with coordinates (dx,dy,lx,ly) has already been buffered. - // - - TileCoord currentTile = TileCoord(dx, dy, lx, ly); - - if (ofd->tileMap.find (currentTile) != ofd->tileMap.end()) - { - THROW (IEX_NAMESPACE::ArgExc, - "Attempt to write tile " - "(" << dx << ", " << dy << ", " << lx << ", " << ly << ") " - "more than once."); - } - - // - // If all the tiles before this one have already been written to the file, - // then write this tile immediately and check if we have buffered tiles - // that can be written after this tile. - // - // Otherwise, buffer the tile so it can be written to file later. - // - - if (ofd->nextTileToWrite == currentTile) - { - writeTileData (streamData, ofd, dx, dy, lx, ly, pixelData, pixelDataSize); - ofd->nextTileToWrite = ofd->nextTileCoord (ofd->nextTileToWrite); - - TileMap::iterator i = ofd->tileMap.find (ofd->nextTileToWrite); - - // - // Step through the tiles and write all successive buffered tiles after - // the current one. - // - - while(i != ofd->tileMap.end()) - { - // - // Write the tile, and then delete the tile's buffered data - // - - writeTileData (streamData, - ofd, - i->first.dx, i->first.dy, - i->first.lx, i->first.ly, - i->second->pixelData, - i->second->pixelDataSize); - - delete i->second; - ofd->tileMap.erase (i); - - // - // Proceed to the next tile - // - - ofd->nextTileToWrite = ofd->nextTileCoord (ofd->nextTileToWrite); - i = ofd->tileMap.find (ofd->nextTileToWrite); - } - } - else - { - // - // Create a new BufferedTile, copy the pixelData into it, and - // insert it into the tileMap. - // - - ofd->tileMap[currentTile] = - new BufferedTile ((const char *)pixelData, pixelDataSize); - } -} - - -void -convertToXdr (TiledOutputFile::Data *ofd, - Array& tileBuffer, - int numScanLines, - int numPixelsPerScanLine) -{ - // - // Convert the contents of a TiledOutputFile's tileBuffer from the - // machine's native representation to Xdr format. This function is called - // by writeTile(), below, if the compressor wanted its input pixel data - // in the machine's native format, but then failed to compress the data - // (most compressors will expand rather than compress random input data). - // - // Note that this routine assumes that the machine's native representation - // of the pixel data has the same size as the Xdr representation. This - // makes it possible to convert the pixel data in place, without an - // intermediate temporary buffer. - // - - // - // Set these to point to the start of the tile. - // We will write to toPtr, and read from fromPtr. - // - - char *writePtr = tileBuffer; - const char *readPtr = writePtr; - - // - // Iterate over all scan lines in the tile. - // - - for (int y = 0; y < numScanLines; ++y) - { - // - // Iterate over all slices in the file. - // - - for (unsigned int i = 0; i < ofd->slices.size(); ++i) - { - const TOutSliceInfo &slice = ofd->slices[i]; - - // - // Convert the samples in place. - // - - convertInPlace (writePtr, readPtr, slice.type, - numPixelsPerScanLine); - } - } - - #ifdef DEBUG - - assert (writePtr == readPtr); - - #endif -} - - -// -// A TileBufferTask encapsulates the task of copying a tile from -// the user's framebuffer into a LineBuffer and compressing the data -// if necessary. -// - -class TileBufferTask: public Task -{ - public: - - TileBufferTask (TaskGroup *group, - TiledOutputFile::Data *ofd, - int number, - int dx, int dy, - int lx, int ly); - - virtual ~TileBufferTask (); - - virtual void execute (); - - private: - - TiledOutputFile::Data * _ofd; - TileBuffer * _tileBuffer; -}; - - -TileBufferTask::TileBufferTask - (TaskGroup *group, - TiledOutputFile::Data *ofd, - int number, - int dx, int dy, - int lx, int ly) -: - Task (group), - _ofd (ofd), - _tileBuffer (_ofd->getTileBuffer (number)) -{ - // - // Wait for the tileBuffer to become available - // - - _tileBuffer->wait (); - _tileBuffer->tileCoord = TileCoord (dx, dy, lx, ly); -} - - -TileBufferTask::~TileBufferTask () -{ - // - // Signal that the tile buffer is now free - // - - _tileBuffer->post (); -} - - -void -TileBufferTask::execute () -{ - try - { - // - // First copy the pixel data from the frame buffer - // into the tile buffer - // - // Convert one tile's worth of pixel data to - // a machine-independent representation, and store - // the result in _tileBuffer->buffer. - // - - char *writePtr = _tileBuffer->buffer; - - Box2i tileRange = dataWindowForTile (_ofd->tileDesc, - _ofd->minX, _ofd->maxX, - _ofd->minY, _ofd->maxY, - _tileBuffer->tileCoord.dx, - _tileBuffer->tileCoord.dy, - _tileBuffer->tileCoord.lx, - _tileBuffer->tileCoord.ly); - - int numScanLines = tileRange.max.y - tileRange.min.y + 1; - int numPixelsPerScanLine = tileRange.max.x - tileRange.min.x + 1; - - // - // Iterate over the scan lines in the tile. - // - - for (int y = tileRange.min.y; y <= tileRange.max.y; ++y) - { - // - // Iterate over all image channels. - // - - for (unsigned int i = 0; i < _ofd->slices.size(); ++i) - { - const TOutSliceInfo &slice = _ofd->slices[i]; - - // - // These offsets are used to facilitate both absolute - // and tile-relative pixel coordinates. - // - - int xOffset = slice.xTileCoords * tileRange.min.x; - int yOffset = slice.yTileCoords * tileRange.min.y; - - // - // Fill the tile buffer with pixel data. - // - - if (slice.zero) - { - // - // The frame buffer contains no data for this channel. - // Store zeroes in _data->tileBuffer. - // - - fillChannelWithZeroes (writePtr, _ofd->format, slice.type, - numPixelsPerScanLine); - } - else - { - // - // The frame buffer contains data for this channel. - // - - const char *readPtr = slice.base + - (y - yOffset) * slice.yStride + - (tileRange.min.x - xOffset) * - slice.xStride; - - const char *endPtr = readPtr + - (numPixelsPerScanLine - 1) * - slice.xStride; - - copyFromFrameBuffer (writePtr, readPtr, endPtr, - slice.xStride, _ofd->format, - slice.type); - } - } - } - - // - // Compress the contents of the tileBuffer, - // and store the compressed data in the output file. - // - - _tileBuffer->dataSize = writePtr - _tileBuffer->buffer; - _tileBuffer->dataPtr = _tileBuffer->buffer; - - if (_tileBuffer->compressor) - { - const char *compPtr; - - int compSize = _tileBuffer->compressor->compressTile - (_tileBuffer->dataPtr, - _tileBuffer->dataSize, - tileRange, compPtr); - - if (compSize < _tileBuffer->dataSize) - { - _tileBuffer->dataSize = compSize; - _tileBuffer->dataPtr = compPtr; - } - else if (_ofd->format == Compressor::NATIVE) - { - // - // The data did not shrink during compression, but - // we cannot write to the file using native format, - // so we need to convert the lineBuffer to Xdr. - // - - convertToXdr (_ofd, _tileBuffer->buffer, numScanLines, - numPixelsPerScanLine); - } - } - } - catch (std::exception &e) - { - if (!_tileBuffer->hasException) - { - _tileBuffer->exception = e.what (); - _tileBuffer->hasException = true; - } - } - catch (...) - { - if (!_tileBuffer->hasException) - { - _tileBuffer->exception = "unrecognized exception"; - _tileBuffer->hasException = true; - } - } -} - -} // namespace - - -TiledOutputFile::TiledOutputFile - (const char fileName[], - const Header &header, - int numThreads) -: - _data (new Data (numThreads)), - _streamData (new OutputStreamMutex()), - _deleteStream (true) -{ - try - { - header.sanityCheck (true); - _streamData->os = new StdOFStream (fileName); - _data->multipart=false; // since we opened with one header we can't be multipart - initialize (header); - _streamData->currentPosition = _streamData->os->tellp(); - - // Write header and empty offset table to the file. - writeMagicNumberAndVersionField(*_streamData->os, _data->header); - _data->previewPosition = _data->header.writeTo (*_streamData->os, true); - _data->tileOffsetsPosition = _data->tileOffsets.writeTo (*_streamData->os); - } - catch (IEX_NAMESPACE::BaseExc &e) - { - // ~TiledOutputFile will not run, so free memory here - delete _streamData->os; - delete _streamData; - delete _data; - - REPLACE_EXC (e, "Cannot open image file " - "\"" << fileName << "\". " << e.what()); - throw; - } - catch (...) - { - // ~TiledOutputFile will not run, so free memory here - delete _streamData->os; - delete _streamData; - delete _data; - throw; - } -} - - -TiledOutputFile::TiledOutputFile - (OPENEXR_IMF_INTERNAL_NAMESPACE::OStream &os, - const Header &header, - int numThreads) -: - _data (new Data (numThreads)), - _streamData (new OutputStreamMutex()), - _deleteStream (false) -{ - try - { - header.sanityCheck(true); - _streamData->os = &os; - _data->multipart=false; // since we opened with one header we can't be multipart - initialize (header); - _streamData->currentPosition = _streamData->os->tellp(); - - // Write header and empty offset table to the file. - writeMagicNumberAndVersionField(*_streamData->os, _data->header); - _data->previewPosition = _data->header.writeTo (*_streamData->os, true); - _data->tileOffsetsPosition = _data->tileOffsets.writeTo (*_streamData->os); - - } - catch (IEX_NAMESPACE::BaseExc &e) - { - delete _streamData; - delete _data; - - REPLACE_EXC (e, "Cannot open image file " - "\"" << os.fileName() << "\". " << e.what()); - throw; - } - catch (...) - { - delete _streamData; - delete _data; - throw; - } -} - -TiledOutputFile::TiledOutputFile(const OutputPartData* part) : - _deleteStream (false) -{ - try - { - if (part->header.type() != TILEDIMAGE) - throw IEX_NAMESPACE::ArgExc("Can't build a TiledOutputFile from a type-mismatched part."); - - _streamData = part->mutex; - _data = new Data(part->numThreads); - _data->multipart=part->multipart; - initialize(part->header); - _data->partNumber = part->partNumber; - _data->tileOffsetsPosition = part->chunkOffsetTablePosition; - _data->previewPosition = part->previewPosition; - } - catch (IEX_NAMESPACE::BaseExc &e) - { - delete _data; - - REPLACE_EXC (e, "Cannot initialize output part " - "\"" << part->partNumber << "\". " << e.what()); - throw; - } - catch (...) - { - delete _data; - throw; - } -} - -void -TiledOutputFile::initialize (const Header &header) -{ - _data->header = header; - _data->lineOrder = _data->header.lineOrder(); - - - - // - // Check that the file is indeed tiled - // - - _data->tileDesc = _data->header.tileDescription(); - - - // - // 'Fix' the type attribute if it exists but is incorrectly set - // (attribute is optional, but ensure it is correct if it exists) - // - if(_data->header.hasType()) - { - _data->header.setType(TILEDIMAGE); - } - - - // - // Save the dataWindow information - // - - const Box2i &dataWindow = _data->header.dataWindow(); - _data->minX = dataWindow.min.x; - _data->maxX = dataWindow.max.x; - _data->minY = dataWindow.min.y; - _data->maxY = dataWindow.max.y; - - // - // Precompute level and tile information to speed up utility functions - // - - precalculateTileInfo (_data->tileDesc, - _data->minX, _data->maxX, - _data->minY, _data->maxY, - _data->numXTiles, _data->numYTiles, - _data->numXLevels, _data->numYLevels); - - // - // Determine the first tile coordinate that we will be writing - // if the file is not RANDOM_Y. - // - - _data->nextTileToWrite = (_data->lineOrder == INCREASING_Y)? - TileCoord (0, 0, 0, 0): - TileCoord (0, _data->numYTiles[0] - 1, 0, 0); - - _data->maxBytesPerTileLine = - calculateBytesPerPixel (_data->header) * _data->tileDesc.xSize; - - _data->tileBufferSize = _data->maxBytesPerTileLine * _data->tileDesc.ySize; - - // - // Create all the TileBuffers and allocate their internal buffers - // - - for (size_t i = 0; i < _data->tileBuffers.size(); i++) - { - _data->tileBuffers[i] = new TileBuffer (newTileCompressor - (_data->header.compression(), - _data->maxBytesPerTileLine, - _data->tileDesc.ySize, - _data->header)); - - _data->tileBuffers[i]->buffer.resizeErase(_data->tileBufferSize); - } - - _data->format = defaultFormat (_data->tileBuffers[0]->compressor); - - _data->tileOffsets = TileOffsets (_data->tileDesc.mode, - _data->numXLevels, - _data->numYLevels, - _data->numXTiles, - _data->numYTiles); -} - - -TiledOutputFile::~TiledOutputFile () -{ - if (_data) - { - { - Lock lock(*_streamData); - Int64 originalPosition = _streamData->os->tellp(); - - if (_data->tileOffsetsPosition > 0) - { - try - { - _streamData->os->seekp (_data->tileOffsetsPosition); - _data->tileOffsets.writeTo (*_streamData->os); - - // - // Restore the original position. - // - _streamData->os->seekp (originalPosition); - } - catch (...) - { - // - // We cannot safely throw any exceptions from here. - // This destructor may have been called because the - // stack is currently being unwound for another - // exception. - // - } - } - } - - if (_deleteStream && _streamData) - delete _streamData->os; - - if (_data->partNumber == -1) - delete _streamData; - - delete _data; - } -} - - -const char * -TiledOutputFile::fileName () const -{ - return _streamData->os->fileName(); -} - - -const Header & -TiledOutputFile::header () const -{ - return _data->header; -} - - -void -TiledOutputFile::setFrameBuffer (const FrameBuffer &frameBuffer) -{ - Lock lock (*_streamData); - - // - // Check if the new frame buffer descriptor - // is compatible with the image file header. - // - - const ChannelList &channels = _data->header.channels(); - - for (ChannelList::ConstIterator i = channels.begin(); - i != channels.end(); - ++i) - { - FrameBuffer::ConstIterator j = frameBuffer.find (i.name()); - - if (j == frameBuffer.end()) - continue; - - if (i.channel().type != j.slice().type) - THROW (IEX_NAMESPACE::ArgExc, "Pixel type of \"" << i.name() << "\" channel " - "of output file \"" << fileName() << "\" is " - "not compatible with the frame buffer's " - "pixel type."); - - if (j.slice().xSampling != 1 || j.slice().ySampling != 1) - THROW (IEX_NAMESPACE::ArgExc, "All channels in a tiled file must have" - "sampling (1,1)."); - } - - // - // Initialize slice table for writePixels(). - // - - vector slices; - - for (ChannelList::ConstIterator i = channels.begin(); - i != channels.end(); - ++i) - { - FrameBuffer::ConstIterator j = frameBuffer.find (i.name()); - - if (j == frameBuffer.end()) - { - // - // Channel i is not present in the frame buffer. - // In the file, channel i will contain only zeroes. - // - - slices.push_back (TOutSliceInfo (i.channel().type, - 0, // base - 0, // xStride, - 0, // yStride, - true)); // zero - } - else - { - // - // Channel i is present in the frame buffer. - // - - slices.push_back (TOutSliceInfo (j.slice().type, - j.slice().base, - j.slice().xStride, - j.slice().yStride, - false, // zero - (j.slice().xTileCoords)? 1: 0, - (j.slice().yTileCoords)? 1: 0)); - } - } - - // - // Store the new frame buffer. - // - - _data->frameBuffer = frameBuffer; - _data->slices = slices; -} - - -const FrameBuffer & -TiledOutputFile::frameBuffer () const -{ - Lock lock (*_streamData); - return _data->frameBuffer; -} - - -void -TiledOutputFile::writeTiles (int dx1, int dx2, int dy1, int dy2, - int lx, int ly) -{ - try - { - Lock lock (*_streamData); - - if (_data->slices.size() == 0) - throw IEX_NAMESPACE::ArgExc ("No frame buffer specified " - "as pixel data source."); - - if (!isValidTile (dx1, dy1, lx, ly) || !isValidTile (dx2, dy2, lx, ly)) - throw IEX_NAMESPACE::ArgExc ("Tile coordinates are invalid."); - - if (!isValidLevel (lx, ly)) - THROW (IEX_NAMESPACE::ArgExc, - "Level coordinate " - "(" << lx << ", " << ly << ") " - "is invalid."); - // - // Determine the first and last tile coordinates in both dimensions - // based on the file's lineOrder - // - - if (dx1 > dx2) - swap (dx1, dx2); - - if (dy1 > dy2) - swap (dy1, dy2); - - int dyStart = dy1; - int dyStop = dy2 + 1; - int dY = 1; - - if (_data->lineOrder == DECREASING_Y) - { - dyStart = dy2; - dyStop = dy1 - 1; - dY = -1; - } - - int numTiles = (dx2 - dx1 + 1) * (dy2 - dy1 + 1); - int numTasks = min ((int)_data->tileBuffers.size(), numTiles); - - // - // Create a task group for all tile buffer tasks. When the - // task group goes out of scope, the destructor waits until - // all tasks are complete. - // - - { - TaskGroup taskGroup; - - // - // Add in the initial compression tasks to the thread pool - // - - int nextCompBuffer = 0; - int dxComp = dx1; - int dyComp = dyStart; - - while (nextCompBuffer < numTasks) - { - ThreadPool::addGlobalTask (new TileBufferTask (&taskGroup, - _data, - nextCompBuffer++, - dxComp, dyComp, - lx, ly)); - dxComp++; - - if (dxComp > dx2) - { - dxComp = dx1; - dyComp += dY; - } - } - - // - // Write the compressed buffers and add in more compression - // tasks until done - // - - int nextWriteBuffer = 0; - int dxWrite = dx1; - int dyWrite = dyStart; - - while (nextWriteBuffer < numTiles) - { - // - // Wait until the nextWriteBuffer is ready to be written - // - - TileBuffer* writeBuffer = - _data->getTileBuffer (nextWriteBuffer); - - writeBuffer->wait(); - - // - // Write the tilebuffer - // - - bufferedTileWrite (_streamData, _data, dxWrite, dyWrite, lx, ly, - writeBuffer->dataPtr, - writeBuffer->dataSize); - - // - // Release the lock on nextWriteBuffer - // - - writeBuffer->post(); - - // - // If there are no more tileBuffers to compress, then - // only continue to write out remaining tileBuffers, - // otherwise keep adding compression tasks. - // - - if (nextCompBuffer < numTiles) - { - // - // add nextCompBuffer as a compression Task - // - - ThreadPool::addGlobalTask - (new TileBufferTask (&taskGroup, - _data, - nextCompBuffer, - dxComp, dyComp, - lx, ly)); - } - - nextWriteBuffer++; - dxWrite++; - - if (dxWrite > dx2) - { - dxWrite = dx1; - dyWrite += dY; - } - - nextCompBuffer++; - dxComp++; - - if (dxComp > dx2) - { - dxComp = dx1; - dyComp += dY; - } - } - - // - // finish all tasks - // - } - - // - // Exeption handling: - // - // TileBufferTask::execute() may have encountered exceptions, but - // those exceptions occurred in another thread, not in the thread - // that is executing this call to TiledOutputFile::writeTiles(). - // TileBufferTask::execute() has caught all exceptions and stored - // the exceptions' what() strings in the tile buffers. - // Now we check if any tile buffer contains a stored exception; if - // this is the case then we re-throw the exception in this thread. - // (It is possible that multiple tile buffers contain stored - // exceptions. We re-throw the first exception we find and - // ignore all others.) - // - - const string *exception = 0; - - for (size_t i = 0; i < _data->tileBuffers.size(); ++i) - { - TileBuffer *tileBuffer = _data->tileBuffers[i]; - - if (tileBuffer->hasException && !exception) - exception = &tileBuffer->exception; - - tileBuffer->hasException = false; - } - - if (exception) - throw IEX_NAMESPACE::IoExc (*exception); - } - catch (IEX_NAMESPACE::BaseExc &e) - { - REPLACE_EXC (e, "Failed to write pixel data to image " - "file \"" << fileName() << "\". " << e.what()); - throw; - } -} - - -void -TiledOutputFile::writeTiles (int dx1, int dxMax, int dyMin, int dyMax, int l) -{ - writeTiles (dx1, dxMax, dyMin, dyMax, l, l); -} - - -void -TiledOutputFile::writeTile (int dx, int dy, int lx, int ly) -{ - writeTiles (dx, dx, dy, dy, lx, ly); -} - - -void -TiledOutputFile::writeTile (int dx, int dy, int l) -{ - writeTile(dx, dy, l, l); -} - - -void -TiledOutputFile::copyPixels (TiledInputFile &in) -{ - Lock lock (*_streamData); - - // - // Check if this file's and and the InputFile's - // headers are compatible. - // - - const Header &hdr = _data->header; - const Header &inHdr = in.header(); - - if (!hdr.hasTileDescription() || !inHdr.hasTileDescription()) - THROW (IEX_NAMESPACE::ArgExc, "Cannot perform a quick pixel copy from image " - "file \"" << in.fileName() << "\" to image " - "file \"" << fileName() << "\". The " - "output file is tiled, but the input file is not. " - "Try using OutputFile::copyPixels() instead."); - - if (!(hdr.tileDescription() == inHdr.tileDescription())) - THROW (IEX_NAMESPACE::ArgExc, "Quick pixel copy from image " - "file \"" << in.fileName() << "\" to image " - "file \"" << fileName() << "\" failed. " - "The files have different tile descriptions."); - - if (!(hdr.dataWindow() == inHdr.dataWindow())) - THROW (IEX_NAMESPACE::ArgExc, "Cannot copy pixels from image " - "file \"" << in.fileName() << "\" to image " - "file \"" << fileName() << "\". The " - "files have different data windows."); - - if (!(hdr.lineOrder() == inHdr.lineOrder())) - THROW (IEX_NAMESPACE::ArgExc, "Quick pixel copy from image " - "file \"" << in.fileName() << "\" to image " - "file \"" << fileName() << "\" failed. " - "The files have different line orders."); - - if (!(hdr.compression() == inHdr.compression())) - THROW (IEX_NAMESPACE::ArgExc, "Quick pixel copy from image " - "file \"" << in.fileName() << "\" to image " - "file \"" << fileName() << "\" failed. " - "The files use different compression methods."); - - if (!(hdr.channels() == inHdr.channels())) - THROW (IEX_NAMESPACE::ArgExc, "Quick pixel copy from image " - "file \"" << in.fileName() << "\" to image " - "file \"" << fileName() << "\" " - "failed. The files have different channel " - "lists."); - - // - // Verify that no pixel data have been written to this file yet. - // - - if (!_data->tileOffsets.isEmpty()) - THROW (IEX_NAMESPACE::LogicExc, "Quick pixel copy from image " - "file \"" << in.fileName() << "\" to image " - "file \"" << _streamData->os->fileName() << "\" " - "failed. \"" << fileName() << "\" " - "already contains pixel data."); - - // - // Calculate the total number of tiles in the file - // - - int numAllTiles = 0; - - switch (levelMode ()) - { - case ONE_LEVEL: - case MIPMAP_LEVELS: - - for (int i_l = 0; i_l < numLevels (); ++i_l) - numAllTiles += numXTiles (i_l) * numYTiles (i_l); - - break; - - case RIPMAP_LEVELS: - - for (int i_ly = 0; i_ly < numYLevels (); ++i_ly) - for (int i_lx = 0; i_lx < numXLevels (); ++i_lx) - numAllTiles += numXTiles (i_lx) * numYTiles (i_ly); - - break; - - default: - - throw IEX_NAMESPACE::ArgExc ("Unknown LevelMode format."); - } - - bool random_y = _data->lineOrder==RANDOM_Y; - - std::vector dx_table(random_y ? numAllTiles : 1); - std::vector dy_table(random_y ? numAllTiles : 1); - std::vector lx_table(random_y ? numAllTiles : 1); - std::vector ly_table(random_y ? numAllTiles : 1); - - if(random_y) - { - in.tileOrder(&dx_table[0],&dy_table[0],&lx_table[0],&ly_table[0]); - _data->nextTileToWrite.dx=dx_table[0]; - _data->nextTileToWrite.dy=dy_table[0]; - _data->nextTileToWrite.lx=lx_table[0]; - _data->nextTileToWrite.ly=ly_table[0]; - } - - for (int i = 0; i < numAllTiles; ++i) - { - const char *pixelData; - int pixelDataSize; - - int dx = _data->nextTileToWrite.dx; - int dy = _data->nextTileToWrite.dy; - int lx = _data->nextTileToWrite.lx; - int ly = _data->nextTileToWrite.ly; - - - in.rawTileData (dx, dy, lx, ly, pixelData, pixelDataSize); - writeTileData (_streamData, _data, dx, dy, lx, ly, pixelData, pixelDataSize); - - if(random_y) - { - if(inextTileToWrite.dx=dx_table[i+1]; - _data->nextTileToWrite.dy=dy_table[i+1]; - _data->nextTileToWrite.lx=lx_table[i+1]; - _data->nextTileToWrite.ly=ly_table[i+1]; - } - }else{ - _data->nextTileToWrite=_data->nextTileCoord(_data->nextTileToWrite); - } - } -} - - -void -TiledOutputFile::copyPixels (InputFile &in) -{ - copyPixels (*in.tFile()); -} - - -void -TiledOutputFile::copyPixels (InputPart &in) -{ - copyPixels (*in.file); -} - -void -TiledOutputFile::copyPixels (TiledInputPart &in) -{ - copyPixels (*in.file); -} - - - -unsigned int -TiledOutputFile::tileXSize () const -{ - return _data->tileDesc.xSize; -} - - -unsigned int -TiledOutputFile::tileYSize () const -{ - return _data->tileDesc.ySize; -} - - -LevelMode -TiledOutputFile::levelMode () const -{ - return _data->tileDesc.mode; -} - - -LevelRoundingMode -TiledOutputFile::levelRoundingMode () const -{ - return _data->tileDesc.roundingMode; -} - - -int -TiledOutputFile::numLevels () const -{ - if (levelMode() == RIPMAP_LEVELS) - THROW (IEX_NAMESPACE::LogicExc, "Error calling numLevels() on image " - "file \"" << fileName() << "\" " - "(numLevels() is not defined for RIPMAPs)."); - return _data->numXLevels; -} - - -int -TiledOutputFile::numXLevels () const -{ - return _data->numXLevels; -} - - -int -TiledOutputFile::numYLevels () const -{ - return _data->numYLevels; -} - - -bool -TiledOutputFile::isValidLevel (int lx, int ly) const -{ - if (lx < 0 || ly < 0) - return false; - - if (levelMode() == MIPMAP_LEVELS && lx != ly) - return false; - - if (lx >= numXLevels() || ly >= numYLevels()) - return false; - - return true; -} - - -int -TiledOutputFile::levelWidth (int lx) const -{ - try - { - int retVal = levelSize (_data->minX, _data->maxX, lx, - _data->tileDesc.roundingMode); - - return retVal; - } - catch (IEX_NAMESPACE::BaseExc &e) - { - REPLACE_EXC (e, "Error calling levelWidth() on image " - "file \"" << fileName() << "\". " << e.what()); - throw; - } -} - - -int -TiledOutputFile::levelHeight (int ly) const -{ - try - { - return levelSize (_data->minY, _data->maxY, ly, - _data->tileDesc.roundingMode); - } - catch (IEX_NAMESPACE::BaseExc &e) - { - REPLACE_EXC (e, "Error calling levelHeight() on image " - "file \"" << fileName() << "\". " << e.what()); - throw; - } -} - - -int -TiledOutputFile::numXTiles (int lx) const -{ - if (lx < 0 || lx >= _data->numXLevels) - THROW (IEX_NAMESPACE::LogicExc, "Error calling numXTiles() on image " - "file \"" << _streamData->os->fileName() << "\" " - "(Argument is not in valid range)."); - - return _data->numXTiles[lx]; -} - - -int -TiledOutputFile::numYTiles (int ly) const -{ - if (ly < 0 || ly >= _data->numYLevels) - THROW (IEX_NAMESPACE::LogicExc, "Error calling numXTiles() on image " - "file \"" << _streamData->os->fileName() << "\" " - "(Argument is not in valid range)."); - - return _data->numYTiles[ly]; -} - - -Box2i -TiledOutputFile::dataWindowForLevel (int l) const -{ - return dataWindowForLevel (l, l); -} - - -Box2i -TiledOutputFile::dataWindowForLevel (int lx, int ly) const -{ - try - { - return OPENEXR_IMF_INTERNAL_NAMESPACE::dataWindowForLevel ( - _data->tileDesc, - _data->minX, _data->maxX, - _data->minY, _data->maxY, - lx, ly); - } - catch (IEX_NAMESPACE::BaseExc &e) - { - REPLACE_EXC (e, "Error calling dataWindowForLevel() on image " - "file \"" << fileName() << "\". " << e.what()); - throw; - } -} - - -Box2i -TiledOutputFile::dataWindowForTile (int dx, int dy, int l) const -{ - return dataWindowForTile (dx, dy, l, l); -} - - -Box2i -TiledOutputFile::dataWindowForTile (int dx, int dy, int lx, int ly) const -{ - try - { - if (!isValidTile (dx, dy, lx, ly)) - throw IEX_NAMESPACE::ArgExc ("Arguments not in valid range."); - - return OPENEXR_IMF_INTERNAL_NAMESPACE::dataWindowForTile ( - _data->tileDesc, - _data->minX, _data->maxX, - _data->minY, _data->maxY, - dx, dy, - lx, ly); - } - catch (IEX_NAMESPACE::BaseExc &e) - { - REPLACE_EXC (e, "Error calling dataWindowForTile() on image " - "file \"" << fileName() << "\". " << e.what()); - throw; - } -} - - -bool -TiledOutputFile::isValidTile (int dx, int dy, int lx, int ly) const -{ - return ((lx < _data->numXLevels && lx >= 0) && - (ly < _data->numYLevels && ly >= 0) && - (dx < _data->numXTiles[lx] && dx >= 0) && - (dy < _data->numYTiles[ly] && dy >= 0)); -} - - -void -TiledOutputFile::updatePreviewImage (const PreviewRgba newPixels[]) -{ - Lock lock (*_streamData); - - if (_data->previewPosition <= 0) - THROW (IEX_NAMESPACE::LogicExc, "Cannot update preview image pixels. " - "File \"" << fileName() << "\" does not " - "contain a preview image."); - - // - // Store the new pixels in the header's preview image attribute. - // - - PreviewImageAttribute &pia = - _data->header.typedAttribute ("preview"); - - PreviewImage &pi = pia.value(); - PreviewRgba *pixels = pi.pixels(); - int numPixels = pi.width() * pi.height(); - - for (int i = 0; i < numPixels; ++i) - pixels[i] = newPixels[i]; - - // - // Save the current file position, jump to the position in - // the file where the preview image starts, store the new - // preview image, and jump back to the saved file position. - // - - Int64 savedPosition = _streamData->os->tellp(); - - try - { - _streamData->os->seekp (_data->previewPosition); - pia.writeValueTo (*_streamData->os, _data->version); - _streamData->os->seekp (savedPosition); - } - catch (IEX_NAMESPACE::BaseExc &e) - { - REPLACE_EXC (e, "Cannot update preview image pixels for " - "file \"" << fileName() << "\". " << e.what()); - throw; - } -} - - -void -TiledOutputFile::breakTile - (int dx, int dy, - int lx, int ly, - int offset, - int length, - char c) -{ - Lock lock (*_streamData); - - Int64 position = _data->tileOffsets (dx, dy, lx, ly); - - if (!position) - THROW (IEX_NAMESPACE::ArgExc, - "Cannot overwrite tile " - "(" << dx << ", " << dy << ", " << lx << "," << ly << "). " - "The tile has not yet been stored in " - "file \"" << fileName() << "\"."); - - _streamData->currentPosition = 0; - _streamData->os->seekp (position + offset); - - for (int i = 0; i < length; ++i) - _streamData->os->write (&c, 1); -} - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_EXIT diff --git a/3rdparty/openexr/IlmImf/ImfTiledOutputFile.h b/3rdparty/openexr/IlmImf/ImfTiledOutputFile.h deleted file mode 100644 index bb75605f30..0000000000 --- a/3rdparty/openexr/IlmImf/ImfTiledOutputFile.h +++ /dev/null @@ -1,528 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - -#ifndef INCLUDED_IMF_TILED_OUTPUT_FILE_H -#define INCLUDED_IMF_TILED_OUTPUT_FILE_H - -//----------------------------------------------------------------------------- -// -// class TiledOutputFile -// -//----------------------------------------------------------------------------- - -#include "ImfHeader.h" -#include "ImfFrameBuffer.h" -#include "ImathBox.h" -#include "ImfTileDescription.h" -#include "ImfThreading.h" -#include "ImfGenericOutputFile.h" -#include "ImfForward.h" -#include "ImfNamespace.h" -#include "ImfExport.h" - - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER - - -struct PreviewRgba; - - -class TiledOutputFile : public GenericOutputFile -{ - public: - - //------------------------------------------------------------------- - // A constructor that opens the file with the specified name, and - // writes the file header. The file header is also copied into the - // TiledOutputFile object, and can later be accessed via the header() - // method. - // - // Destroying TiledOutputFile constructed with this constructor - // automatically closes the corresponding files. - // - // The header must contain a TileDescriptionAttribute called "tiles". - // - // The x and y subsampling factors for all image channels must be 1; - // subsampling is not supported. - // - // Tiles can be written to the file in arbitrary order. The line - // order attribute can be used to cause the tiles to be sorted in - // the file. When the file is read later, reading the tiles in the - // same order as they are in the file tends to be significantly - // faster than reading the tiles in random order (see writeTile, - // below). - //------------------------------------------------------------------- - - IMF_EXPORT - TiledOutputFile (const char fileName[], - const Header &header, - int numThreads = globalThreadCount ()); - - - // ---------------------------------------------------------------- - // A constructor that attaches the new TiledOutputFile object to - // a file that has already been opened. Destroying TiledOutputFile - // objects constructed with this constructor does not automatically - // close the corresponding files. - // ---------------------------------------------------------------- - - IMF_EXPORT - TiledOutputFile (OPENEXR_IMF_INTERNAL_NAMESPACE::OStream &os, - const Header &header, - int numThreads = globalThreadCount ()); - - - //----------------------------------------------------- - // Destructor - // - // Destroying a TiledOutputFile object before all tiles - // have been written results in an incomplete file. - //----------------------------------------------------- - - IMF_EXPORT - virtual ~TiledOutputFile (); - - - //------------------------ - // Access to the file name - //------------------------ - - IMF_EXPORT - const char * fileName () const; - - - //-------------------------- - // Access to the file header - //-------------------------- - - IMF_EXPORT - const Header & header () const; - - - //------------------------------------------------------- - // Set the current frame buffer -- copies the FrameBuffer - // object into the TiledOutputFile object. - // - // The current frame buffer is the source of the pixel - // data written to the file. The current frame buffer - // must be set at least once before writeTile() is - // called. The current frame buffer can be changed - // after each call to writeTile(). - //------------------------------------------------------- - - IMF_EXPORT - void setFrameBuffer (const FrameBuffer &frameBuffer); - - - //----------------------------------- - // Access to the current frame buffer - //----------------------------------- - - IMF_EXPORT - const FrameBuffer & frameBuffer () const; - - - //------------------- - // Utility functions: - //------------------- - - //--------------------------------------------------------- - // Multiresolution mode and tile size: - // The following functions return the xSize, ySize and mode - // fields of the file header's TileDescriptionAttribute. - //--------------------------------------------------------- - - IMF_EXPORT - unsigned int tileXSize () const; - IMF_EXPORT - unsigned int tileYSize () const; - IMF_EXPORT - LevelMode levelMode () const; - IMF_EXPORT - LevelRoundingMode levelRoundingMode () const; - - - //-------------------------------------------------------------------- - // Number of levels: - // - // numXLevels() returns the file's number of levels in x direction. - // - // if levelMode() == ONE_LEVEL: - // return value is: 1 - // - // if levelMode() == MIPMAP_LEVELS: - // return value is: rfunc (log (max (w, h)) / log (2)) + 1 - // - // if levelMode() == RIPMAP_LEVELS: - // return value is: rfunc (log (w) / log (2)) + 1 - // - // where - // w is the width of the image's data window, max.x - min.x + 1, - // y is the height of the image's data window, max.y - min.y + 1, - // and rfunc(x) is either floor(x), or ceil(x), depending on - // whether levelRoundingMode() returns ROUND_DOWN or ROUND_UP. - // - // numYLevels() returns the file's number of levels in y direction. - // - // if levelMode() == ONE_LEVEL or levelMode() == MIPMAP_LEVELS: - // return value is the same as for numXLevels() - // - // if levelMode() == RIPMAP_LEVELS: - // return value is: rfunc (log (h) / log (2)) + 1 - // - // - // numLevels() is a convenience function for use with MIPMAP_LEVELS - // files. - // - // if levelMode() == ONE_LEVEL or levelMode() == MIPMAP_LEVELS: - // return value is the same as for numXLevels() - // - // if levelMode() == RIPMAP_LEVELS: - // an IEX_NAMESPACE::LogicExc exception is thrown - // - // isValidLevel(lx, ly) returns true if the file contains - // a level with level number (lx, ly), false if not. - // - //-------------------------------------------------------------------- - - IMF_EXPORT - int numLevels () const; - IMF_EXPORT - int numXLevels () const; - IMF_EXPORT - int numYLevels () const; - IMF_EXPORT - bool isValidLevel (int lx, int ly) const; - - - //--------------------------------------------------------- - // Dimensions of a level: - // - // levelWidth(lx) returns the width of a level with level - // number (lx, *), where * is any number. - // - // return value is: - // max (1, rfunc (w / pow (2, lx))) - // - // - // levelHeight(ly) returns the height of a level with level - // number (*, ly), where * is any number. - // - // return value is: - // max (1, rfunc (h / pow (2, ly))) - // - //--------------------------------------------------------- - - IMF_EXPORT - int levelWidth (int lx) const; - IMF_EXPORT - int levelHeight (int ly) const; - - - //---------------------------------------------------------- - // Number of tiles: - // - // numXTiles(lx) returns the number of tiles in x direction - // that cover a level with level number (lx, *), where * is - // any number. - // - // return value is: - // (levelWidth(lx) + tileXSize() - 1) / tileXSize() - // - // - // numYTiles(ly) returns the number of tiles in y direction - // that cover a level with level number (*, ly), where * is - // any number. - // - // return value is: - // (levelHeight(ly) + tileXSize() - 1) / tileXSize() - // - //---------------------------------------------------------- - - IMF_EXPORT - int numXTiles (int lx = 0) const; - IMF_EXPORT - int numYTiles (int ly = 0) const; - - - //--------------------------------------------------------- - // Level pixel ranges: - // - // dataWindowForLevel(lx, ly) returns a 2-dimensional - // region of valid pixel coordinates for a level with - // level number (lx, ly) - // - // return value is a Box2i with min value: - // (dataWindow.min.x, dataWindow.min.y) - // - // and max value: - // (dataWindow.min.x + levelWidth(lx) - 1, - // dataWindow.min.y + levelHeight(ly) - 1) - // - // dataWindowForLevel(level) is a convenience function used - // for ONE_LEVEL and MIPMAP_LEVELS files. It returns - // dataWindowForLevel(level, level). - // - //--------------------------------------------------------- - - IMF_EXPORT - IMATH_NAMESPACE::Box2i dataWindowForLevel (int l = 0) const; - IMF_EXPORT - IMATH_NAMESPACE::Box2i dataWindowForLevel (int lx, int ly) const; - - - //------------------------------------------------------------------- - // Tile pixel ranges: - // - // dataWindowForTile(dx, dy, lx, ly) returns a 2-dimensional - // region of valid pixel coordinates for a tile with tile coordinates - // (dx,dy) and level number (lx, ly). - // - // return value is a Box2i with min value: - // (dataWindow.min.x + dx * tileXSize(), - // dataWindow.min.y + dy * tileYSize()) - // - // and max value: - // (dataWindow.min.x + (dx + 1) * tileXSize() - 1, - // dataWindow.min.y + (dy + 1) * tileYSize() - 1) - // - // dataWindowForTile(dx, dy, level) is a convenience function - // used for ONE_LEVEL and MIPMAP_LEVELS files. It returns - // dataWindowForTile(dx, dy, level, level). - // - //------------------------------------------------------------------- - - IMF_EXPORT - IMATH_NAMESPACE::Box2i dataWindowForTile (int dx, int dy, - int l = 0) const; - - IMF_EXPORT - IMATH_NAMESPACE::Box2i dataWindowForTile (int dx, int dy, - int lx, int ly) const; - - //------------------------------------------------------------------ - // Write pixel data: - // - // writeTile(dx, dy, lx, ly) writes the tile with tile - // coordinates (dx, dy), and level number (lx, ly) to - // the file. - // - // dx must lie in the interval [0, numXTiles(lx) - 1] - // dy must lie in the interval [0, numYTiles(ly) - 1] - // - // lx must lie in the interval [0, numXLevels() - 1] - // ly must lie in the inverval [0, numYLevels() - 1] - // - // writeTile(dx, dy, level) is a convenience function - // used for ONE_LEVEL and MIPMAP_LEVEL files. It calls - // writeTile(dx, dy, level, level). - // - // The two writeTiles(dx1, dx2, dy1, dy2, ...) functions allow - // writing multiple tiles at once. If multi-threading is used - // multiple tiles are written concurrently. The tile coordinates, - // dx1, dx2 and dy1, dy2, specify inclusive ranges of tile - // coordinates. It is valid for dx1 < dx2 or dy1 < dy2; the - // tiles are always written in the order specified by the line - // order attribute. Hence, it is not possible to specify an - // "invalid" or empty tile range. - // - // Pixels that are outside the pixel coordinate range for the tile's - // level, are never accessed by writeTile(). - // - // Each tile in the file must be written exactly once. - // - // The file's line order attribute determines the order of the tiles - // in the file: - // - // INCREASING_Y In the file, the tiles for each level are stored - // in a contiguous block. The levels are ordered - // like this: - // - // (0, 0) (1, 0) ... (nx-1, 0) - // (0, 1) (1, 1) ... (nx-1, 1) - // ... - // (0,ny-1) (1,ny-1) ... (nx-1,ny-1) - // - // where nx = numXLevels(), and ny = numYLevels(). - // In an individual level, (lx, ly), the tiles - // are stored in the following order: - // - // (0, 0) (1, 0) ... (tx-1, 0) - // (0, 1) (1, 1) ... (tx-1, 1) - // ... - // (0,ty-1) (1,ty-1) ... (tx-1,ty-1) - // - // where tx = numXTiles(lx), - // and ty = numYTiles(ly). - // - // DECREASING_Y As for INCREASING_Y, the tiles for each level - // are stored in a contiguous block. The levels - // are ordered the same way as for INCREASING_Y, - // but within an individual level, the tiles - // are stored in this order: - // - // (0,ty-1) (1,ty-1) ... (tx-1,ty-1) - // ... - // (0, 1) (1, 1) ... (tx-1, 1) - // (0, 0) (1, 0) ... (tx-1, 0) - // - // - // RANDOM_Y The order of the calls to writeTile() determines - // the order of the tiles in the file. - // - //------------------------------------------------------------------ - - IMF_EXPORT - void writeTile (int dx, int dy, int l = 0); - IMF_EXPORT - void writeTile (int dx, int dy, int lx, int ly); - - IMF_EXPORT - void writeTiles (int dx1, int dx2, int dy1, int dy2, - int lx, int ly); - - IMF_EXPORT - void writeTiles (int dx1, int dx2, int dy1, int dy2, - int l = 0); - - - //------------------------------------------------------------------ - // Shortcut to copy all pixels from a TiledInputFile into this file, - // without uncompressing and then recompressing the pixel data. - // This file's header must be compatible with the TiledInputFile's - // header: The two header's "dataWindow", "compression", - // "lineOrder", "channels", and "tiles" attributes must be the same. - //------------------------------------------------------------------ - - IMF_EXPORT - void copyPixels (TiledInputFile &in); - IMF_EXPORT - void copyPixels (TiledInputPart &in); - - - //------------------------------------------------------------------ - // Shortcut to copy all pixels from an InputFile into this file, - // without uncompressing and then recompressing the pixel data. - // This file's header must be compatible with the InputFile's - // header: The two header's "dataWindow", "compression", - // "lineOrder", "channels", and "tiles" attributes must be the same. - // - // To use this function, the InputFile must be tiled. - //------------------------------------------------------------------ - - IMF_EXPORT - void copyPixels (InputFile &in); - IMF_EXPORT - void copyPixels (InputPart &in); - - - - //-------------------------------------------------------------- - // Updating the preview image: - // - // updatePreviewImage() supplies a new set of pixels for the - // preview image attribute in the file's header. If the header - // does not contain a preview image, updatePreviewImage() throws - // an IEX_NAMESPACE::LogicExc. - // - // Note: updatePreviewImage() is necessary because images are - // often stored in a file incrementally, a few tiles at a time, - // while the image is being generated. Since the preview image - // is an attribute in the file's header, it gets stored in the - // file as soon as the file is opened, but we may not know what - // the preview image should look like until we have written the - // last tile of the main image. - // - //-------------------------------------------------------------- - - IMF_EXPORT - void updatePreviewImage (const PreviewRgba newPixels[]); - - - //------------------------------------------------------------- - // Break a tile -- for testing and debugging only: - // - // breakTile(dx,dy,lx,ly,p,n,c) introduces an error into the - // output file by writing n copies of character c, starting - // p bytes from the beginning of the tile with tile coordinates - // (dx, dy) and level number (lx, ly). - // - // Warning: Calling this function usually results in a broken - // image file. The file or parts of it may not be readable, - // or the file may contain bad data. - // - //------------------------------------------------------------- - - IMF_EXPORT - void breakTile (int dx, int dy, - int lx, int ly, - int offset, - int length, - char c); - struct Data; - - private: - - // ---------------------------------------------------------------- - // A constructor attaches the OutputStreamMutex to the - // given one from MultiPartOutputFile. Set the previewPosition - // and lineOffsetsPosition which have been acquired from - // the constructor of MultiPartOutputFile as well. - // ---------------------------------------------------------------- - TiledOutputFile (const OutputPartData* part); - - TiledOutputFile (const TiledOutputFile &); // not implemented - TiledOutputFile & operator = (const TiledOutputFile &); // not implemented - - void initialize (const Header &header); - - bool isValidTile (int dx, int dy, - int lx, int ly) const; - - size_t bytesPerLineForTile (int dx, int dy, - int lx, int ly) const; - - Data * _data; - - OutputStreamMutex* _streamData; - bool _deleteStream; - - friend class MultiPartOutputFile; -}; - - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT - -#endif diff --git a/3rdparty/openexr/IlmImf/ImfTiledOutputPart.cpp b/3rdparty/openexr/IlmImf/ImfTiledOutputPart.cpp deleted file mode 100644 index cfa0e78e8d..0000000000 --- a/3rdparty/openexr/IlmImf/ImfTiledOutputPart.cpp +++ /dev/null @@ -1,228 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2011, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - -#include "ImfTiledOutputPart.h" -#include "ImfNamespace.h" - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_ENTER - -TiledOutputPart::TiledOutputPart(MultiPartOutputFile& multiPartFile, int partNumber) -{ - file = multiPartFile.getOutputPart(partNumber); -} - -const char * -TiledOutputPart::fileName () const -{ - return file->fileName(); -} - -const Header & -TiledOutputPart::header () const -{ - return file->header(); -} - -void -TiledOutputPart::setFrameBuffer (const FrameBuffer &frameBuffer) -{ - file->setFrameBuffer(frameBuffer); -} - -const FrameBuffer & -TiledOutputPart::frameBuffer () const -{ - return file->frameBuffer(); -} - -unsigned int -TiledOutputPart::tileXSize () const -{ - return file->tileXSize(); -} - -unsigned int -TiledOutputPart::tileYSize () const -{ - return file->tileYSize(); -} - -LevelMode -TiledOutputPart::levelMode () const -{ - return file->levelMode(); -} - -LevelRoundingMode -TiledOutputPart::levelRoundingMode () const -{ - return file->levelRoundingMode(); -} - -int -TiledOutputPart::numLevels () const -{ - return file->numLevels(); -} - -int -TiledOutputPart::numXLevels () const -{ - return file->numXLevels(); -} - -int -TiledOutputPart::numYLevels () const -{ - return file->numYLevels(); -} - -bool -TiledOutputPart::isValidLevel (int lx, int ly) const -{ - return file->isValidLevel(lx, ly); -} - -int -TiledOutputPart::levelWidth (int lx) const -{ - return file->levelWidth(lx); -} - -int -TiledOutputPart::levelHeight (int ly) const -{ - return file->levelHeight(ly); -} - -int -TiledOutputPart::numXTiles (int lx) const -{ - return file->numXTiles(lx); -} - -int -TiledOutputPart::numYTiles (int ly) const -{ - return file->numYTiles(ly); -} - -IMATH_NAMESPACE::Box2i -TiledOutputPart::dataWindowForLevel (int l) const -{ - return file->dataWindowForLevel(l); -} - -IMATH_NAMESPACE::Box2i -TiledOutputPart::dataWindowForLevel (int lx, int ly) const -{ - return file->dataWindowForLevel(lx, ly); -} - -IMATH_NAMESPACE::Box2i -TiledOutputPart::dataWindowForTile (int dx, int dy, int l) const -{ - return file->dataWindowForTile(dx, dy, l); -} - -IMATH_NAMESPACE::Box2i -TiledOutputPart::dataWindowForTile (int dx, int dy, int lx, int ly) const -{ - return file->dataWindowForTile(dx, dy, lx, ly); -} - -void -TiledOutputPart::writeTile (int dx, int dy, int l) -{ - file->writeTile(dx, dy, l); -} - -void -TiledOutputPart::writeTile (int dx, int dy, int lx, int ly) -{ - file->writeTile(dx, dy, lx, ly); -} - -void -TiledOutputPart::writeTiles (int dx1, int dx2, int dy1, int dy2, int lx, int ly) -{ - file->writeTiles(dx1, dx2, dy1, dy2, lx, ly); -} - -void -TiledOutputPart::writeTiles (int dx1, int dx2, int dy1, int dy2, int l) -{ - file->writeTiles(dx1, dx2, dy1, dy2, l); -} - -void -TiledOutputPart::copyPixels (TiledInputFile &in) -{ - file->copyPixels(in); -} - -void -TiledOutputPart::copyPixels (InputFile &in) -{ - file->copyPixels(in); -} - -void -TiledOutputPart::copyPixels (TiledInputPart &in) -{ - file->copyPixels(in); -} - -void -TiledOutputPart::copyPixels (InputPart &in) -{ - file->copyPixels(in); -} - - - -void -TiledOutputPart::updatePreviewImage (const PreviewRgba newPixels[]) -{ - file->updatePreviewImage(newPixels); -} - -void -TiledOutputPart::breakTile (int dx, int dy, int lx, int ly, int offset, int length, char c) -{ - file->breakTile(dx, dy, lx, ly, offset, length, c); -} - - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_EXIT diff --git a/3rdparty/openexr/IlmImf/ImfTiledOutputPart.h b/3rdparty/openexr/IlmImf/ImfTiledOutputPart.h deleted file mode 100644 index e7b3e2d38f..0000000000 --- a/3rdparty/openexr/IlmImf/ImfTiledOutputPart.h +++ /dev/null @@ -1,136 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2011, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - -#ifndef IMFTILEDOUTPUTPART_H_ -#define IMFTILEDOUTPUTPART_H_ - -#include "ImfMultiPartOutputFile.h" -#include "ImfTiledOutputFile.h" -#include "ImfForward.h" -#include "ImfExport.h" -#include "ImfNamespace.h" - - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER - -//------------------------------------------------------------------------------- -// class TiledOutputPart: -// -// Same interface as TiledOutputFile. Please have a reference to TiledOutputFile. -//------------------------------------------------------------------------------- - -class TiledOutputPart -{ - public: - IMF_EXPORT - TiledOutputPart(MultiPartOutputFile& multiPartFile, int partNumber); - - IMF_EXPORT - const char * fileName () const; - IMF_EXPORT - const Header & header () const; - IMF_EXPORT - void setFrameBuffer (const FrameBuffer &frameBuffer); - IMF_EXPORT - const FrameBuffer & frameBuffer () const; - IMF_EXPORT - unsigned int tileXSize () const; - IMF_EXPORT - unsigned int tileYSize () const; - IMF_EXPORT - LevelMode levelMode () const; - IMF_EXPORT - LevelRoundingMode levelRoundingMode () const; - IMF_EXPORT - int numLevels () const; - IMF_EXPORT - int numXLevels () const; - IMF_EXPORT - int numYLevels () const; - IMF_EXPORT - bool isValidLevel (int lx, int ly) const; - IMF_EXPORT - int levelWidth (int lx) const; - IMF_EXPORT - int levelHeight (int ly) const; - IMF_EXPORT - int numXTiles (int lx = 0) const; - IMF_EXPORT - int numYTiles (int ly = 0) const; - IMF_EXPORT - IMATH_NAMESPACE::Box2i dataWindowForLevel (int l = 0) const; - IMF_EXPORT - IMATH_NAMESPACE::Box2i dataWindowForLevel (int lx, int ly) const; - IMF_EXPORT - IMATH_NAMESPACE::Box2i dataWindowForTile (int dx, int dy, - int l = 0) const; - IMF_EXPORT - IMATH_NAMESPACE::Box2i dataWindowForTile (int dx, int dy, - int lx, int ly) const; - IMF_EXPORT - void writeTile (int dx, int dy, int l = 0); - IMF_EXPORT - void writeTile (int dx, int dy, int lx, int ly); - IMF_EXPORT - void writeTiles (int dx1, int dx2, int dy1, int dy2, - int lx, int ly); - IMF_EXPORT - void writeTiles (int dx1, int dx2, int dy1, int dy2, - int l = 0); - IMF_EXPORT - void copyPixels (TiledInputFile &in); - IMF_EXPORT - void copyPixels (InputFile &in); - IMF_EXPORT - void copyPixels (TiledInputPart &in); - IMF_EXPORT - void copyPixels (InputPart &in); - - - IMF_EXPORT - void updatePreviewImage (const PreviewRgba newPixels[]); - IMF_EXPORT - void breakTile (int dx, int dy, - int lx, int ly, - int offset, - int length, - char c); - - private: - TiledOutputFile* file; -}; - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT - -#endif /* IMFTILEDOUTPUTPART_H_ */ diff --git a/3rdparty/openexr/IlmImf/ImfTiledRgbaFile.cpp b/3rdparty/openexr/IlmImf/ImfTiledRgbaFile.cpp deleted file mode 100644 index 157aec0abe..0000000000 --- a/3rdparty/openexr/IlmImf/ImfTiledRgbaFile.cpp +++ /dev/null @@ -1,1163 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - -//----------------------------------------------------------------------------- -// -// class TiledRgbaOutputFile -// class TiledRgbaInputFile -// -//----------------------------------------------------------------------------- - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "IlmThreadMutex.h" -#include "Iex.h" - -#include "ImfNamespace.h" - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_ENTER - -using namespace std; -using namespace IMATH_NAMESPACE; -using namespace RgbaYca; -using namespace ILMTHREAD_NAMESPACE; - -namespace { - -void -insertChannels (Header &header, - RgbaChannels rgbaChannels, - const char fileName[]) -{ - ChannelList ch; - - if (rgbaChannels & (WRITE_Y | WRITE_C)) - { - if (rgbaChannels & WRITE_Y) - { - ch.insert ("Y", Channel (HALF, 1, 1)); - } - - if (rgbaChannels & WRITE_C) - { - THROW (IEX_NAMESPACE::ArgExc, "Cannot open file \"" << fileName << "\" " - "for writing. Tiled image files do not " - "support subsampled chroma channels."); - } - } - else - { - if (rgbaChannels & WRITE_R) - ch.insert ("R", Channel (HALF, 1, 1)); - - if (rgbaChannels & WRITE_G) - ch.insert ("G", Channel (HALF, 1, 1)); - - if (rgbaChannels & WRITE_B) - ch.insert ("B", Channel (HALF, 1, 1)); - } - - if (rgbaChannels & WRITE_A) - ch.insert ("A", Channel (HALF, 1, 1)); - - header.channels() = ch; -} - - -RgbaChannels -rgbaChannels (const ChannelList &ch, const string &channelNamePrefix = "") -{ - int i = 0; - - if (ch.findChannel (channelNamePrefix + "R")) - i |= WRITE_R; - - if (ch.findChannel (channelNamePrefix + "G")) - i |= WRITE_G; - - if (ch.findChannel (channelNamePrefix + "B")) - i |= WRITE_B; - - if (ch.findChannel (channelNamePrefix + "A")) - i |= WRITE_A; - - if (ch.findChannel (channelNamePrefix + "Y")) - i |= WRITE_Y; - - return RgbaChannels (i); -} - - -string -prefixFromLayerName (const string &layerName, const Header &header) -{ - if (layerName.empty()) - return ""; - - if (hasMultiView (header) && multiView(header)[0] == layerName) - return ""; - - return layerName + "."; -} - - -V3f -ywFromHeader (const Header &header) -{ - Chromaticities cr; - - if (hasChromaticities (header)) - cr = chromaticities (header); - - return computeYw (cr); -} - -} // namespace - - -class TiledRgbaOutputFile::ToYa: public Mutex -{ - public: - - ToYa (TiledOutputFile &outputFile, RgbaChannels rgbaChannels); - - void setFrameBuffer (const Rgba *base, - size_t xStride, - size_t yStride); - - void writeTile (int dx, int dy, int lx, int ly); - - private: - - TiledOutputFile & _outputFile; - bool _writeA; - unsigned int _tileXSize; - unsigned int _tileYSize; - V3f _yw; - Array2D _buf; - const Rgba * _fbBase; - size_t _fbXStride; - size_t _fbYStride; -}; - - -TiledRgbaOutputFile::ToYa::ToYa (TiledOutputFile &outputFile, - RgbaChannels rgbaChannels) -: - _outputFile (outputFile) -{ - _writeA = (rgbaChannels & WRITE_A)? true: false; - - const TileDescription &td = outputFile.header().tileDescription(); - - _tileXSize = td.xSize; - _tileYSize = td.ySize; - _yw = ywFromHeader (_outputFile.header()); - _buf.resizeErase (_tileYSize, _tileXSize); - _fbBase = 0; - _fbXStride = 0; - _fbYStride = 0; -} - - -void -TiledRgbaOutputFile::ToYa::setFrameBuffer (const Rgba *base, - size_t xStride, - size_t yStride) -{ - _fbBase = base; - _fbXStride = xStride; - _fbYStride = yStride; -} - - -void -TiledRgbaOutputFile::ToYa::writeTile (int dx, int dy, int lx, int ly) -{ - if (_fbBase == 0) - { - THROW (IEX_NAMESPACE::ArgExc, "No frame buffer was specified as the " - "pixel data source for image file " - "\"" << _outputFile.fileName() << "\"."); - } - - // - // Copy the tile's RGBA pixels into _buf and convert - // them to luminance/alpha format - // - - Box2i dw = _outputFile.dataWindowForTile (dx, dy, lx, ly); - int width = dw.max.x - dw.min.x + 1; - - for (int y = dw.min.y, y1 = 0; y <= dw.max.y; ++y, ++y1) - { - for (int x = dw.min.x, x1 = 0; x <= dw.max.x; ++x, ++x1) - _buf[y1][x1] = _fbBase[x * _fbXStride + y * _fbYStride]; - - RGBAtoYCA (_yw, width, _writeA, _buf[y1], _buf[y1]); - } - - // - // Store the contents of _buf in the output file - // - - FrameBuffer fb; - - fb.insert ("Y", Slice (HALF, // type - (char *) &_buf[-dw.min.y][-dw.min.x].g, // base - sizeof (Rgba), // xStride - sizeof (Rgba) * _tileXSize)); // yStride - - fb.insert ("A", Slice (HALF, // type - (char *) &_buf[-dw.min.y][-dw.min.x].a, // base - sizeof (Rgba), // xStride - sizeof (Rgba) * _tileXSize)); // yStride - - _outputFile.setFrameBuffer (fb); - _outputFile.writeTile (dx, dy, lx, ly); -} - - -TiledRgbaOutputFile::TiledRgbaOutputFile - (const char name[], - const Header &header, - RgbaChannels rgbaChannels, - int tileXSize, - int tileYSize, - LevelMode mode, - LevelRoundingMode rmode, - int numThreads) -: - _outputFile (0), - _toYa (0) -{ - Header hd (header); - insertChannels (hd, rgbaChannels, name); - hd.setTileDescription (TileDescription (tileXSize, tileYSize, mode, rmode)); - _outputFile = new TiledOutputFile (name, hd, numThreads); - - if (rgbaChannels & WRITE_Y) - _toYa = new ToYa (*_outputFile, rgbaChannels); -} - - - -TiledRgbaOutputFile::TiledRgbaOutputFile - (OPENEXR_IMF_INTERNAL_NAMESPACE::OStream &os, - const Header &header, - RgbaChannels rgbaChannels, - int tileXSize, - int tileYSize, - LevelMode mode, - LevelRoundingMode rmode, - int numThreads) -: - _outputFile (0), - _toYa (0) -{ - Header hd (header); - insertChannels (hd, rgbaChannels, os.fileName()); - hd.setTileDescription (TileDescription (tileXSize, tileYSize, mode, rmode)); - _outputFile = new TiledOutputFile (os, hd, numThreads); - - if (rgbaChannels & WRITE_Y) - _toYa = new ToYa (*_outputFile, rgbaChannels); -} - - - -TiledRgbaOutputFile::TiledRgbaOutputFile - (const char name[], - int tileXSize, - int tileYSize, - LevelMode mode, - LevelRoundingMode rmode, - const IMATH_NAMESPACE::Box2i &displayWindow, - const IMATH_NAMESPACE::Box2i &dataWindow, - RgbaChannels rgbaChannels, - float pixelAspectRatio, - const IMATH_NAMESPACE::V2f screenWindowCenter, - float screenWindowWidth, - LineOrder lineOrder, - Compression compression, - int numThreads) -: - _outputFile (0), - _toYa (0) -{ - Header hd (displayWindow, - dataWindow.isEmpty()? displayWindow: dataWindow, - pixelAspectRatio, - screenWindowCenter, - screenWindowWidth, - lineOrder, - compression); - - insertChannels (hd, rgbaChannels, name); - hd.setTileDescription (TileDescription (tileXSize, tileYSize, mode, rmode)); - _outputFile = new TiledOutputFile (name, hd, numThreads); - - if (rgbaChannels & WRITE_Y) - _toYa = new ToYa (*_outputFile, rgbaChannels); -} - - -TiledRgbaOutputFile::TiledRgbaOutputFile - (const char name[], - int width, - int height, - int tileXSize, - int tileYSize, - LevelMode mode, - LevelRoundingMode rmode, - RgbaChannels rgbaChannels, - float pixelAspectRatio, - const IMATH_NAMESPACE::V2f screenWindowCenter, - float screenWindowWidth, - LineOrder lineOrder, - Compression compression, - int numThreads) -: - _outputFile (0), - _toYa (0) -{ - Header hd (width, - height, - pixelAspectRatio, - screenWindowCenter, - screenWindowWidth, - lineOrder, - compression); - - insertChannels (hd, rgbaChannels, name); - hd.setTileDescription (TileDescription (tileXSize, tileYSize, mode, rmode)); - _outputFile = new TiledOutputFile (name, hd, numThreads); - - if (rgbaChannels & WRITE_Y) - _toYa = new ToYa (*_outputFile, rgbaChannels); -} - - -TiledRgbaOutputFile::~TiledRgbaOutputFile () -{ - delete _outputFile; - delete _toYa; -} - - -void -TiledRgbaOutputFile::setFrameBuffer (const Rgba *base, - size_t xStride, - size_t yStride) -{ - if (_toYa) - { - Lock lock (*_toYa); - _toYa->setFrameBuffer (base, xStride, yStride); - } - else - { - size_t xs = xStride * sizeof (Rgba); - size_t ys = yStride * sizeof (Rgba); - - FrameBuffer fb; - - fb.insert ("R", Slice (HALF, (char *) &base[0].r, xs, ys)); - fb.insert ("G", Slice (HALF, (char *) &base[0].g, xs, ys)); - fb.insert ("B", Slice (HALF, (char *) &base[0].b, xs, ys)); - fb.insert ("A", Slice (HALF, (char *) &base[0].a, xs, ys)); - - _outputFile->setFrameBuffer (fb); - } -} - - -const Header & -TiledRgbaOutputFile::header () const -{ - return _outputFile->header(); -} - - -const FrameBuffer & -TiledRgbaOutputFile::frameBuffer () const -{ - return _outputFile->frameBuffer(); -} - - -const IMATH_NAMESPACE::Box2i & -TiledRgbaOutputFile::displayWindow () const -{ - return _outputFile->header().displayWindow(); -} - - -const IMATH_NAMESPACE::Box2i & -TiledRgbaOutputFile::dataWindow () const -{ - return _outputFile->header().dataWindow(); -} - - -float -TiledRgbaOutputFile::pixelAspectRatio () const -{ - return _outputFile->header().pixelAspectRatio(); -} - - -const IMATH_NAMESPACE::V2f -TiledRgbaOutputFile::screenWindowCenter () const -{ - return _outputFile->header().screenWindowCenter(); -} - - -float -TiledRgbaOutputFile::screenWindowWidth () const -{ - return _outputFile->header().screenWindowWidth(); -} - - -LineOrder -TiledRgbaOutputFile::lineOrder () const -{ - return _outputFile->header().lineOrder(); -} - - -Compression -TiledRgbaOutputFile::compression () const -{ - return _outputFile->header().compression(); -} - - -RgbaChannels -TiledRgbaOutputFile::channels () const -{ - return rgbaChannels (_outputFile->header().channels()); -} - - -unsigned int -TiledRgbaOutputFile::tileXSize () const -{ - return _outputFile->tileXSize(); -} - - -unsigned int -TiledRgbaOutputFile::tileYSize () const -{ - return _outputFile->tileYSize(); -} - - -LevelMode -TiledRgbaOutputFile::levelMode () const -{ - return _outputFile->levelMode(); -} - - -LevelRoundingMode -TiledRgbaOutputFile::levelRoundingMode () const -{ - return _outputFile->levelRoundingMode(); -} - - -int -TiledRgbaOutputFile::numLevels () const -{ - return _outputFile->numLevels(); -} - - -int -TiledRgbaOutputFile::numXLevels () const -{ - return _outputFile->numXLevels(); -} - - -int -TiledRgbaOutputFile::numYLevels () const -{ - return _outputFile->numYLevels(); -} - - -bool -TiledRgbaOutputFile::isValidLevel (int lx, int ly) const -{ - return _outputFile->isValidLevel (lx, ly); -} - - -int -TiledRgbaOutputFile::levelWidth (int lx) const -{ - return _outputFile->levelWidth (lx); -} - - -int -TiledRgbaOutputFile::levelHeight (int ly) const -{ - return _outputFile->levelHeight (ly); -} - - -int -TiledRgbaOutputFile::numXTiles (int lx) const -{ - return _outputFile->numXTiles (lx); -} - - -int -TiledRgbaOutputFile::numYTiles (int ly) const -{ - return _outputFile->numYTiles (ly); -} - - -IMATH_NAMESPACE::Box2i -TiledRgbaOutputFile::dataWindowForLevel (int l) const -{ - return _outputFile->dataWindowForLevel (l); -} - - -IMATH_NAMESPACE::Box2i -TiledRgbaOutputFile::dataWindowForLevel (int lx, int ly) const -{ - return _outputFile->dataWindowForLevel (lx, ly); -} - - -IMATH_NAMESPACE::Box2i -TiledRgbaOutputFile::dataWindowForTile (int dx, int dy, int l) const -{ - return _outputFile->dataWindowForTile (dx, dy, l); -} - - -IMATH_NAMESPACE::Box2i -TiledRgbaOutputFile::dataWindowForTile (int dx, int dy, int lx, int ly) const -{ - return _outputFile->dataWindowForTile (dx, dy, lx, ly); -} - - -void -TiledRgbaOutputFile::writeTile (int dx, int dy, int l) -{ - if (_toYa) - { - Lock lock (*_toYa); - _toYa->writeTile (dx, dy, l, l); - } - else - { - _outputFile->writeTile (dx, dy, l); - } -} - - -void -TiledRgbaOutputFile::writeTile (int dx, int dy, int lx, int ly) -{ - if (_toYa) - { - Lock lock (*_toYa); - _toYa->writeTile (dx, dy, lx, ly); - } - else - { - _outputFile->writeTile (dx, dy, lx, ly); - } -} - - -void -TiledRgbaOutputFile::writeTiles - (int dxMin, int dxMax, int dyMin, int dyMax, int lx, int ly) -{ - if (_toYa) - { - Lock lock (*_toYa); - - for (int dy = dyMin; dy <= dyMax; dy++) - for (int dx = dxMin; dx <= dxMax; dx++) - _toYa->writeTile (dx, dy, lx, ly); - } - else - { - _outputFile->writeTiles (dxMin, dxMax, dyMin, dyMax, lx, ly); - } -} - -void -TiledRgbaOutputFile::writeTiles - (int dxMin, int dxMax, int dyMin, int dyMax, int l) -{ - writeTiles (dxMin, dxMax, dyMin, dyMax, l, l); -} - - -class TiledRgbaInputFile::FromYa: public Mutex -{ - public: - - FromYa (TiledInputFile &inputFile); - - void setFrameBuffer (Rgba *base, - size_t xStride, - size_t yStride, - const string &channelNamePrefix); - - void readTile (int dx, int dy, int lx, int ly); - - private: - - TiledInputFile & _inputFile; - unsigned int _tileXSize; - unsigned int _tileYSize; - V3f _yw; - Array2D _buf; - Rgba * _fbBase; - size_t _fbXStride; - size_t _fbYStride; -}; - - -TiledRgbaInputFile::FromYa::FromYa (TiledInputFile &inputFile) -: - _inputFile (inputFile) -{ - const TileDescription &td = inputFile.header().tileDescription(); - - _tileXSize = td.xSize; - _tileYSize = td.ySize; - _yw = ywFromHeader (_inputFile.header()); - _buf.resizeErase (_tileYSize, _tileXSize); - _fbBase = 0; - _fbXStride = 0; - _fbYStride = 0; -} - - -void -TiledRgbaInputFile::FromYa::setFrameBuffer (Rgba *base, - size_t xStride, - size_t yStride, - const string &channelNamePrefix) -{ - if (_fbBase == 0) -{ - FrameBuffer fb; - - fb.insert (channelNamePrefix + "Y", - Slice (HALF, // type - (char *) &_buf[0][0].g, // base - sizeof (Rgba), // xStride - sizeof (Rgba) * _tileXSize, // yStride - 1, 1, // sampling - 0.0, // fillValue - true, true)); // tileCoordinates - - fb.insert (channelNamePrefix + "A", - Slice (HALF, // type - (char *) &_buf[0][0].a, // base - sizeof (Rgba), // xStride - sizeof (Rgba) * _tileXSize, // yStride - 1, 1, // sampling - 1.0, // fillValue - true, true)); // tileCoordinates - - _inputFile.setFrameBuffer (fb); - } - - _fbBase = base; - _fbXStride = xStride; - _fbYStride = yStride; -} - - -void -TiledRgbaInputFile::FromYa::readTile (int dx, int dy, int lx, int ly) -{ - if (_fbBase == 0) - { - THROW (IEX_NAMESPACE::ArgExc, "No frame buffer was specified as the " - "pixel data destination for image file " - "\"" << _inputFile.fileName() << "\"."); - } - - // - // Read the tile requested by the caller into _buf. - // - - _inputFile.readTile (dx, dy, lx, ly); - - // - // Convert the luminance/alpha pixels to RGBA - // and copy them into the caller's frame buffer. - // - - Box2i dw = _inputFile.dataWindowForTile (dx, dy, lx, ly); - int width = dw.max.x - dw.min.x + 1; - - for (int y = dw.min.y, y1 = 0; y <= dw.max.y; ++y, ++y1) - { - for (int x1 = 0; x1 < width; ++x1) - { - _buf[y1][x1].r = 0; - _buf[y1][x1].b = 0; - } - - YCAtoRGBA (_yw, width, _buf[y1], _buf[y1]); - - for (int x = dw.min.x, x1 = 0; x <= dw.max.x; ++x, ++x1) - { - _fbBase[x * _fbXStride + y * _fbYStride] = _buf[y1][x1]; - } - } -} - - -TiledRgbaInputFile::TiledRgbaInputFile (const char name[], int numThreads): - _inputFile (new TiledInputFile (name, numThreads)), - _fromYa (0), - _channelNamePrefix ("") -{ - if (channels() & WRITE_Y) - _fromYa = new FromYa (*_inputFile); -} - - -TiledRgbaInputFile::TiledRgbaInputFile (OPENEXR_IMF_INTERNAL_NAMESPACE::IStream &is, int numThreads): - _inputFile (new TiledInputFile (is, numThreads)), - _fromYa (0), - _channelNamePrefix ("") -{ - if (channels() & WRITE_Y) - _fromYa = new FromYa (*_inputFile); -} - - -TiledRgbaInputFile::TiledRgbaInputFile (const char name[], - const string &layerName, - int numThreads) -: - _inputFile (new TiledInputFile (name, numThreads)), - _fromYa (0), - _channelNamePrefix (prefixFromLayerName (layerName, _inputFile->header())) -{ - if (channels() & WRITE_Y) - _fromYa = new FromYa (*_inputFile); -} - - -TiledRgbaInputFile::TiledRgbaInputFile (OPENEXR_IMF_INTERNAL_NAMESPACE::IStream &is, - const string &layerName, - int numThreads) -: - _inputFile (new TiledInputFile (is, numThreads)), - _fromYa (0), - _channelNamePrefix (prefixFromLayerName (layerName, _inputFile->header())) -{ - if (channels() & WRITE_Y) - _fromYa = new FromYa (*_inputFile); -} - - -TiledRgbaInputFile::~TiledRgbaInputFile () -{ - delete _inputFile; - delete _fromYa; -} - - -void -TiledRgbaInputFile::setFrameBuffer (Rgba *base, size_t xStride, size_t yStride) -{ - if (_fromYa) - { - Lock lock (*_fromYa); - _fromYa->setFrameBuffer (base, xStride, yStride, _channelNamePrefix); - } - else - { - size_t xs = xStride * sizeof (Rgba); - size_t ys = yStride * sizeof (Rgba); - - FrameBuffer fb; - - fb.insert (_channelNamePrefix + "R", - Slice (HALF, - (char *) &base[0].r, - xs, ys, - 1, 1, // xSampling, ySampling - 0.0)); // fillValue - - fb.insert (_channelNamePrefix + "G", - Slice (HALF, - (char *) &base[0].g, - xs, ys, - 1, 1, // xSampling, ySampling - 0.0)); // fillValue - - fb.insert (_channelNamePrefix + "B", - Slice (HALF, - (char *) &base[0].b, - xs, ys, - 1, 1, // xSampling, ySampling - 0.0)); // fillValue - - fb.insert (_channelNamePrefix + "A", - Slice (HALF, - (char *) &base[0].a, - xs, ys, - 1, 1, // xSampling, ySampling - 1.0)); // fillValue - - _inputFile->setFrameBuffer (fb); - } -} - - -void -TiledRgbaInputFile::setLayerName (const std::string &layerName) -{ - delete _fromYa; - _fromYa = 0; - - _channelNamePrefix = prefixFromLayerName (layerName, _inputFile->header()); - - if (channels() & WRITE_Y) - _fromYa = new FromYa (*_inputFile); - - FrameBuffer fb; - _inputFile->setFrameBuffer (fb); -} - - -const Header & -TiledRgbaInputFile::header () const -{ - return _inputFile->header(); -} - - -const char * -TiledRgbaInputFile::fileName () const -{ - return _inputFile->fileName(); -} - - -const FrameBuffer & -TiledRgbaInputFile::frameBuffer () const -{ - return _inputFile->frameBuffer(); -} - - -const IMATH_NAMESPACE::Box2i & -TiledRgbaInputFile::displayWindow () const -{ - return _inputFile->header().displayWindow(); -} - - -const IMATH_NAMESPACE::Box2i & -TiledRgbaInputFile::dataWindow () const -{ - return _inputFile->header().dataWindow(); -} - - -float -TiledRgbaInputFile::pixelAspectRatio () const -{ - return _inputFile->header().pixelAspectRatio(); -} - - -const IMATH_NAMESPACE::V2f -TiledRgbaInputFile::screenWindowCenter () const -{ - return _inputFile->header().screenWindowCenter(); -} - - -float -TiledRgbaInputFile::screenWindowWidth () const -{ - return _inputFile->header().screenWindowWidth(); -} - - -LineOrder -TiledRgbaInputFile::lineOrder () const -{ - return _inputFile->header().lineOrder(); -} - - -Compression -TiledRgbaInputFile::compression () const -{ - return _inputFile->header().compression(); -} - - -RgbaChannels -TiledRgbaInputFile::channels () const -{ - return rgbaChannels (_inputFile->header().channels(), _channelNamePrefix); -} - - -int -TiledRgbaInputFile::version () const -{ - return _inputFile->version(); -} - - -bool -TiledRgbaInputFile::isComplete () const -{ - return _inputFile->isComplete(); -} - - -unsigned int -TiledRgbaInputFile::tileXSize () const -{ - return _inputFile->tileXSize(); -} - - -unsigned int -TiledRgbaInputFile::tileYSize () const -{ - return _inputFile->tileYSize(); -} - - -LevelMode -TiledRgbaInputFile::levelMode () const -{ - return _inputFile->levelMode(); -} - - -LevelRoundingMode -TiledRgbaInputFile::levelRoundingMode () const -{ - return _inputFile->levelRoundingMode(); -} - - -int -TiledRgbaInputFile::numLevels () const -{ - return _inputFile->numLevels(); -} - - -int -TiledRgbaInputFile::numXLevels () const -{ - return _inputFile->numXLevels(); -} - - -int -TiledRgbaInputFile::numYLevels () const -{ - return _inputFile->numYLevels(); -} - - -bool -TiledRgbaInputFile::isValidLevel (int lx, int ly) const -{ - return _inputFile->isValidLevel (lx, ly); -} - - -int -TiledRgbaInputFile::levelWidth (int lx) const -{ - return _inputFile->levelWidth (lx); -} - - -int -TiledRgbaInputFile::levelHeight (int ly) const -{ - return _inputFile->levelHeight (ly); -} - - -int -TiledRgbaInputFile::numXTiles (int lx) const -{ - return _inputFile->numXTiles(lx); -} - - -int -TiledRgbaInputFile::numYTiles (int ly) const -{ - return _inputFile->numYTiles(ly); -} - - -IMATH_NAMESPACE::Box2i -TiledRgbaInputFile::dataWindowForLevel (int l) const -{ - return _inputFile->dataWindowForLevel (l); -} - - -IMATH_NAMESPACE::Box2i -TiledRgbaInputFile::dataWindowForLevel (int lx, int ly) const -{ - return _inputFile->dataWindowForLevel (lx, ly); -} - - -IMATH_NAMESPACE::Box2i -TiledRgbaInputFile::dataWindowForTile (int dx, int dy, int l) const -{ - return _inputFile->dataWindowForTile (dx, dy, l); -} - - -IMATH_NAMESPACE::Box2i -TiledRgbaInputFile::dataWindowForTile (int dx, int dy, int lx, int ly) const -{ - return _inputFile->dataWindowForTile (dx, dy, lx, ly); -} - - -void -TiledRgbaInputFile::readTile (int dx, int dy, int l) -{ - if (_fromYa) - { - Lock lock (*_fromYa); - _fromYa->readTile (dx, dy, l, l); - } - else - { - _inputFile->readTile (dx, dy, l); - } -} - - -void -TiledRgbaInputFile::readTile (int dx, int dy, int lx, int ly) -{ - if (_fromYa) - { - Lock lock (*_fromYa); - _fromYa->readTile (dx, dy, lx, ly); - } - else - { - _inputFile->readTile (dx, dy, lx, ly); - } -} - - -void -TiledRgbaInputFile::readTiles (int dxMin, int dxMax, int dyMin, int dyMax, - int lx, int ly) -{ - if (_fromYa) - { - Lock lock (*_fromYa); - - for (int dy = dyMin; dy <= dyMax; dy++) - for (int dx = dxMin; dx <= dxMax; dx++) - _fromYa->readTile (dx, dy, lx, ly); - } - else - { - _inputFile->readTiles (dxMin, dxMax, dyMin, dyMax, lx, ly); - } -} - -void -TiledRgbaInputFile::readTiles (int dxMin, int dxMax, int dyMin, int dyMax, - int l) -{ - readTiles (dxMin, dxMax, dyMin, dyMax, l, l); -} - - -void -TiledRgbaOutputFile::updatePreviewImage (const PreviewRgba newPixels[]) -{ - _outputFile->updatePreviewImage (newPixels); -} - - -void -TiledRgbaOutputFile::breakTile (int dx, int dy, int lx, int ly, - int offset, int length, char c) -{ - _outputFile->breakTile (dx, dy, lx, ly, offset, length, c); -} - - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_EXIT diff --git a/3rdparty/openexr/IlmImf/ImfTiledRgbaFile.h b/3rdparty/openexr/IlmImf/ImfTiledRgbaFile.h deleted file mode 100644 index e12faab1fe..0000000000 --- a/3rdparty/openexr/IlmImf/ImfTiledRgbaFile.h +++ /dev/null @@ -1,559 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - -#ifndef INCLUDED_IMF_TILED_RGBA_FILE_H -#define INCLUDED_IMF_TILED_RGBA_FILE_H - -//----------------------------------------------------------------------------- -// -// Simplified RGBA image I/O for tiled files -// -// class TiledRgbaOutputFile -// class TiledRgbaInputFile -// -//----------------------------------------------------------------------------- - -#include "ImfHeader.h" -#include "ImfFrameBuffer.h" -#include "ImathVec.h" -#include "ImathBox.h" -#include "half.h" -#include "ImfTileDescription.h" -#include "ImfRgba.h" -#include "ImfThreading.h" -#include -#include "ImfNamespace.h" -#include "ImfForward.h" - - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER - - -// -// Tiled RGBA output file. -// - -class TiledRgbaOutputFile -{ - public: - - //--------------------------------------------------- - // Constructor -- rgbaChannels, tileXSize, tileYSize, - // levelMode, and levelRoundingMode overwrite the - // channel list and tile description attribute in the - // header that is passed as an argument to the - // constructor. - //--------------------------------------------------- - - IMF_EXPORT - TiledRgbaOutputFile (const char name[], - const Header &header, - RgbaChannels rgbaChannels, - int tileXSize, - int tileYSize, - LevelMode mode, - LevelRoundingMode rmode = ROUND_DOWN, - int numThreads = globalThreadCount ()); - - - //--------------------------------------------------- - // Constructor -- like the previous one, but the new - // TiledRgbaOutputFile is attached to a file that has - // already been opened by the caller. Destroying - // TiledRgbaOutputFileObjects constructed with this - // constructor does not automatically close the - // corresponding files. - //--------------------------------------------------- - - IMF_EXPORT - TiledRgbaOutputFile (OPENEXR_IMF_INTERNAL_NAMESPACE::OStream &os, - const Header &header, - RgbaChannels rgbaChannels, - int tileXSize, - int tileYSize, - LevelMode mode, - LevelRoundingMode rmode = ROUND_DOWN, - int numThreads = globalThreadCount ()); - - - //------------------------------------------------------ - // Constructor -- header data are explicitly specified - // as function call arguments (an empty dataWindow means - // "same as displayWindow") - //------------------------------------------------------ - - IMF_EXPORT - TiledRgbaOutputFile (const char name[], - int tileXSize, - int tileYSize, - LevelMode mode, - LevelRoundingMode rmode, - const IMATH_NAMESPACE::Box2i &displayWindow, - const IMATH_NAMESPACE::Box2i &dataWindow = IMATH_NAMESPACE::Box2i(), - RgbaChannels rgbaChannels = WRITE_RGBA, - float pixelAspectRatio = 1, - const IMATH_NAMESPACE::V2f screenWindowCenter = - IMATH_NAMESPACE::V2f (0, 0), - float screenWindowWidth = 1, - LineOrder lineOrder = INCREASING_Y, - Compression compression = ZIP_COMPRESSION, - int numThreads = globalThreadCount ()); - - - //----------------------------------------------- - // Constructor -- like the previous one, but both - // the display window and the data window are - // Box2i (V2i (0, 0), V2i (width - 1, height -1)) - //----------------------------------------------- - - IMF_EXPORT - TiledRgbaOutputFile (const char name[], - int width, - int height, - int tileXSize, - int tileYSize, - LevelMode mode, - LevelRoundingMode rmode = ROUND_DOWN, - RgbaChannels rgbaChannels = WRITE_RGBA, - float pixelAspectRatio = 1, - const IMATH_NAMESPACE::V2f screenWindowCenter = - IMATH_NAMESPACE::V2f (0, 0), - float screenWindowWidth = 1, - LineOrder lineOrder = INCREASING_Y, - Compression compression = ZIP_COMPRESSION, - int numThreads = globalThreadCount ()); - - IMF_EXPORT - virtual ~TiledRgbaOutputFile (); - - - //------------------------------------------------ - // Define a frame buffer as the pixel data source: - // Pixel (x, y) is at address - // - // base + x * xStride + y * yStride - // - //------------------------------------------------ - - IMF_EXPORT - void setFrameBuffer (const Rgba *base, - size_t xStride, - size_t yStride); - - //-------------------------- - // Access to the file header - //-------------------------- - - IMF_EXPORT - const Header & header () const; - IMF_EXPORT - const FrameBuffer & frameBuffer () const; - IMF_EXPORT - const IMATH_NAMESPACE::Box2i & displayWindow () const; - IMF_EXPORT - const IMATH_NAMESPACE::Box2i & dataWindow () const; - IMF_EXPORT - float pixelAspectRatio () const; - IMF_EXPORT - const IMATH_NAMESPACE::V2f screenWindowCenter () const; - IMF_EXPORT - float screenWindowWidth () const; - IMF_EXPORT - LineOrder lineOrder () const; - IMF_EXPORT - Compression compression () const; - IMF_EXPORT - RgbaChannels channels () const; - - - //---------------------------------------------------- - // Utility functions (same as in Imf::TiledOutputFile) - //---------------------------------------------------- - - IMF_EXPORT - unsigned int tileXSize () const; - IMF_EXPORT - unsigned int tileYSize () const; - IMF_EXPORT - LevelMode levelMode () const; - IMF_EXPORT - LevelRoundingMode levelRoundingMode () const; - - IMF_EXPORT - int numLevels () const; - IMF_EXPORT - int numXLevels () const; - IMF_EXPORT - int numYLevels () const; - IMF_EXPORT - bool isValidLevel (int lx, int ly) const; - - IMF_EXPORT - int levelWidth (int lx) const; - IMF_EXPORT - int levelHeight (int ly) const; - - IMF_EXPORT - int numXTiles (int lx = 0) const; - IMF_EXPORT - int numYTiles (int ly = 0) const; - - IMF_EXPORT - IMATH_NAMESPACE::Box2i dataWindowForLevel (int l = 0) const; - IMF_EXPORT - IMATH_NAMESPACE::Box2i dataWindowForLevel (int lx, int ly) const; - - IMF_EXPORT - IMATH_NAMESPACE::Box2i dataWindowForTile (int dx, int dy, - int l = 0) const; - - IMF_EXPORT - IMATH_NAMESPACE::Box2i dataWindowForTile (int dx, int dy, - int lx, int ly) const; - - //------------------------------------------------------------------ - // Write pixel data: - // - // writeTile(dx, dy, lx, ly) writes the tile with tile - // coordinates (dx, dy), and level number (lx, ly) to - // the file. - // - // dx must lie in the interval [0, numXTiles(lx)-1] - // dy must lie in the interval [0, numYTiles(ly)-1] - // - // lx must lie in the interval [0, numXLevels()-1] - // ly must lie in the inverval [0, numYLevels()-1] - // - // writeTile(dx, dy, level) is a convenience function - // used for ONE_LEVEL and MIPMAP_LEVEL files. It calls - // writeTile(dx, dy, level, level). - // - // The two writeTiles(dx1, dx2, dy1, dy2, ...) functions allow - // writing multiple tiles at once. If multi-threading is used - // multiple tiles are written concurrently. - // - // Pixels that are outside the pixel coordinate range for the tile's - // level, are never accessed by writeTile(). - // - // Each tile in the file must be written exactly once. - // - //------------------------------------------------------------------ - - IMF_EXPORT - void writeTile (int dx, int dy, int l = 0); - IMF_EXPORT - void writeTile (int dx, int dy, int lx, int ly); - - IMF_EXPORT - void writeTiles (int dxMin, int dxMax, int dyMin, int dyMax, - int lx, int ly); - - IMF_EXPORT - void writeTiles (int dxMin, int dxMax, int dyMin, int dyMax, - int l = 0); - - - // ------------------------------------------------------------------------- - // Update the preview image (see Imf::TiledOutputFile::updatePreviewImage()) - // ------------------------------------------------------------------------- - - IMF_EXPORT - void updatePreviewImage (const PreviewRgba[]); - - - //------------------------------------------------ - // Break a tile -- for testing and debugging only - // (see Imf::TiledOutputFile::breakTile()) - // - // Warning: Calling this function usually results - // in a broken image file. The file or parts of - // it may not be readable, or the file may contain - // bad data. - // - //------------------------------------------------ - - IMF_EXPORT - void breakTile (int dx, int dy, - int lx, int ly, - int offset, - int length, - char c); - private: - - // - // Copy constructor and assignment are not implemented - // - - TiledRgbaOutputFile (const TiledRgbaOutputFile &); - TiledRgbaOutputFile & operator = (const TiledRgbaOutputFile &); - - class ToYa; - - TiledOutputFile * _outputFile; - ToYa * _toYa; -}; - - - -// -// Tiled RGBA input file -// - -class TiledRgbaInputFile -{ - public: - - //-------------------------------------------------------- - // Constructor -- opens the file with the specified name. - // Destroying TiledRgbaInputFile objects constructed with - // this constructor automatically closes the corresponding - // files. - //-------------------------------------------------------- - - IMF_EXPORT - TiledRgbaInputFile (const char name[], - int numThreads = globalThreadCount ()); - - - //------------------------------------------------------- - // Constructor -- attaches the new TiledRgbaInputFile - // object to a file that has already been opened by the - // caller. - // Destroying TiledRgbaInputFile objects constructed with - // this constructor does not automatically close the - // corresponding files. - //------------------------------------------------------- - - IMF_EXPORT - TiledRgbaInputFile (OPENEXR_IMF_INTERNAL_NAMESPACE::IStream &is, int numThreads = globalThreadCount ()); - - - //------------------------------------------------------------ - // Constructors -- the same as the previous two, but the names - // of the red, green, blue, alpha, and luminance channels are - // expected to be layerName.R, layerName.G, etc. - //------------------------------------------------------------ - - IMF_EXPORT - TiledRgbaInputFile (const char name[], - const std::string &layerName, - int numThreads = globalThreadCount()); - - IMF_EXPORT - TiledRgbaInputFile (OPENEXR_IMF_INTERNAL_NAMESPACE::IStream &is, - const std::string &layerName, - int numThreads = globalThreadCount()); - - //----------- - // Destructor - //----------- - - IMF_EXPORT - virtual ~TiledRgbaInputFile (); - - - //----------------------------------------------------- - // Define a frame buffer as the pixel data destination: - // Pixel (x, y) is at address - // - // base + x * xStride + y * yStride - // - //----------------------------------------------------- - - IMF_EXPORT - void setFrameBuffer (Rgba *base, - size_t xStride, - size_t yStride); - - //------------------------------------------------------------------- - // Switch to a different layer -- subsequent calls to readTile() - // and readTiles() will read channels layerName.R, layerName.G, etc. - // After each call to setLayerName(), setFrameBuffer() must be called - // at least once before the next call to readTile() or readTiles(). - //------------------------------------------------------------------- - - IMF_EXPORT - void setLayerName (const std::string &layerName); - - - //-------------------------- - // Access to the file header - //-------------------------- - - IMF_EXPORT - const Header & header () const; - IMF_EXPORT - const FrameBuffer & frameBuffer () const; - IMF_EXPORT - const IMATH_NAMESPACE::Box2i & displayWindow () const; - IMF_EXPORT - const IMATH_NAMESPACE::Box2i & dataWindow () const; - IMF_EXPORT - float pixelAspectRatio () const; - IMF_EXPORT - const IMATH_NAMESPACE::V2f screenWindowCenter () const; - IMF_EXPORT - float screenWindowWidth () const; - IMF_EXPORT - LineOrder lineOrder () const; - IMF_EXPORT - Compression compression () const; - IMF_EXPORT - RgbaChannels channels () const; - IMF_EXPORT - const char * fileName () const; - IMF_EXPORT - bool isComplete () const; - - //---------------------------------- - // Access to the file format version - //---------------------------------- - - IMF_EXPORT - int version () const; - - - //--------------------------------------------------- - // Utility functions (same as in Imf::TiledInputFile) - //--------------------------------------------------- - - IMF_EXPORT - unsigned int tileXSize () const; - IMF_EXPORT - unsigned int tileYSize () const; - IMF_EXPORT - LevelMode levelMode () const; - IMF_EXPORT - LevelRoundingMode levelRoundingMode () const; - - IMF_EXPORT - int numLevels () const; - IMF_EXPORT - int numXLevels () const; - IMF_EXPORT - int numYLevels () const; - IMF_EXPORT - bool isValidLevel (int lx, int ly) const; - - IMF_EXPORT - int levelWidth (int lx) const; - IMF_EXPORT - int levelHeight (int ly) const; - - IMF_EXPORT - int numXTiles (int lx = 0) const; - IMF_EXPORT - int numYTiles (int ly = 0) const; - - IMF_EXPORT - IMATH_NAMESPACE::Box2i dataWindowForLevel (int l = 0) const; - IMF_EXPORT - IMATH_NAMESPACE::Box2i dataWindowForLevel (int lx, int ly) const; - - IMF_EXPORT - IMATH_NAMESPACE::Box2i dataWindowForTile (int dx, int dy, - int l = 0) const; - - IMF_EXPORT - IMATH_NAMESPACE::Box2i dataWindowForTile (int dx, int dy, - int lx, int ly) const; - - - //---------------------------------------------------------------- - // Read pixel data: - // - // readTile(dx, dy, lx, ly) reads the tile with tile - // coordinates (dx, dy), and level number (lx, ly), - // and stores it in the current frame buffer. - // - // dx must lie in the interval [0, numXTiles(lx)-1] - // dy must lie in the interval [0, numYTiles(ly)-1] - // - // lx must lie in the interval [0, numXLevels()-1] - // ly must lie in the inverval [0, numYLevels()-1] - // - // readTile(dx, dy, level) is a convenience function used - // for ONE_LEVEL and MIPMAP_LEVELS files. It calls - // readTile(dx, dy, level, level). - // - // The two readTiles(dx1, dx2, dy1, dy2, ...) functions allow - // reading multiple tiles at once. If multi-threading is used - // multiple tiles are read concurrently. - // - // Pixels that are outside the pixel coordinate range for the - // tile's level, are never accessed by readTile(). - // - // Attempting to access a tile that is not present in the file - // throws an InputExc exception. - // - //---------------------------------------------------------------- - - IMF_EXPORT - void readTile (int dx, int dy, int l = 0); - IMF_EXPORT - void readTile (int dx, int dy, int lx, int ly); - - IMF_EXPORT - void readTiles (int dxMin, int dxMax, - int dyMin, int dyMax, int lx, int ly); - - IMF_EXPORT - void readTiles (int dxMin, int dxMax, - int dyMin, int dyMax, int l = 0); - - private: - - // - // Copy constructor and assignment are not implemented - // - - TiledRgbaInputFile (const TiledRgbaInputFile &); - TiledRgbaInputFile & operator = (const TiledRgbaInputFile &); - - class FromYa; - - TiledInputFile * _inputFile; - FromYa * _fromYa; - std::string _channelNamePrefix; -}; - - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT - - - - - -#endif diff --git a/3rdparty/openexr/IlmImf/ImfTimeCode.cpp b/3rdparty/openexr/IlmImf/ImfTimeCode.cpp deleted file mode 100644 index 88b9d1c596..0000000000 --- a/3rdparty/openexr/IlmImf/ImfTimeCode.cpp +++ /dev/null @@ -1,431 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - -//----------------------------------------------------------------------------- -// -// class TimeCode -// -//----------------------------------------------------------------------------- - -#include -#include "Iex.h" -#include "ImfNamespace.h" - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_ENTER - - -TimeCode::TimeCode () -{ - _time = 0; - _user = 0; -} - - -TimeCode::TimeCode - (int hours, - int minutes, - int seconds, - int frame, - bool dropFrame, - bool colorFrame, - bool fieldPhase, - bool bgf0, - bool bgf1, - bool bgf2, - int binaryGroup1, - int binaryGroup2, - int binaryGroup3, - int binaryGroup4, - int binaryGroup5, - int binaryGroup6, - int binaryGroup7, - int binaryGroup8) -{ - setHours (hours); - setMinutes (minutes); - setSeconds (seconds); - setFrame (frame); - setDropFrame (dropFrame); - setColorFrame (colorFrame); - setFieldPhase (fieldPhase); - setBgf0 (bgf0); - setBgf1 (bgf1); - setBgf2 (bgf2); - setBinaryGroup (1, binaryGroup1); - setBinaryGroup (2, binaryGroup2); - setBinaryGroup (3, binaryGroup3); - setBinaryGroup (4, binaryGroup4); - setBinaryGroup (5, binaryGroup5); - setBinaryGroup (6, binaryGroup6); - setBinaryGroup (7, binaryGroup7); - setBinaryGroup (8, binaryGroup8); -} - - -TimeCode::TimeCode - (unsigned int timeAndFlags, - unsigned int userData, - Packing packing) -{ - setTimeAndFlags (timeAndFlags, packing); - setUserData (userData); -} - - -TimeCode::TimeCode (const TimeCode &other) -{ - _time = other._time; - _user = other._user; -} - - -TimeCode & -TimeCode::operator = (const TimeCode &other) -{ - _time = other._time; - _user = other._user; - return *this; -} - - -bool -TimeCode::operator == (const TimeCode & c) const -{ - return (_time == c._time && _user == c._user); -} - - -bool -TimeCode::operator != (const TimeCode & c) const -{ - return (_time != c._time || _user != c._user); -} - - - -namespace { - -unsigned int -bitField (unsigned int value, int minBit, int maxBit) -{ - int shift = minBit; - unsigned int mask = (~(~0U << (maxBit - minBit + 1)) << minBit); - return (value & mask) >> shift; -} - - -void -setBitField (unsigned int &value, int minBit, int maxBit, unsigned int field) -{ - int shift = minBit; - unsigned int mask = (~(~0U << (maxBit - minBit + 1)) << minBit); - value = ((value & ~mask) | ((field << shift) & mask)); -} - - -int -bcdToBinary (unsigned int bcd) -{ - return int ((bcd & 0x0f) + 10 * ((bcd >> 4) & 0x0f)); -} - - -unsigned int -binaryToBcd (int binary) -{ - int units = binary % 10; - int tens = (binary / 10) % 10; - return (unsigned int) (units | (tens << 4)); -} - - -} // namespace - - -int -TimeCode::hours () const -{ - return bcdToBinary (bitField (_time, 24, 29)); -} - - -void -TimeCode::setHours (int value) -{ - if (value < 0 || value > 23) - throw IEX_NAMESPACE::ArgExc ("Cannot set hours field in time code. " - "New value is out of range."); - - setBitField (_time, 24, 29, binaryToBcd (value)); -} - - -int -TimeCode::minutes () const -{ - return bcdToBinary (bitField (_time, 16, 22)); -} - - -void -TimeCode::setMinutes (int value) -{ - if (value < 0 || value > 59) - throw IEX_NAMESPACE::ArgExc ("Cannot set minutes field in time code. " - "New value is out of range."); - - setBitField (_time, 16, 22, binaryToBcd (value)); -} - - -int -TimeCode::seconds () const -{ - return bcdToBinary (bitField (_time, 8, 14)); -} - - -void -TimeCode::setSeconds (int value) -{ - if (value < 0 || value > 59) - throw IEX_NAMESPACE::ArgExc ("Cannot set seconds field in time code. " - "New value is out of range."); - - setBitField (_time, 8, 14, binaryToBcd (value)); -} - - -int -TimeCode::frame () const -{ - return bcdToBinary (bitField (_time, 0, 5)); -} - - -void -TimeCode::setFrame (int value) -{ - if (value < 0 || value > 59) - throw IEX_NAMESPACE::ArgExc ("Cannot set frame field in time code. " - "New value is out of range."); - - setBitField (_time, 0, 5, binaryToBcd (value)); -} - - -bool -TimeCode::dropFrame () const -{ - return !!bitField (_time, 6, 6); -} - - -void -TimeCode::setDropFrame (bool value) -{ - setBitField (_time, 6, 6, (unsigned int) !!value); -} - - -bool -TimeCode::colorFrame () const -{ - return !!bitField (_time, 7, 7); -} - - -void -TimeCode::setColorFrame (bool value) -{ - setBitField (_time, 7, 7, (unsigned int) !!value); -} - - -bool -TimeCode::fieldPhase () const -{ - return !!bitField (_time, 15, 15); -} - - -void -TimeCode::setFieldPhase (bool value) -{ - setBitField (_time, 15, 15, (unsigned int) !!value); -} - - -bool -TimeCode::bgf0 () const -{ - return !!bitField (_time, 23, 23); -} - - -void -TimeCode::setBgf0 (bool value) -{ - setBitField (_time, 23, 23, (unsigned int) !!value); -} - - -bool -TimeCode::bgf1 () const -{ - return!!bitField (_time, 30, 30); -} - - -void -TimeCode::setBgf1 (bool value) -{ - setBitField (_time, 30, 30, (unsigned int) !!value); -} - - -bool -TimeCode::bgf2 () const -{ - return !!bitField (_time, 31, 31); -} - - -void -TimeCode::setBgf2 (bool value) -{ - setBitField (_time, 31, 31, (unsigned int) !!value); -} - - -int -TimeCode::binaryGroup (int group) const -{ - if (group < 1 || group > 8) - throw IEX_NAMESPACE::ArgExc ("Cannot extract binary group from time code " - "user data. Group number is out of range."); - - int minBit = 4 * (group - 1); - int maxBit = minBit + 3; - return int (bitField (_user, minBit, maxBit)); -} - - -void -TimeCode::setBinaryGroup (int group, int value) -{ - if (group < 1 || group > 8) - throw IEX_NAMESPACE::ArgExc ("Cannot extract binary group from time code " - "user data. Group number is out of range."); - - int minBit = 4 * (group - 1); - int maxBit = minBit + 3; - setBitField (_user, minBit, maxBit, (unsigned int) value); -} - - -unsigned int -TimeCode::timeAndFlags (Packing packing) const -{ - if (packing == TV50_PACKING) - { - unsigned int t = _time; - - t &= ~((1 << 6) | (1 << 15) | (1 << 23) | (1 << 30) | (1 << 31)); - - t |= ((unsigned int) bgf0() << 15); - t |= ((unsigned int) bgf2() << 23); - t |= ((unsigned int) bgf1() << 30); - t |= ((unsigned int) fieldPhase() << 31); - - return t; - } - if (packing == FILM24_PACKING) - { - return _time & ~((1 << 6) | (1 << 7)); - } - else // packing == TV60_PACKING - { - return _time; - } -} - - -void -TimeCode::setTimeAndFlags (unsigned int value, Packing packing) -{ - if (packing == TV50_PACKING) - { - _time = value & - ~((1 << 6) | (1 << 15) | (1 << 23) | (1 << 30) | (1 << 31)); - - if (value & (1 << 15)) - setBgf0 (true); - - if (value & (1 << 23)) - setBgf2 (true); - - if (value & (1 << 30)) - setBgf1 (true); - - if (value & (1 << 31)) - setFieldPhase (true); - } - else if (packing == FILM24_PACKING) - { - _time = value & ~((1 << 6) | (1 << 7)); - } - else // packing == TV60_PACKING - { - _time = value; - } -} - - -unsigned int -TimeCode::userData () const -{ - return _user; -} - - -void -TimeCode::setUserData (unsigned int value) -{ - _user = value; -} - - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_EXIT diff --git a/3rdparty/openexr/IlmImf/ImfTimeCode.h b/3rdparty/openexr/IlmImf/ImfTimeCode.h deleted file mode 100644 index 1e3a46475e..0000000000 --- a/3rdparty/openexr/IlmImf/ImfTimeCode.h +++ /dev/null @@ -1,275 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - -#ifndef INCLUDED_IMF_TIME_CODE_H -#define INCLUDED_IMF_TIME_CODE_H - -#include "ImfExport.h" -#include "ImfNamespace.h" - -//----------------------------------------------------------------------------- -// -// class TimeCode -// -// A TimeCode object stores time and control codes as described -// in SMPTE standard 12M-1999. A TimeCode object contains the -// following fields: -// -// Time Address: -// -// hours integer, range 0 - 23 -// minutes integer, range 0 - 59 -// seconds integer, range 0 - 59 -// frame integer, range 0 - 29 -// -// Flags: -// -// drop frame flag boolean -// color frame flag boolean -// field/phase flag boolean -// bgf0 boolean -// bgf1 boolean -// bgf2 boolean -// -// Binary groups for user-defined data and control codes: -// -// binary group 1 integer, range 0 - 15 -// binary group 2 integer, range 0 - 15 -// ... -// binary group 8 integer, range 0 - 15 -// -// Class TimeCode contains methods to convert between the fields -// listed above and a more compact representation where the fields -// are packed into two unsigned 32-bit integers. In the packed -// integer representations, bit 0 is the least significant bit, -// and bit 31 is the most significant bit of the integer value. -// -// The time address and flags fields can be packed in three -// different ways: -// -// bits packing for packing for packing for -// 24-frame 60-field 50-field -// film television television -// -// 0 - 3 frame units frame units frame units -// 4 - 5 frame tens frame tens frame tens -// 6 unused, set to 0 drop frame flag unused, set to 0 -// 7 unused, set to 0 color frame flag color frame flag -// 8 - 11 seconds units seconds units seconds units -// 12 - 14 seconds tens seconds tens seconds tens -// 15 phase flag field/phase flag bgf0 -// 16 - 19 minutes units minutes units minutes units -// 20 - 22 minutes tens minutes tens minutes tens -// 23 bgf0 bgf0 bgf2 -// 24 - 27 hours units hours units hours units -// 28 - 29 hours tens hours tens hours tens -// 30 bgf1 bgf1 bgf1 -// 31 bgf2 bgf2 field/phase flag -// -// User-defined data and control codes are packed as follows: -// -// bits field -// -// 0 - 3 binary group 1 -// 4 - 7 binary group 2 -// 8 - 11 binary group 3 -// 12 - 15 binary group 4 -// 16 - 19 binary group 5 -// 20 - 23 binary group 6 -// 24 - 27 binary group 7 -// 28 - 31 binary group 8 -// -//----------------------------------------------------------------------------- - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER - - -class TimeCode -{ - public: - - //--------------------- - // Bit packing variants - //--------------------- - - enum Packing - { - TV60_PACKING, // packing for 60-field television - TV50_PACKING, // packing for 50-field television - FILM24_PACKING // packing for 24-frame film - }; - - - //------------------------------------- - // Constructors and assignment operator - //------------------------------------- - - IMF_EXPORT - TimeCode (); // all fields set to 0 or false - - IMF_EXPORT - TimeCode (int hours, - int minutes, - int seconds, - int frame, - bool dropFrame = false, - bool colorFrame = false, - bool fieldPhase = false, - bool bgf0 = false, - bool bgf1 = false, - bool bgf2 = false, - int binaryGroup1 = 0, - int binaryGroup2 = 0, - int binaryGroup3 = 0, - int binaryGroup4 = 0, - int binaryGroup5 = 0, - int binaryGroup6 = 0, - int binaryGroup7 = 0, - int binaryGroup8 = 0); - - IMF_EXPORT - TimeCode (unsigned int timeAndFlags, - unsigned int userData = 0, - Packing packing = TV60_PACKING); - - IMF_EXPORT - TimeCode (const TimeCode &other); - - IMF_EXPORT - TimeCode & operator = (const TimeCode &other); - - - //---------------------------- - // Access to individual fields - //---------------------------- - - IMF_EXPORT - int hours () const; - IMF_EXPORT - void setHours (int value); - - IMF_EXPORT - int minutes () const; - IMF_EXPORT - void setMinutes (int value); - - IMF_EXPORT - int seconds () const; - IMF_EXPORT - void setSeconds (int value); - - IMF_EXPORT - int frame () const; - IMF_EXPORT - void setFrame (int value); - - IMF_EXPORT - bool dropFrame () const; - IMF_EXPORT - void setDropFrame (bool value); - - IMF_EXPORT - bool colorFrame () const; - IMF_EXPORT - void setColorFrame (bool value); - - IMF_EXPORT - bool fieldPhase () const; - IMF_EXPORT - void setFieldPhase (bool value); - - IMF_EXPORT - bool bgf0 () const; - IMF_EXPORT - void setBgf0 (bool value); - - IMF_EXPORT - bool bgf1 () const; - IMF_EXPORT - void setBgf1 (bool value); - - IMF_EXPORT - bool bgf2 () const; - IMF_EXPORT - void setBgf2 (bool value); - - IMF_EXPORT - int binaryGroup (int group) const; // group must be between 1 and 8 - IMF_EXPORT - void setBinaryGroup (int group, int value); - - - //--------------------------------- - // Access to packed representations - //--------------------------------- - - IMF_EXPORT - unsigned int timeAndFlags (Packing packing = TV60_PACKING) const; - - IMF_EXPORT - void setTimeAndFlags (unsigned int value, - Packing packing = TV60_PACKING); - - IMF_EXPORT - unsigned int userData () const; - - IMF_EXPORT - void setUserData (unsigned int value); - - - //--------- - // Equality - //--------- - - IMF_EXPORT - bool operator == (const TimeCode &v) const; - IMF_EXPORT - bool operator != (const TimeCode &v) const; - - private: - - unsigned int _time; - unsigned int _user; -}; - - - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT - - - - - -#endif diff --git a/3rdparty/openexr/IlmImf/ImfTimeCodeAttribute.cpp b/3rdparty/openexr/IlmImf/ImfTimeCodeAttribute.cpp deleted file mode 100644 index 5e7ea5942a..0000000000 --- a/3rdparty/openexr/IlmImf/ImfTimeCodeAttribute.cpp +++ /dev/null @@ -1,79 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - -//----------------------------------------------------------------------------- -// -// class TimeCodeAttribute -// -//----------------------------------------------------------------------------- - -#include - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_ENTER - -using namespace OPENEXR_IMF_INTERNAL_NAMESPACE; - -template <> -const char * -TimeCodeAttribute::staticTypeName () -{ - return "timecode"; -} - - -template <> -void -TimeCodeAttribute::writeValueTo (OPENEXR_IMF_INTERNAL_NAMESPACE::OStream &os, int version) const -{ - Xdr::write (os, _value.timeAndFlags()); - Xdr::write (os, _value.userData()); -} - - -template <> -void -TimeCodeAttribute::readValueFrom (OPENEXR_IMF_INTERNAL_NAMESPACE::IStream &is, int size, int version) -{ - unsigned int tmp; - - Xdr::read (is, tmp); - _value.setTimeAndFlags (tmp); - - Xdr::read (is, tmp); - _value.setUserData (tmp); -} - - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_EXIT diff --git a/3rdparty/openexr/IlmImf/ImfTimeCodeAttribute.h b/3rdparty/openexr/IlmImf/ImfTimeCodeAttribute.h deleted file mode 100644 index ccd893a419..0000000000 --- a/3rdparty/openexr/IlmImf/ImfTimeCodeAttribute.h +++ /dev/null @@ -1,74 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - -#ifndef INCLUDED_IMF_TIME_CODE_ATTRIBUTE_H -#define INCLUDED_IMF_TIME_CODE_ATTRIBUTE_H - - -//----------------------------------------------------------------------------- -// -// class TimeCodeAttribute -// -//----------------------------------------------------------------------------- - -#include "ImfAttribute.h" -#include "ImfTimeCode.h" - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER - - -typedef TypedAttribute TimeCodeAttribute; - -template <> -IMF_EXPORT -const char *TimeCodeAttribute::staticTypeName (); - -template <> -IMF_EXPORT -void TimeCodeAttribute::writeValueTo (OPENEXR_IMF_INTERNAL_NAMESPACE::OStream &, - int) const; - -template <> -IMF_EXPORT -void TimeCodeAttribute::readValueFrom (OPENEXR_IMF_INTERNAL_NAMESPACE::IStream &, - int, int); - - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT - - - - -#endif diff --git a/3rdparty/openexr/IlmImf/ImfVecAttribute.cpp b/3rdparty/openexr/IlmImf/ImfVecAttribute.cpp deleted file mode 100644 index 7d51904dfb..0000000000 --- a/3rdparty/openexr/IlmImf/ImfVecAttribute.cpp +++ /dev/null @@ -1,217 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - - -//----------------------------------------------------------------------------- -// -// class V2iAttribute -// class V2fAttribute -// class V2dAttribute -// class V3iAttribute -// class V3fAttribute -// class V3dAttribute -// -//----------------------------------------------------------------------------- - -#include - - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_ENTER - -using namespace OPENEXR_IMF_INTERNAL_NAMESPACE; - -template <> -const char * -V2iAttribute::staticTypeName () -{ - return "v2i"; -} - - -template <> -void -V2iAttribute::writeValueTo (OPENEXR_IMF_INTERNAL_NAMESPACE::OStream &os, int version) const -{ - Xdr::write (os, _value.x); - Xdr::write (os, _value.y); -} - - -template <> -void -V2iAttribute::readValueFrom (OPENEXR_IMF_INTERNAL_NAMESPACE::IStream &is, int size, int version) -{ - Xdr::read (is, _value.x); - Xdr::read (is, _value.y); -} - - -template <> -const char * -V2fAttribute::staticTypeName () -{ - return "v2f"; -} - - -template <> -void -V2fAttribute::writeValueTo (OPENEXR_IMF_INTERNAL_NAMESPACE::OStream &os, int version) const -{ - Xdr::write (os, _value.x); - Xdr::write (os, _value.y); -} - - -template <> -void -V2fAttribute::readValueFrom (OPENEXR_IMF_INTERNAL_NAMESPACE::IStream &is, int size, int version) -{ - Xdr::read (is, _value.x); - Xdr::read (is, _value.y); -} - - -template <> -const char * -V2dAttribute::staticTypeName () -{ - return "v2d"; -} - - -template <> -void -V2dAttribute::writeValueTo (OPENEXR_IMF_INTERNAL_NAMESPACE::OStream &os, int version) const -{ - Xdr::write (os, _value.x); - Xdr::write (os, _value.y); -} - - -template <> -void -V2dAttribute::readValueFrom (OPENEXR_IMF_INTERNAL_NAMESPACE::IStream &is, int size, int version) -{ - Xdr::read (is, _value.x); - Xdr::read (is, _value.y); -} - - -template <> -const char * -V3iAttribute::staticTypeName () -{ - return "v3i"; -} - - -template <> -void -V3iAttribute::writeValueTo (OPENEXR_IMF_INTERNAL_NAMESPACE::OStream &os, int version) const -{ - Xdr::write (os, _value.x); - Xdr::write (os, _value.y); - Xdr::write (os, _value.z); -} - - -template <> -void -V3iAttribute::readValueFrom (OPENEXR_IMF_INTERNAL_NAMESPACE::IStream &is, int size, int version) -{ - Xdr::read (is, _value.x); - Xdr::read (is, _value.y); - Xdr::read (is, _value.z); -} - - -template <> -const char * -V3fAttribute::staticTypeName () -{ - return "v3f"; -} - - -template <> -void -V3fAttribute::writeValueTo (OPENEXR_IMF_INTERNAL_NAMESPACE::OStream &os, int version) const -{ - Xdr::write (os, _value.x); - Xdr::write (os, _value.y); - Xdr::write (os, _value.z); -} - - -template <> -void -V3fAttribute::readValueFrom (OPENEXR_IMF_INTERNAL_NAMESPACE::IStream &is, int size, int version) -{ - Xdr::read (is, _value.x); - Xdr::read (is, _value.y); - Xdr::read (is, _value.z); -} - - -template <> -const char * -V3dAttribute::staticTypeName () -{ - return "v3d"; -} - - -template <> -void -V3dAttribute::writeValueTo (OPENEXR_IMF_INTERNAL_NAMESPACE::OStream &os, int version) const -{ - Xdr::write (os, _value.x); - Xdr::write (os, _value.y); - Xdr::write (os, _value.z); -} - - -template <> -void -V3dAttribute::readValueFrom (OPENEXR_IMF_INTERNAL_NAMESPACE::IStream &is, int size, int version) -{ - Xdr::read (is, _value.x); - Xdr::read (is, _value.y); - Xdr::read (is, _value.z); -} - - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_EXIT diff --git a/3rdparty/openexr/IlmImf/ImfVecAttribute.h b/3rdparty/openexr/IlmImf/ImfVecAttribute.h deleted file mode 100644 index 8480fe6577..0000000000 --- a/3rdparty/openexr/IlmImf/ImfVecAttribute.h +++ /dev/null @@ -1,100 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - - -#ifndef INCLUDED_IMF_VEC_ATTRIBUTE_H -#define INCLUDED_IMF_VEC_ATTRIBUTE_H - -//----------------------------------------------------------------------------- -// -// class V2iAttribute -// class V2fAttribute -// class V2dAttribute -// class V3iAttribute -// class V3fAttribute -// class V3dAttribute -// -//----------------------------------------------------------------------------- - -#include "ImfAttribute.h" -#include "ImathVec.h" - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER - -typedef TypedAttribute V2iAttribute; -template <> IMF_EXPORT const char *V2iAttribute::staticTypeName (); -template <> IMF_EXPORT void V2iAttribute::writeValueTo (OPENEXR_IMF_INTERNAL_NAMESPACE::OStream &, int) const; -template <> IMF_EXPORT void V2iAttribute::readValueFrom (OPENEXR_IMF_INTERNAL_NAMESPACE::IStream &, int, int); - - -typedef TypedAttribute V2fAttribute; -template <> IMF_EXPORT const char *V2fAttribute::staticTypeName (); -template <> IMF_EXPORT void V2fAttribute::writeValueTo (OPENEXR_IMF_INTERNAL_NAMESPACE::OStream &, int) const; -template <> IMF_EXPORT void V2fAttribute::readValueFrom (OPENEXR_IMF_INTERNAL_NAMESPACE::IStream &, int, int); - - -typedef TypedAttribute V2dAttribute; -template <> IMF_EXPORT const char *V2dAttribute::staticTypeName (); -template <> IMF_EXPORT void V2dAttribute::writeValueTo (OPENEXR_IMF_INTERNAL_NAMESPACE::OStream &, int) const; -template <> IMF_EXPORT void V2dAttribute::readValueFrom (OPENEXR_IMF_INTERNAL_NAMESPACE::IStream &, int, int); - - -typedef TypedAttribute V3iAttribute; -template <> IMF_EXPORT const char *V3iAttribute::staticTypeName (); -template <> IMF_EXPORT void V3iAttribute::writeValueTo (OPENEXR_IMF_INTERNAL_NAMESPACE::OStream &, int) const; -template <> IMF_EXPORT void V3iAttribute::readValueFrom (OPENEXR_IMF_INTERNAL_NAMESPACE::IStream &, int, int); - - -typedef TypedAttribute V3fAttribute; -template <> IMF_EXPORT const char *V3fAttribute::staticTypeName (); -template <> IMF_EXPORT void V3fAttribute::writeValueTo (OPENEXR_IMF_INTERNAL_NAMESPACE::OStream &, int) const; -template <> IMF_EXPORT void V3fAttribute::readValueFrom (OPENEXR_IMF_INTERNAL_NAMESPACE::IStream &, int, int); - - -typedef TypedAttribute V3dAttribute; -template <> IMF_EXPORT const char *V3dAttribute::staticTypeName (); -template <> IMF_EXPORT void V3dAttribute::writeValueTo (OPENEXR_IMF_INTERNAL_NAMESPACE::OStream &, int) const; -template <> IMF_EXPORT void V3dAttribute::readValueFrom (OPENEXR_IMF_INTERNAL_NAMESPACE::IStream &, int, int); - - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT - - -#if defined (OPENEXR_IMF_INTERNAL_NAMESPACE_AUTO_EXPOSE) -namespace Imf { using namespace OPENEXR_IMF_INTERNAL_NAMESPACE; } - -#endif - -#endif diff --git a/3rdparty/openexr/IlmImf/ImfVersion.cpp b/3rdparty/openexr/IlmImf/ImfVersion.cpp deleted file mode 100644 index 4f49aa02cb..0000000000 --- a/3rdparty/openexr/IlmImf/ImfVersion.cpp +++ /dev/null @@ -1,60 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - -//----------------------------------------------------------------------------- -// -// Magic and version number. -// -//----------------------------------------------------------------------------- - - -#include -#include "ImfNamespace.h" - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_ENTER - - -bool -isImfMagic (const char bytes[4]) -{ - return bytes[0] == ((MAGIC >> 0) & 0x00ff) && - bytes[1] == ((MAGIC >> 8) & 0x00ff) && - bytes[2] == ((MAGIC >> 16) & 0x00ff) && - bytes[3] == ((MAGIC >> 24) & 0x00ff); -} - - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_EXIT - diff --git a/3rdparty/openexr/IlmImf/ImfVersion.h b/3rdparty/openexr/IlmImf/ImfVersion.h deleted file mode 100644 index 64de7f41b1..0000000000 --- a/3rdparty/openexr/IlmImf/ImfVersion.h +++ /dev/null @@ -1,136 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - -#ifndef INCLUDED_IMF_VERSION_H -#define INCLUDED_IMF_VERSION_H - -//----------------------------------------------------------------------------- -// -// Magic and version number. -// -//----------------------------------------------------------------------------- - -#include "ImfExport.h" -#include "ImfNamespace.h" - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER - -// -// The MAGIC number is stored in the first four bytes of every -// OpenEXR image file. This can be used to quickly test whether -// a given file is an OpenEXR image file (see isImfMagic(), below). -// - -const int MAGIC = 20000630; - - -// -// The second item in each OpenEXR image file, right after the -// magic number, is a four-byte file version identifier. Depending -// on a file's version identifier, a file reader can enable various -// backwards-compatibility switches, or it can quickly reject files -// that it cannot read. -// -// The version identifier is split into an 8-bit version number, -// and a 24-bit flags field. -// - -const int VERSION_NUMBER_FIELD = 0x000000ff; -const int VERSION_FLAGS_FIELD = 0xffffff00; - - -// -// Value that goes into VERSION_NUMBER_FIELD. -// - -const int EXR_VERSION = 2; - - -// -// Flags that can go into VERSION_FLAGS_FIELD. -// Flags can only occupy the 1 bits in VERSION_FLAGS_FIELD. -// - -const int TILED_FLAG = 0x00000200; // File is tiled - -const int LONG_NAMES_FLAG = 0x00000400; // File contains long - // attribute or channel - // names - -const int NON_IMAGE_FLAG = 0x00000800; // File has at least one part - // which is not a regular - // scanline image or regular tiled image - // (that is, it is a deep format) - -const int MULTI_PART_FILE_FLAG = 0x00001000; // File has multiple parts - -// -// Bitwise OR of all known flags. -// - -const int ALL_FLAGS = TILED_FLAG | LONG_NAMES_FLAG | - NON_IMAGE_FLAG | MULTI_PART_FILE_FLAG; - - -// -// Utility functions -// - -inline bool isTiled (int version) {return !!(version & TILED_FLAG);} -inline bool isMultiPart (int version) {return !!(version & MULTI_PART_FILE_FLAG); } -inline bool isNonImage(int version) {return !!(version & NON_IMAGE_FLAG); } -inline int makeTiled (int version) {return version | TILED_FLAG;} -inline int makeNotTiled (int version) {return version & ~TILED_FLAG;} -inline int getVersion (int version) {return version & VERSION_NUMBER_FIELD;} -inline int getFlags (int version) {return version & VERSION_FLAGS_FIELD;} -inline bool supportsFlags (int flags) {return !(flags & ~ALL_FLAGS);} - - -// -// Given the first four bytes of a file, returns true if the -// file is probably an OpenEXR image file, false if not. -// - -IMF_EXPORT -bool isImfMagic (const char bytes[4]); - - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT - - - - - -#endif diff --git a/3rdparty/openexr/IlmImf/ImfWav.cpp b/3rdparty/openexr/IlmImf/ImfWav.cpp deleted file mode 100644 index 5d71d5615b..0000000000 --- a/3rdparty/openexr/IlmImf/ImfWav.cpp +++ /dev/null @@ -1,391 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - - -//----------------------------------------------------------------------------- -// -// 16-bit Haar Wavelet encoding and decoding -// -// The source code in this file is derived from the encoding -// and decoding routines written by Christian Rouet for his -// PIZ image file format. -// -//----------------------------------------------------------------------------- - - -#include -#include "ImfNamespace.h" - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_ENTER -namespace { - - -// -// Wavelet basis functions without modulo arithmetic; they produce -// the best compression ratios when the wavelet-transformed data are -// Huffman-encoded, but the wavelet transform works only for 14-bit -// data (untransformed data values must be less than (1 << 14)). -// - -inline void -wenc14 (unsigned short a, unsigned short b, - unsigned short &l, unsigned short &h) -{ - short as = a; - short bs = b; - - short ms = (as + bs) >> 1; - short ds = as - bs; - - l = ms; - h = ds; -} - - -inline void -wdec14 (unsigned short l, unsigned short h, - unsigned short &a, unsigned short &b) -{ - short ls = l; - short hs = h; - - int hi = hs; - int ai = ls + (hi & 1) + (hi >> 1); - - short as = ai; - short bs = ai - hi; - - a = as; - b = bs; -} - - -// -// Wavelet basis functions with modulo arithmetic; they work with full -// 16-bit data, but Huffman-encoding the wavelet-transformed data doesn't -// compress the data quite as well. -// - -const int NBITS = 16; -const int A_OFFSET = 1 << (NBITS - 1); -const int M_OFFSET = 1 << (NBITS - 1); -const int MOD_MASK = (1 << NBITS) - 1; - - -inline void -wenc16 (unsigned short a, unsigned short b, - unsigned short &l, unsigned short &h) -{ - int ao = (a + A_OFFSET) & MOD_MASK; - int m = ((ao + b) >> 1); - int d = ao - b; - - if (d < 0) - m = (m + M_OFFSET) & MOD_MASK; - - d &= MOD_MASK; - - l = m; - h = d; -} - - -inline void -wdec16 (unsigned short l, unsigned short h, - unsigned short &a, unsigned short &b) -{ - int m = l; - int d = h; - int bb = (m - (d >> 1)) & MOD_MASK; - int aa = (d + bb - A_OFFSET) & MOD_MASK; - b = bb; - a = aa; -} - -} // namespace - - -// -// 2D Wavelet encoding: -// - -void -wav2Encode - (unsigned short* in, // io: values are transformed in place - int nx, // i : x size - int ox, // i : x offset - int ny, // i : y size - int oy, // i : y offset - unsigned short mx) // i : maximum in[x][y] value -{ - bool w14 = (mx < (1 << 14)); - int n = (nx > ny)? ny: nx; - int p = 1; // == 1 << level - int p2 = 2; // == 1 << (level+1) - - // - // Hierachical loop on smaller dimension n - // - - while (p2 <= n) - { - unsigned short *py = in; - unsigned short *ey = in + oy * (ny - p2); - int oy1 = oy * p; - int oy2 = oy * p2; - int ox1 = ox * p; - int ox2 = ox * p2; - unsigned short i00,i01,i10,i11; - - // - // Y loop - // - - for (; py <= ey; py += oy2) - { - unsigned short *px = py; - unsigned short *ex = py + ox * (nx - p2); - - // - // X loop - // - - for (; px <= ex; px += ox2) - { - unsigned short *p01 = px + ox1; - unsigned short *p10 = px + oy1; - unsigned short *p11 = p10 + ox1; - - // - // 2D wavelet encoding - // - - if (w14) - { - wenc14 (*px, *p01, i00, i01); - wenc14 (*p10, *p11, i10, i11); - wenc14 (i00, i10, *px, *p10); - wenc14 (i01, i11, *p01, *p11); - } - else - { - wenc16 (*px, *p01, i00, i01); - wenc16 (*p10, *p11, i10, i11); - wenc16 (i00, i10, *px, *p10); - wenc16 (i01, i11, *p01, *p11); - } - } - - // - // Encode (1D) odd column (still in Y loop) - // - - if (nx & p) - { - unsigned short *p10 = px + oy1; - - if (w14) - wenc14 (*px, *p10, i00, *p10); - else - wenc16 (*px, *p10, i00, *p10); - - *px= i00; - } - } - - // - // Encode (1D) odd line (must loop in X) - // - - if (ny & p) - { - unsigned short *px = py; - unsigned short *ex = py + ox * (nx - p2); - - for (; px <= ex; px += ox2) - { - unsigned short *p01 = px + ox1; - - if (w14) - wenc14 (*px, *p01, i00, *p01); - else - wenc16 (*px, *p01, i00, *p01); - - *px= i00; - } - } - - // - // Next level - // - - p = p2; - p2 <<= 1; - } -} - - -// -// 2D Wavelet decoding: -// - -void -wav2Decode - (unsigned short* in, // io: values are transformed in place - int nx, // i : x size - int ox, // i : x offset - int ny, // i : y size - int oy, // i : y offset - unsigned short mx) // i : maximum in[x][y] value -{ - bool w14 = (mx < (1 << 14)); - int n = (nx > ny)? ny: nx; - int p = 1; - int p2; - - // - // Search max level - // - - while (p <= n) - p <<= 1; - - p >>= 1; - p2 = p; - p >>= 1; - - // - // Hierarchical loop on smaller dimension n - // - - while (p >= 1) - { - unsigned short *py = in; - unsigned short *ey = in + oy * (ny - p2); - int oy1 = oy * p; - int oy2 = oy * p2; - int ox1 = ox * p; - int ox2 = ox * p2; - unsigned short i00,i01,i10,i11; - - // - // Y loop - // - - for (; py <= ey; py += oy2) - { - unsigned short *px = py; - unsigned short *ex = py + ox * (nx - p2); - - // - // X loop - // - - for (; px <= ex; px += ox2) - { - unsigned short *p01 = px + ox1; - unsigned short *p10 = px + oy1; - unsigned short *p11 = p10 + ox1; - - // - // 2D wavelet decoding - // - - if (w14) - { - wdec14 (*px, *p10, i00, i10); - wdec14 (*p01, *p11, i01, i11); - wdec14 (i00, i01, *px, *p01); - wdec14 (i10, i11, *p10, *p11); - } - else - { - wdec16 (*px, *p10, i00, i10); - wdec16 (*p01, *p11, i01, i11); - wdec16 (i00, i01, *px, *p01); - wdec16 (i10, i11, *p10, *p11); - } - } - - // - // Decode (1D) odd column (still in Y loop) - // - - if (nx & p) - { - unsigned short *p10 = px + oy1; - - if (w14) - wdec14 (*px, *p10, i00, *p10); - else - wdec16 (*px, *p10, i00, *p10); - - *px= i00; - } - } - - // - // Decode (1D) odd line (must loop in X) - // - - if (ny & p) - { - unsigned short *px = py; - unsigned short *ex = py + ox * (nx - p2); - - for (; px <= ex; px += ox2) - { - unsigned short *p01 = px + ox1; - - if (w14) - wdec14 (*px, *p01, i00, *p01); - else - wdec16 (*px, *p01, i00, *p01); - - *px= i00; - } - } - - // - // Next level - // - - p2 = p; - p >>= 1; - } -} - - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_EXIT diff --git a/3rdparty/openexr/IlmImf/ImfWav.h b/3rdparty/openexr/IlmImf/ImfWav.h deleted file mode 100644 index 97514330cd..0000000000 --- a/3rdparty/openexr/IlmImf/ImfWav.h +++ /dev/null @@ -1,78 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - - -#ifndef INCLUDED_IMF_WAV_H -#define INCLUDED_IMF_WAV_H - -//----------------------------------------------------------------------------- -// -// 16-bit Haar Wavelet encoding and decoding -// -//----------------------------------------------------------------------------- -#include "ImfNamespace.h" -#include "ImfExport.h" - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER - - -IMF_EXPORT -void -wav2Encode - (unsigned short *in, // io: values in[y][x] are transformed in place - int nx, // i : x size - int ox, // i : x offset - int ny, // i : y size - int oy, // i : y offset - unsigned short mx); // i : maximum in[x][y] value - -IMF_EXPORT -void -wav2Decode - (unsigned short *in, // io: values in[y][x] are transformed in place - int nx, // i : x size - int ox, // i : x offset - int ny, // i : y size - int oy, // i : y offset - unsigned short mx); // i : maximum in[x][y] value - - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT - - - - - -#endif diff --git a/3rdparty/openexr/IlmImf/ImfXdr.h b/3rdparty/openexr/IlmImf/ImfXdr.h deleted file mode 100644 index 0af6f67b52..0000000000 --- a/3rdparty/openexr/IlmImf/ImfXdr.h +++ /dev/null @@ -1,927 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - -#ifndef INCLUDED_IMF_XDR_H -#define INCLUDED_IMF_XDR_H - - -//---------------------------------------------------------------------------- -// -// Xdr -- routines to convert data between the machine's native -// format and a machine-independent external data representation: -// -// write (T &o, S v); converts a value, v, of type S -// into a machine-independent -// representation and stores the -// result in an output buffer, o. -// -// read (T &i, S &v); reads the machine-independent -// representation of a value of type -// S from input buffer i, converts -// the value into the machine's native -// representation, and stores the result -// in v. -// -// size(); returns the size, in bytes, of the -// machine-independent representation -// of an object of type S. -// -// The write() and read() routines are templates; data can be written -// to and read from any output or input buffer type T for which a helper -// class, R, exits. Class R must define a method to store a char array -// in a T, and a method to read a char array from a T: -// -// struct R -// { -// static void -// writeChars (T &o, const char c[/*n*/], int n) -// { -// ... // Write c[0], c[1] ... c[n-1] to output buffer o. -// } -// -// static void -// readChars (T &i, char c[/*n*/], int n) -// { -// ... // Read n characters from input buffer i -// // and copy them to c[0], c[1] ... c[n-1]. -// } -// }; -// -// Example - writing to and reading from iostreams: -// -// struct CharStreamIO -// { -// static void -// writeChars (ostream &os, const char c[], int n) -// { -// os.write (c, n); -// } -// -// static void -// readChars (istream &is, char c[], int n) -// { -// is.read (c, n); -// } -// }; -// -// ... -// -// Xdr::write (os, 3); -// Xdr::write (os, 5.0); -// -//---------------------------------------------------------------------------- - -#include "ImfInt64.h" -#include "IexMathExc.h" -#include "half.h" -#include - -#include "ImfNamespace.h" - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER - -namespace Xdr { - - -//------------------------------- -// Write data to an output stream -//------------------------------- - -template -void -write (T &out, bool v); - -template -void -write (T &out, char v); - -template -void -write (T &out, signed char v); - -template -void -write (T &out, unsigned char v); - -template -void -write (T &out, signed short v); - -template -void -write (T &out, unsigned short v); - -template -void -write (T &out, signed int v); - -template -void -write (T &out, unsigned int v); - -template -void -write (T &out, signed long v); - -template -void -write (T &out, unsigned long v); - -#if ULONG_MAX != 18446744073709551615LU - - template - void - write (T &out, Int64 v); - -#endif - -template -void -write (T &out, float v); - -template -void -write (T &out, double v); - -template -void -write (T &out, half v); - -template -void -write (T &out, const char v[/*n*/], int n); // fixed-size char array - -template -void -write (T &out, const char v[]); // zero-terminated string - - -//----------------------------------------- -// Append padding bytes to an output stream -//----------------------------------------- - -template -void -pad (T &out, int n); // write n padding bytes - - - -//------------------------------- -// Read data from an input stream -//------------------------------- - -template -void -read (T &in, bool &v); - -template -void -read (T &in, char &v); - -template -void -read (T &in, signed char &v); - -template -void -read (T &in, unsigned char &v); - -template -void -read (T &in, signed short &v); - -template -void -read (T &in, unsigned short &v); - -template -void -read (T &in, signed int &v); - -template -void -read (T &in, unsigned int &v); - -template -void -read (T &in, signed long &v); - -template -void -read (T &in, unsigned long &v); - -#if ULONG_MAX != 18446744073709551615LU - - template - void - read (T &in, Int64 &v); - -#endif - -template -void -read (T &in, float &v); - -template -void -read (T &in, double &v); - -template -void -read (T &in, half &v); - -template -void -read (T &in, char v[/*n*/], int n); // fixed-size char array - -template -void -read (T &in, int n, char v[/*n*/]); // zero-terminated string - - -//------------------------------------------- -// Skip over padding bytes in an input stream -//------------------------------------------- - -template -void -skip (T &in, int n); // skip n padding bytes - - - -//-------------------------------------- -// Size of the machine-independent -// representation of an object of type S -//-------------------------------------- - -template -int -size (); - - -//--------------- -// Implementation -//--------------- - -template -inline void -writeSignedChars (T &out, const signed char c[], int n) -{ - S::writeChars (out, (const char *) c, n); -} - - -template -inline void -writeUnsignedChars (T &out, const unsigned char c[], int n) -{ - S::writeChars (out, (const char *) c, n); -} - - -template -inline void -readSignedChars (T &in, signed char c[], int n) -{ - S::readChars (in, (char *) c, n); -} - - -template -inline void -readUnsignedChars (T &in, unsigned char c[], int n) -{ - S::readChars (in, (char *) c, n); -} - - -template -inline void -write (T &out, bool v) -{ - char c = !!v; - S::writeChars (out, &c, 1); -} - - -template -inline void -write (T &out, char v) -{ - S::writeChars (out, &v, 1); -} - - -template -inline void -write (T &out, signed char v) -{ - writeSignedChars (out, &v, 1); -} - - -template -inline void -write (T &out, unsigned char v) -{ - writeUnsignedChars (out, &v, 1); -} - - -template -void -write (T &out, signed short v) -{ - signed char b[2]; - - b[0] = (signed char) (v); - b[1] = (signed char) (v >> 8); - - writeSignedChars (out, b, 2); -} - - -template -void -write (T &out, unsigned short v) -{ - unsigned char b[2]; - - b[0] = (unsigned char) (v); - b[1] = (unsigned char) (v >> 8); - - writeUnsignedChars (out, b, 2); -} - - -template -void -write (T &out, signed int v) -{ - signed char b[4]; - - b[0] = (signed char) (v); - b[1] = (signed char) (v >> 8); - b[2] = (signed char) (v >> 16); - b[3] = (signed char) (v >> 24); - - writeSignedChars (out, b, 4); -} - - -template -void -write (T &out, unsigned int v) -{ - unsigned char b[4]; - - b[0] = (unsigned char) (v); - b[1] = (unsigned char) (v >> 8); - b[2] = (unsigned char) (v >> 16); - b[3] = (unsigned char) (v >> 24); - - writeUnsignedChars (out, b, 4); -} - - -template -void -write (T &out, signed long v) -{ - signed char b[8]; - - b[0] = (signed char) (v); - b[1] = (signed char) (v >> 8); - b[2] = (signed char) (v >> 16); - b[3] = (signed char) (v >> 24); - - #if LONG_MAX == 2147483647 - - if (v >= 0) - { - b[4] = 0; - b[5] = 0; - b[6] = 0; - b[7] = 0; - } - else - { - b[4] = ~0; - b[5] = ~0; - b[6] = ~0; - b[7] = ~0; - } - - #elif LONG_MAX == 9223372036854775807L - - b[4] = (signed char) (v >> 32); - b[5] = (signed char) (v >> 40); - b[6] = (signed char) (v >> 48); - b[7] = (signed char) (v >> 56); - - #else - - #error write (T &out, signed long v) not implemented - - #endif - - writeSignedChars (out, b, 8); -} - - -template -void -write (T &out, unsigned long v) -{ - unsigned char b[8]; - - b[0] = (unsigned char) (v); - b[1] = (unsigned char) (v >> 8); - b[2] = (unsigned char) (v >> 16); - b[3] = (unsigned char) (v >> 24); - - #if ULONG_MAX == 4294967295U - - b[4] = 0; - b[5] = 0; - b[6] = 0; - b[7] = 0; - - #elif ULONG_MAX == 18446744073709551615LU - - b[4] = (unsigned char) (v >> 32); - b[5] = (unsigned char) (v >> 40); - b[6] = (unsigned char) (v >> 48); - b[7] = (unsigned char) (v >> 56); - - #else - - #error write (T &out, unsigned long v) not implemented - - #endif - - writeUnsignedChars (out, b, 8); -} - - -#if ULONG_MAX != 18446744073709551615LU - - template - void - write (T &out, Int64 v) - { - unsigned char b[8]; - - b[0] = (unsigned char) (v); - b[1] = (unsigned char) (v >> 8); - b[2] = (unsigned char) (v >> 16); - b[3] = (unsigned char) (v >> 24); - b[4] = (unsigned char) (v >> 32); - b[5] = (unsigned char) (v >> 40); - b[6] = (unsigned char) (v >> 48); - b[7] = (unsigned char) (v >> 56); - - writeUnsignedChars (out, b, 8); - } - -#endif - - -template -void -write (T &out, float v) -{ - union {unsigned int i; float f;} u; - u.f = v; - - unsigned char b[4]; - - b[0] = (unsigned char) (u.i); - b[1] = (unsigned char) (u.i >> 8); - b[2] = (unsigned char) (u.i >> 16); - b[3] = (unsigned char) (u.i >> 24); - - writeUnsignedChars (out, b, 4); -} - - -template -void -write (T &out, double v) -{ - union {Int64 i; double d;} u; - u.d = v; - - unsigned char b[8]; - - b[0] = (unsigned char) (u.i); - b[1] = (unsigned char) (u.i >> 8); - b[2] = (unsigned char) (u.i >> 16); - b[3] = (unsigned char) (u.i >> 24); - b[4] = (unsigned char) (u.i >> 32); - b[5] = (unsigned char) (u.i >> 40); - b[6] = (unsigned char) (u.i >> 48); - b[7] = (unsigned char) (u.i >> 56); - - writeUnsignedChars (out, b, 8); -} - - -template -inline void -write (T &out, half v) -{ - unsigned char b[2]; - - b[0] = (unsigned char) (v.bits()); - b[1] = (unsigned char) (v.bits() >> 8); - - writeUnsignedChars (out, b, 2); -} - - -template -inline void -write (T &out, const char v[], int n) // fixed-size char array -{ - S::writeChars (out, v, n); -} - - -template -void -write (T &out, const char v[]) // zero-terminated string -{ - while (*v) - { - S::writeChars (out, v, 1); - ++v; - } - - S::writeChars (out, v, 1); -} - - -template -void -pad (T &out, int n) // add n padding bytes -{ - for (int i = 0; i < n; i++) - { - const char c = 0; - S::writeChars (out, &c, 1); - } -} - - -template -inline void -read (T &in, bool &v) -{ - char c; - - S::readChars (in, &c, 1); - v = !!c; -} - - -template -inline void -read (T &in, char &v) -{ - S::readChars (in, &v, 1); -} - - -template -inline void -read (T &in, signed char &v) -{ - readSignedChars (in, &v, 1); -} - - -template -inline void -read (T &in, unsigned char &v) -{ - readUnsignedChars (in, &v, 1); -} - - -template -void -read (T &in, signed short &v) -{ - signed char b[2]; - - readSignedChars (in, b, 2); - - v = (b[0] & 0x00ff) | - (b[1] << 8); -} - - -template -void -read (T &in, unsigned short &v) -{ - unsigned char b[2]; - - readUnsignedChars (in, b, 2); - - v = (b[0] & 0x00ff) | - (b[1] << 8); -} - - -template -void -read (T &in, signed int &v) -{ - signed char b[4]; - - readSignedChars (in, b, 4); - - v = (b[0] & 0x000000ff) | - ((b[1] << 8) & 0x0000ff00) | - ((b[2] << 16) & 0x00ff0000) | - (b[3] << 24); -} - - -template -void -read (T &in, unsigned int &v) -{ - unsigned char b[4]; - - readUnsignedChars (in, b, 4); - - v = (b[0] & 0x000000ff) | - ((b[1] << 8) & 0x0000ff00) | - ((b[2] << 16) & 0x00ff0000) | - (b[3] << 24); -} - - -template -void -read (T &in, signed long &v) -{ - signed char b[8]; - - readSignedChars (in, b, 8); - - #if LONG_MAX == 2147483647 - - v = (b[0] & 0x000000ff) | - ((b[1] << 8) & 0x0000ff00) | - ((b[2] << 16) & 0x00ff0000) | - (b[3] << 24); - - if (( b[4] || b[5] || b[6] || b[7]) && - (~b[4] || ~b[5] || ~b[6] || ~b[7])) - { - throw IEX_NAMESPACE::OverflowExc ("Long int overflow - read a large " - "64-bit integer in a 32-bit process."); - } - - #elif LONG_MAX == 9223372036854775807L - - v = ((long) b[0] & 0x00000000000000ff) | - (((long) b[1] << 8) & 0x000000000000ff00) | - (((long) b[2] << 16) & 0x0000000000ff0000) | - (((long) b[3] << 24) & 0x00000000ff000000) | - (((long) b[4] << 32) & 0x000000ff00000000) | - (((long) b[5] << 40) & 0x0000ff0000000000) | - (((long) b[6] << 48) & 0x00ff000000000000) | - ((long) b[7] << 56); - - #else - - #error read (T &in, signed long &v) not implemented - - #endif -} - - -template -void -read (T &in, unsigned long &v) -{ - unsigned char b[8]; - - readUnsignedChars (in, b, 8); - - #if ULONG_MAX == 4294967295U - - v = (b[0] & 0x000000ff) | - ((b[1] << 8) & 0x0000ff00) | - ((b[2] << 16) & 0x00ff0000) | - (b[3] << 24); - - if (b[4] || b[5] || b[6] || b[7]) - { - throw IEX_NAMESPACE::OverflowExc ("Long int overflow - read a large " - "64-bit integer in a 32-bit process."); - } - - #elif ULONG_MAX == 18446744073709551615LU - - v = ((unsigned long) b[0] & 0x00000000000000ff) | - (((unsigned long) b[1] << 8) & 0x000000000000ff00) | - (((unsigned long) b[2] << 16) & 0x0000000000ff0000) | - (((unsigned long) b[3] << 24) & 0x00000000ff000000) | - (((unsigned long) b[4] << 32) & 0x000000ff00000000) | - (((unsigned long) b[5] << 40) & 0x0000ff0000000000) | - (((unsigned long) b[6] << 48) & 0x00ff000000000000) | - ((unsigned long) b[7] << 56); - - #else - - #error read (T &in, unsigned long &v) not implemented - - #endif -} - - -#if ULONG_MAX != 18446744073709551615LU - - template - void - read (T &in, Int64 &v) - { - unsigned char b[8]; - - readUnsignedChars (in, b, 8); - - v = ((Int64) b[0] & 0x00000000000000ffLL) | - (((Int64) b[1] << 8) & 0x000000000000ff00LL) | - (((Int64) b[2] << 16) & 0x0000000000ff0000LL) | - (((Int64) b[3] << 24) & 0x00000000ff000000LL) | - (((Int64) b[4] << 32) & 0x000000ff00000000LL) | - (((Int64) b[5] << 40) & 0x0000ff0000000000LL) | - (((Int64) b[6] << 48) & 0x00ff000000000000LL) | - ((Int64) b[7] << 56); - } - -#endif - - -template -void -read (T &in, float &v) -{ - unsigned char b[4]; - - readUnsignedChars (in, b, 4); - - union {unsigned int i; float f;} u; - - u.i = (b[0] & 0x000000ff) | - ((b[1] << 8) & 0x0000ff00) | - ((b[2] << 16) & 0x00ff0000) | - (b[3] << 24); - - v = u.f; -} - - -template -void -read (T &in, double &v) -{ - unsigned char b[8]; - - readUnsignedChars (in, b, 8); - - union {Int64 i; double d;} u; - - u.i = ((Int64) b[0] & 0x00000000000000ffULL) | - (((Int64) b[1] << 8) & 0x000000000000ff00ULL) | - (((Int64) b[2] << 16) & 0x0000000000ff0000ULL) | - (((Int64) b[3] << 24) & 0x00000000ff000000ULL) | - (((Int64) b[4] << 32) & 0x000000ff00000000ULL) | - (((Int64) b[5] << 40) & 0x0000ff0000000000ULL) | - (((Int64) b[6] << 48) & 0x00ff000000000000ULL) | - ((Int64) b[7] << 56); - - v = u.d; -} - - -template -inline void -read (T &in, half &v) -{ - unsigned char b[2]; - - readUnsignedChars (in, b, 2); - - v.setBits ((b[0] & 0x00ff) | (b[1] << 8)); -} - - -template -inline void -read (T &in, char v[], int n) // fixed-size char array -{ - S::readChars (in, v, n); -} - - -template -void -read (T &in, int n, char v[]) // zero-terminated string -{ - while (n >= 0) - { - S::readChars (in, v, 1); - - if (*v == 0) - break; - - --n; - ++v; - } -} - - -template -void -skip (T &in, int n) // skip n padding bytes -{ - char c[1024]; - - while (n >= (int) sizeof (c)) - { - if (!S::readChars (in, c, sizeof (c))) - return; - - n -= sizeof (c); - } - - if (n >= 1) - S::readChars (in, c, n); -} - - -template <> inline int size () {return 1;} -template <> inline int size () {return 1;} -template <> inline int size () {return 1;} -template <> inline int size () {return 1;} -template <> inline int size () {return 2;} -template <> inline int size () {return 2;} -template <> inline int size () {return 4;} -template <> inline int size () {return 4;} -template <> inline int size () {return 8;} -template <> inline int size () {return 8;} -template <> inline int size () {return 8;} -template <> inline int size () {return 4;} -template <> inline int size () {return 8;} -template <> inline int size () {return 2;} - - -} // namespace Xdr -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT - - -#if defined (OPENEXR_IMF_INTERNAL_NAMESPACE_AUTO_EXPOSE) -namespace Imf{using namespace OPENEXR_IMF_INTERNAL_NAMESPACE;} -#endif - - -#endif diff --git a/3rdparty/openexr/IlmImf/ImfZip.cpp b/3rdparty/openexr/IlmImf/ImfZip.cpp deleted file mode 100644 index 4e6a62fb7f..0000000000 --- a/3rdparty/openexr/IlmImf/ImfZip.cpp +++ /dev/null @@ -1,305 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - -#include "ImfZip.h" -#include "ImfCheckedArithmetic.h" -#include "ImfNamespace.h" -#include "ImfSimd.h" -#include "Iex.h" - -#include -#include - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_ENTER - -Zip::Zip(size_t maxRawSize): - _maxRawSize(maxRawSize), - _tmpBuffer(0) -{ - _tmpBuffer = new char[_maxRawSize]; -} - -Zip::Zip(size_t maxScanLineSize, size_t numScanLines): - _maxRawSize(0), - _tmpBuffer(0) -{ - _maxRawSize = uiMult (maxScanLineSize, numScanLines); - _tmpBuffer = new char[_maxRawSize]; -} - -Zip::~Zip() -{ - if (_tmpBuffer) delete[] _tmpBuffer; -} - -size_t -Zip::maxRawSize() -{ - return _maxRawSize; -} - -size_t -Zip::maxCompressedSize() -{ - return uiAdd (uiAdd (_maxRawSize, - size_t (ceil (_maxRawSize * 0.01))), - size_t (100)); -} - -int -Zip::compress(const char *raw, int rawSize, char *compressed) -{ - // - // Reorder the pixel data. - // - - { - char *t1 = _tmpBuffer; - char *t2 = _tmpBuffer + (rawSize + 1) / 2; - const char *stop = raw + rawSize; - - while (true) - { - if (raw < stop) - *(t1++) = *(raw++); - else - break; - - if (raw < stop) - *(t2++) = *(raw++); - else - break; - } - } - - // - // Predictor. - // - - { - unsigned char *t = (unsigned char *) _tmpBuffer + 1; - unsigned char *stop = (unsigned char *) _tmpBuffer + rawSize; - int p = t[-1]; - - while (t < stop) - { - int d = int (t[0]) - p + (128 + 256); - p = t[0]; - t[0] = d; - ++t; - } - } - - // - // Compress the data using zlib - // - - uLongf outSize = int(ceil(rawSize * 1.01)) + 100; - - if (Z_OK != ::compress ((Bytef *)compressed, &outSize, - (const Bytef *) _tmpBuffer, rawSize)) - { - throw IEX_NAMESPACE::BaseExc ("Data compression (zlib) failed."); - } - - return outSize; -} - -#ifdef IMF_HAVE_SSE4_1 - -static void -reconstruct_sse41(char *buf, size_t outSize) -{ - static const size_t bytesPerChunk = sizeof(__m128i); - const size_t vOutSize = outSize / bytesPerChunk; - - const __m128i c = _mm_set1_epi8(-128); - const __m128i shuffleMask = _mm_set1_epi8(15); - - // The first element doesn't have its high bit flipped during compression, - // so it must not be flipped here. To make the SIMD loop nice and - // uniform, we pre-flip the bit so that the loop will unflip it again. - buf[0] += -128; - - __m128i *vBuf = reinterpret_cast<__m128i *>(buf); - __m128i vPrev = _mm_setzero_si128(); - for (size_t i=0; i(source); - const __m128i *v2 = reinterpret_cast(source + (outSize + 1) / 2); - __m128i *vOut = reinterpret_cast<__m128i *>(out); - - for (size_t i=0; i(v1); - const char *t2 = reinterpret_cast(v2); - char *sOut = reinterpret_cast(vOut); - - for (size_t i=vOutSize*bytesPerChunk; i - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER - -class Zip -{ - public: - IMF_EXPORT - explicit Zip(size_t rawMaxSize); - IMF_EXPORT - Zip(size_t maxScanlineSize, size_t numScanLines); - IMF_EXPORT - ~Zip(); - - IMF_EXPORT - size_t maxRawSize(); - IMF_EXPORT - size_t maxCompressedSize(); - - // - // Compress the raw data into the provided buffer. - // Returns the amount of compressed data. - // - IMF_EXPORT - int compress(const char *raw, int rawSize, char *compressed); - - // - // Uncompress the compressed data into the provided - // buffer. Returns the amount of raw data actually decoded. - // - IMF_EXPORT - int uncompress(const char *compressed, int compressedSize, - char *raw); - - private: - size_t _maxRawSize; - char *_tmpBuffer; - - Zip(); - Zip(const Zip&); -}; - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT - -#endif diff --git a/3rdparty/openexr/IlmImf/ImfZipCompressor.cpp b/3rdparty/openexr/IlmImf/ImfZipCompressor.cpp deleted file mode 100644 index b0d6989bb4..0000000000 --- a/3rdparty/openexr/IlmImf/ImfZipCompressor.cpp +++ /dev/null @@ -1,127 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - - -//----------------------------------------------------------------------------- -// -// class ZipCompressor -// -//----------------------------------------------------------------------------- - -#include "ImfZipCompressor.h" -#include "ImfCheckedArithmetic.h" -#include "Iex.h" -#include -#include "ImfNamespace.h" - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_ENTER - - -ZipCompressor::ZipCompressor - (const Header &hdr, - size_t maxScanLineSize, - size_t numScanLines) -: - Compressor (hdr), - _maxScanLineSize (maxScanLineSize), - _numScanLines (numScanLines), - _outBuffer (0), - _zip(maxScanLineSize, numScanLines) -{ - _outBuffer = new char[_zip.maxCompressedSize()]; -} - - -ZipCompressor::~ZipCompressor () -{ - delete [] _outBuffer; -} - - -int -ZipCompressor::numScanLines () const -{ - return _numScanLines; -} - - -int -ZipCompressor::compress (const char *inPtr, - int inSize, - int minY, - const char *&outPtr) -{ - // - // Special case ďż˝- empty input buffer - // - - if (inSize == 0) - { - outPtr = _outBuffer; - return 0; - } - - int outSize = _zip.compress(inPtr, inSize, _outBuffer); - - outPtr = _outBuffer; - return outSize; -} - - -int -ZipCompressor::uncompress (const char *inPtr, - int inSize, - int minY, - const char *&outPtr) -{ - // - // Special case ďż˝- empty input buffer - // - - if (inSize == 0) - { - outPtr = _outBuffer; - return 0; - } - - int outSize = _zip.uncompress(inPtr, inSize, _outBuffer); - - outPtr = _outBuffer; - return outSize; -} - - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_EXIT - diff --git a/3rdparty/openexr/IlmImf/ImfZipCompressor.h b/3rdparty/openexr/IlmImf/ImfZipCompressor.h deleted file mode 100644 index 6744b63261..0000000000 --- a/3rdparty/openexr/IlmImf/ImfZipCompressor.h +++ /dev/null @@ -1,94 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - - -#ifndef INCLUDED_IMF_ZIP_COMPRESSOR_H -#define INCLUDED_IMF_ZIP_COMPRESSOR_H - -//----------------------------------------------------------------------------- -// -// class ZipCompressor -- performs zlib-style compression -// -//----------------------------------------------------------------------------- - -#include "ImfCompressor.h" -#include "ImfZip.h" -#include "ImfNamespace.h" - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER - - -class ZipCompressor: public Compressor -{ - public: - - IMF_EXPORT - ZipCompressor (const Header &hdr, - size_t maxScanLineSize, - size_t numScanLines); - - IMF_EXPORT - virtual ~ZipCompressor (); - - IMF_EXPORT - virtual int numScanLines () const; - - IMF_EXPORT - virtual int compress (const char *inPtr, - int inSize, - int minY, - const char *&outPtr); - - IMF_EXPORT - virtual int uncompress (const char *inPtr, - int inSize, - int minY, - const char *&outPtr); - private: - - int _maxScanLineSize; - int _numScanLines; - char * _outBuffer; - Zip _zip; -}; - - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT - - - - - -#endif diff --git a/3rdparty/openexr/IlmImf/b44ExpLogTable.h b/3rdparty/openexr/IlmImf/b44ExpLogTable.h deleted file mode 100644 index 31afecce66..0000000000 --- a/3rdparty/openexr/IlmImf/b44ExpLogTable.h +++ /dev/null @@ -1,16396 +0,0 @@ -// -// This is an automatically generated file. -// Do not edit. -// - -const unsigned short expTable[] = -{ - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, - 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c01, 0x3c02, - 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, - 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, - 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, - 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, - 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, - 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, - 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, - 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, - 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, - 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, - 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, - 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, - 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, - 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, - 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, - 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, - 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, - 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, - 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, - 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, - 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, - 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, - 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, - 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, - 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, - 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, - 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, - 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, - 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, - 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, - 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, - 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, - 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, - 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, - 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, - 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, - 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, - 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, - 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, - 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, - 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, - 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, - 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, - 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, - 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, - 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, - 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, - 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, - 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, - 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, - 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, - 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, - 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, - 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, - 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, - 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, - 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, - 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, - 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, - 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, - 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, - 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, - 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, - 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, - 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, - 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, - 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, - 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, - 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, - 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, - 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, - 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, - 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, - 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, - 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, - 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, - 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, - 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, - 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, - 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, - 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, - 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, - 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, - 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, - 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, - 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, - 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, - 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, - 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, - 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, - 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, - 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, - 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, - 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, - 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, - 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c02, 0x3c03, - 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, - 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, - 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, - 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, - 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, - 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, - 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, - 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, - 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, - 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, - 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, - 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, - 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, - 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, - 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, - 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, - 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, - 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, - 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, - 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, - 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, - 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, - 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, - 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, - 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, - 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, - 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, - 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, - 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, - 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, - 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, - 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, - 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, - 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, - 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, - 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, - 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, - 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, - 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, - 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, - 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, - 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, - 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, - 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, - 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, - 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, - 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, - 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, - 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, - 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, - 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, - 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, - 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, - 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, - 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, - 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, - 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, - 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, - 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, - 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, - 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, - 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, - 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, - 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c03, 0x3c04, 0x3c04, 0x3c04, - 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, - 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, - 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, - 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, - 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, - 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, - 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, - 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, - 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, - 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, - 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, - 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, - 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, - 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, - 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, - 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, - 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, - 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, - 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, - 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, - 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, - 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, - 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, - 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, - 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, - 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, - 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, - 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, - 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, - 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, - 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, - 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, - 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, - 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, - 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, - 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, - 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, - 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, - 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, - 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, - 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, - 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, - 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, - 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, - 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, - 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, - 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, - 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c04, 0x3c05, 0x3c05, - 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, - 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, - 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, - 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, - 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, - 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, - 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, - 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, - 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, - 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, - 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, - 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, - 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, - 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, - 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, - 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, - 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, - 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, - 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, - 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, - 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, - 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, - 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, - 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, - 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, - 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, - 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, - 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, - 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, - 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, - 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, - 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c05, 0x3c06, 0x3c06, 0x3c06, - 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, - 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, - 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, - 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, - 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, - 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, - 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, - 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, - 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, - 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, - 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, - 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, - 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, - 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, - 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, - 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, - 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, - 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, - 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, - 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, - 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, - 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, - 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, - 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, - 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, - 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, - 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, - 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, - 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, - 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, - 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, 0x3c06, - 0x3c06, 0x3c06, 0x3c06, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, - 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, - 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, - 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, - 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, - 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, - 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, - 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, - 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, - 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, - 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, - 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, - 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, - 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, - 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, - 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, - 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, - 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, - 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, - 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, - 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, - 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, - 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, - 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, - 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, - 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, - 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, - 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, - 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, - 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, - 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, - 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, 0x3c07, - 0x3c07, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, - 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, - 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, - 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, - 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, - 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, - 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, - 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, - 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, - 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, - 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, - 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, - 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, - 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, - 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, - 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, - 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, - 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, - 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, - 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, - 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, - 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, - 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, - 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c08, - 0x3c08, 0x3c08, 0x3c08, 0x3c08, 0x3c09, 0x3c09, 0x3c09, 0x3c09, - 0x3c09, 0x3c09, 0x3c09, 0x3c09, 0x3c09, 0x3c09, 0x3c09, 0x3c09, - 0x3c09, 0x3c09, 0x3c09, 0x3c09, 0x3c09, 0x3c09, 0x3c09, 0x3c09, - 0x3c09, 0x3c09, 0x3c09, 0x3c09, 0x3c09, 0x3c09, 0x3c09, 0x3c09, - 0x3c09, 0x3c09, 0x3c09, 0x3c09, 0x3c09, 0x3c09, 0x3c09, 0x3c09, - 0x3c09, 0x3c09, 0x3c09, 0x3c09, 0x3c09, 0x3c09, 0x3c09, 0x3c09, - 0x3c09, 0x3c09, 0x3c09, 0x3c09, 0x3c09, 0x3c09, 0x3c09, 0x3c09, - 0x3c09, 0x3c09, 0x3c09, 0x3c09, 0x3c09, 0x3c09, 0x3c09, 0x3c09, - 0x3c09, 0x3c09, 0x3c09, 0x3c09, 0x3c09, 0x3c09, 0x3c09, 0x3c09, - 0x3c09, 0x3c09, 0x3c09, 0x3c09, 0x3c09, 0x3c09, 0x3c09, 0x3c09, - 0x3c09, 0x3c09, 0x3c09, 0x3c09, 0x3c09, 0x3c09, 0x3c09, 0x3c09, - 0x3c09, 0x3c09, 0x3c09, 0x3c09, 0x3c09, 0x3c09, 0x3c09, 0x3c09, - 0x3c09, 0x3c09, 0x3c09, 0x3c09, 0x3c09, 0x3c09, 0x3c09, 0x3c09, - 0x3c09, 0x3c09, 0x3c09, 0x3c09, 0x3c09, 0x3c09, 0x3c09, 0x3c09, - 0x3c09, 0x3c09, 0x3c09, 0x3c09, 0x3c09, 0x3c09, 0x3c09, 0x3c09, - 0x3c09, 0x3c09, 0x3c09, 0x3c09, 0x3c09, 0x3c09, 0x3c09, 0x3c09, - 0x3c09, 0x3c09, 0x3c09, 0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, - 0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, - 0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, - 0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, - 0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, - 0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, - 0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, - 0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, - 0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, - 0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, - 0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, - 0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, - 0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, - 0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, - 0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, - 0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, 0x3c0a, - 0x3c0a, 0x3c0a, 0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, - 0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, - 0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, - 0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, - 0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, - 0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, - 0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, - 0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, - 0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, - 0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, - 0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, - 0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, - 0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, - 0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, - 0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, - 0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, 0x3c0b, - 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, - 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, - 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, - 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, - 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, - 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, - 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, - 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, - 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, - 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, - 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, - 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, - 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, - 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, - 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, - 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0c, 0x3c0d, - 0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, - 0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, - 0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, - 0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, - 0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, - 0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, - 0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, - 0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, - 0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, - 0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, - 0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, - 0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, - 0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, - 0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, - 0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, - 0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, 0x3c0d, 0x3c0e, 0x3c0e, 0x3c0e, - 0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, - 0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, - 0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, - 0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, - 0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, - 0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, - 0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, - 0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, - 0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, - 0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, - 0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, - 0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, - 0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, - 0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, - 0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, 0x3c0e, - 0x3c0e, 0x3c0e, 0x3c0e, 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, - 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, - 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, - 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, - 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, - 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, - 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, - 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, - 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, - 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, - 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, - 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, - 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, - 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, - 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, - 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, 0x3c0f, - 0x3c0f, 0x3c0f, 0x3c10, 0x3c10, 0x3c10, 0x3c10, 0x3c10, 0x3c10, - 0x3c10, 0x3c10, 0x3c10, 0x3c10, 0x3c10, 0x3c10, 0x3c10, 0x3c10, - 0x3c10, 0x3c10, 0x3c10, 0x3c10, 0x3c10, 0x3c10, 0x3c10, 0x3c10, - 0x3c10, 0x3c10, 0x3c10, 0x3c10, 0x3c10, 0x3c10, 0x3c10, 0x3c10, - 0x3c10, 0x3c10, 0x3c10, 0x3c10, 0x3c10, 0x3c10, 0x3c10, 0x3c10, - 0x3c10, 0x3c10, 0x3c10, 0x3c10, 0x3c10, 0x3c10, 0x3c10, 0x3c10, - 0x3c10, 0x3c10, 0x3c10, 0x3c10, 0x3c10, 0x3c10, 0x3c10, 0x3c10, - 0x3c10, 0x3c10, 0x3c10, 0x3c10, 0x3c10, 0x3c10, 0x3c10, 0x3c10, - 0x3c10, 0x3c10, 0x3c10, 0x3c10, 0x3c10, 0x3c10, 0x3c10, 0x3c10, - 0x3c10, 0x3c10, 0x3c10, 0x3c10, 0x3c10, 0x3c10, 0x3c10, 0x3c10, - 0x3c10, 0x3c10, 0x3c10, 0x3c10, 0x3c10, 0x3c10, 0x3c10, 0x3c10, - 0x3c10, 0x3c10, 0x3c10, 0x3c10, 0x3c10, 0x3c10, 0x3c10, 0x3c10, - 0x3c10, 0x3c10, 0x3c10, 0x3c10, 0x3c10, 0x3c10, 0x3c10, 0x3c10, - 0x3c11, 0x3c11, 0x3c11, 0x3c11, 0x3c11, 0x3c11, 0x3c11, 0x3c11, - 0x3c11, 0x3c11, 0x3c11, 0x3c11, 0x3c11, 0x3c11, 0x3c11, 0x3c11, - 0x3c11, 0x3c11, 0x3c11, 0x3c11, 0x3c11, 0x3c11, 0x3c11, 0x3c11, - 0x3c11, 0x3c11, 0x3c11, 0x3c11, 0x3c11, 0x3c11, 0x3c11, 0x3c11, - 0x3c11, 0x3c11, 0x3c11, 0x3c11, 0x3c11, 0x3c11, 0x3c11, 0x3c11, - 0x3c11, 0x3c11, 0x3c11, 0x3c11, 0x3c11, 0x3c11, 0x3c11, 0x3c11, - 0x3c11, 0x3c11, 0x3c11, 0x3c11, 0x3c11, 0x3c11, 0x3c11, 0x3c11, - 0x3c11, 0x3c11, 0x3c11, 0x3c11, 0x3c11, 0x3c11, 0x3c11, 0x3c12, - 0x3c12, 0x3c12, 0x3c12, 0x3c12, 0x3c12, 0x3c12, 0x3c12, 0x3c12, - 0x3c12, 0x3c12, 0x3c12, 0x3c12, 0x3c12, 0x3c12, 0x3c12, 0x3c12, - 0x3c12, 0x3c12, 0x3c12, 0x3c12, 0x3c12, 0x3c12, 0x3c12, 0x3c12, - 0x3c12, 0x3c12, 0x3c12, 0x3c12, 0x3c12, 0x3c12, 0x3c12, 0x3c12, - 0x3c12, 0x3c12, 0x3c12, 0x3c12, 0x3c12, 0x3c12, 0x3c12, 0x3c12, - 0x3c12, 0x3c12, 0x3c12, 0x3c12, 0x3c12, 0x3c12, 0x3c12, 0x3c12, - 0x3c12, 0x3c12, 0x3c12, 0x3c12, 0x3c12, 0x3c12, 0x3c12, 0x3c12, - 0x3c12, 0x3c12, 0x3c12, 0x3c12, 0x3c12, 0x3c12, 0x3c13, 0x3c13, - 0x3c13, 0x3c13, 0x3c13, 0x3c13, 0x3c13, 0x3c13, 0x3c13, 0x3c13, - 0x3c13, 0x3c13, 0x3c13, 0x3c13, 0x3c13, 0x3c13, 0x3c13, 0x3c13, - 0x3c13, 0x3c13, 0x3c13, 0x3c13, 0x3c13, 0x3c13, 0x3c13, 0x3c13, - 0x3c13, 0x3c13, 0x3c13, 0x3c13, 0x3c13, 0x3c13, 0x3c13, 0x3c13, - 0x3c13, 0x3c13, 0x3c13, 0x3c13, 0x3c13, 0x3c13, 0x3c13, 0x3c13, - 0x3c13, 0x3c13, 0x3c13, 0x3c13, 0x3c13, 0x3c13, 0x3c13, 0x3c13, - 0x3c13, 0x3c13, 0x3c13, 0x3c13, 0x3c13, 0x3c13, 0x3c13, 0x3c13, - 0x3c13, 0x3c13, 0x3c13, 0x3c13, 0x3c13, 0x3c14, 0x3c14, 0x3c14, - 0x3c14, 0x3c14, 0x3c14, 0x3c14, 0x3c14, 0x3c14, 0x3c14, 0x3c14, - 0x3c14, 0x3c14, 0x3c14, 0x3c14, 0x3c14, 0x3c14, 0x3c14, 0x3c14, - 0x3c14, 0x3c14, 0x3c14, 0x3c14, 0x3c14, 0x3c14, 0x3c14, 0x3c14, - 0x3c14, 0x3c14, 0x3c14, 0x3c14, 0x3c14, 0x3c14, 0x3c14, 0x3c14, - 0x3c14, 0x3c14, 0x3c14, 0x3c14, 0x3c14, 0x3c14, 0x3c14, 0x3c14, - 0x3c14, 0x3c14, 0x3c14, 0x3c14, 0x3c14, 0x3c14, 0x3c14, 0x3c14, - 0x3c14, 0x3c14, 0x3c14, 0x3c14, 0x3c14, 0x3c14, 0x3c14, 0x3c14, - 0x3c14, 0x3c14, 0x3c14, 0x3c14, 0x3c15, 0x3c15, 0x3c15, 0x3c15, - 0x3c15, 0x3c15, 0x3c15, 0x3c15, 0x3c15, 0x3c15, 0x3c15, 0x3c15, - 0x3c15, 0x3c15, 0x3c15, 0x3c15, 0x3c15, 0x3c15, 0x3c15, 0x3c15, - 0x3c15, 0x3c15, 0x3c15, 0x3c15, 0x3c15, 0x3c15, 0x3c15, 0x3c15, - 0x3c15, 0x3c15, 0x3c15, 0x3c15, 0x3c15, 0x3c15, 0x3c15, 0x3c15, - 0x3c15, 0x3c15, 0x3c15, 0x3c15, 0x3c15, 0x3c15, 0x3c15, 0x3c15, - 0x3c15, 0x3c15, 0x3c15, 0x3c15, 0x3c15, 0x3c15, 0x3c15, 0x3c15, - 0x3c15, 0x3c15, 0x3c15, 0x3c15, 0x3c15, 0x3c15, 0x3c15, 0x3c15, - 0x3c15, 0x3c15, 0x3c16, 0x3c16, 0x3c16, 0x3c16, 0x3c16, 0x3c16, - 0x3c16, 0x3c16, 0x3c16, 0x3c16, 0x3c16, 0x3c16, 0x3c16, 0x3c16, - 0x3c16, 0x3c16, 0x3c16, 0x3c16, 0x3c16, 0x3c16, 0x3c16, 0x3c16, - 0x3c16, 0x3c16, 0x3c16, 0x3c16, 0x3c16, 0x3c16, 0x3c16, 0x3c16, - 0x3c16, 0x3c16, 0x3c16, 0x3c16, 0x3c16, 0x3c16, 0x3c16, 0x3c16, - 0x3c16, 0x3c16, 0x3c16, 0x3c16, 0x3c16, 0x3c16, 0x3c16, 0x3c16, - 0x3c16, 0x3c16, 0x3c16, 0x3c16, 0x3c16, 0x3c16, 0x3c16, 0x3c16, - 0x3c16, 0x3c16, 0x3c16, 0x3c16, 0x3c16, 0x3c16, 0x3c16, 0x3c16, - 0x3c16, 0x3c17, 0x3c17, 0x3c17, 0x3c17, 0x3c17, 0x3c17, 0x3c17, - 0x3c17, 0x3c17, 0x3c17, 0x3c17, 0x3c17, 0x3c17, 0x3c17, 0x3c17, - 0x3c17, 0x3c17, 0x3c17, 0x3c17, 0x3c17, 0x3c17, 0x3c17, 0x3c17, - 0x3c17, 0x3c17, 0x3c17, 0x3c17, 0x3c17, 0x3c17, 0x3c17, 0x3c17, - 0x3c17, 0x3c17, 0x3c17, 0x3c17, 0x3c17, 0x3c17, 0x3c17, 0x3c17, - 0x3c17, 0x3c17, 0x3c17, 0x3c17, 0x3c17, 0x3c17, 0x3c17, 0x3c17, - 0x3c17, 0x3c17, 0x3c17, 0x3c17, 0x3c17, 0x3c17, 0x3c17, 0x3c17, - 0x3c17, 0x3c17, 0x3c17, 0x3c17, 0x3c17, 0x3c17, 0x3c17, 0x3c18, - 0x3c18, 0x3c18, 0x3c18, 0x3c18, 0x3c18, 0x3c18, 0x3c18, 0x3c18, - 0x3c18, 0x3c18, 0x3c18, 0x3c18, 0x3c18, 0x3c18, 0x3c18, 0x3c18, - 0x3c18, 0x3c18, 0x3c18, 0x3c18, 0x3c18, 0x3c18, 0x3c18, 0x3c18, - 0x3c18, 0x3c18, 0x3c18, 0x3c18, 0x3c18, 0x3c18, 0x3c18, 0x3c18, - 0x3c18, 0x3c18, 0x3c18, 0x3c18, 0x3c18, 0x3c18, 0x3c18, 0x3c18, - 0x3c18, 0x3c18, 0x3c18, 0x3c18, 0x3c18, 0x3c18, 0x3c18, 0x3c18, - 0x3c18, 0x3c18, 0x3c18, 0x3c18, 0x3c18, 0x3c18, 0x3c18, 0x3c18, - 0x3c18, 0x3c18, 0x3c18, 0x3c18, 0x3c18, 0x3c18, 0x3c19, 0x3c19, - 0x3c19, 0x3c19, 0x3c19, 0x3c19, 0x3c19, 0x3c19, 0x3c19, 0x3c19, - 0x3c19, 0x3c19, 0x3c19, 0x3c19, 0x3c19, 0x3c19, 0x3c19, 0x3c19, - 0x3c19, 0x3c19, 0x3c19, 0x3c19, 0x3c19, 0x3c19, 0x3c19, 0x3c19, - 0x3c19, 0x3c19, 0x3c19, 0x3c19, 0x3c19, 0x3c19, 0x3c19, 0x3c19, - 0x3c19, 0x3c19, 0x3c19, 0x3c19, 0x3c19, 0x3c19, 0x3c19, 0x3c19, - 0x3c19, 0x3c19, 0x3c19, 0x3c19, 0x3c19, 0x3c19, 0x3c19, 0x3c19, - 0x3c19, 0x3c19, 0x3c19, 0x3c19, 0x3c19, 0x3c19, 0x3c19, 0x3c19, - 0x3c19, 0x3c19, 0x3c19, 0x3c19, 0x3c19, 0x3c1a, 0x3c1a, 0x3c1a, - 0x3c1a, 0x3c1a, 0x3c1a, 0x3c1a, 0x3c1a, 0x3c1a, 0x3c1a, 0x3c1a, - 0x3c1a, 0x3c1a, 0x3c1a, 0x3c1a, 0x3c1a, 0x3c1a, 0x3c1a, 0x3c1a, - 0x3c1a, 0x3c1a, 0x3c1a, 0x3c1a, 0x3c1a, 0x3c1a, 0x3c1a, 0x3c1a, - 0x3c1a, 0x3c1a, 0x3c1a, 0x3c1a, 0x3c1a, 0x3c1a, 0x3c1a, 0x3c1a, - 0x3c1a, 0x3c1a, 0x3c1a, 0x3c1a, 0x3c1a, 0x3c1a, 0x3c1a, 0x3c1a, - 0x3c1a, 0x3c1a, 0x3c1a, 0x3c1a, 0x3c1a, 0x3c1a, 0x3c1a, 0x3c1a, - 0x3c1a, 0x3c1a, 0x3c1a, 0x3c1a, 0x3c1a, 0x3c1a, 0x3c1a, 0x3c1a, - 0x3c1a, 0x3c1a, 0x3c1a, 0x3c1b, 0x3c1b, 0x3c1b, 0x3c1b, 0x3c1b, - 0x3c1b, 0x3c1b, 0x3c1b, 0x3c1b, 0x3c1b, 0x3c1b, 0x3c1b, 0x3c1b, - 0x3c1b, 0x3c1b, 0x3c1b, 0x3c1b, 0x3c1b, 0x3c1b, 0x3c1b, 0x3c1b, - 0x3c1b, 0x3c1b, 0x3c1b, 0x3c1b, 0x3c1b, 0x3c1b, 0x3c1b, 0x3c1b, - 0x3c1b, 0x3c1b, 0x3c1b, 0x3c1b, 0x3c1b, 0x3c1b, 0x3c1b, 0x3c1b, - 0x3c1b, 0x3c1b, 0x3c1b, 0x3c1b, 0x3c1b, 0x3c1b, 0x3c1b, 0x3c1b, - 0x3c1b, 0x3c1b, 0x3c1b, 0x3c1b, 0x3c1b, 0x3c1b, 0x3c1b, 0x3c1b, - 0x3c1b, 0x3c1b, 0x3c1b, 0x3c1b, 0x3c1b, 0x3c1b, 0x3c1b, 0x3c1b, - 0x3c1b, 0x3c1c, 0x3c1c, 0x3c1c, 0x3c1c, 0x3c1c, 0x3c1c, 0x3c1c, - 0x3c1c, 0x3c1c, 0x3c1c, 0x3c1c, 0x3c1c, 0x3c1c, 0x3c1c, 0x3c1c, - 0x3c1c, 0x3c1c, 0x3c1c, 0x3c1c, 0x3c1c, 0x3c1c, 0x3c1c, 0x3c1c, - 0x3c1c, 0x3c1c, 0x3c1c, 0x3c1c, 0x3c1c, 0x3c1c, 0x3c1c, 0x3c1c, - 0x3c1c, 0x3c1c, 0x3c1c, 0x3c1c, 0x3c1c, 0x3c1c, 0x3c1c, 0x3c1c, - 0x3c1c, 0x3c1c, 0x3c1c, 0x3c1c, 0x3c1c, 0x3c1c, 0x3c1c, 0x3c1c, - 0x3c1c, 0x3c1c, 0x3c1c, 0x3c1c, 0x3c1c, 0x3c1c, 0x3c1c, 0x3c1c, - 0x3c1c, 0x3c1c, 0x3c1c, 0x3c1c, 0x3c1c, 0x3c1c, 0x3c1c, 0x3c1c, - 0x3c1d, 0x3c1d, 0x3c1d, 0x3c1d, 0x3c1d, 0x3c1d, 0x3c1d, 0x3c1d, - 0x3c1d, 0x3c1d, 0x3c1d, 0x3c1d, 0x3c1d, 0x3c1d, 0x3c1d, 0x3c1d, - 0x3c1d, 0x3c1d, 0x3c1d, 0x3c1d, 0x3c1d, 0x3c1d, 0x3c1d, 0x3c1d, - 0x3c1d, 0x3c1d, 0x3c1d, 0x3c1d, 0x3c1d, 0x3c1d, 0x3c1d, 0x3c1d, - 0x3c1d, 0x3c1d, 0x3c1d, 0x3c1d, 0x3c1d, 0x3c1d, 0x3c1d, 0x3c1d, - 0x3c1d, 0x3c1d, 0x3c1d, 0x3c1d, 0x3c1d, 0x3c1d, 0x3c1d, 0x3c1d, - 0x3c1d, 0x3c1d, 0x3c1d, 0x3c1d, 0x3c1d, 0x3c1d, 0x3c1d, 0x3c1d, - 0x3c1d, 0x3c1d, 0x3c1d, 0x3c1d, 0x3c1d, 0x3c1d, 0x3c1e, 0x3c1e, - 0x3c1e, 0x3c1e, 0x3c1e, 0x3c1e, 0x3c1e, 0x3c1e, 0x3c1e, 0x3c1e, - 0x3c1e, 0x3c1e, 0x3c1e, 0x3c1e, 0x3c1e, 0x3c1e, 0x3c1e, 0x3c1e, - 0x3c1e, 0x3c1e, 0x3c1e, 0x3c1e, 0x3c1e, 0x3c1e, 0x3c1e, 0x3c1e, - 0x3c1e, 0x3c1e, 0x3c1e, 0x3c1e, 0x3c1e, 0x3c1e, 0x3c1e, 0x3c1e, - 0x3c1e, 0x3c1e, 0x3c1e, 0x3c1e, 0x3c1e, 0x3c1e, 0x3c1e, 0x3c1e, - 0x3c1e, 0x3c1e, 0x3c1e, 0x3c1e, 0x3c1e, 0x3c1e, 0x3c1e, 0x3c1e, - 0x3c1e, 0x3c1e, 0x3c1e, 0x3c1e, 0x3c1e, 0x3c1e, 0x3c1e, 0x3c1e, - 0x3c1e, 0x3c1e, 0x3c1e, 0x3c1e, 0x3c1f, 0x3c1f, 0x3c1f, 0x3c1f, - 0x3c1f, 0x3c1f, 0x3c1f, 0x3c1f, 0x3c1f, 0x3c1f, 0x3c1f, 0x3c1f, - 0x3c1f, 0x3c1f, 0x3c1f, 0x3c1f, 0x3c1f, 0x3c1f, 0x3c1f, 0x3c1f, - 0x3c1f, 0x3c1f, 0x3c1f, 0x3c1f, 0x3c1f, 0x3c1f, 0x3c1f, 0x3c1f, - 0x3c1f, 0x3c1f, 0x3c1f, 0x3c1f, 0x3c1f, 0x3c1f, 0x3c1f, 0x3c1f, - 0x3c1f, 0x3c1f, 0x3c1f, 0x3c1f, 0x3c1f, 0x3c1f, 0x3c1f, 0x3c1f, - 0x3c1f, 0x3c1f, 0x3c1f, 0x3c1f, 0x3c1f, 0x3c1f, 0x3c1f, 0x3c1f, - 0x3c1f, 0x3c1f, 0x3c1f, 0x3c1f, 0x3c1f, 0x3c1f, 0x3c1f, 0x3c1f, - 0x3c1f, 0x3c1f, 0x3c20, 0x3c20, 0x3c20, 0x3c20, 0x3c20, 0x3c20, - 0x3c20, 0x3c20, 0x3c20, 0x3c20, 0x3c20, 0x3c20, 0x3c20, 0x3c20, - 0x3c20, 0x3c20, 0x3c20, 0x3c20, 0x3c20, 0x3c20, 0x3c20, 0x3c20, - 0x3c20, 0x3c20, 0x3c20, 0x3c20, 0x3c20, 0x3c20, 0x3c20, 0x3c20, - 0x3c20, 0x3c20, 0x3c20, 0x3c20, 0x3c20, 0x3c20, 0x3c20, 0x3c20, - 0x3c20, 0x3c20, 0x3c20, 0x3c20, 0x3c20, 0x3c20, 0x3c20, 0x3c20, - 0x3c20, 0x3c20, 0x3c20, 0x3c20, 0x3c20, 0x3c20, 0x3c20, 0x3c20, - 0x3c20, 0x3c20, 0x3c20, 0x3c20, 0x3c20, 0x3c20, 0x3c20, 0x3c20, - 0x3c21, 0x3c21, 0x3c21, 0x3c21, 0x3c21, 0x3c21, 0x3c21, 0x3c21, - 0x3c21, 0x3c21, 0x3c21, 0x3c21, 0x3c21, 0x3c21, 0x3c21, 0x3c21, - 0x3c21, 0x3c21, 0x3c21, 0x3c21, 0x3c21, 0x3c21, 0x3c21, 0x3c21, - 0x3c21, 0x3c21, 0x3c21, 0x3c21, 0x3c21, 0x3c21, 0x3c21, 0x3c22, - 0x3c22, 0x3c22, 0x3c22, 0x3c22, 0x3c22, 0x3c22, 0x3c22, 0x3c22, - 0x3c22, 0x3c22, 0x3c22, 0x3c22, 0x3c22, 0x3c22, 0x3c22, 0x3c22, - 0x3c22, 0x3c22, 0x3c22, 0x3c22, 0x3c22, 0x3c22, 0x3c22, 0x3c22, - 0x3c22, 0x3c22, 0x3c22, 0x3c22, 0x3c22, 0x3c22, 0x3c23, 0x3c23, - 0x3c23, 0x3c23, 0x3c23, 0x3c23, 0x3c23, 0x3c23, 0x3c23, 0x3c23, - 0x3c23, 0x3c23, 0x3c23, 0x3c23, 0x3c23, 0x3c23, 0x3c23, 0x3c23, - 0x3c23, 0x3c23, 0x3c23, 0x3c23, 0x3c23, 0x3c23, 0x3c23, 0x3c23, - 0x3c23, 0x3c23, 0x3c23, 0x3c23, 0x3c23, 0x3c24, 0x3c24, 0x3c24, - 0x3c24, 0x3c24, 0x3c24, 0x3c24, 0x3c24, 0x3c24, 0x3c24, 0x3c24, - 0x3c24, 0x3c24, 0x3c24, 0x3c24, 0x3c24, 0x3c24, 0x3c24, 0x3c24, - 0x3c24, 0x3c24, 0x3c24, 0x3c24, 0x3c24, 0x3c24, 0x3c24, 0x3c24, - 0x3c24, 0x3c24, 0x3c24, 0x3c24, 0x3c25, 0x3c25, 0x3c25, 0x3c25, - 0x3c25, 0x3c25, 0x3c25, 0x3c25, 0x3c25, 0x3c25, 0x3c25, 0x3c25, - 0x3c25, 0x3c25, 0x3c25, 0x3c25, 0x3c25, 0x3c25, 0x3c25, 0x3c25, - 0x3c25, 0x3c25, 0x3c25, 0x3c25, 0x3c25, 0x3c25, 0x3c25, 0x3c25, - 0x3c25, 0x3c25, 0x3c25, 0x3c26, 0x3c26, 0x3c26, 0x3c26, 0x3c26, - 0x3c26, 0x3c26, 0x3c26, 0x3c26, 0x3c26, 0x3c26, 0x3c26, 0x3c26, - 0x3c26, 0x3c26, 0x3c26, 0x3c26, 0x3c26, 0x3c26, 0x3c26, 0x3c26, - 0x3c26, 0x3c26, 0x3c26, 0x3c26, 0x3c26, 0x3c26, 0x3c26, 0x3c26, - 0x3c26, 0x3c26, 0x3c27, 0x3c27, 0x3c27, 0x3c27, 0x3c27, 0x3c27, - 0x3c27, 0x3c27, 0x3c27, 0x3c27, 0x3c27, 0x3c27, 0x3c27, 0x3c27, - 0x3c27, 0x3c27, 0x3c27, 0x3c27, 0x3c27, 0x3c27, 0x3c27, 0x3c27, - 0x3c27, 0x3c27, 0x3c27, 0x3c27, 0x3c27, 0x3c27, 0x3c27, 0x3c27, - 0x3c27, 0x3c28, 0x3c28, 0x3c28, 0x3c28, 0x3c28, 0x3c28, 0x3c28, - 0x3c28, 0x3c28, 0x3c28, 0x3c28, 0x3c28, 0x3c28, 0x3c28, 0x3c28, - 0x3c28, 0x3c28, 0x3c28, 0x3c28, 0x3c28, 0x3c28, 0x3c28, 0x3c28, - 0x3c28, 0x3c28, 0x3c28, 0x3c28, 0x3c28, 0x3c28, 0x3c28, 0x3c28, - 0x3c29, 0x3c29, 0x3c29, 0x3c29, 0x3c29, 0x3c29, 0x3c29, 0x3c29, - 0x3c29, 0x3c29, 0x3c29, 0x3c29, 0x3c29, 0x3c29, 0x3c29, 0x3c29, - 0x3c29, 0x3c29, 0x3c29, 0x3c29, 0x3c29, 0x3c29, 0x3c29, 0x3c29, - 0x3c29, 0x3c29, 0x3c29, 0x3c29, 0x3c29, 0x3c29, 0x3c2a, 0x3c2a, - 0x3c2a, 0x3c2a, 0x3c2a, 0x3c2a, 0x3c2a, 0x3c2a, 0x3c2a, 0x3c2a, - 0x3c2a, 0x3c2a, 0x3c2a, 0x3c2a, 0x3c2a, 0x3c2a, 0x3c2a, 0x3c2a, - 0x3c2a, 0x3c2a, 0x3c2a, 0x3c2a, 0x3c2a, 0x3c2a, 0x3c2a, 0x3c2a, - 0x3c2a, 0x3c2a, 0x3c2a, 0x3c2a, 0x3c2a, 0x3c2b, 0x3c2b, 0x3c2b, - 0x3c2b, 0x3c2b, 0x3c2b, 0x3c2b, 0x3c2b, 0x3c2b, 0x3c2b, 0x3c2b, - 0x3c2b, 0x3c2b, 0x3c2b, 0x3c2b, 0x3c2b, 0x3c2b, 0x3c2b, 0x3c2b, - 0x3c2b, 0x3c2b, 0x3c2b, 0x3c2b, 0x3c2b, 0x3c2b, 0x3c2b, 0x3c2b, - 0x3c2b, 0x3c2b, 0x3c2b, 0x3c2b, 0x3c2c, 0x3c2c, 0x3c2c, 0x3c2c, - 0x3c2c, 0x3c2c, 0x3c2c, 0x3c2c, 0x3c2c, 0x3c2c, 0x3c2c, 0x3c2c, - 0x3c2c, 0x3c2c, 0x3c2c, 0x3c2c, 0x3c2c, 0x3c2c, 0x3c2c, 0x3c2c, - 0x3c2c, 0x3c2c, 0x3c2c, 0x3c2c, 0x3c2c, 0x3c2c, 0x3c2c, 0x3c2c, - 0x3c2c, 0x3c2c, 0x3c2d, 0x3c2d, 0x3c2d, 0x3c2d, 0x3c2d, 0x3c2d, - 0x3c2d, 0x3c2d, 0x3c2d, 0x3c2d, 0x3c2d, 0x3c2d, 0x3c2d, 0x3c2d, - 0x3c2d, 0x3c2d, 0x3c2d, 0x3c2d, 0x3c2d, 0x3c2d, 0x3c2d, 0x3c2d, - 0x3c2d, 0x3c2d, 0x3c2d, 0x3c2d, 0x3c2d, 0x3c2d, 0x3c2d, 0x3c2d, - 0x3c2d, 0x3c2e, 0x3c2e, 0x3c2e, 0x3c2e, 0x3c2e, 0x3c2e, 0x3c2e, - 0x3c2e, 0x3c2e, 0x3c2e, 0x3c2e, 0x3c2e, 0x3c2e, 0x3c2e, 0x3c2e, - 0x3c2e, 0x3c2e, 0x3c2e, 0x3c2e, 0x3c2e, 0x3c2e, 0x3c2e, 0x3c2e, - 0x3c2e, 0x3c2e, 0x3c2e, 0x3c2e, 0x3c2e, 0x3c2e, 0x3c2e, 0x3c2e, - 0x3c2f, 0x3c2f, 0x3c2f, 0x3c2f, 0x3c2f, 0x3c2f, 0x3c2f, 0x3c2f, - 0x3c2f, 0x3c2f, 0x3c2f, 0x3c2f, 0x3c2f, 0x3c2f, 0x3c2f, 0x3c2f, - 0x3c2f, 0x3c2f, 0x3c2f, 0x3c2f, 0x3c2f, 0x3c2f, 0x3c2f, 0x3c2f, - 0x3c2f, 0x3c2f, 0x3c2f, 0x3c2f, 0x3c2f, 0x3c2f, 0x3c30, 0x3c30, - 0x3c30, 0x3c30, 0x3c30, 0x3c30, 0x3c30, 0x3c30, 0x3c30, 0x3c30, - 0x3c30, 0x3c30, 0x3c30, 0x3c30, 0x3c30, 0x3c30, 0x3c30, 0x3c30, - 0x3c30, 0x3c30, 0x3c30, 0x3c30, 0x3c30, 0x3c30, 0x3c30, 0x3c30, - 0x3c30, 0x3c30, 0x3c30, 0x3c30, 0x3c30, 0x3c31, 0x3c31, 0x3c31, - 0x3c31, 0x3c31, 0x3c31, 0x3c31, 0x3c31, 0x3c31, 0x3c31, 0x3c31, - 0x3c31, 0x3c31, 0x3c31, 0x3c31, 0x3c31, 0x3c31, 0x3c31, 0x3c31, - 0x3c31, 0x3c31, 0x3c31, 0x3c31, 0x3c31, 0x3c31, 0x3c31, 0x3c31, - 0x3c31, 0x3c31, 0x3c31, 0x3c32, 0x3c32, 0x3c32, 0x3c32, 0x3c32, - 0x3c32, 0x3c32, 0x3c32, 0x3c32, 0x3c32, 0x3c32, 0x3c32, 0x3c32, - 0x3c32, 0x3c32, 0x3c32, 0x3c32, 0x3c32, 0x3c32, 0x3c32, 0x3c32, - 0x3c32, 0x3c32, 0x3c32, 0x3c32, 0x3c32, 0x3c32, 0x3c32, 0x3c32, - 0x3c32, 0x3c32, 0x3c33, 0x3c33, 0x3c33, 0x3c33, 0x3c33, 0x3c33, - 0x3c33, 0x3c33, 0x3c33, 0x3c33, 0x3c33, 0x3c33, 0x3c33, 0x3c33, - 0x3c33, 0x3c33, 0x3c33, 0x3c33, 0x3c33, 0x3c33, 0x3c33, 0x3c33, - 0x3c33, 0x3c33, 0x3c33, 0x3c33, 0x3c33, 0x3c33, 0x3c33, 0x3c33, - 0x3c34, 0x3c34, 0x3c34, 0x3c34, 0x3c34, 0x3c34, 0x3c34, 0x3c34, - 0x3c34, 0x3c34, 0x3c34, 0x3c34, 0x3c34, 0x3c34, 0x3c34, 0x3c34, - 0x3c34, 0x3c34, 0x3c34, 0x3c34, 0x3c34, 0x3c34, 0x3c34, 0x3c34, - 0x3c34, 0x3c34, 0x3c34, 0x3c34, 0x3c34, 0x3c34, 0x3c34, 0x3c35, - 0x3c35, 0x3c35, 0x3c35, 0x3c35, 0x3c35, 0x3c35, 0x3c35, 0x3c35, - 0x3c35, 0x3c35, 0x3c35, 0x3c35, 0x3c35, 0x3c35, 0x3c35, 0x3c35, - 0x3c35, 0x3c35, 0x3c35, 0x3c35, 0x3c35, 0x3c35, 0x3c35, 0x3c35, - 0x3c35, 0x3c35, 0x3c35, 0x3c35, 0x3c35, 0x3c36, 0x3c36, 0x3c36, - 0x3c36, 0x3c36, 0x3c36, 0x3c36, 0x3c36, 0x3c36, 0x3c36, 0x3c36, - 0x3c36, 0x3c36, 0x3c36, 0x3c36, 0x3c36, 0x3c36, 0x3c36, 0x3c36, - 0x3c36, 0x3c36, 0x3c36, 0x3c36, 0x3c36, 0x3c36, 0x3c36, 0x3c36, - 0x3c36, 0x3c36, 0x3c36, 0x3c36, 0x3c37, 0x3c37, 0x3c37, 0x3c37, - 0x3c37, 0x3c37, 0x3c37, 0x3c37, 0x3c37, 0x3c37, 0x3c37, 0x3c37, - 0x3c37, 0x3c37, 0x3c37, 0x3c37, 0x3c37, 0x3c37, 0x3c37, 0x3c37, - 0x3c37, 0x3c37, 0x3c37, 0x3c37, 0x3c37, 0x3c37, 0x3c37, 0x3c37, - 0x3c37, 0x3c37, 0x3c38, 0x3c38, 0x3c38, 0x3c38, 0x3c38, 0x3c38, - 0x3c38, 0x3c38, 0x3c38, 0x3c38, 0x3c38, 0x3c38, 0x3c38, 0x3c38, - 0x3c38, 0x3c38, 0x3c38, 0x3c38, 0x3c38, 0x3c38, 0x3c38, 0x3c38, - 0x3c38, 0x3c38, 0x3c38, 0x3c38, 0x3c38, 0x3c38, 0x3c38, 0x3c38, - 0x3c39, 0x3c39, 0x3c39, 0x3c39, 0x3c39, 0x3c39, 0x3c39, 0x3c39, - 0x3c39, 0x3c39, 0x3c39, 0x3c39, 0x3c39, 0x3c39, 0x3c39, 0x3c39, - 0x3c39, 0x3c39, 0x3c39, 0x3c39, 0x3c39, 0x3c39, 0x3c39, 0x3c39, - 0x3c39, 0x3c39, 0x3c39, 0x3c39, 0x3c39, 0x3c39, 0x3c39, 0x3c3a, - 0x3c3a, 0x3c3a, 0x3c3a, 0x3c3a, 0x3c3a, 0x3c3a, 0x3c3a, 0x3c3a, - 0x3c3a, 0x3c3a, 0x3c3a, 0x3c3a, 0x3c3a, 0x3c3a, 0x3c3a, 0x3c3a, - 0x3c3a, 0x3c3a, 0x3c3a, 0x3c3a, 0x3c3a, 0x3c3a, 0x3c3a, 0x3c3a, - 0x3c3a, 0x3c3a, 0x3c3a, 0x3c3a, 0x3c3a, 0x3c3b, 0x3c3b, 0x3c3b, - 0x3c3b, 0x3c3b, 0x3c3b, 0x3c3b, 0x3c3b, 0x3c3b, 0x3c3b, 0x3c3b, - 0x3c3b, 0x3c3b, 0x3c3b, 0x3c3b, 0x3c3b, 0x3c3b, 0x3c3b, 0x3c3b, - 0x3c3b, 0x3c3b, 0x3c3b, 0x3c3b, 0x3c3b, 0x3c3b, 0x3c3b, 0x3c3b, - 0x3c3b, 0x3c3b, 0x3c3b, 0x3c3c, 0x3c3c, 0x3c3c, 0x3c3c, 0x3c3c, - 0x3c3c, 0x3c3c, 0x3c3c, 0x3c3c, 0x3c3c, 0x3c3c, 0x3c3c, 0x3c3c, - 0x3c3c, 0x3c3c, 0x3c3c, 0x3c3c, 0x3c3c, 0x3c3c, 0x3c3c, 0x3c3c, - 0x3c3c, 0x3c3c, 0x3c3c, 0x3c3c, 0x3c3c, 0x3c3c, 0x3c3c, 0x3c3c, - 0x3c3c, 0x3c3d, 0x3c3d, 0x3c3d, 0x3c3d, 0x3c3d, 0x3c3d, 0x3c3d, - 0x3c3d, 0x3c3d, 0x3c3d, 0x3c3d, 0x3c3d, 0x3c3d, 0x3c3d, 0x3c3d, - 0x3c3d, 0x3c3d, 0x3c3d, 0x3c3d, 0x3c3d, 0x3c3d, 0x3c3d, 0x3c3d, - 0x3c3d, 0x3c3d, 0x3c3d, 0x3c3d, 0x3c3d, 0x3c3d, 0x3c3d, 0x3c3d, - 0x3c3e, 0x3c3e, 0x3c3e, 0x3c3e, 0x3c3e, 0x3c3e, 0x3c3e, 0x3c3e, - 0x3c3e, 0x3c3e, 0x3c3e, 0x3c3e, 0x3c3e, 0x3c3e, 0x3c3e, 0x3c3e, - 0x3c3e, 0x3c3e, 0x3c3e, 0x3c3e, 0x3c3e, 0x3c3e, 0x3c3e, 0x3c3e, - 0x3c3e, 0x3c3e, 0x3c3e, 0x3c3e, 0x3c3e, 0x3c3e, 0x3c3f, 0x3c3f, - 0x3c3f, 0x3c3f, 0x3c3f, 0x3c3f, 0x3c3f, 0x3c3f, 0x3c3f, 0x3c3f, - 0x3c3f, 0x3c3f, 0x3c3f, 0x3c3f, 0x3c3f, 0x3c3f, 0x3c3f, 0x3c3f, - 0x3c3f, 0x3c3f, 0x3c3f, 0x3c3f, 0x3c3f, 0x3c3f, 0x3c3f, 0x3c3f, - 0x3c3f, 0x3c3f, 0x3c3f, 0x3c3f, 0x3c40, 0x3c40, 0x3c40, 0x3c40, - 0x3c40, 0x3c40, 0x3c40, 0x3c40, 0x3c40, 0x3c40, 0x3c40, 0x3c40, - 0x3c40, 0x3c40, 0x3c40, 0x3c40, 0x3c40, 0x3c40, 0x3c40, 0x3c40, - 0x3c40, 0x3c40, 0x3c40, 0x3c40, 0x3c40, 0x3c40, 0x3c40, 0x3c40, - 0x3c40, 0x3c40, 0x3c41, 0x3c41, 0x3c41, 0x3c41, 0x3c41, 0x3c41, - 0x3c41, 0x3c41, 0x3c41, 0x3c41, 0x3c41, 0x3c41, 0x3c41, 0x3c41, - 0x3c41, 0x3c41, 0x3c41, 0x3c41, 0x3c41, 0x3c41, 0x3c41, 0x3c41, - 0x3c41, 0x3c41, 0x3c41, 0x3c41, 0x3c41, 0x3c41, 0x3c41, 0x3c41, - 0x3c42, 0x3c42, 0x3c42, 0x3c42, 0x3c42, 0x3c42, 0x3c42, 0x3c42, - 0x3c42, 0x3c42, 0x3c42, 0x3c42, 0x3c42, 0x3c42, 0x3c42, 0x3c42, - 0x3c42, 0x3c42, 0x3c42, 0x3c42, 0x3c42, 0x3c42, 0x3c42, 0x3c43, - 0x3c43, 0x3c43, 0x3c43, 0x3c43, 0x3c43, 0x3c43, 0x3c43, 0x3c43, - 0x3c43, 0x3c43, 0x3c43, 0x3c43, 0x3c43, 0x3c43, 0x3c44, 0x3c44, - 0x3c44, 0x3c44, 0x3c44, 0x3c44, 0x3c44, 0x3c44, 0x3c44, 0x3c44, - 0x3c44, 0x3c44, 0x3c44, 0x3c44, 0x3c44, 0x3c45, 0x3c45, 0x3c45, - 0x3c45, 0x3c45, 0x3c45, 0x3c45, 0x3c45, 0x3c45, 0x3c45, 0x3c45, - 0x3c45, 0x3c45, 0x3c45, 0x3c45, 0x3c46, 0x3c46, 0x3c46, 0x3c46, - 0x3c46, 0x3c46, 0x3c46, 0x3c46, 0x3c46, 0x3c46, 0x3c46, 0x3c46, - 0x3c46, 0x3c46, 0x3c46, 0x3c47, 0x3c47, 0x3c47, 0x3c47, 0x3c47, - 0x3c47, 0x3c47, 0x3c47, 0x3c47, 0x3c47, 0x3c47, 0x3c47, 0x3c47, - 0x3c47, 0x3c47, 0x3c48, 0x3c48, 0x3c48, 0x3c48, 0x3c48, 0x3c48, - 0x3c48, 0x3c48, 0x3c48, 0x3c48, 0x3c48, 0x3c48, 0x3c48, 0x3c48, - 0x3c48, 0x3c49, 0x3c49, 0x3c49, 0x3c49, 0x3c49, 0x3c49, 0x3c49, - 0x3c49, 0x3c49, 0x3c49, 0x3c49, 0x3c49, 0x3c49, 0x3c49, 0x3c49, - 0x3c4a, 0x3c4a, 0x3c4a, 0x3c4a, 0x3c4a, 0x3c4a, 0x3c4a, 0x3c4a, - 0x3c4a, 0x3c4a, 0x3c4a, 0x3c4a, 0x3c4a, 0x3c4a, 0x3c4a, 0x3c4b, - 0x3c4b, 0x3c4b, 0x3c4b, 0x3c4b, 0x3c4b, 0x3c4b, 0x3c4b, 0x3c4b, - 0x3c4b, 0x3c4b, 0x3c4b, 0x3c4b, 0x3c4b, 0x3c4b, 0x3c4c, 0x3c4c, - 0x3c4c, 0x3c4c, 0x3c4c, 0x3c4c, 0x3c4c, 0x3c4c, 0x3c4c, 0x3c4c, - 0x3c4c, 0x3c4c, 0x3c4c, 0x3c4c, 0x3c4c, 0x3c4d, 0x3c4d, 0x3c4d, - 0x3c4d, 0x3c4d, 0x3c4d, 0x3c4d, 0x3c4d, 0x3c4d, 0x3c4d, 0x3c4d, - 0x3c4d, 0x3c4d, 0x3c4d, 0x3c4d, 0x3c4e, 0x3c4e, 0x3c4e, 0x3c4e, - 0x3c4e, 0x3c4e, 0x3c4e, 0x3c4e, 0x3c4e, 0x3c4e, 0x3c4e, 0x3c4e, - 0x3c4e, 0x3c4e, 0x3c4e, 0x3c4f, 0x3c4f, 0x3c4f, 0x3c4f, 0x3c4f, - 0x3c4f, 0x3c4f, 0x3c4f, 0x3c4f, 0x3c4f, 0x3c4f, 0x3c4f, 0x3c4f, - 0x3c4f, 0x3c4f, 0x3c50, 0x3c50, 0x3c50, 0x3c50, 0x3c50, 0x3c50, - 0x3c50, 0x3c50, 0x3c50, 0x3c50, 0x3c50, 0x3c50, 0x3c50, 0x3c50, - 0x3c51, 0x3c51, 0x3c51, 0x3c51, 0x3c51, 0x3c51, 0x3c51, 0x3c51, - 0x3c51, 0x3c51, 0x3c51, 0x3c51, 0x3c51, 0x3c51, 0x3c51, 0x3c52, - 0x3c52, 0x3c52, 0x3c52, 0x3c52, 0x3c52, 0x3c52, 0x3c52, 0x3c52, - 0x3c52, 0x3c52, 0x3c52, 0x3c52, 0x3c52, 0x3c52, 0x3c53, 0x3c53, - 0x3c53, 0x3c53, 0x3c53, 0x3c53, 0x3c53, 0x3c53, 0x3c53, 0x3c53, - 0x3c53, 0x3c53, 0x3c53, 0x3c53, 0x3c53, 0x3c54, 0x3c54, 0x3c54, - 0x3c54, 0x3c54, 0x3c54, 0x3c54, 0x3c54, 0x3c54, 0x3c54, 0x3c54, - 0x3c54, 0x3c54, 0x3c54, 0x3c54, 0x3c55, 0x3c55, 0x3c55, 0x3c55, - 0x3c55, 0x3c55, 0x3c55, 0x3c55, 0x3c55, 0x3c55, 0x3c55, 0x3c55, - 0x3c55, 0x3c55, 0x3c56, 0x3c56, 0x3c56, 0x3c56, 0x3c56, 0x3c56, - 0x3c56, 0x3c56, 0x3c56, 0x3c56, 0x3c56, 0x3c56, 0x3c56, 0x3c56, - 0x3c56, 0x3c57, 0x3c57, 0x3c57, 0x3c57, 0x3c57, 0x3c57, 0x3c57, - 0x3c57, 0x3c57, 0x3c57, 0x3c57, 0x3c57, 0x3c57, 0x3c57, 0x3c57, - 0x3c58, 0x3c58, 0x3c58, 0x3c58, 0x3c58, 0x3c58, 0x3c58, 0x3c58, - 0x3c58, 0x3c58, 0x3c58, 0x3c58, 0x3c58, 0x3c58, 0x3c58, 0x3c59, - 0x3c59, 0x3c59, 0x3c59, 0x3c59, 0x3c59, 0x3c59, 0x3c59, 0x3c59, - 0x3c59, 0x3c59, 0x3c59, 0x3c59, 0x3c59, 0x3c5a, 0x3c5a, 0x3c5a, - 0x3c5a, 0x3c5a, 0x3c5a, 0x3c5a, 0x3c5a, 0x3c5a, 0x3c5a, 0x3c5a, - 0x3c5a, 0x3c5a, 0x3c5a, 0x3c5a, 0x3c5b, 0x3c5b, 0x3c5b, 0x3c5b, - 0x3c5b, 0x3c5b, 0x3c5b, 0x3c5b, 0x3c5b, 0x3c5b, 0x3c5b, 0x3c5b, - 0x3c5b, 0x3c5b, 0x3c5b, 0x3c5c, 0x3c5c, 0x3c5c, 0x3c5c, 0x3c5c, - 0x3c5c, 0x3c5c, 0x3c5c, 0x3c5c, 0x3c5c, 0x3c5c, 0x3c5c, 0x3c5c, - 0x3c5c, 0x3c5d, 0x3c5d, 0x3c5d, 0x3c5d, 0x3c5d, 0x3c5d, 0x3c5d, - 0x3c5d, 0x3c5d, 0x3c5d, 0x3c5d, 0x3c5d, 0x3c5d, 0x3c5d, 0x3c5d, - 0x3c5e, 0x3c5e, 0x3c5e, 0x3c5e, 0x3c5e, 0x3c5e, 0x3c5e, 0x3c5e, - 0x3c5e, 0x3c5e, 0x3c5e, 0x3c5e, 0x3c5e, 0x3c5e, 0x3c5e, 0x3c5f, - 0x3c5f, 0x3c5f, 0x3c5f, 0x3c5f, 0x3c5f, 0x3c5f, 0x3c5f, 0x3c5f, - 0x3c5f, 0x3c5f, 0x3c5f, 0x3c5f, 0x3c5f, 0x3c60, 0x3c60, 0x3c60, - 0x3c60, 0x3c60, 0x3c60, 0x3c60, 0x3c60, 0x3c60, 0x3c60, 0x3c60, - 0x3c60, 0x3c60, 0x3c60, 0x3c60, 0x3c61, 0x3c61, 0x3c61, 0x3c61, - 0x3c61, 0x3c61, 0x3c61, 0x3c61, 0x3c61, 0x3c61, 0x3c61, 0x3c61, - 0x3c61, 0x3c61, 0x3c61, 0x3c62, 0x3c62, 0x3c62, 0x3c62, 0x3c62, - 0x3c62, 0x3c62, 0x3c62, 0x3c62, 0x3c62, 0x3c62, 0x3c62, 0x3c62, - 0x3c62, 0x3c63, 0x3c63, 0x3c63, 0x3c63, 0x3c63, 0x3c63, 0x3c63, - 0x3c63, 0x3c63, 0x3c63, 0x3c63, 0x3c63, 0x3c63, 0x3c63, 0x3c63, - 0x3c64, 0x3c64, 0x3c64, 0x3c64, 0x3c64, 0x3c64, 0x3c64, 0x3c64, - 0x3c64, 0x3c64, 0x3c64, 0x3c64, 0x3c64, 0x3c64, 0x3c65, 0x3c65, - 0x3c65, 0x3c65, 0x3c65, 0x3c65, 0x3c65, 0x3c65, 0x3c65, 0x3c65, - 0x3c65, 0x3c65, 0x3c65, 0x3c65, 0x3c65, 0x3c66, 0x3c66, 0x3c66, - 0x3c66, 0x3c66, 0x3c66, 0x3c66, 0x3c66, 0x3c66, 0x3c66, 0x3c66, - 0x3c66, 0x3c66, 0x3c66, 0x3c66, 0x3c67, 0x3c67, 0x3c67, 0x3c67, - 0x3c67, 0x3c67, 0x3c67, 0x3c67, 0x3c67, 0x3c67, 0x3c67, 0x3c67, - 0x3c67, 0x3c67, 0x3c68, 0x3c68, 0x3c68, 0x3c68, 0x3c68, 0x3c68, - 0x3c68, 0x3c68, 0x3c68, 0x3c68, 0x3c68, 0x3c68, 0x3c68, 0x3c68, - 0x3c68, 0x3c69, 0x3c69, 0x3c69, 0x3c69, 0x3c69, 0x3c69, 0x3c69, - 0x3c69, 0x3c69, 0x3c69, 0x3c69, 0x3c69, 0x3c69, 0x3c69, 0x3c6a, - 0x3c6a, 0x3c6a, 0x3c6a, 0x3c6a, 0x3c6a, 0x3c6a, 0x3c6a, 0x3c6a, - 0x3c6a, 0x3c6a, 0x3c6a, 0x3c6a, 0x3c6a, 0x3c6a, 0x3c6b, 0x3c6b, - 0x3c6b, 0x3c6b, 0x3c6b, 0x3c6b, 0x3c6b, 0x3c6b, 0x3c6b, 0x3c6b, - 0x3c6b, 0x3c6b, 0x3c6b, 0x3c6b, 0x3c6c, 0x3c6c, 0x3c6c, 0x3c6c, - 0x3c6c, 0x3c6c, 0x3c6c, 0x3c6c, 0x3c6c, 0x3c6c, 0x3c6c, 0x3c6c, - 0x3c6c, 0x3c6c, 0x3c6c, 0x3c6d, 0x3c6d, 0x3c6d, 0x3c6d, 0x3c6d, - 0x3c6d, 0x3c6d, 0x3c6d, 0x3c6d, 0x3c6d, 0x3c6d, 0x3c6d, 0x3c6d, - 0x3c6d, 0x3c6e, 0x3c6e, 0x3c6e, 0x3c6e, 0x3c6e, 0x3c6e, 0x3c6e, - 0x3c6e, 0x3c6e, 0x3c6e, 0x3c6e, 0x3c6e, 0x3c6e, 0x3c6e, 0x3c6f, - 0x3c6f, 0x3c6f, 0x3c6f, 0x3c6f, 0x3c6f, 0x3c6f, 0x3c6f, 0x3c6f, - 0x3c6f, 0x3c6f, 0x3c6f, 0x3c6f, 0x3c6f, 0x3c6f, 0x3c70, 0x3c70, - 0x3c70, 0x3c70, 0x3c70, 0x3c70, 0x3c70, 0x3c70, 0x3c70, 0x3c70, - 0x3c70, 0x3c70, 0x3c70, 0x3c70, 0x3c71, 0x3c71, 0x3c71, 0x3c71, - 0x3c71, 0x3c71, 0x3c71, 0x3c71, 0x3c71, 0x3c71, 0x3c71, 0x3c71, - 0x3c71, 0x3c71, 0x3c71, 0x3c72, 0x3c72, 0x3c72, 0x3c72, 0x3c72, - 0x3c72, 0x3c72, 0x3c72, 0x3c72, 0x3c72, 0x3c72, 0x3c72, 0x3c72, - 0x3c72, 0x3c73, 0x3c73, 0x3c73, 0x3c73, 0x3c73, 0x3c73, 0x3c73, - 0x3c73, 0x3c73, 0x3c73, 0x3c73, 0x3c73, 0x3c73, 0x3c73, 0x3c73, - 0x3c74, 0x3c74, 0x3c74, 0x3c74, 0x3c74, 0x3c74, 0x3c74, 0x3c74, - 0x3c74, 0x3c74, 0x3c74, 0x3c74, 0x3c74, 0x3c74, 0x3c75, 0x3c75, - 0x3c75, 0x3c75, 0x3c75, 0x3c75, 0x3c75, 0x3c75, 0x3c75, 0x3c75, - 0x3c75, 0x3c75, 0x3c75, 0x3c75, 0x3c76, 0x3c76, 0x3c76, 0x3c76, - 0x3c76, 0x3c76, 0x3c76, 0x3c76, 0x3c76, 0x3c76, 0x3c76, 0x3c76, - 0x3c76, 0x3c76, 0x3c76, 0x3c77, 0x3c77, 0x3c77, 0x3c77, 0x3c77, - 0x3c77, 0x3c77, 0x3c77, 0x3c77, 0x3c77, 0x3c77, 0x3c77, 0x3c77, - 0x3c77, 0x3c78, 0x3c78, 0x3c78, 0x3c78, 0x3c78, 0x3c78, 0x3c78, - 0x3c78, 0x3c78, 0x3c78, 0x3c78, 0x3c78, 0x3c78, 0x3c78, 0x3c79, - 0x3c79, 0x3c79, 0x3c79, 0x3c79, 0x3c79, 0x3c79, 0x3c79, 0x3c79, - 0x3c79, 0x3c79, 0x3c79, 0x3c79, 0x3c79, 0x3c79, 0x3c7a, 0x3c7a, - 0x3c7a, 0x3c7a, 0x3c7a, 0x3c7a, 0x3c7a, 0x3c7a, 0x3c7a, 0x3c7a, - 0x3c7a, 0x3c7a, 0x3c7a, 0x3c7a, 0x3c7b, 0x3c7b, 0x3c7b, 0x3c7b, - 0x3c7b, 0x3c7b, 0x3c7b, 0x3c7b, 0x3c7b, 0x3c7b, 0x3c7b, 0x3c7b, - 0x3c7b, 0x3c7b, 0x3c7c, 0x3c7c, 0x3c7c, 0x3c7c, 0x3c7c, 0x3c7c, - 0x3c7c, 0x3c7c, 0x3c7c, 0x3c7c, 0x3c7c, 0x3c7c, 0x3c7c, 0x3c7c, - 0x3c7d, 0x3c7d, 0x3c7d, 0x3c7d, 0x3c7d, 0x3c7d, 0x3c7d, 0x3c7d, - 0x3c7d, 0x3c7d, 0x3c7d, 0x3c7d, 0x3c7d, 0x3c7d, 0x3c7d, 0x3c7e, - 0x3c7e, 0x3c7e, 0x3c7e, 0x3c7e, 0x3c7e, 0x3c7e, 0x3c7e, 0x3c7e, - 0x3c7e, 0x3c7e, 0x3c7e, 0x3c7e, 0x3c7e, 0x3c7f, 0x3c7f, 0x3c7f, - 0x3c7f, 0x3c7f, 0x3c7f, 0x3c7f, 0x3c7f, 0x3c7f, 0x3c7f, 0x3c7f, - 0x3c7f, 0x3c7f, 0x3c7f, 0x3c80, 0x3c80, 0x3c80, 0x3c80, 0x3c80, - 0x3c80, 0x3c80, 0x3c80, 0x3c80, 0x3c80, 0x3c80, 0x3c80, 0x3c80, - 0x3c80, 0x3c81, 0x3c81, 0x3c81, 0x3c81, 0x3c81, 0x3c81, 0x3c81, - 0x3c81, 0x3c81, 0x3c81, 0x3c81, 0x3c81, 0x3c81, 0x3c81, 0x3c81, - 0x3c82, 0x3c82, 0x3c82, 0x3c82, 0x3c82, 0x3c82, 0x3c82, 0x3c82, - 0x3c82, 0x3c82, 0x3c82, 0x3c82, 0x3c82, 0x3c82, 0x3c83, 0x3c83, - 0x3c83, 0x3c83, 0x3c83, 0x3c83, 0x3c83, 0x3c83, 0x3c83, 0x3c83, - 0x3c83, 0x3c83, 0x3c83, 0x3c83, 0x3c84, 0x3c84, 0x3c84, 0x3c84, - 0x3c84, 0x3c84, 0x3c84, 0x3c84, 0x3c84, 0x3c84, 0x3c84, 0x3c84, - 0x3c84, 0x3c84, 0x3c85, 0x3c85, 0x3c85, 0x3c85, 0x3c85, 0x3c85, - 0x3c85, 0x3c85, 0x3c85, 0x3c85, 0x3c85, 0x3c85, 0x3c85, 0x3c85, - 0x3c86, 0x3c86, 0x3c86, 0x3c86, 0x3c86, 0x3c86, 0x3c86, 0x3c86, - 0x3c86, 0x3c86, 0x3c86, 0x3c86, 0x3c86, 0x3c86, 0x3c87, 0x3c87, - 0x3c87, 0x3c87, 0x3c87, 0x3c87, 0x3c87, 0x3c87, 0x3c87, 0x3c87, - 0x3c87, 0x3c87, 0x3c87, 0x3c87, 0x3c87, 0x3c88, 0x3c88, 0x3c88, - 0x3c88, 0x3c88, 0x3c88, 0x3c88, 0x3c88, 0x3c88, 0x3c88, 0x3c88, - 0x3c88, 0x3c88, 0x3c89, 0x3c89, 0x3c89, 0x3c89, 0x3c89, 0x3c89, - 0x3c89, 0x3c8a, 0x3c8a, 0x3c8a, 0x3c8a, 0x3c8a, 0x3c8a, 0x3c8a, - 0x3c8b, 0x3c8b, 0x3c8b, 0x3c8b, 0x3c8b, 0x3c8b, 0x3c8b, 0x3c8c, - 0x3c8c, 0x3c8c, 0x3c8c, 0x3c8c, 0x3c8c, 0x3c8c, 0x3c8d, 0x3c8d, - 0x3c8d, 0x3c8d, 0x3c8d, 0x3c8d, 0x3c8d, 0x3c8e, 0x3c8e, 0x3c8e, - 0x3c8e, 0x3c8e, 0x3c8e, 0x3c8e, 0x3c8f, 0x3c8f, 0x3c8f, 0x3c8f, - 0x3c8f, 0x3c8f, 0x3c8f, 0x3c90, 0x3c90, 0x3c90, 0x3c90, 0x3c90, - 0x3c90, 0x3c90, 0x3c91, 0x3c91, 0x3c91, 0x3c91, 0x3c91, 0x3c91, - 0x3c91, 0x3c92, 0x3c92, 0x3c92, 0x3c92, 0x3c92, 0x3c92, 0x3c92, - 0x3c93, 0x3c93, 0x3c93, 0x3c93, 0x3c93, 0x3c93, 0x3c93, 0x3c94, - 0x3c94, 0x3c94, 0x3c94, 0x3c94, 0x3c94, 0x3c94, 0x3c95, 0x3c95, - 0x3c95, 0x3c95, 0x3c95, 0x3c95, 0x3c95, 0x3c96, 0x3c96, 0x3c96, - 0x3c96, 0x3c96, 0x3c96, 0x3c96, 0x3c97, 0x3c97, 0x3c97, 0x3c97, - 0x3c97, 0x3c97, 0x3c97, 0x3c98, 0x3c98, 0x3c98, 0x3c98, 0x3c98, - 0x3c98, 0x3c98, 0x3c99, 0x3c99, 0x3c99, 0x3c99, 0x3c99, 0x3c99, - 0x3c99, 0x3c9a, 0x3c9a, 0x3c9a, 0x3c9a, 0x3c9a, 0x3c9a, 0x3c9a, - 0x3c9b, 0x3c9b, 0x3c9b, 0x3c9b, 0x3c9b, 0x3c9b, 0x3c9b, 0x3c9c, - 0x3c9c, 0x3c9c, 0x3c9c, 0x3c9c, 0x3c9c, 0x3c9c, 0x3c9d, 0x3c9d, - 0x3c9d, 0x3c9d, 0x3c9d, 0x3c9d, 0x3c9d, 0x3c9e, 0x3c9e, 0x3c9e, - 0x3c9e, 0x3c9e, 0x3c9e, 0x3c9f, 0x3c9f, 0x3c9f, 0x3c9f, 0x3c9f, - 0x3c9f, 0x3c9f, 0x3ca0, 0x3ca0, 0x3ca0, 0x3ca0, 0x3ca0, 0x3ca0, - 0x3ca0, 0x3ca1, 0x3ca1, 0x3ca1, 0x3ca1, 0x3ca1, 0x3ca1, 0x3ca1, - 0x3ca2, 0x3ca2, 0x3ca2, 0x3ca2, 0x3ca2, 0x3ca2, 0x3ca2, 0x3ca3, - 0x3ca3, 0x3ca3, 0x3ca3, 0x3ca3, 0x3ca3, 0x3ca3, 0x3ca4, 0x3ca4, - 0x3ca4, 0x3ca4, 0x3ca4, 0x3ca4, 0x3ca4, 0x3ca5, 0x3ca5, 0x3ca5, - 0x3ca5, 0x3ca5, 0x3ca5, 0x3ca5, 0x3ca6, 0x3ca6, 0x3ca6, 0x3ca6, - 0x3ca6, 0x3ca6, 0x3ca6, 0x3ca7, 0x3ca7, 0x3ca7, 0x3ca7, 0x3ca7, - 0x3ca7, 0x3ca7, 0x3ca8, 0x3ca8, 0x3ca8, 0x3ca8, 0x3ca8, 0x3ca8, - 0x3ca9, 0x3ca9, 0x3ca9, 0x3ca9, 0x3ca9, 0x3ca9, 0x3ca9, 0x3caa, - 0x3caa, 0x3caa, 0x3caa, 0x3caa, 0x3caa, 0x3caa, 0x3cab, 0x3cab, - 0x3cab, 0x3cab, 0x3cab, 0x3cab, 0x3cab, 0x3cac, 0x3cac, 0x3cac, - 0x3cac, 0x3cac, 0x3cac, 0x3cac, 0x3cad, 0x3cad, 0x3cad, 0x3cad, - 0x3cad, 0x3cad, 0x3cad, 0x3cae, 0x3cae, 0x3cae, 0x3cae, 0x3cae, - 0x3cae, 0x3cae, 0x3caf, 0x3caf, 0x3caf, 0x3caf, 0x3caf, 0x3caf, - 0x3cb0, 0x3cb0, 0x3cb0, 0x3cb0, 0x3cb0, 0x3cb0, 0x3cb0, 0x3cb1, - 0x3cb1, 0x3cb1, 0x3cb1, 0x3cb1, 0x3cb1, 0x3cb1, 0x3cb2, 0x3cb2, - 0x3cb2, 0x3cb2, 0x3cb2, 0x3cb2, 0x3cb2, 0x3cb3, 0x3cb3, 0x3cb3, - 0x3cb3, 0x3cb3, 0x3cb3, 0x3cb3, 0x3cb4, 0x3cb4, 0x3cb4, 0x3cb4, - 0x3cb4, 0x3cb4, 0x3cb5, 0x3cb5, 0x3cb5, 0x3cb5, 0x3cb5, 0x3cb5, - 0x3cb5, 0x3cb6, 0x3cb6, 0x3cb6, 0x3cb6, 0x3cb6, 0x3cb6, 0x3cb6, - 0x3cb7, 0x3cb7, 0x3cb7, 0x3cb7, 0x3cb7, 0x3cb7, 0x3cb7, 0x3cb8, - 0x3cb8, 0x3cb8, 0x3cb8, 0x3cb8, 0x3cb8, 0x3cb8, 0x3cb9, 0x3cb9, - 0x3cb9, 0x3cb9, 0x3cb9, 0x3cb9, 0x3cba, 0x3cba, 0x3cba, 0x3cba, - 0x3cba, 0x3cba, 0x3cba, 0x3cbb, 0x3cbb, 0x3cbb, 0x3cbb, 0x3cbb, - 0x3cbb, 0x3cbb, 0x3cbc, 0x3cbc, 0x3cbc, 0x3cbc, 0x3cbc, 0x3cbc, - 0x3cbc, 0x3cbd, 0x3cbd, 0x3cbd, 0x3cbd, 0x3cbd, 0x3cbd, 0x3cbe, - 0x3cbe, 0x3cbe, 0x3cbe, 0x3cbe, 0x3cbe, 0x3cbe, 0x3cbf, 0x3cbf, - 0x3cbf, 0x3cbf, 0x3cbf, 0x3cbf, 0x3cbf, 0x3cc0, 0x3cc0, 0x3cc0, - 0x3cc0, 0x3cc0, 0x3cc0, 0x3cc0, 0x3cc1, 0x3cc1, 0x3cc1, 0x3cc1, - 0x3cc1, 0x3cc1, 0x3cc2, 0x3cc2, 0x3cc2, 0x3cc2, 0x3cc2, 0x3cc2, - 0x3cc2, 0x3cc3, 0x3cc3, 0x3cc3, 0x3cc3, 0x3cc3, 0x3cc3, 0x3cc3, - 0x3cc4, 0x3cc4, 0x3cc4, 0x3cc4, 0x3cc4, 0x3cc4, 0x3cc4, 0x3cc5, - 0x3cc5, 0x3cc5, 0x3cc5, 0x3cc5, 0x3cc5, 0x3cc6, 0x3cc6, 0x3cc6, - 0x3cc6, 0x3cc6, 0x3cc6, 0x3cc6, 0x3cc7, 0x3cc7, 0x3cc7, 0x3cc7, - 0x3cc7, 0x3cc7, 0x3cc7, 0x3cc8, 0x3cc8, 0x3cc8, 0x3cc8, 0x3cc8, - 0x3cc8, 0x3cc9, 0x3cc9, 0x3cc9, 0x3cc9, 0x3cc9, 0x3cc9, 0x3cc9, - 0x3cca, 0x3cca, 0x3cca, 0x3cca, 0x3cca, 0x3cca, 0x3cca, 0x3ccb, - 0x3ccb, 0x3ccb, 0x3ccb, 0x3ccb, 0x3ccb, 0x3ccc, 0x3ccc, 0x3ccc, - 0x3ccc, 0x3ccc, 0x3ccc, 0x3ccc, 0x3ccd, 0x3ccd, 0x3ccd, 0x3ccd, - 0x3ccd, 0x3ccd, 0x3ccd, 0x3cce, 0x3cce, 0x3cce, 0x3cce, 0x3cce, - 0x3cce, 0x3ccf, 0x3ccf, 0x3ccf, 0x3ccf, 0x3ccf, 0x3ccf, 0x3ccf, - 0x3cd0, 0x3cd0, 0x3cd0, 0x3cd0, 0x3cd0, 0x3cd0, 0x3cd0, 0x3cd1, - 0x3cd1, 0x3cd1, 0x3cd1, 0x3cd1, 0x3cd1, 0x3cd2, 0x3cd2, 0x3cd2, - 0x3cd2, 0x3cd2, 0x3cd2, 0x3cd2, 0x3cd3, 0x3cd3, 0x3cd3, 0x3cd3, - 0x3cd3, 0x3cd3, 0x3cd3, 0x3cd4, 0x3cd4, 0x3cd4, 0x3cd4, 0x3cd4, - 0x3cd4, 0x3cd5, 0x3cd5, 0x3cd5, 0x3cd5, 0x3cd5, 0x3cd5, 0x3cd5, - 0x3cd6, 0x3cd6, 0x3cd6, 0x3cd6, 0x3cd6, 0x3cd6, 0x3cd7, 0x3cd7, - 0x3cd7, 0x3cd7, 0x3cd7, 0x3cd7, 0x3cd7, 0x3cd8, 0x3cd8, 0x3cd8, - 0x3cd8, 0x3cd8, 0x3cd8, 0x3cd8, 0x3cd9, 0x3cd9, 0x3cd9, 0x3cd9, - 0x3cd9, 0x3cd9, 0x3cda, 0x3cda, 0x3cda, 0x3cda, 0x3cda, 0x3cda, - 0x3cda, 0x3cdb, 0x3cdb, 0x3cdb, 0x3cdb, 0x3cdb, 0x3cdb, 0x3cdc, - 0x3cdc, 0x3cdc, 0x3cdc, 0x3cdc, 0x3cdc, 0x3cdc, 0x3cdd, 0x3cdd, - 0x3cdd, 0x3cdd, 0x3cdd, 0x3cdd, 0x3cdd, 0x3cde, 0x3cde, 0x3cde, - 0x3cde, 0x3cde, 0x3cde, 0x3cdf, 0x3cdf, 0x3cdf, 0x3cdf, 0x3cdf, - 0x3cdf, 0x3cdf, 0x3ce0, 0x3ce0, 0x3ce0, 0x3ce0, 0x3ce0, 0x3ce0, - 0x3ce1, 0x3ce1, 0x3ce1, 0x3ce1, 0x3ce1, 0x3ce1, 0x3ce1, 0x3ce2, - 0x3ce2, 0x3ce2, 0x3ce2, 0x3ce2, 0x3ce2, 0x3ce3, 0x3ce3, 0x3ce3, - 0x3ce3, 0x3ce3, 0x3ce3, 0x3ce3, 0x3ce4, 0x3ce4, 0x3ce4, 0x3ce4, - 0x3ce4, 0x3ce4, 0x3ce4, 0x3ce5, 0x3ce5, 0x3ce5, 0x3ce5, 0x3ce5, - 0x3ce5, 0x3ce6, 0x3ce6, 0x3ce6, 0x3ce6, 0x3ce6, 0x3ce6, 0x3ce6, - 0x3ce7, 0x3ce7, 0x3ce7, 0x3ce7, 0x3ce7, 0x3ce7, 0x3ce8, 0x3ce8, - 0x3ce8, 0x3ce8, 0x3ce8, 0x3ce8, 0x3ce8, 0x3ce9, 0x3ce9, 0x3ce9, - 0x3ce9, 0x3ce9, 0x3ce9, 0x3cea, 0x3cea, 0x3cea, 0x3cea, 0x3cea, - 0x3cea, 0x3cea, 0x3ceb, 0x3ceb, 0x3ceb, 0x3ceb, 0x3ceb, 0x3ceb, - 0x3cec, 0x3cec, 0x3cec, 0x3cec, 0x3cec, 0x3cec, 0x3cec, 0x3ced, - 0x3ced, 0x3ced, 0x3ced, 0x3ced, 0x3ced, 0x3cee, 0x3cee, 0x3cee, - 0x3cee, 0x3cee, 0x3cee, 0x3cee, 0x3cef, 0x3cef, 0x3cef, 0x3cef, - 0x3cef, 0x3cef, 0x3cf0, 0x3cf0, 0x3cf0, 0x3cf0, 0x3cf0, 0x3cf0, - 0x3cf0, 0x3cf1, 0x3cf1, 0x3cf1, 0x3cf1, 0x3cf1, 0x3cf1, 0x3cf2, - 0x3cf2, 0x3cf2, 0x3cf2, 0x3cf2, 0x3cf2, 0x3cf2, 0x3cf3, 0x3cf3, - 0x3cf3, 0x3cf3, 0x3cf3, 0x3cf3, 0x3cf4, 0x3cf4, 0x3cf4, 0x3cf4, - 0x3cf4, 0x3cf4, 0x3cf4, 0x3cf5, 0x3cf5, 0x3cf5, 0x3cf5, 0x3cf5, - 0x3cf5, 0x3cf6, 0x3cf6, 0x3cf6, 0x3cf6, 0x3cf6, 0x3cf6, 0x3cf7, - 0x3cf7, 0x3cf7, 0x3cf7, 0x3cf7, 0x3cf7, 0x3cf7, 0x3cf8, 0x3cf8, - 0x3cf8, 0x3cf8, 0x3cf8, 0x3cf8, 0x3cf9, 0x3cf9, 0x3cf9, 0x3cf9, - 0x3cf9, 0x3cf9, 0x3cf9, 0x3cfa, 0x3cfa, 0x3cfa, 0x3cfa, 0x3cfa, - 0x3cfa, 0x3cfb, 0x3cfb, 0x3cfb, 0x3cfb, 0x3cfb, 0x3cfb, 0x3cfb, - 0x3cfc, 0x3cfc, 0x3cfc, 0x3cfc, 0x3cfc, 0x3cfc, 0x3cfd, 0x3cfd, - 0x3cfd, 0x3cfd, 0x3cfd, 0x3cfd, 0x3cfe, 0x3cfe, 0x3cfe, 0x3cfe, - 0x3cfe, 0x3cfe, 0x3cfe, 0x3cff, 0x3cff, 0x3cff, 0x3cff, 0x3cff, - 0x3cff, 0x3d00, 0x3d00, 0x3d00, 0x3d00, 0x3d00, 0x3d00, 0x3d00, - 0x3d01, 0x3d01, 0x3d01, 0x3d01, 0x3d01, 0x3d01, 0x3d02, 0x3d02, - 0x3d02, 0x3d02, 0x3d02, 0x3d02, 0x3d03, 0x3d03, 0x3d03, 0x3d03, - 0x3d03, 0x3d03, 0x3d03, 0x3d04, 0x3d04, 0x3d04, 0x3d04, 0x3d04, - 0x3d04, 0x3d05, 0x3d05, 0x3d05, 0x3d05, 0x3d05, 0x3d05, 0x3d05, - 0x3d06, 0x3d06, 0x3d06, 0x3d06, 0x3d06, 0x3d06, 0x3d07, 0x3d07, - 0x3d07, 0x3d07, 0x3d07, 0x3d07, 0x3d08, 0x3d08, 0x3d08, 0x3d08, - 0x3d08, 0x3d08, 0x3d08, 0x3d09, 0x3d09, 0x3d09, 0x3d09, 0x3d09, - 0x3d09, 0x3d0a, 0x3d0a, 0x3d0a, 0x3d0a, 0x3d0a, 0x3d0a, 0x3d0b, - 0x3d0b, 0x3d0b, 0x3d0b, 0x3d0b, 0x3d0b, 0x3d0b, 0x3d0c, 0x3d0c, - 0x3d0c, 0x3d0c, 0x3d0c, 0x3d0c, 0x3d0d, 0x3d0d, 0x3d0d, 0x3d0d, - 0x3d0d, 0x3d0d, 0x3d0e, 0x3d0e, 0x3d0e, 0x3d0e, 0x3d0e, 0x3d0e, - 0x3d0e, 0x3d0f, 0x3d0f, 0x3d0f, 0x3d0f, 0x3d0f, 0x3d0f, 0x3d10, - 0x3d10, 0x3d10, 0x3d10, 0x3d10, 0x3d10, 0x3d11, 0x3d11, 0x3d11, - 0x3d11, 0x3d11, 0x3d11, 0x3d11, 0x3d12, 0x3d12, 0x3d12, 0x3d12, - 0x3d12, 0x3d12, 0x3d13, 0x3d13, 0x3d13, 0x3d13, 0x3d13, 0x3d13, - 0x3d14, 0x3d14, 0x3d14, 0x3d14, 0x3d14, 0x3d14, 0x3d14, 0x3d15, - 0x3d15, 0x3d15, 0x3d15, 0x3d15, 0x3d15, 0x3d16, 0x3d16, 0x3d16, - 0x3d16, 0x3d16, 0x3d16, 0x3d17, 0x3d17, 0x3d17, 0x3d17, 0x3d17, - 0x3d17, 0x3d17, 0x3d18, 0x3d18, 0x3d18, 0x3d18, 0x3d18, 0x3d18, - 0x3d19, 0x3d19, 0x3d19, 0x3d19, 0x3d19, 0x3d19, 0x3d1a, 0x3d1a, - 0x3d1a, 0x3d1a, 0x3d1a, 0x3d1a, 0x3d1b, 0x3d1b, 0x3d1b, 0x3d1b, - 0x3d1b, 0x3d1b, 0x3d1b, 0x3d1c, 0x3d1c, 0x3d1c, 0x3d1c, 0x3d1c, - 0x3d1c, 0x3d1d, 0x3d1d, 0x3d1d, 0x3d1d, 0x3d1d, 0x3d1d, 0x3d1e, - 0x3d1e, 0x3d1e, 0x3d1e, 0x3d1e, 0x3d1e, 0x3d1f, 0x3d1f, 0x3d1f, - 0x3d1f, 0x3d1f, 0x3d1f, 0x3d1f, 0x3d20, 0x3d20, 0x3d20, 0x3d20, - 0x3d20, 0x3d20, 0x3d21, 0x3d21, 0x3d21, 0x3d21, 0x3d21, 0x3d21, - 0x3d22, 0x3d22, 0x3d22, 0x3d22, 0x3d22, 0x3d22, 0x3d23, 0x3d23, - 0x3d23, 0x3d23, 0x3d23, 0x3d24, 0x3d24, 0x3d24, 0x3d25, 0x3d25, - 0x3d25, 0x3d26, 0x3d26, 0x3d26, 0x3d27, 0x3d27, 0x3d27, 0x3d28, - 0x3d28, 0x3d28, 0x3d29, 0x3d29, 0x3d29, 0x3d2a, 0x3d2a, 0x3d2a, - 0x3d2b, 0x3d2b, 0x3d2b, 0x3d2c, 0x3d2c, 0x3d2c, 0x3d2d, 0x3d2d, - 0x3d2d, 0x3d2d, 0x3d2e, 0x3d2e, 0x3d2e, 0x3d2f, 0x3d2f, 0x3d2f, - 0x3d30, 0x3d30, 0x3d30, 0x3d31, 0x3d31, 0x3d31, 0x3d32, 0x3d32, - 0x3d32, 0x3d33, 0x3d33, 0x3d33, 0x3d34, 0x3d34, 0x3d34, 0x3d35, - 0x3d35, 0x3d35, 0x3d36, 0x3d36, 0x3d36, 0x3d37, 0x3d37, 0x3d37, - 0x3d38, 0x3d38, 0x3d38, 0x3d39, 0x3d39, 0x3d39, 0x3d3a, 0x3d3a, - 0x3d3a, 0x3d3a, 0x3d3b, 0x3d3b, 0x3d3b, 0x3d3c, 0x3d3c, 0x3d3c, - 0x3d3d, 0x3d3d, 0x3d3d, 0x3d3e, 0x3d3e, 0x3d3e, 0x3d3f, 0x3d3f, - 0x3d3f, 0x3d40, 0x3d40, 0x3d40, 0x3d41, 0x3d41, 0x3d41, 0x3d42, - 0x3d42, 0x3d42, 0x3d43, 0x3d43, 0x3d43, 0x3d44, 0x3d44, 0x3d44, - 0x3d45, 0x3d45, 0x3d45, 0x3d46, 0x3d46, 0x3d46, 0x3d47, 0x3d47, - 0x3d47, 0x3d48, 0x3d48, 0x3d48, 0x3d49, 0x3d49, 0x3d49, 0x3d4a, - 0x3d4a, 0x3d4a, 0x3d4b, 0x3d4b, 0x3d4b, 0x3d4c, 0x3d4c, 0x3d4c, - 0x3d4d, 0x3d4d, 0x3d4d, 0x3d4e, 0x3d4e, 0x3d4e, 0x3d4f, 0x3d4f, - 0x3d4f, 0x3d50, 0x3d50, 0x3d50, 0x3d51, 0x3d51, 0x3d51, 0x3d52, - 0x3d52, 0x3d52, 0x3d53, 0x3d53, 0x3d53, 0x3d54, 0x3d54, 0x3d54, - 0x3d55, 0x3d55, 0x3d55, 0x3d56, 0x3d56, 0x3d56, 0x3d57, 0x3d57, - 0x3d57, 0x3d58, 0x3d58, 0x3d58, 0x3d59, 0x3d59, 0x3d59, 0x3d5a, - 0x3d5a, 0x3d5a, 0x3d5b, 0x3d5b, 0x3d5b, 0x3d5c, 0x3d5c, 0x3d5c, - 0x3d5d, 0x3d5d, 0x3d5d, 0x3d5e, 0x3d5e, 0x3d5e, 0x3d5f, 0x3d5f, - 0x3d5f, 0x3d60, 0x3d60, 0x3d60, 0x3d61, 0x3d61, 0x3d61, 0x3d62, - 0x3d62, 0x3d62, 0x3d63, 0x3d63, 0x3d63, 0x3d64, 0x3d64, 0x3d64, - 0x3d65, 0x3d65, 0x3d65, 0x3d66, 0x3d66, 0x3d66, 0x3d67, 0x3d67, - 0x3d67, 0x3d68, 0x3d68, 0x3d68, 0x3d69, 0x3d69, 0x3d69, 0x3d6a, - 0x3d6a, 0x3d6a, 0x3d6b, 0x3d6b, 0x3d6b, 0x3d6c, 0x3d6c, 0x3d6c, - 0x3d6d, 0x3d6d, 0x3d6d, 0x3d6e, 0x3d6e, 0x3d6e, 0x3d6f, 0x3d6f, - 0x3d6f, 0x3d70, 0x3d70, 0x3d70, 0x3d71, 0x3d71, 0x3d72, 0x3d72, - 0x3d72, 0x3d73, 0x3d73, 0x3d73, 0x3d74, 0x3d74, 0x3d74, 0x3d75, - 0x3d75, 0x3d75, 0x3d76, 0x3d76, 0x3d76, 0x3d77, 0x3d77, 0x3d77, - 0x3d78, 0x3d78, 0x3d78, 0x3d79, 0x3d79, 0x3d79, 0x3d7a, 0x3d7a, - 0x3d7a, 0x3d7b, 0x3d7b, 0x3d7b, 0x3d7c, 0x3d7c, 0x3d7c, 0x3d7d, - 0x3d7d, 0x3d7d, 0x3d7e, 0x3d7e, 0x3d7e, 0x3d7f, 0x3d7f, 0x3d80, - 0x3d80, 0x3d80, 0x3d81, 0x3d81, 0x3d81, 0x3d82, 0x3d82, 0x3d82, - 0x3d83, 0x3d83, 0x3d83, 0x3d84, 0x3d84, 0x3d84, 0x3d85, 0x3d85, - 0x3d85, 0x3d86, 0x3d86, 0x3d86, 0x3d87, 0x3d87, 0x3d87, 0x3d88, - 0x3d88, 0x3d88, 0x3d89, 0x3d89, 0x3d8a, 0x3d8a, 0x3d8a, 0x3d8b, - 0x3d8b, 0x3d8b, 0x3d8c, 0x3d8c, 0x3d8c, 0x3d8d, 0x3d8d, 0x3d8d, - 0x3d8e, 0x3d8e, 0x3d8e, 0x3d8f, 0x3d8f, 0x3d8f, 0x3d90, 0x3d90, - 0x3d90, 0x3d91, 0x3d91, 0x3d92, 0x3d92, 0x3d92, 0x3d93, 0x3d93, - 0x3d93, 0x3d94, 0x3d94, 0x3d94, 0x3d95, 0x3d95, 0x3d95, 0x3d96, - 0x3d96, 0x3d96, 0x3d97, 0x3d97, 0x3d97, 0x3d98, 0x3d98, 0x3d98, - 0x3d99, 0x3d99, 0x3d9a, 0x3d9a, 0x3d9a, 0x3d9b, 0x3d9b, 0x3d9b, - 0x3d9c, 0x3d9c, 0x3d9c, 0x3d9d, 0x3d9d, 0x3d9d, 0x3d9e, 0x3d9e, - 0x3d9e, 0x3d9f, 0x3d9f, 0x3d9f, 0x3da0, 0x3da0, 0x3da1, 0x3da1, - 0x3da1, 0x3da2, 0x3da2, 0x3da2, 0x3da3, 0x3da3, 0x3da3, 0x3da4, - 0x3da4, 0x3da4, 0x3da5, 0x3da5, 0x3da5, 0x3da6, 0x3da6, 0x3da7, - 0x3da7, 0x3da7, 0x3da8, 0x3da8, 0x3da8, 0x3da9, 0x3da9, 0x3da9, - 0x3daa, 0x3daa, 0x3daa, 0x3dab, 0x3dab, 0x3dab, 0x3dac, 0x3dac, - 0x3dad, 0x3dad, 0x3dad, 0x3dae, 0x3dae, 0x3dae, 0x3daf, 0x3daf, - 0x3daf, 0x3db0, 0x3db0, 0x3db0, 0x3db1, 0x3db1, 0x3db2, 0x3db2, - 0x3db2, 0x3db3, 0x3db3, 0x3db3, 0x3db4, 0x3db4, 0x3db4, 0x3db5, - 0x3db5, 0x3db5, 0x3db6, 0x3db6, 0x3db7, 0x3db7, 0x3db7, 0x3db8, - 0x3db8, 0x3db8, 0x3db9, 0x3db9, 0x3db9, 0x3dba, 0x3dba, 0x3dba, - 0x3dbb, 0x3dbb, 0x3dbc, 0x3dbc, 0x3dbc, 0x3dbd, 0x3dbd, 0x3dbd, - 0x3dbe, 0x3dbe, 0x3dbe, 0x3dbf, 0x3dbf, 0x3dbf, 0x3dc0, 0x3dc0, - 0x3dc1, 0x3dc1, 0x3dc1, 0x3dc2, 0x3dc2, 0x3dc2, 0x3dc3, 0x3dc3, - 0x3dc3, 0x3dc4, 0x3dc4, 0x3dc5, 0x3dc5, 0x3dc5, 0x3dc6, 0x3dc6, - 0x3dc6, 0x3dc7, 0x3dc7, 0x3dc7, 0x3dc8, 0x3dc8, 0x3dc8, 0x3dc9, - 0x3dc9, 0x3dca, 0x3dca, 0x3dca, 0x3dcb, 0x3dcb, 0x3dcb, 0x3dcc, - 0x3dcc, 0x3dcc, 0x3dcd, 0x3dcd, 0x3dce, 0x3dce, 0x3dce, 0x3dcf, - 0x3dcf, 0x3dcf, 0x3dd0, 0x3dd0, 0x3dd0, 0x3dd1, 0x3dd1, 0x3dd2, - 0x3dd2, 0x3dd2, 0x3dd3, 0x3dd3, 0x3dd3, 0x3dd4, 0x3dd4, 0x3dd4, - 0x3dd5, 0x3dd5, 0x3dd6, 0x3dd6, 0x3dd6, 0x3dd7, 0x3dd7, 0x3dd7, - 0x3dd8, 0x3dd8, 0x3dd8, 0x3dd9, 0x3dd9, 0x3dda, 0x3dda, 0x3dda, - 0x3ddb, 0x3ddb, 0x3ddb, 0x3ddc, 0x3ddc, 0x3ddc, 0x3ddd, 0x3ddd, - 0x3dde, 0x3dde, 0x3dde, 0x3ddf, 0x3ddf, 0x3ddf, 0x3de0, 0x3de0, - 0x3de1, 0x3de1, 0x3de1, 0x3de2, 0x3de2, 0x3de2, 0x3de3, 0x3de3, - 0x3de3, 0x3de4, 0x3de4, 0x3de5, 0x3de5, 0x3de5, 0x3de6, 0x3de6, - 0x3de6, 0x3de7, 0x3de7, 0x3de8, 0x3de8, 0x3de8, 0x3de9, 0x3de9, - 0x3de9, 0x3dea, 0x3dea, 0x3dea, 0x3deb, 0x3deb, 0x3dec, 0x3dec, - 0x3dec, 0x3ded, 0x3ded, 0x3ded, 0x3dee, 0x3dee, 0x3def, 0x3def, - 0x3def, 0x3df0, 0x3df0, 0x3df0, 0x3df1, 0x3df1, 0x3df2, 0x3df2, - 0x3df2, 0x3df3, 0x3df3, 0x3df3, 0x3df4, 0x3df4, 0x3df4, 0x3df5, - 0x3df5, 0x3df6, 0x3df6, 0x3df6, 0x3df7, 0x3df7, 0x3df7, 0x3df8, - 0x3df8, 0x3df9, 0x3df9, 0x3df9, 0x3dfa, 0x3dfa, 0x3dfa, 0x3dfb, - 0x3dfb, 0x3dfc, 0x3dfc, 0x3dfc, 0x3dfd, 0x3dfd, 0x3dfd, 0x3dfe, - 0x3dfe, 0x3dff, 0x3dff, 0x3dff, 0x3e00, 0x3e00, 0x3e00, 0x3e01, - 0x3e01, 0x3e02, 0x3e02, 0x3e02, 0x3e03, 0x3e03, 0x3e03, 0x3e04, - 0x3e04, 0x3e05, 0x3e05, 0x3e05, 0x3e06, 0x3e06, 0x3e06, 0x3e07, - 0x3e07, 0x3e08, 0x3e08, 0x3e08, 0x3e09, 0x3e09, 0x3e09, 0x3e0a, - 0x3e0a, 0x3e0b, 0x3e0b, 0x3e0b, 0x3e0c, 0x3e0c, 0x3e0d, 0x3e0d, - 0x3e0d, 0x3e0e, 0x3e0e, 0x3e0e, 0x3e0f, 0x3e0f, 0x3e10, 0x3e10, - 0x3e10, 0x3e11, 0x3e11, 0x3e11, 0x3e12, 0x3e12, 0x3e13, 0x3e13, - 0x3e13, 0x3e14, 0x3e14, 0x3e14, 0x3e15, 0x3e15, 0x3e16, 0x3e16, - 0x3e16, 0x3e17, 0x3e17, 0x3e18, 0x3e18, 0x3e18, 0x3e19, 0x3e19, - 0x3e19, 0x3e1a, 0x3e1a, 0x3e1b, 0x3e1b, 0x3e1b, 0x3e1c, 0x3e1c, - 0x3e1c, 0x3e1d, 0x3e1d, 0x3e1e, 0x3e1e, 0x3e1e, 0x3e1f, 0x3e1f, - 0x3e20, 0x3e20, 0x3e20, 0x3e21, 0x3e21, 0x3e21, 0x3e22, 0x3e22, - 0x3e23, 0x3e23, 0x3e23, 0x3e24, 0x3e24, 0x3e25, 0x3e25, 0x3e25, - 0x3e26, 0x3e26, 0x3e26, 0x3e27, 0x3e27, 0x3e28, 0x3e28, 0x3e28, - 0x3e29, 0x3e29, 0x3e2a, 0x3e2a, 0x3e2a, 0x3e2b, 0x3e2b, 0x3e2b, - 0x3e2c, 0x3e2c, 0x3e2d, 0x3e2d, 0x3e2d, 0x3e2e, 0x3e2e, 0x3e2f, - 0x3e2f, 0x3e2f, 0x3e30, 0x3e30, 0x3e30, 0x3e31, 0x3e31, 0x3e32, - 0x3e32, 0x3e32, 0x3e33, 0x3e33, 0x3e34, 0x3e34, 0x3e34, 0x3e35, - 0x3e35, 0x3e35, 0x3e36, 0x3e36, 0x3e37, 0x3e37, 0x3e37, 0x3e38, - 0x3e38, 0x3e39, 0x3e39, 0x3e39, 0x3e3a, 0x3e3a, 0x3e3b, 0x3e3b, - 0x3e3b, 0x3e3c, 0x3e3c, 0x3e3c, 0x3e3d, 0x3e3d, 0x3e3e, 0x3e3e, - 0x3e3e, 0x3e3f, 0x3e3f, 0x3e40, 0x3e40, 0x3e40, 0x3e41, 0x3e41, - 0x3e42, 0x3e42, 0x3e42, 0x3e43, 0x3e43, 0x3e44, 0x3e44, 0x3e44, - 0x3e45, 0x3e45, 0x3e45, 0x3e46, 0x3e46, 0x3e47, 0x3e47, 0x3e47, - 0x3e48, 0x3e48, 0x3e49, 0x3e49, 0x3e49, 0x3e4a, 0x3e4a, 0x3e4b, - 0x3e4b, 0x3e4b, 0x3e4c, 0x3e4c, 0x3e4d, 0x3e4d, 0x3e4d, 0x3e4e, - 0x3e4e, 0x3e4f, 0x3e4f, 0x3e4f, 0x3e50, 0x3e50, 0x3e50, 0x3e51, - 0x3e51, 0x3e52, 0x3e52, 0x3e52, 0x3e53, 0x3e53, 0x3e54, 0x3e54, - 0x3e54, 0x3e55, 0x3e55, 0x3e56, 0x3e56, 0x3e56, 0x3e57, 0x3e57, - 0x3e58, 0x3e58, 0x3e58, 0x3e59, 0x3e59, 0x3e5a, 0x3e5a, 0x3e5a, - 0x3e5b, 0x3e5b, 0x3e5c, 0x3e5c, 0x3e5c, 0x3e5d, 0x3e5d, 0x3e5e, - 0x3e5e, 0x3e5e, 0x3e5f, 0x3e5f, 0x3e60, 0x3e60, 0x3e60, 0x3e61, - 0x3e61, 0x3e62, 0x3e62, 0x3e62, 0x3e63, 0x3e63, 0x3e64, 0x3e64, - 0x3e64, 0x3e65, 0x3e65, 0x3e66, 0x3e66, 0x3e66, 0x3e67, 0x3e67, - 0x3e68, 0x3e68, 0x3e68, 0x3e69, 0x3e69, 0x3e6a, 0x3e6a, 0x3e6a, - 0x3e6b, 0x3e6b, 0x3e6c, 0x3e6c, 0x3e6c, 0x3e6d, 0x3e6d, 0x3e6e, - 0x3e6e, 0x3e6e, 0x3e6f, 0x3e6f, 0x3e70, 0x3e70, 0x3e70, 0x3e71, - 0x3e71, 0x3e72, 0x3e72, 0x3e72, 0x3e73, 0x3e73, 0x3e74, 0x3e74, - 0x3e74, 0x3e75, 0x3e75, 0x3e76, 0x3e76, 0x3e76, 0x3e77, 0x3e77, - 0x3e78, 0x3e78, 0x3e78, 0x3e79, 0x3e79, 0x3e7a, 0x3e7a, 0x3e7a, - 0x3e7b, 0x3e7b, 0x3e7c, 0x3e7c, 0x3e7c, 0x3e7d, 0x3e7d, 0x3e7e, - 0x3e7e, 0x3e7f, 0x3e7f, 0x3e7f, 0x3e80, 0x3e80, 0x3e81, 0x3e81, - 0x3e81, 0x3e82, 0x3e82, 0x3e83, 0x3e83, 0x3e83, 0x3e84, 0x3e84, - 0x3e85, 0x3e85, 0x3e85, 0x3e86, 0x3e86, 0x3e87, 0x3e87, 0x3e87, - 0x3e88, 0x3e88, 0x3e89, 0x3e89, 0x3e8a, 0x3e8a, 0x3e8a, 0x3e8b, - 0x3e8b, 0x3e8c, 0x3e8c, 0x3e8c, 0x3e8d, 0x3e8d, 0x3e8e, 0x3e8e, - 0x3e8e, 0x3e8f, 0x3e8f, 0x3e90, 0x3e90, 0x3e90, 0x3e91, 0x3e91, - 0x3e92, 0x3e92, 0x3e93, 0x3e93, 0x3e93, 0x3e94, 0x3e94, 0x3e95, - 0x3e95, 0x3e95, 0x3e96, 0x3e96, 0x3e97, 0x3e97, 0x3e97, 0x3e98, - 0x3e98, 0x3e99, 0x3e9a, 0x3e9b, 0x3e9c, 0x3e9c, 0x3e9d, 0x3e9e, - 0x3e9f, 0x3ea0, 0x3ea1, 0x3ea1, 0x3ea2, 0x3ea3, 0x3ea4, 0x3ea5, - 0x3ea6, 0x3ea6, 0x3ea7, 0x3ea8, 0x3ea9, 0x3eaa, 0x3eab, 0x3eab, - 0x3eac, 0x3ead, 0x3eae, 0x3eaf, 0x3eb0, 0x3eb0, 0x3eb1, 0x3eb2, - 0x3eb3, 0x3eb4, 0x3eb5, 0x3eb5, 0x3eb6, 0x3eb7, 0x3eb8, 0x3eb9, - 0x3eba, 0x3eba, 0x3ebb, 0x3ebc, 0x3ebd, 0x3ebe, 0x3ebf, 0x3ebf, - 0x3ec0, 0x3ec1, 0x3ec2, 0x3ec3, 0x3ec4, 0x3ec5, 0x3ec5, 0x3ec6, - 0x3ec7, 0x3ec8, 0x3ec9, 0x3eca, 0x3eca, 0x3ecb, 0x3ecc, 0x3ecd, - 0x3ece, 0x3ecf, 0x3ed0, 0x3ed0, 0x3ed1, 0x3ed2, 0x3ed3, 0x3ed4, - 0x3ed5, 0x3ed6, 0x3ed6, 0x3ed7, 0x3ed8, 0x3ed9, 0x3eda, 0x3edb, - 0x3edc, 0x3edc, 0x3edd, 0x3ede, 0x3edf, 0x3ee0, 0x3ee1, 0x3ee2, - 0x3ee2, 0x3ee3, 0x3ee4, 0x3ee5, 0x3ee6, 0x3ee7, 0x3ee8, 0x3ee8, - 0x3ee9, 0x3eea, 0x3eeb, 0x3eec, 0x3eed, 0x3eee, 0x3eef, 0x3eef, - 0x3ef0, 0x3ef1, 0x3ef2, 0x3ef3, 0x3ef4, 0x3ef5, 0x3ef5, 0x3ef6, - 0x3ef7, 0x3ef8, 0x3ef9, 0x3efa, 0x3efb, 0x3efc, 0x3efc, 0x3efd, - 0x3efe, 0x3eff, 0x3f00, 0x3f01, 0x3f02, 0x3f03, 0x3f03, 0x3f04, - 0x3f05, 0x3f06, 0x3f07, 0x3f08, 0x3f09, 0x3f0a, 0x3f0a, 0x3f0b, - 0x3f0c, 0x3f0d, 0x3f0e, 0x3f0f, 0x3f10, 0x3f11, 0x3f12, 0x3f12, - 0x3f13, 0x3f14, 0x3f15, 0x3f16, 0x3f17, 0x3f18, 0x3f19, 0x3f19, - 0x3f1a, 0x3f1b, 0x3f1c, 0x3f1d, 0x3f1e, 0x3f1f, 0x3f20, 0x3f21, - 0x3f21, 0x3f22, 0x3f23, 0x3f24, 0x3f25, 0x3f26, 0x3f27, 0x3f28, - 0x3f29, 0x3f2a, 0x3f2a, 0x3f2b, 0x3f2c, 0x3f2d, 0x3f2e, 0x3f2f, - 0x3f30, 0x3f31, 0x3f32, 0x3f32, 0x3f33, 0x3f34, 0x3f35, 0x3f36, - 0x3f37, 0x3f38, 0x3f39, 0x3f3a, 0x3f3b, 0x3f3c, 0x3f3c, 0x3f3d, - 0x3f3e, 0x3f3f, 0x3f40, 0x3f41, 0x3f42, 0x3f43, 0x3f44, 0x3f45, - 0x3f45, 0x3f46, 0x3f47, 0x3f48, 0x3f49, 0x3f4a, 0x3f4b, 0x3f4c, - 0x3f4d, 0x3f4e, 0x3f4f, 0x3f50, 0x3f50, 0x3f51, 0x3f52, 0x3f53, - 0x3f54, 0x3f55, 0x3f56, 0x3f57, 0x3f58, 0x3f59, 0x3f5a, 0x3f5b, - 0x3f5b, 0x3f5c, 0x3f5d, 0x3f5e, 0x3f5f, 0x3f60, 0x3f61, 0x3f62, - 0x3f63, 0x3f64, 0x3f65, 0x3f66, 0x3f66, 0x3f67, 0x3f68, 0x3f69, - 0x3f6a, 0x3f6b, 0x3f6c, 0x3f6d, 0x3f6e, 0x3f6f, 0x3f70, 0x3f71, - 0x3f72, 0x3f73, 0x3f73, 0x3f74, 0x3f75, 0x3f76, 0x3f77, 0x3f78, - 0x3f79, 0x3f7a, 0x3f7b, 0x3f7c, 0x3f7d, 0x3f7e, 0x3f7f, 0x3f80, - 0x3f81, 0x3f82, 0x3f82, 0x3f83, 0x3f84, 0x3f85, 0x3f86, 0x3f87, - 0x3f88, 0x3f89, 0x3f8a, 0x3f8b, 0x3f8c, 0x3f8d, 0x3f8e, 0x3f8f, - 0x3f90, 0x3f91, 0x3f92, 0x3f92, 0x3f93, 0x3f94, 0x3f95, 0x3f96, - 0x3f97, 0x3f98, 0x3f99, 0x3f9a, 0x3f9b, 0x3f9c, 0x3f9d, 0x3f9e, - 0x3f9f, 0x3fa0, 0x3fa1, 0x3fa2, 0x3fa3, 0x3fa4, 0x3fa5, 0x3fa5, - 0x3fa6, 0x3fa7, 0x3fa8, 0x3fa9, 0x3faa, 0x3fab, 0x3fac, 0x3fad, - 0x3fae, 0x3faf, 0x3fb0, 0x3fb1, 0x3fb2, 0x3fb3, 0x3fb4, 0x3fb5, - 0x3fb6, 0x3fb7, 0x3fb8, 0x3fb9, 0x3fba, 0x3fbb, 0x3fbc, 0x3fbd, - 0x3fbe, 0x3fbf, 0x3fbf, 0x3fc0, 0x3fc1, 0x3fc2, 0x3fc3, 0x3fc4, - 0x3fc5, 0x3fc6, 0x3fc7, 0x3fc8, 0x3fc9, 0x3fca, 0x3fcb, 0x3fcc, - 0x3fcd, 0x3fce, 0x3fcf, 0x3fd0, 0x3fd1, 0x3fd2, 0x3fd3, 0x3fd4, - 0x3fd5, 0x3fd6, 0x3fd7, 0x3fd8, 0x3fd9, 0x3fda, 0x3fdb, 0x3fdc, - 0x3fdd, 0x3fde, 0x3fdf, 0x3fe0, 0x3fe1, 0x3fe2, 0x3fe3, 0x3fe4, - 0x3fe5, 0x3fe6, 0x3fe7, 0x3fe8, 0x3fe9, 0x3fea, 0x3feb, 0x3fec, - 0x3fed, 0x3fee, 0x3fef, 0x3ff0, 0x3ff0, 0x3ff1, 0x3ff2, 0x3ff3, - 0x3ff4, 0x3ff5, 0x3ff6, 0x3ff7, 0x3ff8, 0x3ff9, 0x3ffa, 0x3ffb, - 0x3ffc, 0x3ffd, 0x3ffe, 0x3fff, 0x4000, 0x4001, 0x4001, 0x4002, - 0x4002, 0x4003, 0x4003, 0x4004, 0x4004, 0x4005, 0x4005, 0x4006, - 0x4006, 0x4007, 0x4007, 0x4008, 0x4008, 0x4009, 0x4009, 0x400a, - 0x400a, 0x400b, 0x400b, 0x400c, 0x400c, 0x400d, 0x400d, 0x400e, - 0x400e, 0x400f, 0x400f, 0x4010, 0x4010, 0x4011, 0x4011, 0x4012, - 0x4012, 0x4013, 0x4013, 0x4014, 0x4014, 0x4015, 0x4015, 0x4016, - 0x4016, 0x4017, 0x4017, 0x4018, 0x4019, 0x4019, 0x401a, 0x401a, - 0x401b, 0x401b, 0x401c, 0x401c, 0x401d, 0x401d, 0x401e, 0x401e, - 0x401f, 0x401f, 0x4020, 0x4020, 0x4021, 0x4021, 0x4022, 0x4022, - 0x4023, 0x4023, 0x4024, 0x4024, 0x4025, 0x4025, 0x4026, 0x4026, - 0x4027, 0x4027, 0x4028, 0x4028, 0x4029, 0x402a, 0x402a, 0x402b, - 0x402b, 0x402c, 0x402c, 0x402d, 0x402d, 0x402e, 0x402e, 0x402f, - 0x402f, 0x4030, 0x4030, 0x4031, 0x4031, 0x4032, 0x4032, 0x4033, - 0x4033, 0x4034, 0x4035, 0x4035, 0x4036, 0x4036, 0x4037, 0x4037, - 0x4038, 0x4038, 0x4039, 0x4039, 0x403a, 0x403a, 0x403b, 0x403b, - 0x403c, 0x403c, 0x403d, 0x403d, 0x403e, 0x403f, 0x403f, 0x4040, - 0x4040, 0x4041, 0x4041, 0x4042, 0x4042, 0x4043, 0x4043, 0x4044, - 0x4044, 0x4045, 0x4045, 0x4046, 0x4047, 0x4047, 0x4048, 0x4048, - 0x4049, 0x4049, 0x404a, 0x404a, 0x404b, 0x404b, 0x404c, 0x404c, - 0x404d, 0x404e, 0x404e, 0x404f, 0x404f, 0x4050, 0x4050, 0x4051, - 0x4051, 0x4052, 0x4052, 0x4053, 0x4053, 0x4054, 0x4055, 0x4055, - 0x4056, 0x4056, 0x4057, 0x4057, 0x4058, 0x4058, 0x4059, 0x4059, - 0x405a, 0x405a, 0x405b, 0x405c, 0x405c, 0x405d, 0x405d, 0x405e, - 0x405e, 0x405f, 0x405f, 0x4060, 0x4060, 0x4061, 0x4062, 0x4062, - 0x4063, 0x4063, 0x4064, 0x4064, 0x4065, 0x4065, 0x4066, 0x4067, - 0x4067, 0x4068, 0x4068, 0x4069, 0x4069, 0x406a, 0x406a, 0x406b, - 0x406b, 0x406c, 0x406d, 0x406d, 0x406e, 0x406e, 0x406f, 0x406f, - 0x4070, 0x4070, 0x4071, 0x4072, 0x4072, 0x4073, 0x4073, 0x4074, - 0x4074, 0x4075, 0x4075, 0x4076, 0x4077, 0x4077, 0x4078, 0x4078, - 0x4079, 0x4079, 0x407a, 0x407b, 0x407b, 0x407c, 0x407c, 0x407d, - 0x407d, 0x407e, 0x407e, 0x407f, 0x4080, 0x4080, 0x4081, 0x4081, - 0x4082, 0x4082, 0x4083, 0x4084, 0x4084, 0x4085, 0x4085, 0x4086, - 0x4086, 0x4087, 0x4087, 0x4088, 0x4089, 0x4089, 0x408a, 0x408a, - 0x408b, 0x408b, 0x408c, 0x408d, 0x408d, 0x408e, 0x408e, 0x408f, - 0x408f, 0x4090, 0x4091, 0x4091, 0x4092, 0x4092, 0x4093, 0x4093, - 0x4094, 0x4095, 0x4095, 0x4096, 0x4096, 0x4097, 0x4097, 0x4098, - 0x4099, 0x4099, 0x409a, 0x409a, 0x409b, 0x409b, 0x409c, 0x409d, - 0x409d, 0x409e, 0x409e, 0x409f, 0x409f, 0x40a0, 0x40a1, 0x40a1, - 0x40a2, 0x40a2, 0x40a3, 0x40a4, 0x40a4, 0x40a5, 0x40a5, 0x40a6, - 0x40a6, 0x40a7, 0x40a8, 0x40a8, 0x40a9, 0x40a9, 0x40aa, 0x40ab, - 0x40ab, 0x40ac, 0x40ac, 0x40ad, 0x40ad, 0x40ae, 0x40af, 0x40af, - 0x40b0, 0x40b0, 0x40b1, 0x40b2, 0x40b2, 0x40b3, 0x40b3, 0x40b4, - 0x40b4, 0x40b5, 0x40b6, 0x40b6, 0x40b7, 0x40b7, 0x40b8, 0x40b9, - 0x40b9, 0x40ba, 0x40ba, 0x40bb, 0x40bc, 0x40bc, 0x40bd, 0x40bd, - 0x40be, 0x40bf, 0x40bf, 0x40c0, 0x40c0, 0x40c1, 0x40c1, 0x40c2, - 0x40c3, 0x40c3, 0x40c4, 0x40c4, 0x40c5, 0x40c6, 0x40c6, 0x40c7, - 0x40c7, 0x40c8, 0x40c9, 0x40c9, 0x40ca, 0x40ca, 0x40cb, 0x40cc, - 0x40cc, 0x40cd, 0x40cd, 0x40ce, 0x40cf, 0x40cf, 0x40d0, 0x40d0, - 0x40d1, 0x40d2, 0x40d2, 0x40d3, 0x40d3, 0x40d4, 0x40d5, 0x40d5, - 0x40d6, 0x40d6, 0x40d7, 0x40d8, 0x40d8, 0x40d9, 0x40d9, 0x40da, - 0x40db, 0x40db, 0x40dc, 0x40dd, 0x40dd, 0x40de, 0x40de, 0x40df, - 0x40e0, 0x40e0, 0x40e1, 0x40e1, 0x40e2, 0x40e3, 0x40e3, 0x40e4, - 0x40e4, 0x40e5, 0x40e6, 0x40e6, 0x40e7, 0x40e8, 0x40e8, 0x40e9, - 0x40e9, 0x40ea, 0x40eb, 0x40eb, 0x40ec, 0x40ec, 0x40ed, 0x40ee, - 0x40ee, 0x40ef, 0x40f0, 0x40f0, 0x40f1, 0x40f1, 0x40f2, 0x40f3, - 0x40f3, 0x40f4, 0x40f4, 0x40f5, 0x40f6, 0x40f6, 0x40f7, 0x40f8, - 0x40f8, 0x40f9, 0x40f9, 0x40fa, 0x40fb, 0x40fb, 0x40fc, 0x40fd, - 0x40fd, 0x40fe, 0x40fe, 0x40ff, 0x4100, 0x4100, 0x4101, 0x4102, - 0x4102, 0x4103, 0x4103, 0x4104, 0x4105, 0x4105, 0x4106, 0x4107, - 0x4107, 0x4108, 0x4108, 0x4109, 0x410a, 0x410a, 0x410b, 0x410c, - 0x410c, 0x410d, 0x410d, 0x410e, 0x410f, 0x410f, 0x4110, 0x4111, - 0x4111, 0x4112, 0x4113, 0x4113, 0x4114, 0x4114, 0x4115, 0x4116, - 0x4116, 0x4117, 0x4118, 0x4118, 0x4119, 0x411a, 0x411a, 0x411b, - 0x411b, 0x411c, 0x411d, 0x411d, 0x411e, 0x411f, 0x411f, 0x4120, - 0x4121, 0x4121, 0x4122, 0x4122, 0x4123, 0x4124, 0x4124, 0x4125, - 0x4126, 0x4126, 0x4127, 0x4128, 0x4128, 0x4129, 0x412a, 0x412a, - 0x412b, 0x412b, 0x412c, 0x412d, 0x412d, 0x412e, 0x412f, 0x412f, - 0x4130, 0x4131, 0x4131, 0x4132, 0x4133, 0x4133, 0x4134, 0x4135, - 0x4135, 0x4136, 0x4137, 0x4137, 0x4138, 0x4138, 0x4139, 0x413a, - 0x413a, 0x413b, 0x413c, 0x413c, 0x413d, 0x413e, 0x413e, 0x413f, - 0x4140, 0x4140, 0x4141, 0x4142, 0x4142, 0x4143, 0x4144, 0x4144, - 0x4145, 0x4146, 0x4146, 0x4147, 0x4148, 0x4148, 0x4149, 0x414a, - 0x414a, 0x414b, 0x414c, 0x414c, 0x414d, 0x414e, 0x414e, 0x414f, - 0x4150, 0x4150, 0x4151, 0x4152, 0x4152, 0x4153, 0x4154, 0x4154, - 0x4155, 0x4156, 0x4156, 0x4157, 0x4158, 0x4158, 0x4159, 0x415a, - 0x415a, 0x415b, 0x415c, 0x415c, 0x415d, 0x415e, 0x415e, 0x415f, - 0x4160, 0x4160, 0x4161, 0x4162, 0x4162, 0x4163, 0x4164, 0x4164, - 0x4165, 0x4166, 0x4166, 0x4167, 0x4168, 0x4168, 0x4169, 0x416a, - 0x416a, 0x416b, 0x416c, 0x416c, 0x416d, 0x416e, 0x416e, 0x416f, - 0x4170, 0x4171, 0x4172, 0x4174, 0x4175, 0x4177, 0x4178, 0x4179, - 0x417b, 0x417c, 0x417d, 0x417f, 0x4180, 0x4182, 0x4183, 0x4184, - 0x4186, 0x4187, 0x4188, 0x418a, 0x418b, 0x418d, 0x418e, 0x418f, - 0x4191, 0x4192, 0x4194, 0x4195, 0x4196, 0x4198, 0x4199, 0x419b, - 0x419c, 0x419d, 0x419f, 0x41a0, 0x41a2, 0x41a3, 0x41a4, 0x41a6, - 0x41a7, 0x41a9, 0x41aa, 0x41ab, 0x41ad, 0x41ae, 0x41b0, 0x41b1, - 0x41b3, 0x41b4, 0x41b5, 0x41b7, 0x41b8, 0x41ba, 0x41bb, 0x41bd, - 0x41be, 0x41bf, 0x41c1, 0x41c2, 0x41c4, 0x41c5, 0x41c7, 0x41c8, - 0x41ca, 0x41cb, 0x41cc, 0x41ce, 0x41cf, 0x41d1, 0x41d2, 0x41d4, - 0x41d5, 0x41d7, 0x41d8, 0x41da, 0x41db, 0x41dc, 0x41de, 0x41df, - 0x41e1, 0x41e2, 0x41e4, 0x41e5, 0x41e7, 0x41e8, 0x41ea, 0x41eb, - 0x41ed, 0x41ee, 0x41f0, 0x41f1, 0x41f3, 0x41f4, 0x41f6, 0x41f7, - 0x41f9, 0x41fa, 0x41fc, 0x41fd, 0x41ff, 0x4200, 0x4202, 0x4203, - 0x4205, 0x4206, 0x4208, 0x4209, 0x420b, 0x420c, 0x420e, 0x420f, - 0x4211, 0x4212, 0x4214, 0x4215, 0x4217, 0x4218, 0x421a, 0x421b, - 0x421d, 0x421e, 0x4220, 0x4221, 0x4223, 0x4224, 0x4226, 0x4228, - 0x4229, 0x422b, 0x422c, 0x422e, 0x422f, 0x4231, 0x4232, 0x4234, - 0x4235, 0x4237, 0x4239, 0x423a, 0x423c, 0x423d, 0x423f, 0x4240, - 0x4242, 0x4243, 0x4245, 0x4247, 0x4248, 0x424a, 0x424b, 0x424d, - 0x424e, 0x4250, 0x4252, 0x4253, 0x4255, 0x4256, 0x4258, 0x425a, - 0x425b, 0x425d, 0x425e, 0x4260, 0x4262, 0x4263, 0x4265, 0x4266, - 0x4268, 0x4269, 0x426b, 0x426d, 0x426e, 0x4270, 0x4272, 0x4273, - 0x4275, 0x4276, 0x4278, 0x427a, 0x427b, 0x427d, 0x427e, 0x4280, - 0x4282, 0x4283, 0x4285, 0x4287, 0x4288, 0x428a, 0x428c, 0x428d, - 0x428f, 0x4290, 0x4292, 0x4294, 0x4295, 0x4297, 0x4299, 0x429a, - 0x429c, 0x429e, 0x429f, 0x42a1, 0x42a3, 0x42a4, 0x42a6, 0x42a8, - 0x42a9, 0x42ab, 0x42ad, 0x42ae, 0x42b0, 0x42b2, 0x42b3, 0x42b5, - 0x42b7, 0x42b8, 0x42ba, 0x42bc, 0x42bd, 0x42bf, 0x42c1, 0x42c2, - 0x42c4, 0x42c6, 0x42c7, 0x42c9, 0x42cb, 0x42cd, 0x42ce, 0x42d0, - 0x42d2, 0x42d3, 0x42d5, 0x42d7, 0x42d8, 0x42da, 0x42dc, 0x42de, - 0x42df, 0x42e1, 0x42e3, 0x42e5, 0x42e6, 0x42e8, 0x42ea, 0x42eb, - 0x42ed, 0x42ef, 0x42f1, 0x42f2, 0x42f4, 0x42f6, 0x42f8, 0x42f9, - 0x42fb, 0x42fd, 0x42ff, 0x4300, 0x4302, 0x4304, 0x4306, 0x4307, - 0x4309, 0x430b, 0x430d, 0x430e, 0x4310, 0x4312, 0x4314, 0x4315, - 0x4317, 0x4319, 0x431b, 0x431d, 0x431e, 0x4320, 0x4322, 0x4324, - 0x4325, 0x4327, 0x4329, 0x432b, 0x432d, 0x432e, 0x4330, 0x4332, - 0x4334, 0x4336, 0x4337, 0x4339, 0x433b, 0x433d, 0x433f, 0x4340, - 0x4342, 0x4344, 0x4346, 0x4348, 0x434a, 0x434b, 0x434d, 0x434f, - 0x4351, 0x4353, 0x4354, 0x4356, 0x4358, 0x435a, 0x435c, 0x435e, - 0x4360, 0x4361, 0x4363, 0x4365, 0x4367, 0x4369, 0x436b, 0x436c, - 0x436e, 0x4370, 0x4372, 0x4374, 0x4376, 0x4378, 0x4379, 0x437b, - 0x437d, 0x437f, 0x4381, 0x4383, 0x4385, 0x4387, 0x4388, 0x438a, - 0x438c, 0x438e, 0x4390, 0x4392, 0x4394, 0x4396, 0x4398, 0x439a, - 0x439b, 0x439d, 0x439f, 0x43a1, 0x43a3, 0x43a5, 0x43a7, 0x43a9, - 0x43ab, 0x43ad, 0x43af, 0x43b0, 0x43b2, 0x43b4, 0x43b6, 0x43b8, - 0x43ba, 0x43bc, 0x43be, 0x43c0, 0x43c2, 0x43c4, 0x43c6, 0x43c8, - 0x43ca, 0x43cc, 0x43ce, 0x43cf, 0x43d1, 0x43d3, 0x43d5, 0x43d7, - 0x43d9, 0x43db, 0x43dd, 0x43df, 0x43e1, 0x43e3, 0x43e5, 0x43e7, - 0x43e9, 0x43eb, 0x43ed, 0x43ef, 0x43f1, 0x43f3, 0x43f5, 0x43f7, - 0x43f9, 0x43fb, 0x43fd, 0x43ff, 0x4400, 0x4401, 0x4402, 0x4403, - 0x4404, 0x4405, 0x4406, 0x4407, 0x4408, 0x4409, 0x440a, 0x440b, - 0x440d, 0x440e, 0x440f, 0x4410, 0x4411, 0x4412, 0x4413, 0x4414, - 0x4415, 0x4416, 0x4417, 0x4418, 0x4419, 0x441a, 0x441b, 0x441c, - 0x441d, 0x441e, 0x441f, 0x4420, 0x4421, 0x4422, 0x4423, 0x4424, - 0x4425, 0x4426, 0x4427, 0x4428, 0x4429, 0x442a, 0x442b, 0x442c, - 0x442d, 0x442e, 0x4430, 0x4431, 0x4432, 0x4433, 0x4434, 0x4435, - 0x4436, 0x4437, 0x4438, 0x4439, 0x443a, 0x443b, 0x443c, 0x443d, - 0x443e, 0x443f, 0x4440, 0x4441, 0x4443, 0x4444, 0x4445, 0x4446, - 0x4447, 0x4448, 0x4449, 0x444a, 0x444b, 0x444c, 0x444d, 0x444e, - 0x444f, 0x4450, 0x4452, 0x4453, 0x4454, 0x4455, 0x4456, 0x4457, - 0x4458, 0x4459, 0x445a, 0x445b, 0x445c, 0x445d, 0x445f, 0x4460, - 0x4461, 0x4462, 0x4463, 0x4464, 0x4465, 0x4466, 0x4467, 0x4468, - 0x446a, 0x446b, 0x446c, 0x446d, 0x446e, 0x446f, 0x4470, 0x4471, - 0x4472, 0x4473, 0x4475, 0x4476, 0x4477, 0x4478, 0x4479, 0x447a, - 0x447b, 0x447c, 0x447e, 0x447f, 0x4480, 0x4481, 0x4482, 0x4483, - 0x4484, 0x4485, 0x4487, 0x4488, 0x4489, 0x448a, 0x448b, 0x448c, - 0x448d, 0x448f, 0x4490, 0x4491, 0x4492, 0x4493, 0x4494, 0x4495, - 0x4497, 0x4498, 0x4499, 0x449a, 0x449b, 0x449c, 0x449d, 0x449f, - 0x44a0, 0x44a1, 0x44a2, 0x44a3, 0x44a4, 0x44a6, 0x44a7, 0x44a8, - 0x44a9, 0x44aa, 0x44ab, 0x44ad, 0x44ae, 0x44af, 0x44b0, 0x44b1, - 0x44b2, 0x44b4, 0x44b5, 0x44b6, 0x44b7, 0x44b8, 0x44b9, 0x44bb, - 0x44bc, 0x44bd, 0x44be, 0x44bf, 0x44c1, 0x44c2, 0x44c3, 0x44c4, - 0x44c5, 0x44c7, 0x44c8, 0x44c9, 0x44ca, 0x44cb, 0x44cc, 0x44ce, - 0x44cf, 0x44d0, 0x44d1, 0x44d2, 0x44d4, 0x44d5, 0x44d6, 0x44d7, - 0x44d9, 0x44da, 0x44db, 0x44dc, 0x44dd, 0x44df, 0x44e0, 0x44e1, - 0x44e2, 0x44e3, 0x44e5, 0x44e6, 0x44e7, 0x44e8, 0x44ea, 0x44eb, - 0x44ec, 0x44ed, 0x44ef, 0x44f0, 0x44f1, 0x44f2, 0x44f3, 0x44f5, - 0x44f6, 0x44f7, 0x44f8, 0x44fa, 0x44fb, 0x44fc, 0x44fd, 0x44ff, - 0x4500, 0x4501, 0x4502, 0x4504, 0x4505, 0x4506, 0x4507, 0x4509, - 0x450a, 0x450b, 0x450c, 0x450e, 0x450f, 0x4510, 0x4512, 0x4513, - 0x4514, 0x4515, 0x4517, 0x4518, 0x4519, 0x451a, 0x451c, 0x451d, - 0x451e, 0x4520, 0x4521, 0x4522, 0x4523, 0x4525, 0x4526, 0x4527, - 0x4529, 0x452a, 0x452b, 0x452c, 0x452e, 0x452f, 0x4530, 0x4532, - 0x4533, 0x4534, 0x4536, 0x4537, 0x4538, 0x4539, 0x453b, 0x453c, - 0x453d, 0x453f, 0x4540, 0x4541, 0x4543, 0x4544, 0x4545, 0x4547, - 0x4548, 0x4549, 0x454b, 0x454c, 0x454d, 0x454e, 0x4550, 0x4551, - 0x4552, 0x4554, 0x4555, 0x4556, 0x4558, 0x4559, 0x455a, 0x455c, - 0x455d, 0x455e, 0x4560, 0x4561, 0x4563, 0x4564, 0x4565, 0x4567, - 0x4568, 0x4569, 0x456b, 0x456c, 0x456d, 0x456f, 0x4570, 0x4571, - 0x4573, 0x4574, 0x4576, 0x4577, 0x4578, 0x457a, 0x457b, 0x457c, - 0x457e, 0x457f, 0x4580, 0x4582, 0x4583, 0x4585, 0x4586, 0x4587, - 0x4589, 0x458a, 0x458c, 0x458d, 0x458e, 0x4590, 0x4591, 0x4592, - 0x4594, 0x4595, 0x4597, 0x4598, 0x4599, 0x459b, 0x459c, 0x459e, - 0x459f, 0x45a0, 0x45a2, 0x45a3, 0x45a5, 0x45a6, 0x45a8, 0x45a9, - 0x45aa, 0x45ac, 0x45ad, 0x45af, 0x45b0, 0x45b1, 0x45b3, 0x45b4, - 0x45b6, 0x45b7, 0x45b9, 0x45ba, 0x45bb, 0x45bd, 0x45be, 0x45c0, - 0x45c1, 0x45c3, 0x45c4, 0x45c6, 0x45c7, 0x45c8, 0x45ca, 0x45cb, - 0x45cd, 0x45ce, 0x45d0, 0x45d1, 0x45d3, 0x45d4, 0x45d5, 0x45d7, - 0x45d8, 0x45da, 0x45db, 0x45dd, 0x45de, 0x45e0, 0x45e1, 0x45e3, - 0x45e4, 0x45e6, 0x45e7, 0x45e9, 0x45ea, 0x45eb, 0x45ed, 0x45ee, - 0x45f0, 0x45f1, 0x45f3, 0x45f4, 0x45f6, 0x45f7, 0x45f9, 0x45fa, - 0x45fc, 0x45fd, 0x45ff, 0x4600, 0x4602, 0x4603, 0x4605, 0x4606, - 0x4608, 0x4609, 0x460b, 0x460c, 0x460e, 0x460f, 0x4611, 0x4612, - 0x4614, 0x4616, 0x4617, 0x4619, 0x461a, 0x461c, 0x461d, 0x461f, - 0x4620, 0x4622, 0x4623, 0x4625, 0x4626, 0x4628, 0x4629, 0x462b, - 0x462c, 0x462e, 0x4630, 0x4631, 0x4633, 0x4634, 0x4636, 0x4637, - 0x4639, 0x463a, 0x463c, 0x463e, 0x463f, 0x4641, 0x4642, 0x4644, - 0x4645, 0x4647, 0x4649, 0x464a, 0x464c, 0x464d, 0x464f, 0x4650, - 0x4652, 0x4654, 0x4655, 0x4657, 0x4658, 0x465a, 0x465b, 0x465d, - 0x465f, 0x4660, 0x4662, 0x4663, 0x4665, 0x4667, 0x4668, 0x466a, - 0x466b, 0x466d, 0x466f, 0x4670, 0x4672, 0x4673, 0x4675, 0x4677, - 0x4678, 0x467a, 0x467c, 0x467d, 0x467f, 0x4680, 0x4682, 0x4684, - 0x4685, 0x4687, 0x4689, 0x468a, 0x468c, 0x468e, 0x468f, 0x4691, - 0x4692, 0x4694, 0x4696, 0x4697, 0x4699, 0x469b, 0x469c, 0x469e, - 0x46a0, 0x46a1, 0x46a3, 0x46a5, 0x46a6, 0x46a8, 0x46aa, 0x46ab, - 0x46ad, 0x46af, 0x46b0, 0x46b2, 0x46b4, 0x46b5, 0x46b7, 0x46b9, - 0x46ba, 0x46bc, 0x46be, 0x46bf, 0x46c1, 0x46c3, 0x46c4, 0x46c6, - 0x46c8, 0x46ca, 0x46cb, 0x46cd, 0x46cf, 0x46d0, 0x46d2, 0x46d4, - 0x46d5, 0x46d7, 0x46d9, 0x46db, 0x46dc, 0x46de, 0x46e0, 0x46e1, - 0x46e3, 0x46e5, 0x46e7, 0x46e8, 0x46ea, 0x46ec, 0x46ee, 0x46ef, - 0x46f1, 0x46f3, 0x46f4, 0x46f6, 0x46f8, 0x46fa, 0x46fb, 0x46fd, - 0x46ff, 0x4701, 0x4702, 0x4704, 0x4706, 0x4708, 0x4709, 0x470b, - 0x470d, 0x470f, 0x4711, 0x4712, 0x4714, 0x4716, 0x4718, 0x4719, - 0x471b, 0x471d, 0x471f, 0x4720, 0x4722, 0x4724, 0x4726, 0x4728, - 0x4729, 0x472b, 0x472d, 0x472f, 0x4731, 0x4732, 0x4734, 0x4736, - 0x4738, 0x473a, 0x473b, 0x473d, 0x473f, 0x4741, 0x4743, 0x4744, - 0x4746, 0x4748, 0x474a, 0x474c, 0x474e, 0x474f, 0x4751, 0x4753, - 0x4755, 0x4757, 0x4759, 0x475a, 0x475c, 0x475e, 0x4760, 0x4762, - 0x4764, 0x4767, 0x476b, 0x476f, 0x4772, 0x4776, 0x477a, 0x477e, - 0x4781, 0x4785, 0x4789, 0x478d, 0x4790, 0x4794, 0x4798, 0x479c, - 0x47a0, 0x47a3, 0x47a7, 0x47ab, 0x47af, 0x47b3, 0x47b7, 0x47bb, - 0x47be, 0x47c2, 0x47c6, 0x47ca, 0x47ce, 0x47d2, 0x47d6, 0x47da, - 0x47de, 0x47e2, 0x47e5, 0x47e9, 0x47ed, 0x47f1, 0x47f5, 0x47f9, - 0x47fd, 0x4801, 0x4803, 0x4805, 0x4807, 0x4809, 0x480b, 0x480d, - 0x480f, 0x4811, 0x4813, 0x4815, 0x4817, 0x4819, 0x481b, 0x481d, - 0x481f, 0x4821, 0x4823, 0x4825, 0x4827, 0x4829, 0x482c, 0x482e, - 0x4830, 0x4832, 0x4834, 0x4836, 0x4838, 0x483a, 0x483c, 0x483e, - 0x4841, 0x4843, 0x4845, 0x4847, 0x4849, 0x484b, 0x484d, 0x4850, - 0x4852, 0x4854, 0x4856, 0x4858, 0x485a, 0x485d, 0x485f, 0x4861, - 0x4863, 0x4865, 0x4868, 0x486a, 0x486c, 0x486e, 0x4870, 0x4873, - 0x4875, 0x4877, 0x4879, 0x487c, 0x487e, 0x4880, 0x4882, 0x4885, - 0x4887, 0x4889, 0x488b, 0x488e, 0x4890, 0x4892, 0x4894, 0x4897, - 0x4899, 0x489b, 0x489e, 0x48a0, 0x48a2, 0x48a5, 0x48a7, 0x48a9, - 0x48ac, 0x48ae, 0x48b0, 0x48b3, 0x48b5, 0x48b7, 0x48ba, 0x48bc, - 0x48be, 0x48c1, 0x48c3, 0x48c6, 0x48c8, 0x48ca, 0x48cd, 0x48cf, - 0x48d2, 0x48d4, 0x48d6, 0x48d9, 0x48db, 0x48de, 0x48e0, 0x48e3, - 0x48e5, 0x48e7, 0x48ea, 0x48ec, 0x48ef, 0x48f1, 0x48f4, 0x48f6, - 0x48f9, 0x48fb, 0x48fe, 0x4900, 0x4903, 0x4905, 0x4908, 0x490a, - 0x490d, 0x490f, 0x4912, 0x4914, 0x4917, 0x4919, 0x491c, 0x491f, - 0x4921, 0x4924, 0x4926, 0x4929, 0x492b, 0x492e, 0x4931, 0x4933, - 0x4936, 0x4938, 0x493b, 0x493e, 0x4940, 0x4943, 0x4946, 0x4948, - 0x494b, 0x494d, 0x4950, 0x4953, 0x4955, 0x4958, 0x495b, 0x495d, - 0x4960, 0x4963, 0x4966, 0x4968, 0x496b, 0x496e, 0x4970, 0x4973, - 0x4976, 0x4979, 0x497b, 0x497e, 0x4981, 0x4984, 0x4986, 0x4989, - 0x498c, 0x498f, 0x4991, 0x4994, 0x4997, 0x499a, 0x499d, 0x499f, - 0x49a2, 0x49a5, 0x49a8, 0x49ab, 0x49ad, 0x49b0, 0x49b3, 0x49b6, - 0x49b9, 0x49bc, 0x49bf, 0x49c1, 0x49c4, 0x49c7, 0x49ca, 0x49cd, - 0x49d0, 0x49d3, 0x49d6, 0x49d9, 0x49dc, 0x49df, 0x49e1, 0x49e4, - 0x49e7, 0x49ea, 0x49ed, 0x49f0, 0x49f3, 0x49f6, 0x49f9, 0x49fc, - 0x49ff, 0x4a02, 0x4a05, 0x4a08, 0x4a0b, 0x4a0e, 0x4a11, 0x4a14, - 0x4a17, 0x4a1a, 0x4a1d, 0x4a21, 0x4a24, 0x4a27, 0x4a2a, 0x4a2d, - 0x4a30, 0x4a33, 0x4a36, 0x4a39, 0x4a3c, 0x4a3f, 0x4a43, 0x4a46, - 0x4a49, 0x4a4c, 0x4a4f, 0x4a52, 0x4a55, 0x4a59, 0x4a5c, 0x4a5f, - 0x4a62, 0x4a65, 0x4a69, 0x4a6c, 0x4a6f, 0x4a72, 0x4a75, 0x4a79, - 0x4a7c, 0x4a7f, 0x4a82, 0x4a86, 0x4a89, 0x4a8c, 0x4a8f, 0x4a93, - 0x4a96, 0x4a99, 0x4a9d, 0x4aa0, 0x4aa3, 0x4aa7, 0x4aaa, 0x4aad, - 0x4ab1, 0x4ab4, 0x4ab7, 0x4abb, 0x4abe, 0x4ac1, 0x4ac5, 0x4ac8, - 0x4acc, 0x4acf, 0x4ad2, 0x4ad6, 0x4ad9, 0x4add, 0x4ae0, 0x4ae4, - 0x4ae7, 0x4aea, 0x4aee, 0x4af1, 0x4af5, 0x4af8, 0x4afc, 0x4aff, - 0x4b03, 0x4b06, 0x4b0a, 0x4b0d, 0x4b11, 0x4b14, 0x4b18, 0x4b1c, - 0x4b1f, 0x4b23, 0x4b26, 0x4b2a, 0x4b2d, 0x4b31, 0x4b35, 0x4b38, - 0x4b3c, 0x4b3f, 0x4b43, 0x4b47, 0x4b4a, 0x4b4e, 0x4b52, 0x4b55, - 0x4b59, 0x4b5d, 0x4b60, 0x4b64, 0x4b68, 0x4b6b, 0x4b6f, 0x4b73, - 0x4b77, 0x4b7a, 0x4b7e, 0x4b82, 0x4b86, 0x4b89, 0x4b8d, 0x4b91, - 0x4b95, 0x4b98, 0x4b9c, 0x4ba0, 0x4ba4, 0x4ba8, 0x4bac, 0x4baf, - 0x4bb3, 0x4bb7, 0x4bbb, 0x4bbf, 0x4bc3, 0x4bc7, 0x4bca, 0x4bce, - 0x4bd2, 0x4bd6, 0x4bda, 0x4bde, 0x4be2, 0x4be6, 0x4bea, 0x4bee, - 0x4bf2, 0x4bf6, 0x4bfa, 0x4bfe, 0x4c01, 0x4c03, 0x4c05, 0x4c07, - 0x4c09, 0x4c0b, 0x4c0d, 0x4c0f, 0x4c11, 0x4c13, 0x4c15, 0x4c17, - 0x4c19, 0x4c1b, 0x4c1d, 0x4c1f, 0x4c21, 0x4c23, 0x4c26, 0x4c28, - 0x4c2a, 0x4c2c, 0x4c2e, 0x4c30, 0x4c32, 0x4c34, 0x4c36, 0x4c38, - 0x4c3a, 0x4c3d, 0x4c3f, 0x4c41, 0x4c43, 0x4c45, 0x4c47, 0x4c49, - 0x4c4c, 0x4c4e, 0x4c50, 0x4c52, 0x4c54, 0x4c56, 0x4c58, 0x4c5b, - 0x4c5d, 0x4c5f, 0x4c61, 0x4c63, 0x4c66, 0x4c68, 0x4c6a, 0x4c6c, - 0x4c6e, 0x4c71, 0x4c73, 0x4c75, 0x4c77, 0x4c7a, 0x4c7c, 0x4c7e, - 0x4c80, 0x4c83, 0x4c85, 0x4c87, 0x4c89, 0x4c8c, 0x4c8e, 0x4c90, - 0x4c92, 0x4c95, 0x4c97, 0x4c99, 0x4c9c, 0x4c9e, 0x4ca0, 0x4ca3, - 0x4ca5, 0x4ca7, 0x4caa, 0x4cac, 0x4cae, 0x4cb1, 0x4cb3, 0x4cb5, - 0x4cb8, 0x4cba, 0x4cbc, 0x4cbf, 0x4cc1, 0x4cc3, 0x4cc6, 0x4cc8, - 0x4ccb, 0x4ccd, 0x4ccf, 0x4cd2, 0x4cd4, 0x4cd7, 0x4cd9, 0x4cdb, - 0x4cde, 0x4ce0, 0x4ce3, 0x4ce5, 0x4ce8, 0x4cea, 0x4ced, 0x4cef, - 0x4cf2, 0x4cf4, 0x4cf6, 0x4cf9, 0x4cfb, 0x4cfe, 0x4d00, 0x4d03, - 0x4d05, 0x4d08, 0x4d0b, 0x4d0d, 0x4d10, 0x4d12, 0x4d15, 0x4d17, - 0x4d1a, 0x4d1c, 0x4d1f, 0x4d21, 0x4d24, 0x4d27, 0x4d29, 0x4d2c, - 0x4d2e, 0x4d31, 0x4d33, 0x4d36, 0x4d39, 0x4d3b, 0x4d3e, 0x4d41, - 0x4d43, 0x4d46, 0x4d48, 0x4d4b, 0x4d4e, 0x4d50, 0x4d53, 0x4d56, - 0x4d58, 0x4d5b, 0x4d5e, 0x4d60, 0x4d63, 0x4d66, 0x4d69, 0x4d6b, - 0x4d6e, 0x4d71, 0x4d73, 0x4d76, 0x4d79, 0x4d7c, 0x4d7e, 0x4d81, - 0x4d84, 0x4d87, 0x4d89, 0x4d8c, 0x4d8f, 0x4d92, 0x4d94, 0x4d97, - 0x4d9a, 0x4d9d, 0x4da0, 0x4da2, 0x4da5, 0x4da8, 0x4dab, 0x4dae, - 0x4db1, 0x4db3, 0x4db6, 0x4db9, 0x4dbc, 0x4dbf, 0x4dc2, 0x4dc5, - 0x4dc8, 0x4dca, 0x4dcd, 0x4dd0, 0x4dd3, 0x4dd6, 0x4dd9, 0x4ddc, - 0x4ddf, 0x4de2, 0x4de5, 0x4de8, 0x4deb, 0x4dee, 0x4df1, 0x4df4, - 0x4df7, 0x4dfa, 0x4dfd, 0x4e00, 0x4e03, 0x4e06, 0x4e09, 0x4e0c, - 0x4e0f, 0x4e12, 0x4e15, 0x4e18, 0x4e1b, 0x4e1e, 0x4e21, 0x4e24, - 0x4e27, 0x4e2a, 0x4e2d, 0x4e30, 0x4e33, 0x4e36, 0x4e3a, 0x4e3d, - 0x4e40, 0x4e43, 0x4e46, 0x4e49, 0x4e4c, 0x4e4f, 0x4e53, 0x4e56, - 0x4e59, 0x4e5c, 0x4e5f, 0x4e63, 0x4e66, 0x4e69, 0x4e6c, 0x4e6f, - 0x4e73, 0x4e76, 0x4e79, 0x4e7c, 0x4e80, 0x4e83, 0x4e86, 0x4e89, - 0x4e8d, 0x4e90, 0x4e93, 0x4e96, 0x4e9a, 0x4e9d, 0x4ea0, 0x4ea4, - 0x4ea7, 0x4eaa, 0x4eae, 0x4eb1, 0x4eb4, 0x4eb8, 0x4ebb, 0x4ebe, - 0x4ec2, 0x4ec5, 0x4ec9, 0x4ecc, 0x4ecf, 0x4ed3, 0x4ed6, 0x4eda, - 0x4edd, 0x4ee0, 0x4ee4, 0x4ee7, 0x4eeb, 0x4eee, 0x4ef2, 0x4ef5, - 0x4ef9, 0x4efc, 0x4f00, 0x4f03, 0x4f07, 0x4f0a, 0x4f0e, 0x4f11, - 0x4f15, 0x4f18, 0x4f1c, 0x4f1f, 0x4f23, 0x4f27, 0x4f2a, 0x4f2e, - 0x4f31, 0x4f35, 0x4f39, 0x4f3c, 0x4f40, 0x4f43, 0x4f47, 0x4f4b, - 0x4f4e, 0x4f52, 0x4f56, 0x4f59, 0x4f5d, 0x4f61, 0x4f64, 0x4f68, - 0x4f6c, 0x4f70, 0x4f73, 0x4f77, 0x4f7b, 0x4f7e, 0x4f82, 0x4f86, - 0x4f8a, 0x4f8d, 0x4f91, 0x4f95, 0x4f99, 0x4f9d, 0x4fa0, 0x4fa4, - 0x4fa8, 0x4fac, 0x4fb0, 0x4fb4, 0x4fb7, 0x4fbb, 0x4fbf, 0x4fc3, - 0x4fc7, 0x4fcb, 0x4fcf, 0x4fd3, 0x4fd7, 0x4fdb, 0x4fde, 0x4fe2, - 0x4fe6, 0x4fea, 0x4fee, 0x4ff2, 0x4ff6, 0x4ffa, 0x4ffe, 0x5001, - 0x5003, 0x5005, 0x5007, 0x5009, 0x500b, 0x500d, 0x500f, 0x5011, - 0x5013, 0x5015, 0x5017, 0x5019, 0x501b, 0x501e, 0x5020, 0x5022, - 0x5024, 0x5026, 0x5028, 0x502a, 0x502c, 0x502e, 0x5030, 0x5032, - 0x5034, 0x5036, 0x5039, 0x503b, 0x503d, 0x503f, 0x5041, 0x5043, - 0x5045, 0x5047, 0x504a, 0x504c, 0x504e, 0x5050, 0x5052, 0x5054, - 0x5057, 0x5059, 0x505b, 0x505d, 0x505f, 0x5061, 0x5064, 0x5066, - 0x5068, 0x506a, 0x506c, 0x506f, 0x5071, 0x5073, 0x5075, 0x5078, - 0x507a, 0x507c, 0x507e, 0x5081, 0x5083, 0x5085, 0x5087, 0x508a, - 0x508c, 0x508e, 0x5090, 0x5093, 0x5095, 0x5097, 0x509a, 0x509c, - 0x509e, 0x50a0, 0x50a3, 0x50a5, 0x50a7, 0x50aa, 0x50ac, 0x50ae, - 0x50b1, 0x50b3, 0x50b5, 0x50b8, 0x50ba, 0x50bd, 0x50bf, 0x50c1, - 0x50c4, 0x50c6, 0x50c8, 0x50cb, 0x50cd, 0x50d0, 0x50d2, 0x50d4, - 0x50d7, 0x50d9, 0x50dc, 0x50de, 0x50e1, 0x50e3, 0x50e6, 0x50e8, - 0x50ea, 0x50ed, 0x50ef, 0x50f2, 0x50f4, 0x50f7, 0x50f9, 0x50fc, - 0x50fe, 0x5101, 0x5103, 0x5106, 0x5108, 0x510b, 0x510d, 0x5110, - 0x5112, 0x5115, 0x5117, 0x511a, 0x511d, 0x511f, 0x5122, 0x5124, - 0x5127, 0x5129, 0x512c, 0x512f, 0x5131, 0x5134, 0x5136, 0x5139, - 0x513c, 0x513e, 0x5141, 0x5143, 0x5146, 0x5149, 0x514b, 0x514e, - 0x5151, 0x5153, 0x5156, 0x5159, 0x515b, 0x515e, 0x5161, 0x5163, - 0x5166, 0x5169, 0x516c, 0x516e, 0x5171, 0x5174, 0x5176, 0x5179, - 0x517c, 0x517f, 0x5181, 0x5184, 0x5187, 0x518a, 0x518c, 0x518f, - 0x5192, 0x5195, 0x5198, 0x519a, 0x519d, 0x51a0, 0x51a3, 0x51a6, - 0x51a8, 0x51ab, 0x51ae, 0x51b1, 0x51b4, 0x51b7, 0x51ba, 0x51bc, - 0x51bf, 0x51c2, 0x51c5, 0x51c8, 0x51cb, 0x51ce, 0x51d1, 0x51d3, - 0x51d6, 0x51d9, 0x51dc, 0x51df, 0x51e2, 0x51e5, 0x51e8, 0x51eb, - 0x51ee, 0x51f1, 0x51f4, 0x51f7, 0x51fa, 0x51fd, 0x5200, 0x5203, - 0x5206, 0x5209, 0x520c, 0x520f, 0x5212, 0x5215, 0x5218, 0x521b, - 0x521e, 0x5221, 0x5224, 0x5227, 0x522a, 0x522d, 0x5231, 0x5234, - 0x5237, 0x523a, 0x523d, 0x5240, 0x5243, 0x5246, 0x524a, 0x524d, - 0x5250, 0x5253, 0x5256, 0x5259, 0x525d, 0x5260, 0x5263, 0x5266, - 0x5269, 0x526c, 0x5270, 0x5273, 0x5276, 0x5279, 0x527d, 0x5280, - 0x5283, 0x5286, 0x528a, 0x528d, 0x5290, 0x5293, 0x5297, 0x529a, - 0x529d, 0x52a1, 0x52a4, 0x52a7, 0x52ab, 0x52ae, 0x52b1, 0x52b5, - 0x52b8, 0x52bb, 0x52bf, 0x52c2, 0x52c6, 0x52c9, 0x52cc, 0x52d0, - 0x52d3, 0x52da, 0x52e1, 0x52e8, 0x52ef, 0x52f6, 0x52fd, 0x5304, - 0x530b, 0x5312, 0x5319, 0x5320, 0x5327, 0x532e, 0x5335, 0x533d, - 0x5344, 0x534b, 0x5352, 0x535a, 0x5361, 0x5369, 0x5370, 0x5377, - 0x537f, 0x5386, 0x538e, 0x5395, 0x539d, 0x53a5, 0x53ac, 0x53b4, - 0x53bc, 0x53c4, 0x53cb, 0x53d3, 0x53db, 0x53e3, 0x53eb, 0x53f3, - 0x53fb, 0x5401, 0x5405, 0x5409, 0x540d, 0x5411, 0x5416, 0x541a, - 0x541e, 0x5422, 0x5426, 0x542a, 0x542e, 0x5433, 0x5437, 0x543b, - 0x543f, 0x5443, 0x5448, 0x544c, 0x5450, 0x5455, 0x5459, 0x545d, - 0x5462, 0x5466, 0x546a, 0x546f, 0x5473, 0x5478, 0x547c, 0x5481, - 0x5485, 0x548a, 0x548e, 0x5493, 0x5498, 0x549c, 0x54a1, 0x54a5, - 0x54aa, 0x54af, 0x54b3, 0x54b8, 0x54bd, 0x54c2, 0x54c6, 0x54cb, - 0x54d0, 0x54d5, 0x54da, 0x54de, 0x54e3, 0x54e8, 0x54ed, 0x54f2, - 0x54f7, 0x54fc, 0x5501, 0x5506, 0x550b, 0x5510, 0x5515, 0x551a, - 0x551f, 0x5525, 0x552a, 0x552f, 0x5534, 0x5539, 0x553e, 0x5544, - 0x5549, 0x554e, 0x5554, 0x5559, 0x555e, 0x5564, 0x5569, 0x556f, - 0x5574, 0x5579, 0x557f, 0x5584, 0x558a, 0x558f, 0x5595, 0x559b, - 0x55a0, 0x55a6, 0x55ac, 0x55b1, 0x55b7, 0x55bd, 0x55c2, 0x55c8, - 0x55ce, 0x55d4, 0x55da, 0x55e0, 0x55e5, 0x55eb, 0x55f1, 0x55f7, - 0x55fd, 0x5603, 0x5609, 0x560f, 0x5615, 0x561b, 0x5622, 0x5628, - 0x562e, 0x5634, 0x563a, 0x5640, 0x5647, 0x564d, 0x5653, 0x565a, - 0x5660, 0x5666, 0x566d, 0x5673, 0x567a, 0x5680, 0x5687, 0x568d, - 0x5694, 0x569a, 0x56a1, 0x56a8, 0x56ae, 0x56b5, 0x56bc, 0x56c3, - 0x56c9, 0x56d0, 0x56d7, 0x56de, 0x56e5, 0x56ec, 0x56f3, 0x56f9, - 0x5700, 0x5707, 0x570f, 0x5716, 0x571d, 0x5724, 0x572b, 0x5732, - 0x5739, 0x5741, 0x5748, 0x574f, 0x5756, 0x575e, 0x5765, 0x576d, - 0x5774, 0x577c, 0x5783, 0x578b, 0x5792, 0x579a, 0x57a1, 0x57a9, - 0x57b1, 0x57b8, 0x57c0, 0x57c8, 0x57d0, 0x57d7, 0x57df, 0x57e7, - 0x57ef, 0x57f7, 0x57ff, 0x5804, 0x5808, 0x580c, 0x5810, 0x5814, - 0x5818, 0x581c, 0x5820, 0x5824, 0x5828, 0x582c, 0x5831, 0x5835, - 0x5839, 0x583d, 0x5842, 0x5846, 0x584a, 0x584e, 0x5853, 0x5857, - 0x585b, 0x5860, 0x5864, 0x5869, 0x586d, 0x5871, 0x5876, 0x587a, - 0x587f, 0x5883, 0x5888, 0x588c, 0x5891, 0x5895, 0x589a, 0x589f, - 0x58a3, 0x58a8, 0x58ad, 0x58b1, 0x58b6, 0x58bb, 0x58bf, 0x58c4, - 0x58c9, 0x58ce, 0x58d3, 0x58d7, 0x58dc, 0x58e1, 0x58e6, 0x58eb, - 0x58f0, 0x58f5, 0x58fa, 0x58ff, 0x5904, 0x5909, 0x590e, 0x5913, - 0x5918, 0x591d, 0x5922, 0x5927, 0x592d, 0x5932, 0x5937, 0x593c, - 0x5941, 0x5947, 0x594c, 0x5951, 0x5957, 0x595c, 0x5961, 0x5967, - 0x596c, 0x5972, 0x5977, 0x597c, 0x5982, 0x5987, 0x598d, 0x5993, - 0x5998, 0x599e, 0x59a3, 0x59a9, 0x59af, 0x59b4, 0x59ba, 0x59c0, - 0x59c6, 0x59cb, 0x59d1, 0x59d7, 0x59dd, 0x59e3, 0x59e9, 0x59ef, - 0x59f5, 0x59fa, 0x5a00, 0x5a07, 0x5a0d, 0x5a13, 0x5a19, 0x5a1f, - 0x5a25, 0x5a2b, 0x5a31, 0x5a37, 0x5a3e, 0x5a44, 0x5a4a, 0x5a51, - 0x5a57, 0x5a5d, 0x5a64, 0x5a6a, 0x5a70, 0x5a77, 0x5a7d, 0x5a84, - 0x5a8a, 0x5a91, 0x5a98, 0x5a9e, 0x5aa5, 0x5aab, 0x5ab2, 0x5ab9, - 0x5ac0, 0x5ac6, 0x5acd, 0x5ad4, 0x5adb, 0x5ae2, 0x5ae8, 0x5aef, - 0x5af6, 0x5afd, 0x5b04, 0x5b0b, 0x5b12, 0x5b1a, 0x5b21, 0x5b28, - 0x5b2f, 0x5b36, 0x5b3d, 0x5b45, 0x5b4c, 0x5b53, 0x5b5b, 0x5b62, - 0x5b69, 0x5b71, 0x5b78, 0x5b80, 0x5b87, 0x5b8f, 0x5b96, 0x5b9e, - 0x5ba6, 0x5bad, 0x5bb5, 0x5bbd, 0x5bc4, 0x5bcc, 0x5bd4, 0x5bdc, - 0x5be4, 0x5bec, 0x5bf4, 0x5bfb, 0x5c02, 0x5c06, 0x5c0a, 0x5c0e, - 0x5c12, 0x5c16, 0x5c1a, 0x5c1e, 0x5c22, 0x5c26, 0x5c2b, 0x5c2f, - 0x5c33, 0x5c37, 0x5c3b, 0x5c40, 0x5c44, 0x5c48, 0x5c4c, 0x5c51, - 0x5c55, 0x5c59, 0x5c5e, 0x5c62, 0x5c67, 0x5c6b, 0x5c6f, 0x5c74, - 0x5c78, 0x5c7d, 0x5c81, 0x5c86, 0x5c8a, 0x5c8f, 0x5c93, 0x5c98, - 0x5c9d, 0x5ca1, 0x5ca6, 0x5cab, 0x5caf, 0x5cb4, 0x5cb9, 0x5cbd, - 0x5cc2, 0x5cc7, 0x5ccc, 0x5cd0, 0x5cd5, 0x5cda, 0x5cdf, 0x5ce4, - 0x5ce9, 0x5cee, 0x5cf3, 0x5cf8, 0x5cfd, 0x5d02, 0x5d07, 0x5d0c, - 0x5d11, 0x5d16, 0x5d1b, 0x5d20, 0x5d25, 0x5d2a, 0x5d2f, 0x5d35, - 0x5d3a, 0x5d3f, 0x5d44, 0x5d4a, 0x5d4f, 0x5d54, 0x5d5a, 0x5d5f, - 0x5d64, 0x5d6a, 0x5d6f, 0x5d75, 0x5d7a, 0x5d80, 0x5d85, 0x5d8b, - 0x5d90, 0x5d96, 0x5d9b, 0x5da1, 0x5da7, 0x5dac, 0x5db2, 0x5db8, - 0x5dbd, 0x5dc3, 0x5dc9, 0x5dcf, 0x5dd4, 0x5dda, 0x5de0, 0x5de6, - 0x5dec, 0x5df2, 0x5df8, 0x5dfe, 0x5e04, 0x5e0a, 0x5e10, 0x5e16, - 0x5e1c, 0x5e22, 0x5e28, 0x5e2f, 0x5e35, 0x5e3b, 0x5e41, 0x5e47, - 0x5e4e, 0x5e54, 0x5e5a, 0x5e61, 0x5e67, 0x5e6e, 0x5e74, 0x5e7a, - 0x5e81, 0x5e87, 0x5e8e, 0x5e95, 0x5e9b, 0x5ea2, 0x5ea8, 0x5eaf, - 0x5eb6, 0x5ebd, 0x5ec3, 0x5eca, 0x5ed1, 0x5ed8, 0x5edf, 0x5ee5, - 0x5eec, 0x5ef3, 0x5efa, 0x5f01, 0x5f08, 0x5f0f, 0x5f16, 0x5f1d, - 0x5f25, 0x5f2c, 0x5f33, 0x5f3a, 0x5f41, 0x5f49, 0x5f50, 0x5f57, - 0x5f5f, 0x5f66, 0x5f6d, 0x5f75, 0x5f7c, 0x5f84, 0x5f8b, 0x5f93, - 0x5f9b, 0x5fa2, 0x5faa, 0x5fb1, 0x5fb9, 0x5fc1, 0x5fc9, 0x5fd0, - 0x5fd8, 0x5fe0, 0x5fe8, 0x5ff0, 0x5ff8, 0x6000, 0x6004, 0x6008, - 0x600c, 0x6010, 0x6014, 0x6018, 0x601c, 0x6020, 0x6025, 0x6029, - 0x602d, 0x6031, 0x6035, 0x603a, 0x603e, 0x6042, 0x6046, 0x604b, - 0x604f, 0x6053, 0x6057, 0x605c, 0x6060, 0x6065, 0x6069, 0x606d, - 0x6072, 0x6076, 0x607b, 0x607f, 0x6084, 0x6088, 0x608d, 0x6091, - 0x6096, 0x609b, 0x609f, 0x60a4, 0x60a8, 0x60ad, 0x60b2, 0x60b7, - 0x60bb, 0x60c0, 0x60c5, 0x60ca, 0x60ce, 0x60d3, 0x60d8, 0x60dd, - 0x60e2, 0x60e7, 0x60eb, 0x60f0, 0x60f5, 0x60fa, 0x60ff, 0x6104, - 0x6109, 0x610e, 0x6113, 0x6119, 0x611e, 0x6123, 0x6128, 0x612d, - 0x6132, 0x6137, 0x613d, 0x6142, 0x6147, 0x614d, 0x6152, 0x6157, - 0x615d, 0x6162, 0x6167, 0x616d, 0x6172, 0x6178, 0x617d, 0x6183, - 0x6188, 0x618e, 0x6193, 0x6199, 0x619e, 0x61a4, 0x61aa, 0x61af, - 0x61b5, 0x61bb, 0x61c0, 0x61c6, 0x61cc, 0x61d2, 0x61d8, 0x61de, - 0x61e3, 0x61e9, 0x61ef, 0x61f5, 0x61fb, 0x6201, 0x6207, 0x620d, - 0x6213, 0x6219, 0x621f, 0x6226, 0x622c, 0x6232, 0x6238, 0x623e, - 0x6245, 0x624b, 0x6251, 0x6258, 0x625e, 0x6264, 0x626b, 0x6271, - 0x6278, 0x627e, 0x6285, 0x628b, 0x6292, 0x6298, 0x629f, 0x62a5, - 0x62ac, 0x62b3, 0x62ba, 0x62c0, 0x62c7, 0x62ce, 0x62d5, 0x62db, - 0x62e2, 0x62e9, 0x62f0, 0x62f7, 0x62fe, 0x6305, 0x630c, 0x6313, - 0x631a, 0x6321, 0x6329, 0x6330, 0x6337, 0x633e, 0x6345, 0x634d, - 0x6354, 0x635b, 0x6363, 0x636a, 0x6372, 0x6379, 0x6380, 0x6388, - 0x6390, 0x6397, 0x639f, 0x63a6, 0x63ae, 0x63b6, 0x63bd, 0x63c5, - 0x63cd, 0x63d5, 0x63dd, 0x63e5, 0x63ec, 0x63f4, 0x63fc, 0x6402, - 0x6406, 0x640a, 0x640e, 0x6412, 0x6416, 0x641b, 0x641f, 0x6423, - 0x6427, 0x642b, 0x642f, 0x6433, 0x6438, 0x643c, 0x6440, 0x6444, - 0x6449, 0x644d, 0x6451, 0x6456, 0x645a, 0x645e, 0x6463, 0x6467, - 0x646b, 0x6470, 0x6474, 0x6479, 0x647d, 0x6482, 0x6486, 0x648b, - 0x648f, 0x6494, 0x6499, 0x649d, 0x64a2, 0x64a6, 0x64ab, 0x64b0, - 0x64b4, 0x64b9, 0x64be, 0x64c3, 0x64c7, 0x64cc, 0x64d1, 0x64d6, - 0x64db, 0x64e0, 0x64e4, 0x64e9, 0x64ee, 0x64f3, 0x64f8, 0x64fd, - 0x6502, 0x6507, 0x650c, 0x6511, 0x6516, 0x651b, 0x6520, 0x6526, - 0x652b, 0x6530, 0x6535, 0x653a, 0x6540, 0x6545, 0x654a, 0x654f, - 0x6555, 0x655a, 0x655f, 0x6565, 0x656a, 0x6570, 0x6575, 0x657b, - 0x6580, 0x6586, 0x658b, 0x6591, 0x6596, 0x659c, 0x65a1, 0x65a7, - 0x65ad, 0x65b2, 0x65b8, 0x65be, 0x65c4, 0x65c9, 0x65cf, 0x65d5, - 0x65db, 0x65e1, 0x65e7, 0x65ed, 0x65f3, 0x65f8, 0x65fe, 0x6604, - 0x660b, 0x6611, 0x6617, 0x661d, 0x6623, 0x6629, 0x662f, 0x6635, - 0x663c, 0x6642, 0x6648, 0x664e, 0x6655, 0x665b, 0x6661, 0x6668, - 0x666e, 0x6675, 0x667b, 0x6682, 0x6688, 0x668f, 0x6695, 0x669c, - 0x66a2, 0x66a9, 0x66b0, 0x66b7, 0x66bd, 0x66c4, 0x66cb, 0x66d2, - 0x66d8, 0x66df, 0x66e6, 0x66ed, 0x66f4, 0x66fb, 0x6702, 0x6709, - 0x6710, 0x6717, 0x671e, 0x6725, 0x672d, 0x6734, 0x673b, 0x6742, - 0x6749, 0x6751, 0x6758, 0x675f, 0x6767, 0x676e, 0x6776, 0x677d, - 0x6785, 0x678c, 0x6794, 0x679b, 0x67a3, 0x67ab, 0x67b2, 0x67ba, - 0x67c2, 0x67ca, 0x67d1, 0x67d9, 0x67e1, 0x67e9, 0x67f1, 0x67f9, - 0x6800, 0x6804, 0x6808, 0x680c, 0x6811, 0x6815, 0x6819, 0x681d, - 0x6821, 0x6825, 0x6829, 0x682d, 0x6832, 0x6836, 0x683a, 0x683e, - 0x6842, 0x6847, 0x684b, 0x684f, 0x6854, 0x6858, 0x685c, 0x6861, - 0x6865, 0x6869, 0x686e, 0x6872, 0x6877, 0x687b, 0x6880, 0x6884, - 0x6889, 0x688d, 0x6892, 0x6896, 0x689b, 0x68a0, 0x68a4, 0x68a9, - 0x68ae, 0x68b2, 0x68b7, 0x68bc, 0x68c0, 0x68c5, 0x68ca, 0x68cf, - 0x68d4, 0x68d8, 0x68dd, 0x68e2, 0x68e7, 0x68ec, 0x68f1, 0x68f6, - 0x68fb, 0x6900, 0x6905, 0x690a, 0x690f, 0x6914, 0x6919, 0x691e, - 0x6923, 0x6928, 0x692e, 0x6933, 0x6938, 0x693d, 0x6943, 0x6948, - 0x694d, 0x6952, 0x6958, 0x695d, 0x6962, 0x6968, 0x696d, 0x6973, - 0x6978, 0x697e, 0x6983, 0x6989, 0x698e, 0x6994, 0x6999, 0x699f, - 0x69a5, 0x69aa, 0x69b0, 0x69b6, 0x69bb, 0x69c1, 0x69c7, 0x69cd, - 0x69d2, 0x69de, 0x69ea, 0x69f6, 0x6a02, 0x6a0e, 0x6a1a, 0x6a26, - 0x6a33, 0x6a3f, 0x6a4c, 0x6a58, 0x6a65, 0x6a72, 0x6a7f, 0x6a8c, - 0x6a99, 0x6aa6, 0x6ab4, 0x6ac1, 0x6acf, 0x6adc, 0x6aea, 0x6af8, - 0x6b06, 0x6b14, 0x6b22, 0x6b30, 0x6b3f, 0x6b4d, 0x6b5c, 0x6b6b, - 0x6b7a, 0x6b89, 0x6b98, 0x6ba7, 0x6bb7, 0x6bc6, 0x6bd6, 0x6be5, - 0x6bf5, 0x6c03, 0x6c0b, 0x6c13, 0x6c1b, 0x6c23, 0x6c2c, 0x6c34, - 0x6c3c, 0x6c45, 0x6c4d, 0x6c56, 0x6c5f, 0x6c68, 0x6c70, 0x6c79, - 0x6c82, 0x6c8b, 0x6c94, 0x6c9e, 0x6ca7, 0x6cb0, 0x6cba, 0x6cc3, - 0x6ccd, 0x6cd6, 0x6ce0, 0x6cea, 0x6cf4, 0x6cfe, 0x6d08, 0x6d12, - 0x6d1c, 0x6d26, 0x6d31, 0x6d3b, 0x6d45, 0x6d50, 0x6d5b, 0x6d65, - 0x6d70, 0x6d7b, 0x6d86, 0x6d91, 0x6d9c, 0x6da8, 0x6db3, 0x6dbf, - 0x6dca, 0x6dd6, 0x6de1, 0x6ded, 0x6df9, 0x6e05, 0x6e11, 0x6e1d, - 0x6e2a, 0x6e36, 0x6e43, 0x6e4f, 0x6e5c, 0x6e69, 0x6e75, 0x6e82, - 0x6e8f, 0x6e9d, 0x6eaa, 0x6eb7, 0x6ec5, 0x6ed2, 0x6ee0, 0x6eee, - 0x6efc, 0x6f0a, 0x6f18, 0x6f26, 0x6f34, 0x6f43, 0x6f52, 0x6f60, - 0x6f6f, 0x6f7e, 0x6f8d, 0x6f9c, 0x6fab, 0x6fbb, 0x6fca, 0x6fda, - 0x6fea, 0x6ffa, 0x7005, 0x700d, 0x7015, 0x701d, 0x7025, 0x702e, - 0x7036, 0x703f, 0x7047, 0x7050, 0x7058, 0x7061, 0x706a, 0x7073, - 0x707c, 0x7085, 0x708e, 0x7097, 0x70a0, 0x70a9, 0x70b3, 0x70bc, - 0x70c6, 0x70cf, 0x70d9, 0x70e3, 0x70ed, 0x70f6, 0x7100, 0x710a, - 0x7115, 0x711f, 0x7129, 0x7133, 0x713e, 0x7148, 0x7153, 0x715e, - 0x7168, 0x7173, 0x717e, 0x7189, 0x7194, 0x71a0, 0x71ab, 0x71b6, - 0x71c2, 0x71cd, 0x71d9, 0x71e5, 0x71f1, 0x71fc, 0x7208, 0x7215, - 0x7221, 0x722d, 0x7239, 0x7246, 0x7253, 0x725f, 0x726c, 0x7279, - 0x7286, 0x7293, 0x72a0, 0x72ae, 0x72bb, 0x72c8, 0x72d6, 0x72e4, - 0x72f2, 0x7300, 0x730e, 0x731c, 0x732a, 0x7338, 0x7347, 0x7356, - 0x7364, 0x7373, 0x7382, 0x7391, 0x73a0, 0x73b0, 0x73bf, 0x73cf, - 0x73de, 0x73ee, 0x73fe, 0x7407, 0x740f, 0x7417, 0x7420, 0x7428, - 0x7430, 0x7439, 0x7441, 0x744a, 0x7452, 0x745b, 0x7464, 0x746c, - 0x7475, 0x747e, 0x7487, 0x7490, 0x749a, 0x74a3, 0x74ac, 0x74b5, - 0x74bf, 0x74c8, 0x74d2, 0x74dc, 0x74e5, 0x74ef, 0x74f9, 0x7503, - 0x750d, 0x7517, 0x7522, 0x752c, 0x7536, 0x7541, 0x754b, 0x7556, - 0x7561, 0x756b, 0x7576, 0x7581, 0x758c, 0x7597, 0x75a3, 0x75ae, - 0x75b9, 0x75c5, 0x75d1, 0x75dc, 0x75e8, 0x75f4, 0x7600, 0x760c, - 0x7618, 0x7624, 0x7631, 0x763d, 0x7649, 0x7656, 0x7663, 0x7670, - 0x767d, 0x768a, 0x7697, 0x76a4, 0x76b1, 0x76bf, 0x76cc, 0x76da, - 0x76e8, 0x76f6, 0x7703, 0x7712, 0x7720, 0x772e, 0x773c, 0x774b, - 0x775a, 0x7768, 0x7777, 0x7786, 0x7795, 0x77a5, 0x77b4, 0x77c3, - 0x77d3, 0x77e3, 0x77f3, 0x7801, 0x7809, 0x7811, 0x781a, 0x7822, - 0x782a, 0x7832, 0x783b, 0x7843, 0x784c, 0x7855, 0x785d, 0x7866, - 0x786f, 0x7878, 0x7881, 0x788a, 0x7893, 0x789c, 0x78a5, 0x78af, - 0x78b8, 0x78c2, 0x78cb, 0x78d5, 0x78de, 0x78e8, 0x78f2, 0x78fc, - 0x7906, 0x7910, 0x791a, 0x7924, 0x792f, 0x7939, 0x7944, 0x794e, - 0x7959, 0x7964, 0x796e, 0x7979, 0x7984, 0x798f, 0x799b, 0x79a6, - 0x79b1, 0x79bd, 0x79c8, 0x79d4, 0x79df, 0x79eb, 0x79f7, 0x7a03, - 0x7a0f, 0x7a1b, 0x7a28, 0x7a34, 0x7a40, 0x7a4d, 0x7a5a, 0x7a66, - 0x7a73, 0x7a80, 0x7a8d, 0x7a9a, 0x7aa8, 0x7ab5, 0x7ac2, 0x7ad0, - 0x7ade, 0x7aeb, 0x7af9, 0x7b07, 0x7b16, 0x7b24, 0x7b32, 0x7b41, - 0x7b4f, 0x7b5e, 0x7b6d, 0x7b7b, 0x7b8a, 0x7b9a, 0x7ba9, 0x7bb8, - 0x7bc8, 0x7bd7, 0x7be7, 0x7bf7, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, 0x7bff, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c00, - 0x3c00, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, 0x3bff, - 0x3bff, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, - 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, - 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, - 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, - 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, - 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, - 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, - 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, - 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, - 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, - 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, - 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, - 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, - 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, - 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, - 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, - 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, - 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, - 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, - 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, - 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, - 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, - 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, - 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, - 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, - 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, - 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, - 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, - 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, - 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, - 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, - 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, - 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, - 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, - 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, - 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, - 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, - 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, - 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, - 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, - 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, - 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, - 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, - 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, - 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, - 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, - 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, - 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, - 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, - 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, - 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, - 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, - 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, - 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, - 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, - 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, - 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, - 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, - 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, - 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, - 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, - 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, - 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, - 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, - 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, - 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, - 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, - 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, - 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, - 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, - 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, - 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, - 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, - 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, - 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, - 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, - 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, - 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, - 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, - 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, - 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, - 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, - 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, - 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, - 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, - 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, - 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, - 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, - 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, - 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, - 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, - 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, - 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, - 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, - 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, - 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, 0x3bfe, - 0x3bfe, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, - 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, - 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, - 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, - 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, - 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, - 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, - 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, - 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, - 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, - 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, - 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, - 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, - 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, - 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, - 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, - 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, - 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, - 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, - 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, - 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, - 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, - 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, - 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, - 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, - 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, - 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, - 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, - 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, - 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, - 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, - 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, - 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, - 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, - 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, - 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, - 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, - 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, - 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, - 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, - 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, - 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, - 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, - 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, - 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, - 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, - 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, - 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, - 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, - 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, - 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, - 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, - 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, - 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, - 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, - 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, - 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, - 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, - 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, - 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, - 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, - 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, - 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, - 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, 0x3bfd, - 0x3bfd, 0x3bfd, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, - 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, - 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, - 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, - 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, - 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, - 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, - 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, - 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, - 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, - 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, - 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, - 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, - 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, - 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, - 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, - 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, - 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, - 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, - 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, - 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, - 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, - 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, - 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, - 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, - 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, - 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, - 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, - 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, - 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, - 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, - 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, - 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, - 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, - 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, - 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, - 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, - 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, - 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, - 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, - 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, - 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, - 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, - 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, - 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, - 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, - 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, - 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, 0x3bfc, - 0x3bfc, 0x3bfc, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, - 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, - 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, - 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, - 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, - 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, - 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, - 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, - 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, - 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, - 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, - 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, - 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, - 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, - 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, - 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, - 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, - 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, - 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, - 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, - 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, - 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, - 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, - 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, - 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, - 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, - 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, - 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, - 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, - 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, - 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, - 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, 0x3bfb, - 0x3bfb, 0x3bfb, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, - 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, - 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, - 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, - 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, - 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, - 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, - 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, - 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, - 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, - 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, - 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, - 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, - 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, - 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, - 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, - 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, - 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, - 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, - 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, - 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, - 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, - 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, - 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, - 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, - 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, - 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, - 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, - 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, - 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, - 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, - 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, 0x3bfa, - 0x3bfa, 0x3bfa, 0x3bfa, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, - 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, - 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, - 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, - 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, - 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, - 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, - 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, - 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, - 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, - 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, - 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, - 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, - 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, - 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, - 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, - 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, - 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, - 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, - 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, - 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, - 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, - 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, - 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, - 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, - 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, - 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, - 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, - 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, - 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, - 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, - 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, - 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf9, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, - 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, - 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, - 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, - 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, - 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, - 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, - 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, - 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, - 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, - 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, - 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, - 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, - 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, - 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, - 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, - 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, - 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, - 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, - 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, - 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, - 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, - 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, - 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf8, - 0x3bf8, 0x3bf8, 0x3bf8, 0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, - 0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, - 0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, - 0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, - 0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, - 0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, - 0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, - 0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, - 0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, - 0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, - 0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, - 0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, - 0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, - 0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, - 0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, - 0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, 0x3bf7, - 0x3bf7, 0x3bf7, 0x3bf7, 0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, - 0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, - 0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, - 0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, - 0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, - 0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, - 0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, - 0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, - 0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, - 0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, - 0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, - 0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, - 0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, - 0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, - 0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, - 0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, - 0x3bf6, 0x3bf6, 0x3bf6, 0x3bf6, 0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, - 0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, - 0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, - 0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, - 0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, - 0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, - 0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, - 0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, - 0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, - 0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, - 0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, - 0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, - 0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, - 0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, - 0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, - 0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, - 0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, 0x3bf5, 0x3bf4, 0x3bf4, 0x3bf4, - 0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, - 0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, - 0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, - 0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, - 0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, - 0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, - 0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, - 0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, - 0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, - 0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, - 0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, - 0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, - 0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, - 0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, - 0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, - 0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, 0x3bf4, 0x3bf3, 0x3bf3, 0x3bf3, - 0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, - 0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, - 0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, - 0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, - 0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, - 0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, - 0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, - 0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, - 0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, - 0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, - 0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, - 0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, - 0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, - 0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, - 0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, - 0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, 0x3bf3, 0x3bf2, 0x3bf2, - 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, - 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, - 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, - 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, - 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, - 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, - 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, - 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, - 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, - 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, - 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, - 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, - 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, - 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, - 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, - 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf2, 0x3bf1, - 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, - 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, - 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, - 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, - 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, - 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, - 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, - 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, - 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, - 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, - 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, - 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, - 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, - 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, - 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, - 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, 0x3bf1, - 0x3bf0, 0x3bf0, 0x3bf0, 0x3bf0, 0x3bf0, 0x3bf0, 0x3bf0, 0x3bf0, - 0x3bf0, 0x3bf0, 0x3bf0, 0x3bf0, 0x3bf0, 0x3bf0, 0x3bf0, 0x3bf0, - 0x3bf0, 0x3bf0, 0x3bf0, 0x3bf0, 0x3bf0, 0x3bf0, 0x3bf0, 0x3bf0, - 0x3bf0, 0x3bf0, 0x3bf0, 0x3bf0, 0x3bf0, 0x3bf0, 0x3bf0, 0x3bf0, - 0x3bf0, 0x3bf0, 0x3bf0, 0x3bf0, 0x3bf0, 0x3bf0, 0x3bf0, 0x3bf0, - 0x3bf0, 0x3bf0, 0x3bf0, 0x3bf0, 0x3bf0, 0x3bf0, 0x3bf0, 0x3bf0, - 0x3bf0, 0x3bf0, 0x3bf0, 0x3bf0, 0x3bf0, 0x3bf0, 0x3bf0, 0x3bf0, - 0x3bf0, 0x3bf0, 0x3bf0, 0x3bf0, 0x3bf0, 0x3bf0, 0x3bf0, 0x3bf0, - 0x3bf0, 0x3bf0, 0x3bf0, 0x3bf0, 0x3bf0, 0x3bf0, 0x3bf0, 0x3bf0, - 0x3bf0, 0x3bf0, 0x3bf0, 0x3bf0, 0x3bf0, 0x3bf0, 0x3bf0, 0x3bf0, - 0x3bf0, 0x3bf0, 0x3bf0, 0x3bf0, 0x3bf0, 0x3bf0, 0x3bf0, 0x3bf0, - 0x3bf0, 0x3bf0, 0x3bf0, 0x3bf0, 0x3bf0, 0x3bef, 0x3bef, 0x3bef, - 0x3bef, 0x3bef, 0x3bef, 0x3bef, 0x3bef, 0x3bef, 0x3bef, 0x3bef, - 0x3bef, 0x3bef, 0x3bef, 0x3bef, 0x3bef, 0x3bef, 0x3bef, 0x3bef, - 0x3bef, 0x3bef, 0x3bef, 0x3bef, 0x3bef, 0x3bef, 0x3bef, 0x3bef, - 0x3bef, 0x3bef, 0x3bef, 0x3bef, 0x3bef, 0x3bef, 0x3bef, 0x3bef, - 0x3bef, 0x3bef, 0x3bef, 0x3bef, 0x3bef, 0x3bef, 0x3bef, 0x3bef, - 0x3bef, 0x3bef, 0x3bef, 0x3bef, 0x3bef, 0x3bef, 0x3bef, 0x3bef, - 0x3bef, 0x3bef, 0x3bef, 0x3bef, 0x3bef, 0x3bef, 0x3bef, 0x3bef, - 0x3bef, 0x3bef, 0x3bef, 0x3bef, 0x3bef, 0x3bee, 0x3bee, 0x3bee, - 0x3bee, 0x3bee, 0x3bee, 0x3bee, 0x3bee, 0x3bee, 0x3bee, 0x3bee, - 0x3bee, 0x3bee, 0x3bee, 0x3bee, 0x3bee, 0x3bee, 0x3bee, 0x3bee, - 0x3bee, 0x3bee, 0x3bee, 0x3bee, 0x3bee, 0x3bee, 0x3bee, 0x3bee, - 0x3bee, 0x3bee, 0x3bee, 0x3bee, 0x3bee, 0x3bee, 0x3bee, 0x3bee, - 0x3bee, 0x3bee, 0x3bee, 0x3bee, 0x3bee, 0x3bee, 0x3bee, 0x3bee, - 0x3bee, 0x3bee, 0x3bee, 0x3bee, 0x3bee, 0x3bee, 0x3bee, 0x3bee, - 0x3bee, 0x3bee, 0x3bee, 0x3bee, 0x3bee, 0x3bee, 0x3bee, 0x3bee, - 0x3bee, 0x3bee, 0x3bee, 0x3bee, 0x3bee, 0x3bee, 0x3bed, 0x3bed, - 0x3bed, 0x3bed, 0x3bed, 0x3bed, 0x3bed, 0x3bed, 0x3bed, 0x3bed, - 0x3bed, 0x3bed, 0x3bed, 0x3bed, 0x3bed, 0x3bed, 0x3bed, 0x3bed, - 0x3bed, 0x3bed, 0x3bed, 0x3bed, 0x3bed, 0x3bed, 0x3bed, 0x3bed, - 0x3bed, 0x3bed, 0x3bed, 0x3bed, 0x3bed, 0x3bed, 0x3bed, 0x3bed, - 0x3bed, 0x3bed, 0x3bed, 0x3bed, 0x3bed, 0x3bed, 0x3bed, 0x3bed, - 0x3bed, 0x3bed, 0x3bed, 0x3bed, 0x3bed, 0x3bed, 0x3bed, 0x3bed, - 0x3bed, 0x3bed, 0x3bed, 0x3bed, 0x3bed, 0x3bed, 0x3bed, 0x3bed, - 0x3bed, 0x3bed, 0x3bed, 0x3bed, 0x3bed, 0x3bed, 0x3bec, 0x3bec, - 0x3bec, 0x3bec, 0x3bec, 0x3bec, 0x3bec, 0x3bec, 0x3bec, 0x3bec, - 0x3bec, 0x3bec, 0x3bec, 0x3bec, 0x3bec, 0x3bec, 0x3bec, 0x3bec, - 0x3bec, 0x3bec, 0x3bec, 0x3bec, 0x3bec, 0x3bec, 0x3bec, 0x3bec, - 0x3bec, 0x3bec, 0x3bec, 0x3bec, 0x3bec, 0x3bec, 0x3bec, 0x3bec, - 0x3bec, 0x3bec, 0x3bec, 0x3bec, 0x3bec, 0x3bec, 0x3bec, 0x3bec, - 0x3bec, 0x3bec, 0x3bec, 0x3bec, 0x3bec, 0x3bec, 0x3bec, 0x3bec, - 0x3bec, 0x3bec, 0x3bec, 0x3bec, 0x3bec, 0x3bec, 0x3bec, 0x3bec, - 0x3bec, 0x3bec, 0x3bec, 0x3bec, 0x3bec, 0x3bec, 0x3bec, 0x3beb, - 0x3beb, 0x3beb, 0x3beb, 0x3beb, 0x3beb, 0x3beb, 0x3beb, 0x3beb, - 0x3beb, 0x3beb, 0x3beb, 0x3beb, 0x3beb, 0x3beb, 0x3beb, 0x3beb, - 0x3beb, 0x3beb, 0x3beb, 0x3beb, 0x3beb, 0x3beb, 0x3beb, 0x3beb, - 0x3beb, 0x3beb, 0x3beb, 0x3beb, 0x3beb, 0x3beb, 0x3beb, 0x3beb, - 0x3beb, 0x3beb, 0x3beb, 0x3beb, 0x3beb, 0x3beb, 0x3beb, 0x3beb, - 0x3beb, 0x3beb, 0x3beb, 0x3beb, 0x3beb, 0x3beb, 0x3beb, 0x3beb, - 0x3beb, 0x3beb, 0x3beb, 0x3beb, 0x3beb, 0x3beb, 0x3beb, 0x3beb, - 0x3beb, 0x3beb, 0x3beb, 0x3beb, 0x3beb, 0x3beb, 0x3beb, 0x3beb, - 0x3bea, 0x3bea, 0x3bea, 0x3bea, 0x3bea, 0x3bea, 0x3bea, 0x3bea, - 0x3bea, 0x3bea, 0x3bea, 0x3bea, 0x3bea, 0x3bea, 0x3bea, 0x3bea, - 0x3bea, 0x3bea, 0x3bea, 0x3bea, 0x3bea, 0x3bea, 0x3bea, 0x3bea, - 0x3bea, 0x3bea, 0x3bea, 0x3bea, 0x3bea, 0x3bea, 0x3bea, 0x3bea, - 0x3bea, 0x3bea, 0x3bea, 0x3bea, 0x3bea, 0x3bea, 0x3bea, 0x3bea, - 0x3bea, 0x3bea, 0x3bea, 0x3bea, 0x3bea, 0x3bea, 0x3bea, 0x3bea, - 0x3bea, 0x3bea, 0x3bea, 0x3bea, 0x3bea, 0x3bea, 0x3bea, 0x3bea, - 0x3bea, 0x3bea, 0x3bea, 0x3bea, 0x3bea, 0x3bea, 0x3bea, 0x3bea, - 0x3be9, 0x3be9, 0x3be9, 0x3be9, 0x3be9, 0x3be9, 0x3be9, 0x3be9, - 0x3be9, 0x3be9, 0x3be9, 0x3be9, 0x3be9, 0x3be9, 0x3be9, 0x3be9, - 0x3be9, 0x3be9, 0x3be9, 0x3be9, 0x3be9, 0x3be9, 0x3be9, 0x3be9, - 0x3be9, 0x3be9, 0x3be9, 0x3be9, 0x3be9, 0x3be9, 0x3be9, 0x3be9, - 0x3be9, 0x3be9, 0x3be9, 0x3be9, 0x3be9, 0x3be9, 0x3be9, 0x3be9, - 0x3be9, 0x3be9, 0x3be9, 0x3be9, 0x3be9, 0x3be9, 0x3be9, 0x3be9, - 0x3be9, 0x3be9, 0x3be9, 0x3be9, 0x3be9, 0x3be9, 0x3be9, 0x3be9, - 0x3be9, 0x3be9, 0x3be9, 0x3be9, 0x3be9, 0x3be9, 0x3be9, 0x3be9, - 0x3be9, 0x3be8, 0x3be8, 0x3be8, 0x3be8, 0x3be8, 0x3be8, 0x3be8, - 0x3be8, 0x3be8, 0x3be8, 0x3be8, 0x3be8, 0x3be8, 0x3be8, 0x3be8, - 0x3be8, 0x3be8, 0x3be8, 0x3be8, 0x3be8, 0x3be8, 0x3be8, 0x3be8, - 0x3be8, 0x3be8, 0x3be8, 0x3be8, 0x3be8, 0x3be8, 0x3be8, 0x3be8, - 0x3be8, 0x3be8, 0x3be8, 0x3be8, 0x3be8, 0x3be8, 0x3be8, 0x3be8, - 0x3be8, 0x3be8, 0x3be8, 0x3be8, 0x3be8, 0x3be8, 0x3be8, 0x3be8, - 0x3be8, 0x3be8, 0x3be8, 0x3be8, 0x3be8, 0x3be8, 0x3be8, 0x3be8, - 0x3be8, 0x3be8, 0x3be8, 0x3be8, 0x3be8, 0x3be8, 0x3be8, 0x3be8, - 0x3be8, 0x3be8, 0x3be7, 0x3be7, 0x3be7, 0x3be7, 0x3be7, 0x3be7, - 0x3be7, 0x3be7, 0x3be7, 0x3be7, 0x3be7, 0x3be7, 0x3be7, 0x3be7, - 0x3be7, 0x3be7, 0x3be7, 0x3be7, 0x3be7, 0x3be7, 0x3be7, 0x3be7, - 0x3be7, 0x3be7, 0x3be7, 0x3be7, 0x3be7, 0x3be7, 0x3be7, 0x3be7, - 0x3be7, 0x3be7, 0x3be7, 0x3be7, 0x3be7, 0x3be7, 0x3be7, 0x3be7, - 0x3be7, 0x3be7, 0x3be7, 0x3be7, 0x3be7, 0x3be7, 0x3be7, 0x3be7, - 0x3be7, 0x3be7, 0x3be7, 0x3be7, 0x3be7, 0x3be7, 0x3be7, 0x3be7, - 0x3be7, 0x3be7, 0x3be7, 0x3be7, 0x3be7, 0x3be7, 0x3be7, 0x3be7, - 0x3be7, 0x3be7, 0x3be7, 0x3be6, 0x3be6, 0x3be6, 0x3be6, 0x3be6, - 0x3be6, 0x3be6, 0x3be6, 0x3be6, 0x3be6, 0x3be6, 0x3be6, 0x3be6, - 0x3be6, 0x3be6, 0x3be6, 0x3be6, 0x3be6, 0x3be6, 0x3be6, 0x3be6, - 0x3be6, 0x3be6, 0x3be6, 0x3be6, 0x3be6, 0x3be6, 0x3be6, 0x3be6, - 0x3be6, 0x3be6, 0x3be6, 0x3be6, 0x3be6, 0x3be6, 0x3be6, 0x3be6, - 0x3be6, 0x3be6, 0x3be6, 0x3be6, 0x3be6, 0x3be6, 0x3be6, 0x3be6, - 0x3be6, 0x3be6, 0x3be6, 0x3be6, 0x3be6, 0x3be6, 0x3be6, 0x3be6, - 0x3be6, 0x3be6, 0x3be6, 0x3be6, 0x3be6, 0x3be6, 0x3be6, 0x3be6, - 0x3be6, 0x3be6, 0x3be6, 0x3be6, 0x3be5, 0x3be5, 0x3be5, 0x3be5, - 0x3be5, 0x3be5, 0x3be5, 0x3be5, 0x3be5, 0x3be5, 0x3be5, 0x3be5, - 0x3be5, 0x3be5, 0x3be5, 0x3be5, 0x3be5, 0x3be5, 0x3be5, 0x3be5, - 0x3be5, 0x3be5, 0x3be5, 0x3be5, 0x3be5, 0x3be5, 0x3be5, 0x3be5, - 0x3be5, 0x3be5, 0x3be5, 0x3be5, 0x3be5, 0x3be5, 0x3be5, 0x3be5, - 0x3be5, 0x3be5, 0x3be5, 0x3be5, 0x3be5, 0x3be5, 0x3be5, 0x3be5, - 0x3be5, 0x3be5, 0x3be5, 0x3be5, 0x3be5, 0x3be5, 0x3be5, 0x3be5, - 0x3be5, 0x3be5, 0x3be5, 0x3be5, 0x3be5, 0x3be5, 0x3be5, 0x3be5, - 0x3be5, 0x3be5, 0x3be5, 0x3be5, 0x3be4, 0x3be4, 0x3be4, 0x3be4, - 0x3be4, 0x3be4, 0x3be4, 0x3be4, 0x3be4, 0x3be4, 0x3be4, 0x3be4, - 0x3be4, 0x3be4, 0x3be4, 0x3be4, 0x3be4, 0x3be4, 0x3be4, 0x3be4, - 0x3be4, 0x3be4, 0x3be4, 0x3be4, 0x3be4, 0x3be4, 0x3be4, 0x3be4, - 0x3be4, 0x3be4, 0x3be4, 0x3be4, 0x3be4, 0x3be4, 0x3be4, 0x3be4, - 0x3be4, 0x3be4, 0x3be4, 0x3be4, 0x3be4, 0x3be4, 0x3be4, 0x3be4, - 0x3be4, 0x3be4, 0x3be4, 0x3be4, 0x3be4, 0x3be4, 0x3be4, 0x3be4, - 0x3be4, 0x3be4, 0x3be4, 0x3be4, 0x3be4, 0x3be4, 0x3be4, 0x3be4, - 0x3be4, 0x3be4, 0x3be4, 0x3be4, 0x3be4, 0x3be3, 0x3be3, 0x3be3, - 0x3be3, 0x3be3, 0x3be3, 0x3be3, 0x3be3, 0x3be3, 0x3be3, 0x3be3, - 0x3be3, 0x3be3, 0x3be3, 0x3be3, 0x3be3, 0x3be3, 0x3be3, 0x3be3, - 0x3be3, 0x3be3, 0x3be3, 0x3be3, 0x3be3, 0x3be3, 0x3be3, 0x3be3, - 0x3be3, 0x3be3, 0x3be3, 0x3be3, 0x3be3, 0x3be3, 0x3be3, 0x3be3, - 0x3be3, 0x3be3, 0x3be3, 0x3be3, 0x3be3, 0x3be3, 0x3be3, 0x3be3, - 0x3be3, 0x3be3, 0x3be3, 0x3be3, 0x3be3, 0x3be3, 0x3be3, 0x3be3, - 0x3be3, 0x3be3, 0x3be3, 0x3be3, 0x3be3, 0x3be3, 0x3be3, 0x3be3, - 0x3be3, 0x3be3, 0x3be3, 0x3be3, 0x3be3, 0x3be3, 0x3be2, 0x3be2, - 0x3be2, 0x3be2, 0x3be2, 0x3be2, 0x3be2, 0x3be2, 0x3be2, 0x3be2, - 0x3be2, 0x3be2, 0x3be2, 0x3be2, 0x3be2, 0x3be2, 0x3be2, 0x3be2, - 0x3be2, 0x3be2, 0x3be2, 0x3be2, 0x3be2, 0x3be2, 0x3be2, 0x3be2, - 0x3be2, 0x3be2, 0x3be2, 0x3be2, 0x3be2, 0x3be2, 0x3be2, 0x3be2, - 0x3be2, 0x3be2, 0x3be2, 0x3be2, 0x3be2, 0x3be2, 0x3be2, 0x3be2, - 0x3be2, 0x3be2, 0x3be2, 0x3be2, 0x3be2, 0x3be2, 0x3be2, 0x3be2, - 0x3be2, 0x3be2, 0x3be2, 0x3be2, 0x3be2, 0x3be2, 0x3be2, 0x3be2, - 0x3be2, 0x3be2, 0x3be2, 0x3be2, 0x3be2, 0x3be2, 0x3be2, 0x3be1, - 0x3be1, 0x3be1, 0x3be1, 0x3be1, 0x3be1, 0x3be1, 0x3be1, 0x3be1, - 0x3be1, 0x3be1, 0x3be1, 0x3be1, 0x3be1, 0x3be1, 0x3be1, 0x3be1, - 0x3be1, 0x3be1, 0x3be1, 0x3be1, 0x3be1, 0x3be1, 0x3be1, 0x3be1, - 0x3be1, 0x3be1, 0x3be1, 0x3be1, 0x3be1, 0x3be1, 0x3be1, 0x3be1, - 0x3be1, 0x3be1, 0x3be1, 0x3be1, 0x3be1, 0x3be1, 0x3be1, 0x3be1, - 0x3be1, 0x3be1, 0x3be1, 0x3be1, 0x3be1, 0x3be1, 0x3be1, 0x3be1, - 0x3be1, 0x3be1, 0x3be1, 0x3be1, 0x3be1, 0x3be1, 0x3be1, 0x3be1, - 0x3be1, 0x3be1, 0x3be1, 0x3be1, 0x3be1, 0x3be1, 0x3be1, 0x3be1, - 0x3be0, 0x3be0, 0x3be0, 0x3be0, 0x3be0, 0x3be0, 0x3be0, 0x3be0, - 0x3be0, 0x3be0, 0x3be0, 0x3be0, 0x3be0, 0x3be0, 0x3be0, 0x3be0, - 0x3be0, 0x3be0, 0x3be0, 0x3be0, 0x3be0, 0x3be0, 0x3be0, 0x3be0, - 0x3be0, 0x3be0, 0x3be0, 0x3be0, 0x3be0, 0x3be0, 0x3be0, 0x3be0, - 0x3be0, 0x3be0, 0x3be0, 0x3be0, 0x3be0, 0x3be0, 0x3be0, 0x3be0, - 0x3be0, 0x3bdf, 0x3bdf, 0x3bdf, 0x3bdf, 0x3bdf, 0x3bdf, 0x3bdf, - 0x3bdf, 0x3bdf, 0x3bdf, 0x3bdf, 0x3bdf, 0x3bdf, 0x3bdf, 0x3bdf, - 0x3bdf, 0x3bdf, 0x3bdf, 0x3bdf, 0x3bdf, 0x3bdf, 0x3bdf, 0x3bdf, - 0x3bdf, 0x3bdf, 0x3bdf, 0x3bdf, 0x3bdf, 0x3bdf, 0x3bdf, 0x3bdf, - 0x3bdf, 0x3bde, 0x3bde, 0x3bde, 0x3bde, 0x3bde, 0x3bde, 0x3bde, - 0x3bde, 0x3bde, 0x3bde, 0x3bde, 0x3bde, 0x3bde, 0x3bde, 0x3bde, - 0x3bde, 0x3bde, 0x3bde, 0x3bde, 0x3bde, 0x3bde, 0x3bde, 0x3bde, - 0x3bde, 0x3bde, 0x3bde, 0x3bde, 0x3bde, 0x3bde, 0x3bde, 0x3bde, - 0x3bde, 0x3bde, 0x3bdd, 0x3bdd, 0x3bdd, 0x3bdd, 0x3bdd, 0x3bdd, - 0x3bdd, 0x3bdd, 0x3bdd, 0x3bdd, 0x3bdd, 0x3bdd, 0x3bdd, 0x3bdd, - 0x3bdd, 0x3bdd, 0x3bdd, 0x3bdd, 0x3bdd, 0x3bdd, 0x3bdd, 0x3bdd, - 0x3bdd, 0x3bdd, 0x3bdd, 0x3bdd, 0x3bdd, 0x3bdd, 0x3bdd, 0x3bdd, - 0x3bdd, 0x3bdd, 0x3bdc, 0x3bdc, 0x3bdc, 0x3bdc, 0x3bdc, 0x3bdc, - 0x3bdc, 0x3bdc, 0x3bdc, 0x3bdc, 0x3bdc, 0x3bdc, 0x3bdc, 0x3bdc, - 0x3bdc, 0x3bdc, 0x3bdc, 0x3bdc, 0x3bdc, 0x3bdc, 0x3bdc, 0x3bdc, - 0x3bdc, 0x3bdc, 0x3bdc, 0x3bdc, 0x3bdc, 0x3bdc, 0x3bdc, 0x3bdc, - 0x3bdc, 0x3bdc, 0x3bdc, 0x3bdb, 0x3bdb, 0x3bdb, 0x3bdb, 0x3bdb, - 0x3bdb, 0x3bdb, 0x3bdb, 0x3bdb, 0x3bdb, 0x3bdb, 0x3bdb, 0x3bdb, - 0x3bdb, 0x3bdb, 0x3bdb, 0x3bdb, 0x3bdb, 0x3bdb, 0x3bdb, 0x3bdb, - 0x3bdb, 0x3bdb, 0x3bdb, 0x3bdb, 0x3bdb, 0x3bdb, 0x3bdb, 0x3bdb, - 0x3bdb, 0x3bdb, 0x3bdb, 0x3bdb, 0x3bda, 0x3bda, 0x3bda, 0x3bda, - 0x3bda, 0x3bda, 0x3bda, 0x3bda, 0x3bda, 0x3bda, 0x3bda, 0x3bda, - 0x3bda, 0x3bda, 0x3bda, 0x3bda, 0x3bda, 0x3bda, 0x3bda, 0x3bda, - 0x3bda, 0x3bda, 0x3bda, 0x3bda, 0x3bda, 0x3bda, 0x3bda, 0x3bda, - 0x3bda, 0x3bda, 0x3bda, 0x3bda, 0x3bd9, 0x3bd9, 0x3bd9, 0x3bd9, - 0x3bd9, 0x3bd9, 0x3bd9, 0x3bd9, 0x3bd9, 0x3bd9, 0x3bd9, 0x3bd9, - 0x3bd9, 0x3bd9, 0x3bd9, 0x3bd9, 0x3bd9, 0x3bd9, 0x3bd9, 0x3bd9, - 0x3bd9, 0x3bd9, 0x3bd9, 0x3bd9, 0x3bd9, 0x3bd9, 0x3bd9, 0x3bd9, - 0x3bd9, 0x3bd9, 0x3bd9, 0x3bd9, 0x3bd9, 0x3bd8, 0x3bd8, 0x3bd8, - 0x3bd8, 0x3bd8, 0x3bd8, 0x3bd8, 0x3bd8, 0x3bd8, 0x3bd8, 0x3bd8, - 0x3bd8, 0x3bd8, 0x3bd8, 0x3bd8, 0x3bd8, 0x3bd8, 0x3bd8, 0x3bd8, - 0x3bd8, 0x3bd8, 0x3bd8, 0x3bd8, 0x3bd8, 0x3bd8, 0x3bd8, 0x3bd8, - 0x3bd8, 0x3bd8, 0x3bd8, 0x3bd8, 0x3bd8, 0x3bd7, 0x3bd7, 0x3bd7, - 0x3bd7, 0x3bd7, 0x3bd7, 0x3bd7, 0x3bd7, 0x3bd7, 0x3bd7, 0x3bd7, - 0x3bd7, 0x3bd7, 0x3bd7, 0x3bd7, 0x3bd7, 0x3bd7, 0x3bd7, 0x3bd7, - 0x3bd7, 0x3bd7, 0x3bd7, 0x3bd7, 0x3bd7, 0x3bd7, 0x3bd7, 0x3bd7, - 0x3bd7, 0x3bd7, 0x3bd7, 0x3bd7, 0x3bd7, 0x3bd7, 0x3bd6, 0x3bd6, - 0x3bd6, 0x3bd6, 0x3bd6, 0x3bd6, 0x3bd6, 0x3bd6, 0x3bd6, 0x3bd6, - 0x3bd6, 0x3bd6, 0x3bd6, 0x3bd6, 0x3bd6, 0x3bd6, 0x3bd6, 0x3bd6, - 0x3bd6, 0x3bd6, 0x3bd6, 0x3bd6, 0x3bd6, 0x3bd6, 0x3bd6, 0x3bd6, - 0x3bd6, 0x3bd6, 0x3bd6, 0x3bd6, 0x3bd6, 0x3bd6, 0x3bd6, 0x3bd5, - 0x3bd5, 0x3bd5, 0x3bd5, 0x3bd5, 0x3bd5, 0x3bd5, 0x3bd5, 0x3bd5, - 0x3bd5, 0x3bd5, 0x3bd5, 0x3bd5, 0x3bd5, 0x3bd5, 0x3bd5, 0x3bd5, - 0x3bd5, 0x3bd5, 0x3bd5, 0x3bd5, 0x3bd5, 0x3bd5, 0x3bd5, 0x3bd5, - 0x3bd5, 0x3bd5, 0x3bd5, 0x3bd5, 0x3bd5, 0x3bd5, 0x3bd5, 0x3bd4, - 0x3bd4, 0x3bd4, 0x3bd4, 0x3bd4, 0x3bd4, 0x3bd4, 0x3bd4, 0x3bd4, - 0x3bd4, 0x3bd4, 0x3bd4, 0x3bd4, 0x3bd4, 0x3bd4, 0x3bd4, 0x3bd4, - 0x3bd4, 0x3bd4, 0x3bd4, 0x3bd4, 0x3bd4, 0x3bd4, 0x3bd4, 0x3bd4, - 0x3bd4, 0x3bd4, 0x3bd4, 0x3bd4, 0x3bd4, 0x3bd4, 0x3bd4, 0x3bd4, - 0x3bd3, 0x3bd3, 0x3bd3, 0x3bd3, 0x3bd3, 0x3bd3, 0x3bd3, 0x3bd3, - 0x3bd3, 0x3bd3, 0x3bd3, 0x3bd3, 0x3bd3, 0x3bd3, 0x3bd3, 0x3bd3, - 0x3bd3, 0x3bd3, 0x3bd3, 0x3bd3, 0x3bd3, 0x3bd3, 0x3bd3, 0x3bd3, - 0x3bd3, 0x3bd3, 0x3bd3, 0x3bd3, 0x3bd3, 0x3bd3, 0x3bd3, 0x3bd3, - 0x3bd3, 0x3bd2, 0x3bd2, 0x3bd2, 0x3bd2, 0x3bd2, 0x3bd2, 0x3bd2, - 0x3bd2, 0x3bd2, 0x3bd2, 0x3bd2, 0x3bd2, 0x3bd2, 0x3bd2, 0x3bd2, - 0x3bd2, 0x3bd2, 0x3bd2, 0x3bd2, 0x3bd2, 0x3bd2, 0x3bd2, 0x3bd2, - 0x3bd2, 0x3bd2, 0x3bd2, 0x3bd2, 0x3bd2, 0x3bd2, 0x3bd2, 0x3bd2, - 0x3bd2, 0x3bd2, 0x3bd1, 0x3bd1, 0x3bd1, 0x3bd1, 0x3bd1, 0x3bd1, - 0x3bd1, 0x3bd1, 0x3bd1, 0x3bd1, 0x3bd1, 0x3bd1, 0x3bd1, 0x3bd1, - 0x3bd1, 0x3bd1, 0x3bd1, 0x3bd1, 0x3bd1, 0x3bd1, 0x3bd1, 0x3bd1, - 0x3bd1, 0x3bd1, 0x3bd1, 0x3bd1, 0x3bd1, 0x3bd1, 0x3bd1, 0x3bd1, - 0x3bd1, 0x3bd1, 0x3bd0, 0x3bd0, 0x3bd0, 0x3bd0, 0x3bd0, 0x3bd0, - 0x3bd0, 0x3bd0, 0x3bd0, 0x3bd0, 0x3bd0, 0x3bd0, 0x3bd0, 0x3bd0, - 0x3bd0, 0x3bd0, 0x3bd0, 0x3bd0, 0x3bd0, 0x3bd0, 0x3bd0, 0x3bd0, - 0x3bd0, 0x3bd0, 0x3bd0, 0x3bd0, 0x3bd0, 0x3bd0, 0x3bd0, 0x3bd0, - 0x3bd0, 0x3bd0, 0x3bd0, 0x3bcf, 0x3bcf, 0x3bcf, 0x3bcf, 0x3bcf, - 0x3bcf, 0x3bcf, 0x3bcf, 0x3bcf, 0x3bcf, 0x3bcf, 0x3bcf, 0x3bcf, - 0x3bcf, 0x3bcf, 0x3bcf, 0x3bcf, 0x3bcf, 0x3bcf, 0x3bcf, 0x3bcf, - 0x3bcf, 0x3bcf, 0x3bcf, 0x3bcf, 0x3bcf, 0x3bcf, 0x3bcf, 0x3bcf, - 0x3bcf, 0x3bcf, 0x3bcf, 0x3bcf, 0x3bce, 0x3bce, 0x3bce, 0x3bce, - 0x3bce, 0x3bce, 0x3bce, 0x3bce, 0x3bce, 0x3bce, 0x3bce, 0x3bce, - 0x3bce, 0x3bce, 0x3bce, 0x3bce, 0x3bce, 0x3bce, 0x3bce, 0x3bce, - 0x3bce, 0x3bce, 0x3bce, 0x3bce, 0x3bce, 0x3bce, 0x3bce, 0x3bce, - 0x3bce, 0x3bce, 0x3bce, 0x3bce, 0x3bce, 0x3bcd, 0x3bcd, 0x3bcd, - 0x3bcd, 0x3bcd, 0x3bcd, 0x3bcd, 0x3bcd, 0x3bcd, 0x3bcd, 0x3bcd, - 0x3bcd, 0x3bcd, 0x3bcd, 0x3bcd, 0x3bcd, 0x3bcd, 0x3bcd, 0x3bcd, - 0x3bcd, 0x3bcd, 0x3bcd, 0x3bcd, 0x3bcd, 0x3bcd, 0x3bcd, 0x3bcd, - 0x3bcd, 0x3bcd, 0x3bcd, 0x3bcd, 0x3bcd, 0x3bcd, 0x3bcc, 0x3bcc, - 0x3bcc, 0x3bcc, 0x3bcc, 0x3bcc, 0x3bcc, 0x3bcc, 0x3bcc, 0x3bcc, - 0x3bcc, 0x3bcc, 0x3bcc, 0x3bcc, 0x3bcc, 0x3bcc, 0x3bcc, 0x3bcc, - 0x3bcc, 0x3bcc, 0x3bcc, 0x3bcc, 0x3bcc, 0x3bcc, 0x3bcc, 0x3bcc, - 0x3bcc, 0x3bcc, 0x3bcc, 0x3bcc, 0x3bcc, 0x3bcc, 0x3bcb, 0x3bcb, - 0x3bcb, 0x3bcb, 0x3bcb, 0x3bcb, 0x3bcb, 0x3bcb, 0x3bcb, 0x3bcb, - 0x3bcb, 0x3bcb, 0x3bcb, 0x3bcb, 0x3bcb, 0x3bcb, 0x3bcb, 0x3bcb, - 0x3bcb, 0x3bcb, 0x3bcb, 0x3bcb, 0x3bcb, 0x3bcb, 0x3bcb, 0x3bcb, - 0x3bcb, 0x3bcb, 0x3bcb, 0x3bcb, 0x3bcb, 0x3bcb, 0x3bcb, 0x3bca, - 0x3bca, 0x3bca, 0x3bca, 0x3bca, 0x3bca, 0x3bca, 0x3bca, 0x3bca, - 0x3bca, 0x3bca, 0x3bca, 0x3bca, 0x3bca, 0x3bca, 0x3bca, 0x3bca, - 0x3bca, 0x3bca, 0x3bca, 0x3bca, 0x3bca, 0x3bca, 0x3bca, 0x3bca, - 0x3bca, 0x3bca, 0x3bca, 0x3bca, 0x3bca, 0x3bca, 0x3bca, 0x3bca, - 0x3bc9, 0x3bc9, 0x3bc9, 0x3bc9, 0x3bc9, 0x3bc9, 0x3bc9, 0x3bc9, - 0x3bc9, 0x3bc9, 0x3bc9, 0x3bc9, 0x3bc9, 0x3bc9, 0x3bc9, 0x3bc9, - 0x3bc9, 0x3bc9, 0x3bc9, 0x3bc9, 0x3bc9, 0x3bc9, 0x3bc9, 0x3bc9, - 0x3bc9, 0x3bc9, 0x3bc9, 0x3bc9, 0x3bc9, 0x3bc9, 0x3bc9, 0x3bc9, - 0x3bc9, 0x3bc8, 0x3bc8, 0x3bc8, 0x3bc8, 0x3bc8, 0x3bc8, 0x3bc8, - 0x3bc8, 0x3bc8, 0x3bc8, 0x3bc8, 0x3bc8, 0x3bc8, 0x3bc8, 0x3bc8, - 0x3bc8, 0x3bc8, 0x3bc8, 0x3bc8, 0x3bc8, 0x3bc8, 0x3bc8, 0x3bc8, - 0x3bc8, 0x3bc8, 0x3bc8, 0x3bc8, 0x3bc8, 0x3bc8, 0x3bc8, 0x3bc8, - 0x3bc8, 0x3bc8, 0x3bc7, 0x3bc7, 0x3bc7, 0x3bc7, 0x3bc7, 0x3bc7, - 0x3bc7, 0x3bc7, 0x3bc7, 0x3bc7, 0x3bc7, 0x3bc7, 0x3bc7, 0x3bc7, - 0x3bc7, 0x3bc7, 0x3bc7, 0x3bc7, 0x3bc7, 0x3bc7, 0x3bc7, 0x3bc7, - 0x3bc7, 0x3bc7, 0x3bc7, 0x3bc7, 0x3bc7, 0x3bc7, 0x3bc7, 0x3bc7, - 0x3bc7, 0x3bc7, 0x3bc7, 0x3bc6, 0x3bc6, 0x3bc6, 0x3bc6, 0x3bc6, - 0x3bc6, 0x3bc6, 0x3bc6, 0x3bc6, 0x3bc6, 0x3bc6, 0x3bc6, 0x3bc6, - 0x3bc6, 0x3bc6, 0x3bc6, 0x3bc6, 0x3bc6, 0x3bc6, 0x3bc6, 0x3bc6, - 0x3bc6, 0x3bc6, 0x3bc6, 0x3bc6, 0x3bc6, 0x3bc6, 0x3bc6, 0x3bc6, - 0x3bc6, 0x3bc6, 0x3bc6, 0x3bc6, 0x3bc5, 0x3bc5, 0x3bc5, 0x3bc5, - 0x3bc5, 0x3bc5, 0x3bc5, 0x3bc5, 0x3bc5, 0x3bc5, 0x3bc5, 0x3bc5, - 0x3bc5, 0x3bc5, 0x3bc5, 0x3bc5, 0x3bc5, 0x3bc5, 0x3bc5, 0x3bc5, - 0x3bc5, 0x3bc5, 0x3bc5, 0x3bc5, 0x3bc5, 0x3bc5, 0x3bc5, 0x3bc5, - 0x3bc5, 0x3bc5, 0x3bc5, 0x3bc5, 0x3bc5, 0x3bc4, 0x3bc4, 0x3bc4, - 0x3bc4, 0x3bc4, 0x3bc4, 0x3bc4, 0x3bc4, 0x3bc4, 0x3bc4, 0x3bc4, - 0x3bc4, 0x3bc4, 0x3bc4, 0x3bc4, 0x3bc4, 0x3bc4, 0x3bc4, 0x3bc4, - 0x3bc4, 0x3bc4, 0x3bc4, 0x3bc4, 0x3bc4, 0x3bc4, 0x3bc4, 0x3bc4, - 0x3bc4, 0x3bc4, 0x3bc4, 0x3bc4, 0x3bc4, 0x3bc4, 0x3bc3, 0x3bc3, - 0x3bc3, 0x3bc3, 0x3bc3, 0x3bc3, 0x3bc3, 0x3bc3, 0x3bc3, 0x3bc3, - 0x3bc3, 0x3bc3, 0x3bc3, 0x3bc3, 0x3bc3, 0x3bc3, 0x3bc3, 0x3bc3, - 0x3bc3, 0x3bc3, 0x3bc3, 0x3bc3, 0x3bc3, 0x3bc3, 0x3bc3, 0x3bc3, - 0x3bc3, 0x3bc3, 0x3bc3, 0x3bc3, 0x3bc3, 0x3bc3, 0x3bc3, 0x3bc2, - 0x3bc2, 0x3bc2, 0x3bc2, 0x3bc2, 0x3bc2, 0x3bc2, 0x3bc2, 0x3bc2, - 0x3bc2, 0x3bc2, 0x3bc2, 0x3bc2, 0x3bc2, 0x3bc2, 0x3bc2, 0x3bc2, - 0x3bc2, 0x3bc2, 0x3bc2, 0x3bc2, 0x3bc2, 0x3bc2, 0x3bc2, 0x3bc2, - 0x3bc2, 0x3bc2, 0x3bc2, 0x3bc2, 0x3bc2, 0x3bc2, 0x3bc2, 0x3bc2, - 0x3bc1, 0x3bc1, 0x3bc1, 0x3bc1, 0x3bc1, 0x3bc1, 0x3bc1, 0x3bc1, - 0x3bc1, 0x3bc1, 0x3bc1, 0x3bc1, 0x3bc1, 0x3bc1, 0x3bc1, 0x3bc1, - 0x3bc1, 0x3bc1, 0x3bc1, 0x3bc1, 0x3bc1, 0x3bc1, 0x3bc1, 0x3bc1, - 0x3bc1, 0x3bc0, 0x3bc0, 0x3bc0, 0x3bc0, 0x3bc0, 0x3bc0, 0x3bc0, - 0x3bc0, 0x3bc0, 0x3bc0, 0x3bc0, 0x3bc0, 0x3bc0, 0x3bc0, 0x3bc0, - 0x3bc0, 0x3bbf, 0x3bbf, 0x3bbf, 0x3bbf, 0x3bbf, 0x3bbf, 0x3bbf, - 0x3bbf, 0x3bbf, 0x3bbf, 0x3bbf, 0x3bbf, 0x3bbf, 0x3bbf, 0x3bbf, - 0x3bbf, 0x3bbf, 0x3bbe, 0x3bbe, 0x3bbe, 0x3bbe, 0x3bbe, 0x3bbe, - 0x3bbe, 0x3bbe, 0x3bbe, 0x3bbe, 0x3bbe, 0x3bbe, 0x3bbe, 0x3bbe, - 0x3bbe, 0x3bbe, 0x3bbd, 0x3bbd, 0x3bbd, 0x3bbd, 0x3bbd, 0x3bbd, - 0x3bbd, 0x3bbd, 0x3bbd, 0x3bbd, 0x3bbd, 0x3bbd, 0x3bbd, 0x3bbd, - 0x3bbd, 0x3bbd, 0x3bbd, 0x3bbc, 0x3bbc, 0x3bbc, 0x3bbc, 0x3bbc, - 0x3bbc, 0x3bbc, 0x3bbc, 0x3bbc, 0x3bbc, 0x3bbc, 0x3bbc, 0x3bbc, - 0x3bbc, 0x3bbc, 0x3bbc, 0x3bbb, 0x3bbb, 0x3bbb, 0x3bbb, 0x3bbb, - 0x3bbb, 0x3bbb, 0x3bbb, 0x3bbb, 0x3bbb, 0x3bbb, 0x3bbb, 0x3bbb, - 0x3bbb, 0x3bbb, 0x3bbb, 0x3bbb, 0x3bba, 0x3bba, 0x3bba, 0x3bba, - 0x3bba, 0x3bba, 0x3bba, 0x3bba, 0x3bba, 0x3bba, 0x3bba, 0x3bba, - 0x3bba, 0x3bba, 0x3bba, 0x3bba, 0x3bb9, 0x3bb9, 0x3bb9, 0x3bb9, - 0x3bb9, 0x3bb9, 0x3bb9, 0x3bb9, 0x3bb9, 0x3bb9, 0x3bb9, 0x3bb9, - 0x3bb9, 0x3bb9, 0x3bb9, 0x3bb9, 0x3bb9, 0x3bb8, 0x3bb8, 0x3bb8, - 0x3bb8, 0x3bb8, 0x3bb8, 0x3bb8, 0x3bb8, 0x3bb8, 0x3bb8, 0x3bb8, - 0x3bb8, 0x3bb8, 0x3bb8, 0x3bb8, 0x3bb8, 0x3bb8, 0x3bb7, 0x3bb7, - 0x3bb7, 0x3bb7, 0x3bb7, 0x3bb7, 0x3bb7, 0x3bb7, 0x3bb7, 0x3bb7, - 0x3bb7, 0x3bb7, 0x3bb7, 0x3bb7, 0x3bb7, 0x3bb7, 0x3bb6, 0x3bb6, - 0x3bb6, 0x3bb6, 0x3bb6, 0x3bb6, 0x3bb6, 0x3bb6, 0x3bb6, 0x3bb6, - 0x3bb6, 0x3bb6, 0x3bb6, 0x3bb6, 0x3bb6, 0x3bb6, 0x3bb6, 0x3bb5, - 0x3bb5, 0x3bb5, 0x3bb5, 0x3bb5, 0x3bb5, 0x3bb5, 0x3bb5, 0x3bb5, - 0x3bb5, 0x3bb5, 0x3bb5, 0x3bb5, 0x3bb5, 0x3bb5, 0x3bb5, 0x3bb4, - 0x3bb4, 0x3bb4, 0x3bb4, 0x3bb4, 0x3bb4, 0x3bb4, 0x3bb4, 0x3bb4, - 0x3bb4, 0x3bb4, 0x3bb4, 0x3bb4, 0x3bb4, 0x3bb4, 0x3bb4, 0x3bb4, - 0x3bb3, 0x3bb3, 0x3bb3, 0x3bb3, 0x3bb3, 0x3bb3, 0x3bb3, 0x3bb3, - 0x3bb3, 0x3bb3, 0x3bb3, 0x3bb3, 0x3bb3, 0x3bb3, 0x3bb3, 0x3bb3, - 0x3bb3, 0x3bb2, 0x3bb2, 0x3bb2, 0x3bb2, 0x3bb2, 0x3bb2, 0x3bb2, - 0x3bb2, 0x3bb2, 0x3bb2, 0x3bb2, 0x3bb2, 0x3bb2, 0x3bb2, 0x3bb2, - 0x3bb2, 0x3bb1, 0x3bb1, 0x3bb1, 0x3bb1, 0x3bb1, 0x3bb1, 0x3bb1, - 0x3bb1, 0x3bb1, 0x3bb1, 0x3bb1, 0x3bb1, 0x3bb1, 0x3bb1, 0x3bb1, - 0x3bb1, 0x3bb1, 0x3bb0, 0x3bb0, 0x3bb0, 0x3bb0, 0x3bb0, 0x3bb0, - 0x3bb0, 0x3bb0, 0x3bb0, 0x3bb0, 0x3bb0, 0x3bb0, 0x3bb0, 0x3bb0, - 0x3bb0, 0x3bb0, 0x3baf, 0x3baf, 0x3baf, 0x3baf, 0x3baf, 0x3baf, - 0x3baf, 0x3baf, 0x3baf, 0x3baf, 0x3baf, 0x3baf, 0x3baf, 0x3baf, - 0x3baf, 0x3baf, 0x3baf, 0x3bae, 0x3bae, 0x3bae, 0x3bae, 0x3bae, - 0x3bae, 0x3bae, 0x3bae, 0x3bae, 0x3bae, 0x3bae, 0x3bae, 0x3bae, - 0x3bae, 0x3bae, 0x3bae, 0x3bae, 0x3bad, 0x3bad, 0x3bad, 0x3bad, - 0x3bad, 0x3bad, 0x3bad, 0x3bad, 0x3bad, 0x3bad, 0x3bad, 0x3bad, - 0x3bad, 0x3bad, 0x3bad, 0x3bad, 0x3bac, 0x3bac, 0x3bac, 0x3bac, - 0x3bac, 0x3bac, 0x3bac, 0x3bac, 0x3bac, 0x3bac, 0x3bac, 0x3bac, - 0x3bac, 0x3bac, 0x3bac, 0x3bac, 0x3bac, 0x3bab, 0x3bab, 0x3bab, - 0x3bab, 0x3bab, 0x3bab, 0x3bab, 0x3bab, 0x3bab, 0x3bab, 0x3bab, - 0x3bab, 0x3bab, 0x3bab, 0x3bab, 0x3bab, 0x3bab, 0x3baa, 0x3baa, - 0x3baa, 0x3baa, 0x3baa, 0x3baa, 0x3baa, 0x3baa, 0x3baa, 0x3baa, - 0x3baa, 0x3baa, 0x3baa, 0x3baa, 0x3baa, 0x3baa, 0x3baa, 0x3ba9, - 0x3ba9, 0x3ba9, 0x3ba9, 0x3ba9, 0x3ba9, 0x3ba9, 0x3ba9, 0x3ba9, - 0x3ba9, 0x3ba9, 0x3ba9, 0x3ba9, 0x3ba9, 0x3ba9, 0x3ba9, 0x3ba8, - 0x3ba8, 0x3ba8, 0x3ba8, 0x3ba8, 0x3ba8, 0x3ba8, 0x3ba8, 0x3ba8, - 0x3ba8, 0x3ba8, 0x3ba8, 0x3ba8, 0x3ba8, 0x3ba8, 0x3ba8, 0x3ba8, - 0x3ba7, 0x3ba7, 0x3ba7, 0x3ba7, 0x3ba7, 0x3ba7, 0x3ba7, 0x3ba7, - 0x3ba7, 0x3ba7, 0x3ba7, 0x3ba7, 0x3ba7, 0x3ba7, 0x3ba7, 0x3ba7, - 0x3ba7, 0x3ba6, 0x3ba6, 0x3ba6, 0x3ba6, 0x3ba6, 0x3ba6, 0x3ba6, - 0x3ba6, 0x3ba6, 0x3ba6, 0x3ba6, 0x3ba6, 0x3ba6, 0x3ba6, 0x3ba6, - 0x3ba6, 0x3ba5, 0x3ba5, 0x3ba5, 0x3ba5, 0x3ba5, 0x3ba5, 0x3ba5, - 0x3ba5, 0x3ba5, 0x3ba5, 0x3ba5, 0x3ba5, 0x3ba5, 0x3ba5, 0x3ba5, - 0x3ba5, 0x3ba5, 0x3ba4, 0x3ba4, 0x3ba4, 0x3ba4, 0x3ba4, 0x3ba4, - 0x3ba4, 0x3ba4, 0x3ba4, 0x3ba4, 0x3ba4, 0x3ba4, 0x3ba4, 0x3ba4, - 0x3ba4, 0x3ba4, 0x3ba4, 0x3ba3, 0x3ba3, 0x3ba3, 0x3ba3, 0x3ba3, - 0x3ba3, 0x3ba3, 0x3ba3, 0x3ba3, 0x3ba3, 0x3ba3, 0x3ba3, 0x3ba3, - 0x3ba3, 0x3ba3, 0x3ba3, 0x3ba3, 0x3ba2, 0x3ba2, 0x3ba2, 0x3ba2, - 0x3ba2, 0x3ba2, 0x3ba2, 0x3ba2, 0x3ba2, 0x3ba2, 0x3ba2, 0x3ba2, - 0x3ba2, 0x3ba2, 0x3ba2, 0x3ba2, 0x3ba1, 0x3ba1, 0x3ba1, 0x3ba1, - 0x3ba1, 0x3ba1, 0x3ba1, 0x3ba1, 0x3ba1, 0x3ba1, 0x3ba1, 0x3ba1, - 0x3ba1, 0x3ba1, 0x3ba1, 0x3ba1, 0x3ba1, 0x3ba0, 0x3ba0, 0x3ba0, - 0x3ba0, 0x3ba0, 0x3ba0, 0x3ba0, 0x3ba0, 0x3ba0, 0x3ba0, 0x3ba0, - 0x3ba0, 0x3ba0, 0x3ba0, 0x3ba0, 0x3ba0, 0x3ba0, 0x3b9f, 0x3b9f, - 0x3b9f, 0x3b9f, 0x3b9f, 0x3b9f, 0x3b9f, 0x3b9f, 0x3b9f, 0x3b9f, - 0x3b9f, 0x3b9f, 0x3b9f, 0x3b9f, 0x3b9f, 0x3b9f, 0x3b9f, 0x3b9e, - 0x3b9e, 0x3b9e, 0x3b9e, 0x3b9e, 0x3b9e, 0x3b9e, 0x3b9e, 0x3b9e, - 0x3b9e, 0x3b9e, 0x3b9e, 0x3b9e, 0x3b9e, 0x3b9e, 0x3b9e, 0x3b9e, - 0x3b9d, 0x3b9d, 0x3b9d, 0x3b9d, 0x3b9d, 0x3b9d, 0x3b9d, 0x3b9d, - 0x3b9d, 0x3b9d, 0x3b9d, 0x3b9d, 0x3b9d, 0x3b9d, 0x3b9d, 0x3b9d, - 0x3b9c, 0x3b9c, 0x3b9c, 0x3b9c, 0x3b9c, 0x3b9c, 0x3b9c, 0x3b9c, - 0x3b9c, 0x3b9c, 0x3b9c, 0x3b9c, 0x3b9c, 0x3b9c, 0x3b9c, 0x3b9c, - 0x3b9c, 0x3b9b, 0x3b9b, 0x3b9b, 0x3b9b, 0x3b9b, 0x3b9b, 0x3b9b, - 0x3b9b, 0x3b9b, 0x3b9b, 0x3b9b, 0x3b9b, 0x3b9b, 0x3b9b, 0x3b9b, - 0x3b9b, 0x3b9b, 0x3b9a, 0x3b9a, 0x3b9a, 0x3b9a, 0x3b9a, 0x3b9a, - 0x3b9a, 0x3b9a, 0x3b9a, 0x3b9a, 0x3b9a, 0x3b9a, 0x3b9a, 0x3b9a, - 0x3b9a, 0x3b9a, 0x3b9a, 0x3b99, 0x3b99, 0x3b99, 0x3b99, 0x3b99, - 0x3b99, 0x3b99, 0x3b99, 0x3b99, 0x3b99, 0x3b99, 0x3b99, 0x3b99, - 0x3b99, 0x3b99, 0x3b99, 0x3b99, 0x3b98, 0x3b98, 0x3b98, 0x3b98, - 0x3b98, 0x3b98, 0x3b98, 0x3b98, 0x3b98, 0x3b98, 0x3b98, 0x3b98, - 0x3b98, 0x3b98, 0x3b98, 0x3b98, 0x3b98, 0x3b97, 0x3b97, 0x3b97, - 0x3b97, 0x3b97, 0x3b97, 0x3b97, 0x3b97, 0x3b97, 0x3b97, 0x3b97, - 0x3b97, 0x3b97, 0x3b97, 0x3b97, 0x3b97, 0x3b97, 0x3b96, 0x3b96, - 0x3b96, 0x3b96, 0x3b96, 0x3b96, 0x3b96, 0x3b96, 0x3b96, 0x3b96, - 0x3b96, 0x3b96, 0x3b96, 0x3b96, 0x3b96, 0x3b96, 0x3b95, 0x3b95, - 0x3b95, 0x3b95, 0x3b95, 0x3b95, 0x3b95, 0x3b95, 0x3b95, 0x3b95, - 0x3b95, 0x3b95, 0x3b95, 0x3b95, 0x3b95, 0x3b95, 0x3b95, 0x3b94, - 0x3b94, 0x3b94, 0x3b94, 0x3b94, 0x3b94, 0x3b94, 0x3b94, 0x3b94, - 0x3b94, 0x3b94, 0x3b94, 0x3b94, 0x3b94, 0x3b94, 0x3b94, 0x3b94, - 0x3b93, 0x3b93, 0x3b93, 0x3b93, 0x3b93, 0x3b93, 0x3b93, 0x3b93, - 0x3b93, 0x3b93, 0x3b93, 0x3b93, 0x3b93, 0x3b93, 0x3b93, 0x3b93, - 0x3b93, 0x3b92, 0x3b92, 0x3b92, 0x3b92, 0x3b92, 0x3b92, 0x3b92, - 0x3b92, 0x3b92, 0x3b92, 0x3b92, 0x3b92, 0x3b92, 0x3b92, 0x3b92, - 0x3b92, 0x3b92, 0x3b91, 0x3b91, 0x3b91, 0x3b91, 0x3b91, 0x3b91, - 0x3b91, 0x3b91, 0x3b91, 0x3b91, 0x3b91, 0x3b91, 0x3b91, 0x3b91, - 0x3b91, 0x3b91, 0x3b91, 0x3b90, 0x3b90, 0x3b90, 0x3b90, 0x3b90, - 0x3b90, 0x3b90, 0x3b90, 0x3b90, 0x3b90, 0x3b90, 0x3b90, 0x3b90, - 0x3b90, 0x3b90, 0x3b90, 0x3b90, 0x3b8f, 0x3b8f, 0x3b8f, 0x3b8f, - 0x3b8f, 0x3b8f, 0x3b8f, 0x3b8f, 0x3b8f, 0x3b8f, 0x3b8f, 0x3b8f, - 0x3b8f, 0x3b8f, 0x3b8f, 0x3b8f, 0x3b8f, 0x3b8e, 0x3b8e, 0x3b8e, - 0x3b8e, 0x3b8e, 0x3b8e, 0x3b8e, 0x3b8e, 0x3b8e, 0x3b8e, 0x3b8e, - 0x3b8e, 0x3b8e, 0x3b8e, 0x3b8e, 0x3b8e, 0x3b8e, 0x3b8d, 0x3b8d, - 0x3b8d, 0x3b8d, 0x3b8d, 0x3b8d, 0x3b8d, 0x3b8d, 0x3b8d, 0x3b8d, - 0x3b8d, 0x3b8d, 0x3b8d, 0x3b8d, 0x3b8d, 0x3b8d, 0x3b8d, 0x3b8c, - 0x3b8c, 0x3b8c, 0x3b8c, 0x3b8c, 0x3b8c, 0x3b8c, 0x3b8c, 0x3b8c, - 0x3b8c, 0x3b8c, 0x3b8c, 0x3b8c, 0x3b8c, 0x3b8c, 0x3b8c, 0x3b8c, - 0x3b8b, 0x3b8b, 0x3b8b, 0x3b8b, 0x3b8b, 0x3b8b, 0x3b8b, 0x3b8b, - 0x3b8b, 0x3b8b, 0x3b8b, 0x3b8b, 0x3b8b, 0x3b8b, 0x3b8b, 0x3b8b, - 0x3b8b, 0x3b8a, 0x3b8a, 0x3b8a, 0x3b8a, 0x3b8a, 0x3b8a, 0x3b8a, - 0x3b8a, 0x3b8a, 0x3b8a, 0x3b8a, 0x3b8a, 0x3b8a, 0x3b8a, 0x3b8a, - 0x3b8a, 0x3b8a, 0x3b89, 0x3b89, 0x3b89, 0x3b89, 0x3b89, 0x3b89, - 0x3b89, 0x3b89, 0x3b89, 0x3b89, 0x3b89, 0x3b89, 0x3b89, 0x3b89, - 0x3b89, 0x3b89, 0x3b89, 0x3b88, 0x3b88, 0x3b88, 0x3b88, 0x3b88, - 0x3b88, 0x3b88, 0x3b88, 0x3b88, 0x3b88, 0x3b88, 0x3b88, 0x3b88, - 0x3b88, 0x3b88, 0x3b88, 0x3b88, 0x3b87, 0x3b87, 0x3b87, 0x3b87, - 0x3b87, 0x3b87, 0x3b87, 0x3b87, 0x3b87, 0x3b87, 0x3b87, 0x3b87, - 0x3b87, 0x3b87, 0x3b87, 0x3b87, 0x3b87, 0x3b86, 0x3b86, 0x3b86, - 0x3b86, 0x3b86, 0x3b86, 0x3b86, 0x3b86, 0x3b86, 0x3b86, 0x3b86, - 0x3b86, 0x3b86, 0x3b86, 0x3b86, 0x3b86, 0x3b86, 0x3b85, 0x3b85, - 0x3b85, 0x3b85, 0x3b85, 0x3b85, 0x3b85, 0x3b85, 0x3b85, 0x3b85, - 0x3b85, 0x3b85, 0x3b85, 0x3b85, 0x3b85, 0x3b85, 0x3b85, 0x3b84, - 0x3b84, 0x3b84, 0x3b84, 0x3b84, 0x3b84, 0x3b84, 0x3b84, 0x3b84, - 0x3b84, 0x3b84, 0x3b84, 0x3b84, 0x3b83, 0x3b83, 0x3b83, 0x3b83, - 0x3b83, 0x3b83, 0x3b83, 0x3b83, 0x3b83, 0x3b82, 0x3b82, 0x3b82, - 0x3b82, 0x3b82, 0x3b82, 0x3b82, 0x3b82, 0x3b81, 0x3b81, 0x3b81, - 0x3b81, 0x3b81, 0x3b81, 0x3b81, 0x3b81, 0x3b81, 0x3b80, 0x3b80, - 0x3b80, 0x3b80, 0x3b80, 0x3b80, 0x3b80, 0x3b80, 0x3b7f, 0x3b7f, - 0x3b7f, 0x3b7f, 0x3b7f, 0x3b7f, 0x3b7f, 0x3b7f, 0x3b7f, 0x3b7e, - 0x3b7e, 0x3b7e, 0x3b7e, 0x3b7e, 0x3b7e, 0x3b7e, 0x3b7e, 0x3b7d, - 0x3b7d, 0x3b7d, 0x3b7d, 0x3b7d, 0x3b7d, 0x3b7d, 0x3b7d, 0x3b7d, - 0x3b7c, 0x3b7c, 0x3b7c, 0x3b7c, 0x3b7c, 0x3b7c, 0x3b7c, 0x3b7c, - 0x3b7b, 0x3b7b, 0x3b7b, 0x3b7b, 0x3b7b, 0x3b7b, 0x3b7b, 0x3b7b, - 0x3b7b, 0x3b7a, 0x3b7a, 0x3b7a, 0x3b7a, 0x3b7a, 0x3b7a, 0x3b7a, - 0x3b7a, 0x3b79, 0x3b79, 0x3b79, 0x3b79, 0x3b79, 0x3b79, 0x3b79, - 0x3b79, 0x3b79, 0x3b78, 0x3b78, 0x3b78, 0x3b78, 0x3b78, 0x3b78, - 0x3b78, 0x3b78, 0x3b78, 0x3b77, 0x3b77, 0x3b77, 0x3b77, 0x3b77, - 0x3b77, 0x3b77, 0x3b77, 0x3b76, 0x3b76, 0x3b76, 0x3b76, 0x3b76, - 0x3b76, 0x3b76, 0x3b76, 0x3b76, 0x3b75, 0x3b75, 0x3b75, 0x3b75, - 0x3b75, 0x3b75, 0x3b75, 0x3b75, 0x3b74, 0x3b74, 0x3b74, 0x3b74, - 0x3b74, 0x3b74, 0x3b74, 0x3b74, 0x3b74, 0x3b73, 0x3b73, 0x3b73, - 0x3b73, 0x3b73, 0x3b73, 0x3b73, 0x3b73, 0x3b73, 0x3b72, 0x3b72, - 0x3b72, 0x3b72, 0x3b72, 0x3b72, 0x3b72, 0x3b72, 0x3b71, 0x3b71, - 0x3b71, 0x3b71, 0x3b71, 0x3b71, 0x3b71, 0x3b71, 0x3b71, 0x3b70, - 0x3b70, 0x3b70, 0x3b70, 0x3b70, 0x3b70, 0x3b70, 0x3b70, 0x3b6f, - 0x3b6f, 0x3b6f, 0x3b6f, 0x3b6f, 0x3b6f, 0x3b6f, 0x3b6f, 0x3b6f, - 0x3b6e, 0x3b6e, 0x3b6e, 0x3b6e, 0x3b6e, 0x3b6e, 0x3b6e, 0x3b6e, - 0x3b6e, 0x3b6d, 0x3b6d, 0x3b6d, 0x3b6d, 0x3b6d, 0x3b6d, 0x3b6d, - 0x3b6d, 0x3b6c, 0x3b6c, 0x3b6c, 0x3b6c, 0x3b6c, 0x3b6c, 0x3b6c, - 0x3b6c, 0x3b6c, 0x3b6b, 0x3b6b, 0x3b6b, 0x3b6b, 0x3b6b, 0x3b6b, - 0x3b6b, 0x3b6b, 0x3b6a, 0x3b6a, 0x3b6a, 0x3b6a, 0x3b6a, 0x3b6a, - 0x3b6a, 0x3b6a, 0x3b6a, 0x3b69, 0x3b69, 0x3b69, 0x3b69, 0x3b69, - 0x3b69, 0x3b69, 0x3b69, 0x3b69, 0x3b68, 0x3b68, 0x3b68, 0x3b68, - 0x3b68, 0x3b68, 0x3b68, 0x3b68, 0x3b67, 0x3b67, 0x3b67, 0x3b67, - 0x3b67, 0x3b67, 0x3b67, 0x3b67, 0x3b67, 0x3b66, 0x3b66, 0x3b66, - 0x3b66, 0x3b66, 0x3b66, 0x3b66, 0x3b66, 0x3b66, 0x3b65, 0x3b65, - 0x3b65, 0x3b65, 0x3b65, 0x3b65, 0x3b65, 0x3b65, 0x3b64, 0x3b64, - 0x3b64, 0x3b64, 0x3b64, 0x3b64, 0x3b64, 0x3b64, 0x3b64, 0x3b63, - 0x3b63, 0x3b63, 0x3b63, 0x3b63, 0x3b63, 0x3b63, 0x3b63, 0x3b63, - 0x3b62, 0x3b62, 0x3b62, 0x3b62, 0x3b62, 0x3b62, 0x3b62, 0x3b62, - 0x3b61, 0x3b61, 0x3b61, 0x3b61, 0x3b61, 0x3b61, 0x3b61, 0x3b61, - 0x3b61, 0x3b60, 0x3b60, 0x3b60, 0x3b60, 0x3b60, 0x3b60, 0x3b60, - 0x3b60, 0x3b60, 0x3b5f, 0x3b5f, 0x3b5f, 0x3b5f, 0x3b5f, 0x3b5f, - 0x3b5f, 0x3b5f, 0x3b5e, 0x3b5e, 0x3b5e, 0x3b5e, 0x3b5e, 0x3b5e, - 0x3b5e, 0x3b5e, 0x3b5e, 0x3b5d, 0x3b5d, 0x3b5d, 0x3b5d, 0x3b5d, - 0x3b5d, 0x3b5d, 0x3b5d, 0x3b5d, 0x3b5c, 0x3b5c, 0x3b5c, 0x3b5c, - 0x3b5c, 0x3b5c, 0x3b5c, 0x3b5c, 0x3b5b, 0x3b5b, 0x3b5b, 0x3b5b, - 0x3b5b, 0x3b5b, 0x3b5b, 0x3b5b, 0x3b5b, 0x3b5a, 0x3b5a, 0x3b5a, - 0x3b5a, 0x3b5a, 0x3b5a, 0x3b5a, 0x3b5a, 0x3b5a, 0x3b59, 0x3b59, - 0x3b59, 0x3b59, 0x3b59, 0x3b59, 0x3b59, 0x3b59, 0x3b58, 0x3b58, - 0x3b58, 0x3b58, 0x3b58, 0x3b58, 0x3b58, 0x3b58, 0x3b58, 0x3b57, - 0x3b57, 0x3b57, 0x3b57, 0x3b57, 0x3b57, 0x3b57, 0x3b57, 0x3b57, - 0x3b56, 0x3b56, 0x3b56, 0x3b56, 0x3b56, 0x3b56, 0x3b56, 0x3b56, - 0x3b56, 0x3b55, 0x3b55, 0x3b55, 0x3b55, 0x3b55, 0x3b55, 0x3b55, - 0x3b55, 0x3b54, 0x3b54, 0x3b54, 0x3b54, 0x3b54, 0x3b54, 0x3b54, - 0x3b54, 0x3b54, 0x3b53, 0x3b53, 0x3b53, 0x3b53, 0x3b53, 0x3b53, - 0x3b53, 0x3b53, 0x3b53, 0x3b52, 0x3b52, 0x3b52, 0x3b52, 0x3b52, - 0x3b52, 0x3b52, 0x3b52, 0x3b52, 0x3b51, 0x3b51, 0x3b51, 0x3b51, - 0x3b51, 0x3b51, 0x3b51, 0x3b51, 0x3b50, 0x3b50, 0x3b50, 0x3b50, - 0x3b50, 0x3b50, 0x3b50, 0x3b50, 0x3b50, 0x3b4f, 0x3b4f, 0x3b4f, - 0x3b4f, 0x3b4f, 0x3b4f, 0x3b4f, 0x3b4f, 0x3b4f, 0x3b4e, 0x3b4e, - 0x3b4e, 0x3b4e, 0x3b4e, 0x3b4e, 0x3b4e, 0x3b4e, 0x3b4e, 0x3b4d, - 0x3b4d, 0x3b4d, 0x3b4d, 0x3b4d, 0x3b4d, 0x3b4d, 0x3b4d, 0x3b4c, - 0x3b4c, 0x3b4c, 0x3b4c, 0x3b4c, 0x3b4c, 0x3b4c, 0x3b4c, 0x3b4c, - 0x3b4b, 0x3b4b, 0x3b4b, 0x3b4b, 0x3b4b, 0x3b4b, 0x3b4b, 0x3b4b, - 0x3b4b, 0x3b4a, 0x3b4a, 0x3b4a, 0x3b4a, 0x3b4a, 0x3b4a, 0x3b4a, - 0x3b4a, 0x3b4a, 0x3b49, 0x3b49, 0x3b49, 0x3b49, 0x3b49, 0x3b49, - 0x3b49, 0x3b49, 0x3b48, 0x3b48, 0x3b48, 0x3b48, 0x3b48, 0x3b48, - 0x3b48, 0x3b48, 0x3b48, 0x3b47, 0x3b47, 0x3b47, 0x3b47, 0x3b47, - 0x3b47, 0x3b47, 0x3b47, 0x3b47, 0x3b46, 0x3b46, 0x3b46, 0x3b46, - 0x3b46, 0x3b46, 0x3b46, 0x3b46, 0x3b46, 0x3b45, 0x3b45, 0x3b45, - 0x3b45, 0x3b45, 0x3b45, 0x3b45, 0x3b45, 0x3b45, 0x3b44, 0x3b44, - 0x3b44, 0x3b44, 0x3b44, 0x3b44, 0x3b44, 0x3b44, 0x3b43, 0x3b43, - 0x3b43, 0x3b43, 0x3b43, 0x3b43, 0x3b43, 0x3b43, 0x3b43, 0x3b42, - 0x3b42, 0x3b42, 0x3b42, 0x3b42, 0x3b42, 0x3b42, 0x3b42, 0x3b42, - 0x3b41, 0x3b41, 0x3b41, 0x3b41, 0x3b41, 0x3b41, 0x3b41, 0x3b41, - 0x3b41, 0x3b40, 0x3b40, 0x3b40, 0x3b40, 0x3b40, 0x3b40, 0x3b40, - 0x3b40, 0x3b40, 0x3b3f, 0x3b3f, 0x3b3f, 0x3b3f, 0x3b3f, 0x3b3f, - 0x3b3f, 0x3b3f, 0x3b3f, 0x3b3e, 0x3b3e, 0x3b3e, 0x3b3e, 0x3b3e, - 0x3b3e, 0x3b3e, 0x3b3e, 0x3b3d, 0x3b3d, 0x3b3d, 0x3b3d, 0x3b3d, - 0x3b3d, 0x3b3d, 0x3b3d, 0x3b3d, 0x3b3c, 0x3b3c, 0x3b3c, 0x3b3c, - 0x3b3c, 0x3b3c, 0x3b3c, 0x3b3c, 0x3b3c, 0x3b3b, 0x3b3b, 0x3b3b, - 0x3b3b, 0x3b3b, 0x3b3b, 0x3b3b, 0x3b3b, 0x3b3b, 0x3b3a, 0x3b3a, - 0x3b3a, 0x3b3a, 0x3b3a, 0x3b3a, 0x3b3a, 0x3b3a, 0x3b3a, 0x3b39, - 0x3b39, 0x3b39, 0x3b39, 0x3b39, 0x3b39, 0x3b39, 0x3b39, 0x3b39, - 0x3b38, 0x3b38, 0x3b38, 0x3b38, 0x3b38, 0x3b38, 0x3b38, 0x3b38, - 0x3b38, 0x3b37, 0x3b37, 0x3b37, 0x3b37, 0x3b37, 0x3b37, 0x3b37, - 0x3b37, 0x3b36, 0x3b36, 0x3b36, 0x3b36, 0x3b36, 0x3b36, 0x3b36, - 0x3b36, 0x3b36, 0x3b35, 0x3b35, 0x3b35, 0x3b35, 0x3b35, 0x3b35, - 0x3b35, 0x3b35, 0x3b35, 0x3b34, 0x3b34, 0x3b34, 0x3b34, 0x3b34, - 0x3b34, 0x3b34, 0x3b34, 0x3b34, 0x3b33, 0x3b33, 0x3b33, 0x3b33, - 0x3b33, 0x3b33, 0x3b33, 0x3b33, 0x3b33, 0x3b32, 0x3b32, 0x3b32, - 0x3b32, 0x3b32, 0x3b32, 0x3b32, 0x3b32, 0x3b32, 0x3b31, 0x3b31, - 0x3b31, 0x3b31, 0x3b31, 0x3b31, 0x3b31, 0x3b31, 0x3b31, 0x3b30, - 0x3b30, 0x3b30, 0x3b30, 0x3b30, 0x3b30, 0x3b30, 0x3b30, 0x3b30, - 0x3b2f, 0x3b2f, 0x3b2f, 0x3b2f, 0x3b2f, 0x3b2f, 0x3b2f, 0x3b2f, - 0x3b2f, 0x3b2e, 0x3b2e, 0x3b2e, 0x3b2e, 0x3b2e, 0x3b2e, 0x3b2e, - 0x3b2e, 0x3b2d, 0x3b2d, 0x3b2d, 0x3b2d, 0x3b2d, 0x3b2d, 0x3b2d, - 0x3b2d, 0x3b2d, 0x3b2c, 0x3b2c, 0x3b2c, 0x3b2c, 0x3b2c, 0x3b2c, - 0x3b2c, 0x3b2c, 0x3b2c, 0x3b2b, 0x3b2b, 0x3b2b, 0x3b2b, 0x3b2b, - 0x3b2b, 0x3b2b, 0x3b2b, 0x3b2b, 0x3b2a, 0x3b2a, 0x3b2a, 0x3b2a, - 0x3b2a, 0x3b2a, 0x3b2a, 0x3b2a, 0x3b2a, 0x3b29, 0x3b29, 0x3b29, - 0x3b29, 0x3b29, 0x3b29, 0x3b29, 0x3b29, 0x3b29, 0x3b28, 0x3b28, - 0x3b28, 0x3b28, 0x3b28, 0x3b28, 0x3b28, 0x3b28, 0x3b28, 0x3b27, - 0x3b27, 0x3b27, 0x3b27, 0x3b27, 0x3b27, 0x3b27, 0x3b27, 0x3b27, - 0x3b26, 0x3b26, 0x3b26, 0x3b26, 0x3b26, 0x3b26, 0x3b26, 0x3b26, - 0x3b26, 0x3b25, 0x3b25, 0x3b25, 0x3b25, 0x3b25, 0x3b25, 0x3b25, - 0x3b25, 0x3b25, 0x3b24, 0x3b24, 0x3b24, 0x3b24, 0x3b24, 0x3b24, - 0x3b24, 0x3b24, 0x3b24, 0x3b23, 0x3b23, 0x3b23, 0x3b23, 0x3b23, - 0x3b23, 0x3b23, 0x3b23, 0x3b23, 0x3b22, 0x3b22, 0x3b22, 0x3b22, - 0x3b22, 0x3b22, 0x3b22, 0x3b22, 0x3b22, 0x3b21, 0x3b21, 0x3b21, - 0x3b21, 0x3b21, 0x3b21, 0x3b21, 0x3b21, 0x3b21, 0x3b20, 0x3b20, - 0x3b20, 0x3b20, 0x3b20, 0x3b20, 0x3b20, 0x3b20, 0x3b20, 0x3b1f, - 0x3b1f, 0x3b1f, 0x3b1f, 0x3b1f, 0x3b1f, 0x3b1f, 0x3b1f, 0x3b1f, - 0x3b1e, 0x3b1e, 0x3b1e, 0x3b1e, 0x3b1e, 0x3b1e, 0x3b1e, 0x3b1e, - 0x3b1e, 0x3b1d, 0x3b1d, 0x3b1d, 0x3b1d, 0x3b1d, 0x3b1d, 0x3b1d, - 0x3b1d, 0x3b1d, 0x3b1c, 0x3b1c, 0x3b1c, 0x3b1c, 0x3b1c, 0x3b1c, - 0x3b1c, 0x3b1c, 0x3b1c, 0x3b1b, 0x3b1b, 0x3b1b, 0x3b1b, 0x3b1b, - 0x3b1b, 0x3b1b, 0x3b1b, 0x3b1b, 0x3b1a, 0x3b1a, 0x3b1a, 0x3b1a, - 0x3b1a, 0x3b1a, 0x3b1a, 0x3b1a, 0x3b1a, 0x3b19, 0x3b19, 0x3b19, - 0x3b19, 0x3b19, 0x3b19, 0x3b19, 0x3b19, 0x3b19, 0x3b18, 0x3b18, - 0x3b18, 0x3b18, 0x3b18, 0x3b18, 0x3b18, 0x3b18, 0x3b18, 0x3b17, - 0x3b17, 0x3b17, 0x3b17, 0x3b17, 0x3b17, 0x3b17, 0x3b17, 0x3b17, - 0x3b16, 0x3b16, 0x3b16, 0x3b16, 0x3b16, 0x3b16, 0x3b16, 0x3b16, - 0x3b16, 0x3b15, 0x3b15, 0x3b15, 0x3b15, 0x3b15, 0x3b15, 0x3b15, - 0x3b15, 0x3b15, 0x3b14, 0x3b14, 0x3b14, 0x3b14, 0x3b14, 0x3b14, - 0x3b14, 0x3b14, 0x3b14, 0x3b13, 0x3b13, 0x3b13, 0x3b13, 0x3b13, - 0x3b13, 0x3b13, 0x3b13, 0x3b13, 0x3b12, 0x3b12, 0x3b12, 0x3b12, - 0x3b12, 0x3b12, 0x3b12, 0x3b12, 0x3b12, 0x3b11, 0x3b11, 0x3b11, - 0x3b11, 0x3b11, 0x3b11, 0x3b11, 0x3b11, 0x3b11, 0x3b10, 0x3b10, - 0x3b10, 0x3b10, 0x3b10, 0x3b10, 0x3b10, 0x3b10, 0x3b10, 0x3b0f, - 0x3b0f, 0x3b0f, 0x3b0f, 0x3b0f, 0x3b0e, 0x3b0e, 0x3b0e, 0x3b0e, - 0x3b0e, 0x3b0d, 0x3b0d, 0x3b0d, 0x3b0d, 0x3b0c, 0x3b0c, 0x3b0c, - 0x3b0c, 0x3b0c, 0x3b0b, 0x3b0b, 0x3b0b, 0x3b0b, 0x3b0b, 0x3b0a, - 0x3b0a, 0x3b0a, 0x3b0a, 0x3b09, 0x3b09, 0x3b09, 0x3b09, 0x3b09, - 0x3b08, 0x3b08, 0x3b08, 0x3b08, 0x3b07, 0x3b07, 0x3b07, 0x3b07, - 0x3b07, 0x3b06, 0x3b06, 0x3b06, 0x3b06, 0x3b05, 0x3b05, 0x3b05, - 0x3b05, 0x3b05, 0x3b04, 0x3b04, 0x3b04, 0x3b04, 0x3b03, 0x3b03, - 0x3b03, 0x3b03, 0x3b03, 0x3b02, 0x3b02, 0x3b02, 0x3b02, 0x3b02, - 0x3b01, 0x3b01, 0x3b01, 0x3b01, 0x3b00, 0x3b00, 0x3b00, 0x3b00, - 0x3b00, 0x3aff, 0x3aff, 0x3aff, 0x3aff, 0x3afe, 0x3afe, 0x3afe, - 0x3afe, 0x3afe, 0x3afd, 0x3afd, 0x3afd, 0x3afd, 0x3afc, 0x3afc, - 0x3afc, 0x3afc, 0x3afc, 0x3afb, 0x3afb, 0x3afb, 0x3afb, 0x3afb, - 0x3afa, 0x3afa, 0x3afa, 0x3afa, 0x3af9, 0x3af9, 0x3af9, 0x3af9, - 0x3af9, 0x3af8, 0x3af8, 0x3af8, 0x3af8, 0x3af7, 0x3af7, 0x3af7, - 0x3af7, 0x3af7, 0x3af6, 0x3af6, 0x3af6, 0x3af6, 0x3af6, 0x3af5, - 0x3af5, 0x3af5, 0x3af5, 0x3af4, 0x3af4, 0x3af4, 0x3af4, 0x3af4, - 0x3af3, 0x3af3, 0x3af3, 0x3af3, 0x3af2, 0x3af2, 0x3af2, 0x3af2, - 0x3af2, 0x3af1, 0x3af1, 0x3af1, 0x3af1, 0x3af1, 0x3af0, 0x3af0, - 0x3af0, 0x3af0, 0x3aef, 0x3aef, 0x3aef, 0x3aef, 0x3aef, 0x3aee, - 0x3aee, 0x3aee, 0x3aee, 0x3aed, 0x3aed, 0x3aed, 0x3aed, 0x3aed, - 0x3aec, 0x3aec, 0x3aec, 0x3aec, 0x3aec, 0x3aeb, 0x3aeb, 0x3aeb, - 0x3aeb, 0x3aea, 0x3aea, 0x3aea, 0x3aea, 0x3aea, 0x3ae9, 0x3ae9, - 0x3ae9, 0x3ae9, 0x3ae9, 0x3ae8, 0x3ae8, 0x3ae8, 0x3ae8, 0x3ae7, - 0x3ae7, 0x3ae7, 0x3ae7, 0x3ae7, 0x3ae6, 0x3ae6, 0x3ae6, 0x3ae6, - 0x3ae5, 0x3ae5, 0x3ae5, 0x3ae5, 0x3ae5, 0x3ae4, 0x3ae4, 0x3ae4, - 0x3ae4, 0x3ae4, 0x3ae3, 0x3ae3, 0x3ae3, 0x3ae3, 0x3ae2, 0x3ae2, - 0x3ae2, 0x3ae2, 0x3ae2, 0x3ae1, 0x3ae1, 0x3ae1, 0x3ae1, 0x3ae1, - 0x3ae0, 0x3ae0, 0x3ae0, 0x3ae0, 0x3adf, 0x3adf, 0x3adf, 0x3adf, - 0x3adf, 0x3ade, 0x3ade, 0x3ade, 0x3ade, 0x3ade, 0x3add, 0x3add, - 0x3add, 0x3add, 0x3adc, 0x3adc, 0x3adc, 0x3adc, 0x3adc, 0x3adb, - 0x3adb, 0x3adb, 0x3adb, 0x3adb, 0x3ada, 0x3ada, 0x3ada, 0x3ada, - 0x3ad9, 0x3ad9, 0x3ad9, 0x3ad9, 0x3ad9, 0x3ad8, 0x3ad8, 0x3ad8, - 0x3ad8, 0x3ad8, 0x3ad7, 0x3ad7, 0x3ad7, 0x3ad7, 0x3ad6, 0x3ad6, - 0x3ad6, 0x3ad6, 0x3ad6, 0x3ad5, 0x3ad5, 0x3ad5, 0x3ad5, 0x3ad5, - 0x3ad4, 0x3ad4, 0x3ad4, 0x3ad4, 0x3ad3, 0x3ad3, 0x3ad3, 0x3ad3, - 0x3ad3, 0x3ad2, 0x3ad2, 0x3ad2, 0x3ad2, 0x3ad2, 0x3ad1, 0x3ad1, - 0x3ad1, 0x3ad1, 0x3ad0, 0x3ad0, 0x3ad0, 0x3ad0, 0x3ad0, 0x3acf, - 0x3acf, 0x3acf, 0x3acf, 0x3acf, 0x3ace, 0x3ace, 0x3ace, 0x3ace, - 0x3ace, 0x3acd, 0x3acd, 0x3acd, 0x3acd, 0x3acc, 0x3acc, 0x3acc, - 0x3acc, 0x3acc, 0x3acb, 0x3acb, 0x3acb, 0x3acb, 0x3acb, 0x3aca, - 0x3aca, 0x3aca, 0x3aca, 0x3ac9, 0x3ac9, 0x3ac9, 0x3ac9, 0x3ac9, - 0x3ac8, 0x3ac8, 0x3ac8, 0x3ac8, 0x3ac8, 0x3ac7, 0x3ac7, 0x3ac7, - 0x3ac7, 0x3ac7, 0x3ac6, 0x3ac6, 0x3ac6, 0x3ac6, 0x3ac5, 0x3ac5, - 0x3ac5, 0x3ac5, 0x3ac5, 0x3ac4, 0x3ac4, 0x3ac4, 0x3ac4, 0x3ac4, - 0x3ac3, 0x3ac3, 0x3ac3, 0x3ac3, 0x3ac2, 0x3ac2, 0x3ac2, 0x3ac2, - 0x3ac2, 0x3ac1, 0x3ac1, 0x3ac1, 0x3ac1, 0x3ac1, 0x3ac0, 0x3ac0, - 0x3ac0, 0x3ac0, 0x3ac0, 0x3abf, 0x3abf, 0x3abf, 0x3abf, 0x3abe, - 0x3abe, 0x3abe, 0x3abe, 0x3abe, 0x3abd, 0x3abd, 0x3abd, 0x3abd, - 0x3abd, 0x3abc, 0x3abc, 0x3abc, 0x3abc, 0x3abc, 0x3abb, 0x3abb, - 0x3abb, 0x3abb, 0x3aba, 0x3aba, 0x3aba, 0x3aba, 0x3aba, 0x3ab9, - 0x3ab9, 0x3ab9, 0x3ab9, 0x3ab9, 0x3ab8, 0x3ab8, 0x3ab8, 0x3ab8, - 0x3ab8, 0x3ab7, 0x3ab7, 0x3ab7, 0x3ab7, 0x3ab6, 0x3ab6, 0x3ab6, - 0x3ab6, 0x3ab6, 0x3ab5, 0x3ab5, 0x3ab5, 0x3ab5, 0x3ab5, 0x3ab4, - 0x3ab4, 0x3ab4, 0x3ab4, 0x3ab4, 0x3ab3, 0x3ab3, 0x3ab3, 0x3ab3, - 0x3ab3, 0x3ab2, 0x3ab2, 0x3ab2, 0x3ab2, 0x3ab1, 0x3ab1, 0x3ab1, - 0x3ab1, 0x3ab1, 0x3ab0, 0x3ab0, 0x3ab0, 0x3ab0, 0x3ab0, 0x3aaf, - 0x3aaf, 0x3aaf, 0x3aaf, 0x3aaf, 0x3aae, 0x3aae, 0x3aae, 0x3aae, - 0x3aad, 0x3aad, 0x3aad, 0x3aad, 0x3aad, 0x3aac, 0x3aac, 0x3aac, - 0x3aac, 0x3aac, 0x3aab, 0x3aab, 0x3aab, 0x3aab, 0x3aab, 0x3aaa, - 0x3aaa, 0x3aaa, 0x3aaa, 0x3aaa, 0x3aa9, 0x3aa9, 0x3aa9, 0x3aa9, - 0x3aa8, 0x3aa8, 0x3aa8, 0x3aa8, 0x3aa8, 0x3aa7, 0x3aa7, 0x3aa7, - 0x3aa7, 0x3aa7, 0x3aa6, 0x3aa6, 0x3aa6, 0x3aa6, 0x3aa6, 0x3aa5, - 0x3aa5, 0x3aa5, 0x3aa5, 0x3aa5, 0x3aa4, 0x3aa4, 0x3aa4, 0x3aa4, - 0x3aa4, 0x3aa3, 0x3aa3, 0x3aa3, 0x3aa3, 0x3aa2, 0x3aa2, 0x3aa2, - 0x3aa2, 0x3aa2, 0x3aa1, 0x3aa1, 0x3aa1, 0x3aa1, 0x3aa1, 0x3aa0, - 0x3aa0, 0x3aa0, 0x3aa0, 0x3aa0, 0x3a9f, 0x3a9f, 0x3a9f, 0x3a9f, - 0x3a9f, 0x3a9e, 0x3a9e, 0x3a9e, 0x3a9e, 0x3a9e, 0x3a9d, 0x3a9d, - 0x3a9d, 0x3a9d, 0x3a9c, 0x3a9c, 0x3a9c, 0x3a9c, 0x3a9c, 0x3a9b, - 0x3a9b, 0x3a9b, 0x3a9b, 0x3a9b, 0x3a9a, 0x3a9a, 0x3a9a, 0x3a9a, - 0x3a9a, 0x3a99, 0x3a99, 0x3a99, 0x3a99, 0x3a99, 0x3a98, 0x3a98, - 0x3a98, 0x3a98, 0x3a98, 0x3a97, 0x3a97, 0x3a97, 0x3a97, 0x3a96, - 0x3a96, 0x3a96, 0x3a96, 0x3a96, 0x3a95, 0x3a95, 0x3a95, 0x3a95, - 0x3a95, 0x3a94, 0x3a94, 0x3a94, 0x3a94, 0x3a94, 0x3a93, 0x3a93, - 0x3a93, 0x3a93, 0x3a93, 0x3a92, 0x3a92, 0x3a92, 0x3a92, 0x3a92, - 0x3a91, 0x3a91, 0x3a91, 0x3a91, 0x3a91, 0x3a90, 0x3a90, 0x3a90, - 0x3a90, 0x3a90, 0x3a8f, 0x3a8f, 0x3a8f, 0x3a8f, 0x3a8e, 0x3a8e, - 0x3a8e, 0x3a8e, 0x3a8e, 0x3a8d, 0x3a8d, 0x3a8d, 0x3a8d, 0x3a8d, - 0x3a8c, 0x3a8c, 0x3a8c, 0x3a8c, 0x3a8c, 0x3a8b, 0x3a8b, 0x3a8b, - 0x3a8b, 0x3a8b, 0x3a8a, 0x3a8a, 0x3a8a, 0x3a8a, 0x3a8a, 0x3a89, - 0x3a89, 0x3a89, 0x3a89, 0x3a89, 0x3a88, 0x3a88, 0x3a88, 0x3a88, - 0x3a88, 0x3a87, 0x3a87, 0x3a87, 0x3a87, 0x3a87, 0x3a86, 0x3a86, - 0x3a86, 0x3a86, 0x3a85, 0x3a85, 0x3a85, 0x3a85, 0x3a85, 0x3a84, - 0x3a84, 0x3a84, 0x3a84, 0x3a84, 0x3a83, 0x3a83, 0x3a83, 0x3a83, - 0x3a83, 0x3a82, 0x3a82, 0x3a82, 0x3a82, 0x3a82, 0x3a81, 0x3a81, - 0x3a81, 0x3a81, 0x3a81, 0x3a80, 0x3a80, 0x3a80, 0x3a80, 0x3a80, - 0x3a7f, 0x3a7f, 0x3a7f, 0x3a7f, 0x3a7f, 0x3a7e, 0x3a7e, 0x3a7e, - 0x3a7e, 0x3a7e, 0x3a7d, 0x3a7d, 0x3a7d, 0x3a7d, 0x3a7d, 0x3a7c, - 0x3a7c, 0x3a7c, 0x3a7c, 0x3a7c, 0x3a7b, 0x3a7b, 0x3a7b, 0x3a7b, - 0x3a7b, 0x3a7a, 0x3a7a, 0x3a7a, 0x3a7a, 0x3a7a, 0x3a79, 0x3a79, - 0x3a79, 0x3a79, 0x3a78, 0x3a78, 0x3a78, 0x3a78, 0x3a78, 0x3a77, - 0x3a77, 0x3a77, 0x3a77, 0x3a77, 0x3a76, 0x3a76, 0x3a76, 0x3a76, - 0x3a76, 0x3a75, 0x3a75, 0x3a75, 0x3a75, 0x3a75, 0x3a74, 0x3a74, - 0x3a74, 0x3a74, 0x3a74, 0x3a73, 0x3a73, 0x3a73, 0x3a73, 0x3a73, - 0x3a72, 0x3a72, 0x3a72, 0x3a72, 0x3a72, 0x3a71, 0x3a71, 0x3a71, - 0x3a71, 0x3a71, 0x3a70, 0x3a70, 0x3a70, 0x3a70, 0x3a70, 0x3a6f, - 0x3a6f, 0x3a6f, 0x3a6f, 0x3a6f, 0x3a6e, 0x3a6e, 0x3a6e, 0x3a6e, - 0x3a6e, 0x3a6d, 0x3a6d, 0x3a6d, 0x3a6d, 0x3a6d, 0x3a6c, 0x3a6c, - 0x3a6c, 0x3a6c, 0x3a6c, 0x3a6b, 0x3a6b, 0x3a6b, 0x3a6b, 0x3a6b, - 0x3a6a, 0x3a6a, 0x3a6a, 0x3a6a, 0x3a6a, 0x3a69, 0x3a69, 0x3a69, - 0x3a69, 0x3a69, 0x3a68, 0x3a68, 0x3a68, 0x3a68, 0x3a68, 0x3a67, - 0x3a67, 0x3a67, 0x3a67, 0x3a67, 0x3a66, 0x3a66, 0x3a66, 0x3a66, - 0x3a66, 0x3a65, 0x3a65, 0x3a65, 0x3a65, 0x3a65, 0x3a64, 0x3a64, - 0x3a64, 0x3a64, 0x3a64, 0x3a63, 0x3a63, 0x3a63, 0x3a63, 0x3a63, - 0x3a62, 0x3a62, 0x3a62, 0x3a62, 0x3a62, 0x3a61, 0x3a61, 0x3a61, - 0x3a61, 0x3a61, 0x3a60, 0x3a60, 0x3a60, 0x3a60, 0x3a60, 0x3a5f, - 0x3a5f, 0x3a5f, 0x3a5f, 0x3a5f, 0x3a5e, 0x3a5e, 0x3a5e, 0x3a5e, - 0x3a5e, 0x3a5d, 0x3a5d, 0x3a5d, 0x3a5d, 0x3a5d, 0x3a5c, 0x3a5c, - 0x3a5c, 0x3a5c, 0x3a5c, 0x3a5b, 0x3a5b, 0x3a5b, 0x3a5b, 0x3a5b, - 0x3a5a, 0x3a5a, 0x3a5a, 0x3a5a, 0x3a5a, 0x3a59, 0x3a59, 0x3a59, - 0x3a59, 0x3a59, 0x3a58, 0x3a58, 0x3a58, 0x3a58, 0x3a58, 0x3a57, - 0x3a57, 0x3a57, 0x3a57, 0x3a57, 0x3a56, 0x3a56, 0x3a56, 0x3a56, - 0x3a56, 0x3a55, 0x3a55, 0x3a55, 0x3a55, 0x3a55, 0x3a54, 0x3a54, - 0x3a54, 0x3a54, 0x3a54, 0x3a54, 0x3a53, 0x3a53, 0x3a53, 0x3a53, - 0x3a53, 0x3a52, 0x3a52, 0x3a52, 0x3a52, 0x3a52, 0x3a51, 0x3a51, - 0x3a51, 0x3a51, 0x3a51, 0x3a50, 0x3a50, 0x3a50, 0x3a50, 0x3a50, - 0x3a4f, 0x3a4f, 0x3a4f, 0x3a4f, 0x3a4f, 0x3a4e, 0x3a4e, 0x3a4e, - 0x3a4e, 0x3a4e, 0x3a4d, 0x3a4d, 0x3a4d, 0x3a4d, 0x3a4d, 0x3a4c, - 0x3a4c, 0x3a4c, 0x3a4c, 0x3a4c, 0x3a4b, 0x3a4b, 0x3a4b, 0x3a4b, - 0x3a4b, 0x3a4a, 0x3a4a, 0x3a4a, 0x3a4a, 0x3a4a, 0x3a49, 0x3a49, - 0x3a49, 0x3a49, 0x3a49, 0x3a48, 0x3a48, 0x3a48, 0x3a48, 0x3a48, - 0x3a47, 0x3a47, 0x3a47, 0x3a47, 0x3a47, 0x3a47, 0x3a46, 0x3a46, - 0x3a46, 0x3a46, 0x3a46, 0x3a45, 0x3a45, 0x3a45, 0x3a45, 0x3a45, - 0x3a44, 0x3a44, 0x3a44, 0x3a44, 0x3a44, 0x3a43, 0x3a43, 0x3a43, - 0x3a43, 0x3a43, 0x3a42, 0x3a42, 0x3a42, 0x3a42, 0x3a42, 0x3a41, - 0x3a41, 0x3a41, 0x3a41, 0x3a41, 0x3a40, 0x3a40, 0x3a40, 0x3a40, - 0x3a40, 0x3a3f, 0x3a3f, 0x3a3f, 0x3a3f, 0x3a3f, 0x3a3e, 0x3a3e, - 0x3a3e, 0x3a3e, 0x3a3e, 0x3a3e, 0x3a3d, 0x3a3d, 0x3a3d, 0x3a3d, - 0x3a3d, 0x3a3c, 0x3a3c, 0x3a3c, 0x3a3c, 0x3a3c, 0x3a3b, 0x3a3b, - 0x3a3b, 0x3a3b, 0x3a3a, 0x3a3a, 0x3a39, 0x3a39, 0x3a39, 0x3a38, - 0x3a38, 0x3a37, 0x3a37, 0x3a37, 0x3a36, 0x3a36, 0x3a36, 0x3a35, - 0x3a35, 0x3a34, 0x3a34, 0x3a34, 0x3a33, 0x3a33, 0x3a32, 0x3a32, - 0x3a32, 0x3a31, 0x3a31, 0x3a31, 0x3a30, 0x3a30, 0x3a2f, 0x3a2f, - 0x3a2f, 0x3a2e, 0x3a2e, 0x3a2d, 0x3a2d, 0x3a2d, 0x3a2c, 0x3a2c, - 0x3a2b, 0x3a2b, 0x3a2b, 0x3a2a, 0x3a2a, 0x3a2a, 0x3a29, 0x3a29, - 0x3a28, 0x3a28, 0x3a28, 0x3a27, 0x3a27, 0x3a26, 0x3a26, 0x3a26, - 0x3a25, 0x3a25, 0x3a25, 0x3a24, 0x3a24, 0x3a23, 0x3a23, 0x3a23, - 0x3a22, 0x3a22, 0x3a21, 0x3a21, 0x3a21, 0x3a20, 0x3a20, 0x3a20, - 0x3a1f, 0x3a1f, 0x3a1e, 0x3a1e, 0x3a1e, 0x3a1d, 0x3a1d, 0x3a1d, - 0x3a1c, 0x3a1c, 0x3a1b, 0x3a1b, 0x3a1b, 0x3a1a, 0x3a1a, 0x3a19, - 0x3a19, 0x3a19, 0x3a18, 0x3a18, 0x3a18, 0x3a17, 0x3a17, 0x3a16, - 0x3a16, 0x3a16, 0x3a15, 0x3a15, 0x3a15, 0x3a14, 0x3a14, 0x3a13, - 0x3a13, 0x3a13, 0x3a12, 0x3a12, 0x3a11, 0x3a11, 0x3a11, 0x3a10, - 0x3a10, 0x3a10, 0x3a0f, 0x3a0f, 0x3a0e, 0x3a0e, 0x3a0e, 0x3a0d, - 0x3a0d, 0x3a0d, 0x3a0c, 0x3a0c, 0x3a0b, 0x3a0b, 0x3a0b, 0x3a0a, - 0x3a0a, 0x3a0a, 0x3a09, 0x3a09, 0x3a08, 0x3a08, 0x3a08, 0x3a07, - 0x3a07, 0x3a07, 0x3a06, 0x3a06, 0x3a05, 0x3a05, 0x3a05, 0x3a04, - 0x3a04, 0x3a04, 0x3a03, 0x3a03, 0x3a02, 0x3a02, 0x3a02, 0x3a01, - 0x3a01, 0x3a01, 0x3a00, 0x3a00, 0x39ff, 0x39ff, 0x39ff, 0x39fe, - 0x39fe, 0x39fe, 0x39fd, 0x39fd, 0x39fc, 0x39fc, 0x39fc, 0x39fb, - 0x39fb, 0x39fb, 0x39fa, 0x39fa, 0x39f9, 0x39f9, 0x39f9, 0x39f8, - 0x39f8, 0x39f8, 0x39f7, 0x39f7, 0x39f6, 0x39f6, 0x39f6, 0x39f5, - 0x39f5, 0x39f5, 0x39f4, 0x39f4, 0x39f3, 0x39f3, 0x39f3, 0x39f2, - 0x39f2, 0x39f2, 0x39f1, 0x39f1, 0x39f0, 0x39f0, 0x39f0, 0x39ef, - 0x39ef, 0x39ef, 0x39ee, 0x39ee, 0x39ed, 0x39ed, 0x39ed, 0x39ec, - 0x39ec, 0x39ec, 0x39eb, 0x39eb, 0x39eb, 0x39ea, 0x39ea, 0x39e9, - 0x39e9, 0x39e9, 0x39e8, 0x39e8, 0x39e8, 0x39e7, 0x39e7, 0x39e6, - 0x39e6, 0x39e6, 0x39e5, 0x39e5, 0x39e5, 0x39e4, 0x39e4, 0x39e4, - 0x39e3, 0x39e3, 0x39e2, 0x39e2, 0x39e2, 0x39e1, 0x39e1, 0x39e1, - 0x39e0, 0x39e0, 0x39df, 0x39df, 0x39df, 0x39de, 0x39de, 0x39de, - 0x39dd, 0x39dd, 0x39dd, 0x39dc, 0x39dc, 0x39db, 0x39db, 0x39db, - 0x39da, 0x39da, 0x39da, 0x39d9, 0x39d9, 0x39d9, 0x39d8, 0x39d8, - 0x39d7, 0x39d7, 0x39d7, 0x39d6, 0x39d6, 0x39d6, 0x39d5, 0x39d5, - 0x39d5, 0x39d4, 0x39d4, 0x39d3, 0x39d3, 0x39d3, 0x39d2, 0x39d2, - 0x39d2, 0x39d1, 0x39d1, 0x39d1, 0x39d0, 0x39d0, 0x39cf, 0x39cf, - 0x39cf, 0x39ce, 0x39ce, 0x39ce, 0x39cd, 0x39cd, 0x39cd, 0x39cc, - 0x39cc, 0x39cb, 0x39cb, 0x39cb, 0x39ca, 0x39ca, 0x39ca, 0x39c9, - 0x39c9, 0x39c9, 0x39c8, 0x39c8, 0x39c7, 0x39c7, 0x39c7, 0x39c6, - 0x39c6, 0x39c6, 0x39c5, 0x39c5, 0x39c5, 0x39c4, 0x39c4, 0x39c3, - 0x39c3, 0x39c3, 0x39c2, 0x39c2, 0x39c2, 0x39c1, 0x39c1, 0x39c1, - 0x39c0, 0x39c0, 0x39c0, 0x39bf, 0x39bf, 0x39be, 0x39be, 0x39be, - 0x39bd, 0x39bd, 0x39bd, 0x39bc, 0x39bc, 0x39bc, 0x39bb, 0x39bb, - 0x39bb, 0x39ba, 0x39ba, 0x39b9, 0x39b9, 0x39b9, 0x39b8, 0x39b8, - 0x39b8, 0x39b7, 0x39b7, 0x39b7, 0x39b6, 0x39b6, 0x39b5, 0x39b5, - 0x39b5, 0x39b4, 0x39b4, 0x39b4, 0x39b3, 0x39b3, 0x39b3, 0x39b2, - 0x39b2, 0x39b2, 0x39b1, 0x39b1, 0x39b1, 0x39b0, 0x39b0, 0x39af, - 0x39af, 0x39af, 0x39ae, 0x39ae, 0x39ae, 0x39ad, 0x39ad, 0x39ad, - 0x39ac, 0x39ac, 0x39ac, 0x39ab, 0x39ab, 0x39aa, 0x39aa, 0x39aa, - 0x39a9, 0x39a9, 0x39a9, 0x39a8, 0x39a8, 0x39a8, 0x39a7, 0x39a7, - 0x39a7, 0x39a6, 0x39a6, 0x39a6, 0x39a5, 0x39a5, 0x39a4, 0x39a4, - 0x39a4, 0x39a3, 0x39a3, 0x39a3, 0x39a2, 0x39a2, 0x39a2, 0x39a1, - 0x39a1, 0x39a1, 0x39a0, 0x39a0, 0x39a0, 0x399f, 0x399f, 0x399e, - 0x399e, 0x399e, 0x399d, 0x399d, 0x399d, 0x399c, 0x399c, 0x399c, - 0x399b, 0x399b, 0x399b, 0x399a, 0x399a, 0x399a, 0x3999, 0x3999, - 0x3999, 0x3998, 0x3998, 0x3997, 0x3997, 0x3997, 0x3996, 0x3996, - 0x3996, 0x3995, 0x3995, 0x3995, 0x3994, 0x3994, 0x3994, 0x3993, - 0x3993, 0x3993, 0x3992, 0x3992, 0x3992, 0x3991, 0x3991, 0x3991, - 0x3990, 0x3990, 0x398f, 0x398f, 0x398f, 0x398e, 0x398e, 0x398e, - 0x398d, 0x398d, 0x398d, 0x398c, 0x398c, 0x398c, 0x398b, 0x398b, - 0x398b, 0x398a, 0x398a, 0x398a, 0x3989, 0x3989, 0x3989, 0x3988, - 0x3988, 0x3987, 0x3987, 0x3987, 0x3986, 0x3986, 0x3986, 0x3985, - 0x3985, 0x3985, 0x3984, 0x3984, 0x3984, 0x3983, 0x3983, 0x3983, - 0x3982, 0x3982, 0x3982, 0x3981, 0x3981, 0x3981, 0x3980, 0x3980, - 0x3980, 0x397f, 0x397f, 0x397f, 0x397e, 0x397e, 0x397e, 0x397d, - 0x397d, 0x397c, 0x397c, 0x397c, 0x397b, 0x397b, 0x397b, 0x397a, - 0x397a, 0x397a, 0x3979, 0x3979, 0x3979, 0x3978, 0x3978, 0x3978, - 0x3977, 0x3977, 0x3977, 0x3976, 0x3976, 0x3976, 0x3975, 0x3975, - 0x3975, 0x3974, 0x3974, 0x3974, 0x3973, 0x3973, 0x3973, 0x3972, - 0x3972, 0x3972, 0x3971, 0x3971, 0x3971, 0x3970, 0x3970, 0x3970, - 0x396f, 0x396f, 0x396e, 0x396e, 0x396e, 0x396d, 0x396d, 0x396d, - 0x396c, 0x396c, 0x396c, 0x396b, 0x396b, 0x396b, 0x396a, 0x396a, - 0x396a, 0x3969, 0x3969, 0x3969, 0x3968, 0x3968, 0x3968, 0x3967, - 0x3967, 0x3967, 0x3966, 0x3966, 0x3966, 0x3965, 0x3965, 0x3965, - 0x3964, 0x3964, 0x3964, 0x3963, 0x3963, 0x3963, 0x3962, 0x3962, - 0x3962, 0x3961, 0x3961, 0x3961, 0x3960, 0x3960, 0x3960, 0x395f, - 0x395f, 0x395f, 0x395e, 0x395e, 0x395e, 0x395d, 0x395d, 0x395d, - 0x395c, 0x395c, 0x395c, 0x395b, 0x395b, 0x395b, 0x395a, 0x395a, - 0x395a, 0x3959, 0x3959, 0x3959, 0x3958, 0x3958, 0x3958, 0x3957, - 0x3957, 0x3957, 0x3956, 0x3956, 0x3956, 0x3955, 0x3955, 0x3955, - 0x3954, 0x3954, 0x3954, 0x3953, 0x3953, 0x3953, 0x3952, 0x3952, - 0x3952, 0x3951, 0x3951, 0x3951, 0x3950, 0x3950, 0x3950, 0x394f, - 0x394f, 0x394f, 0x394e, 0x394e, 0x394e, 0x394d, 0x394d, 0x394d, - 0x394c, 0x394c, 0x394c, 0x394b, 0x394b, 0x394b, 0x394a, 0x394a, - 0x394a, 0x3949, 0x3949, 0x3949, 0x3948, 0x3948, 0x3948, 0x3947, - 0x3947, 0x3947, 0x3946, 0x3946, 0x3946, 0x3945, 0x3945, 0x3945, - 0x3944, 0x3944, 0x3944, 0x3943, 0x3943, 0x3943, 0x3942, 0x3942, - 0x3942, 0x3941, 0x3941, 0x3941, 0x3940, 0x3940, 0x3940, 0x393f, - 0x393f, 0x393f, 0x393e, 0x393e, 0x393e, 0x393d, 0x393d, 0x393d, - 0x393c, 0x393c, 0x393c, 0x393c, 0x393b, 0x393b, 0x393b, 0x393a, - 0x393a, 0x393a, 0x3939, 0x3939, 0x3939, 0x3938, 0x3938, 0x3938, - 0x3937, 0x3937, 0x3937, 0x3936, 0x3936, 0x3936, 0x3935, 0x3935, - 0x3935, 0x3934, 0x3934, 0x3934, 0x3933, 0x3933, 0x3933, 0x3932, - 0x3932, 0x3932, 0x3931, 0x3931, 0x3931, 0x3930, 0x3930, 0x3930, - 0x392f, 0x392f, 0x392f, 0x392e, 0x392e, 0x392e, 0x392e, 0x392d, - 0x392d, 0x392d, 0x392c, 0x392c, 0x392c, 0x392b, 0x392b, 0x392b, - 0x392a, 0x392a, 0x392a, 0x3929, 0x3929, 0x3929, 0x3928, 0x3928, - 0x3928, 0x3927, 0x3927, 0x3927, 0x3926, 0x3926, 0x3926, 0x3925, - 0x3925, 0x3925, 0x3924, 0x3924, 0x3924, 0x3924, 0x3923, 0x3923, - 0x3923, 0x3922, 0x3922, 0x3922, 0x3921, 0x3921, 0x3921, 0x3920, - 0x3920, 0x3920, 0x391f, 0x391f, 0x391f, 0x391e, 0x391e, 0x391e, - 0x391d, 0x391d, 0x391d, 0x391c, 0x391c, 0x391c, 0x391c, 0x391b, - 0x391b, 0x391b, 0x391a, 0x391a, 0x391a, 0x3919, 0x3919, 0x3919, - 0x3918, 0x3918, 0x3918, 0x3917, 0x3917, 0x3917, 0x3916, 0x3916, - 0x3916, 0x3915, 0x3915, 0x3915, 0x3915, 0x3914, 0x3914, 0x3914, - 0x3913, 0x3913, 0x3913, 0x3912, 0x3912, 0x3912, 0x3911, 0x3911, - 0x3911, 0x3910, 0x3910, 0x3910, 0x390f, 0x390f, 0x390f, 0x390e, - 0x390e, 0x390e, 0x390e, 0x390d, 0x390d, 0x390d, 0x390c, 0x390c, - 0x390c, 0x390b, 0x390b, 0x390b, 0x390a, 0x390a, 0x390a, 0x3909, - 0x3909, 0x3909, 0x3909, 0x3908, 0x3908, 0x3908, 0x3907, 0x3907, - 0x3907, 0x3906, 0x3906, 0x3906, 0x3905, 0x3905, 0x3905, 0x3904, - 0x3904, 0x3904, 0x3903, 0x3903, 0x3903, 0x3903, 0x3902, 0x3902, - 0x3902, 0x3901, 0x3901, 0x3901, 0x3900, 0x3900, 0x3900, 0x38ff, - 0x38ff, 0x38ff, 0x38fe, 0x38fe, 0x38fe, 0x38fe, 0x38fd, 0x38fd, - 0x38fd, 0x38fc, 0x38fc, 0x38fc, 0x38fb, 0x38fb, 0x38fb, 0x38fa, - 0x38fa, 0x38fa, 0x38f9, 0x38f9, 0x38f9, 0x38f9, 0x38f8, 0x38f8, - 0x38f8, 0x38f7, 0x38f7, 0x38f7, 0x38f6, 0x38f6, 0x38f6, 0x38f5, - 0x38f5, 0x38f5, 0x38f5, 0x38f4, 0x38f4, 0x38f4, 0x38f3, 0x38f3, - 0x38f3, 0x38f2, 0x38f2, 0x38f2, 0x38f1, 0x38f1, 0x38f1, 0x38f1, - 0x38f0, 0x38f0, 0x38f0, 0x38ef, 0x38ef, 0x38ef, 0x38ee, 0x38ee, - 0x38ee, 0x38ed, 0x38ed, 0x38ed, 0x38ed, 0x38ec, 0x38ec, 0x38ec, - 0x38eb, 0x38eb, 0x38eb, 0x38ea, 0x38ea, 0x38ea, 0x38e9, 0x38e9, - 0x38e9, 0x38e9, 0x38e8, 0x38e8, 0x38e8, 0x38e7, 0x38e7, 0x38e7, - 0x38e6, 0x38e6, 0x38e6, 0x38e5, 0x38e5, 0x38e5, 0x38e5, 0x38e4, - 0x38e4, 0x38e4, 0x38e3, 0x38e3, 0x38e3, 0x38e2, 0x38e2, 0x38e2, - 0x38e1, 0x38e1, 0x38e1, 0x38e1, 0x38e0, 0x38e0, 0x38e0, 0x38df, - 0x38df, 0x38df, 0x38de, 0x38de, 0x38de, 0x38de, 0x38dd, 0x38dd, - 0x38dd, 0x38dc, 0x38dc, 0x38dc, 0x38db, 0x38db, 0x38db, 0x38da, - 0x38da, 0x38da, 0x38d9, 0x38d8, 0x38d8, 0x38d7, 0x38d7, 0x38d6, - 0x38d5, 0x38d5, 0x38d4, 0x38d4, 0x38d3, 0x38d2, 0x38d2, 0x38d1, - 0x38d1, 0x38d0, 0x38cf, 0x38cf, 0x38ce, 0x38ce, 0x38cd, 0x38cc, - 0x38cc, 0x38cb, 0x38cb, 0x38ca, 0x38c9, 0x38c9, 0x38c8, 0x38c8, - 0x38c7, 0x38c6, 0x38c6, 0x38c5, 0x38c5, 0x38c4, 0x38c3, 0x38c3, - 0x38c2, 0x38c2, 0x38c1, 0x38c0, 0x38c0, 0x38bf, 0x38bf, 0x38be, - 0x38bd, 0x38bd, 0x38bc, 0x38bc, 0x38bb, 0x38ba, 0x38ba, 0x38b9, - 0x38b9, 0x38b8, 0x38b7, 0x38b7, 0x38b6, 0x38b6, 0x38b5, 0x38b5, - 0x38b4, 0x38b3, 0x38b3, 0x38b2, 0x38b2, 0x38b1, 0x38b0, 0x38b0, - 0x38af, 0x38af, 0x38ae, 0x38ae, 0x38ad, 0x38ac, 0x38ac, 0x38ab, - 0x38ab, 0x38aa, 0x38a9, 0x38a9, 0x38a8, 0x38a8, 0x38a7, 0x38a7, - 0x38a6, 0x38a5, 0x38a5, 0x38a4, 0x38a4, 0x38a3, 0x38a2, 0x38a2, - 0x38a1, 0x38a1, 0x38a0, 0x38a0, 0x389f, 0x389e, 0x389e, 0x389d, - 0x389d, 0x389c, 0x389c, 0x389b, 0x389a, 0x389a, 0x3899, 0x3899, - 0x3898, 0x3897, 0x3897, 0x3896, 0x3896, 0x3895, 0x3895, 0x3894, - 0x3893, 0x3893, 0x3892, 0x3892, 0x3891, 0x3891, 0x3890, 0x388f, - 0x388f, 0x388e, 0x388e, 0x388d, 0x388d, 0x388c, 0x388c, 0x388b, - 0x388a, 0x388a, 0x3889, 0x3889, 0x3888, 0x3888, 0x3887, 0x3886, - 0x3886, 0x3885, 0x3885, 0x3884, 0x3884, 0x3883, 0x3882, 0x3882, - 0x3881, 0x3881, 0x3880, 0x3880, 0x387f, 0x387f, 0x387e, 0x387d, - 0x387d, 0x387c, 0x387c, 0x387b, 0x387b, 0x387a, 0x3879, 0x3879, - 0x3878, 0x3878, 0x3877, 0x3877, 0x3876, 0x3876, 0x3875, 0x3874, - 0x3874, 0x3873, 0x3873, 0x3872, 0x3872, 0x3871, 0x3871, 0x3870, - 0x386f, 0x386f, 0x386e, 0x386e, 0x386d, 0x386d, 0x386c, 0x386c, - 0x386b, 0x386a, 0x386a, 0x3869, 0x3869, 0x3868, 0x3868, 0x3867, - 0x3867, 0x3866, 0x3866, 0x3865, 0x3864, 0x3864, 0x3863, 0x3863, - 0x3862, 0x3862, 0x3861, 0x3861, 0x3860, 0x385f, 0x385f, 0x385e, - 0x385e, 0x385d, 0x385d, 0x385c, 0x385c, 0x385b, 0x385b, 0x385a, - 0x3859, 0x3859, 0x3858, 0x3858, 0x3857, 0x3857, 0x3856, 0x3856, - 0x3855, 0x3855, 0x3854, 0x3854, 0x3853, 0x3852, 0x3852, 0x3851, - 0x3851, 0x3850, 0x3850, 0x384f, 0x384f, 0x384e, 0x384e, 0x384d, - 0x384d, 0x384c, 0x384b, 0x384b, 0x384a, 0x384a, 0x3849, 0x3849, - 0x3848, 0x3848, 0x3847, 0x3847, 0x3846, 0x3846, 0x3845, 0x3844, - 0x3844, 0x3843, 0x3843, 0x3842, 0x3842, 0x3841, 0x3841, 0x3840, - 0x3840, 0x383f, 0x383f, 0x383e, 0x383e, 0x383d, 0x383d, 0x383c, - 0x383b, 0x383b, 0x383a, 0x383a, 0x3839, 0x3839, 0x3838, 0x3838, - 0x3837, 0x3837, 0x3836, 0x3836, 0x3835, 0x3835, 0x3834, 0x3834, - 0x3833, 0x3832, 0x3832, 0x3831, 0x3831, 0x3830, 0x3830, 0x382f, - 0x382f, 0x382e, 0x382e, 0x382d, 0x382d, 0x382c, 0x382c, 0x382b, - 0x382b, 0x382a, 0x382a, 0x3829, 0x3829, 0x3828, 0x3828, 0x3827, - 0x3826, 0x3826, 0x3825, 0x3825, 0x3824, 0x3824, 0x3823, 0x3823, - 0x3822, 0x3822, 0x3821, 0x3821, 0x3820, 0x3820, 0x381f, 0x381f, - 0x381e, 0x381e, 0x381d, 0x381d, 0x381c, 0x381c, 0x381b, 0x381b, - 0x381a, 0x381a, 0x3819, 0x3819, 0x3818, 0x3818, 0x3817, 0x3817, - 0x3816, 0x3816, 0x3815, 0x3814, 0x3814, 0x3813, 0x3813, 0x3812, - 0x3812, 0x3811, 0x3811, 0x3810, 0x3810, 0x380f, 0x380f, 0x380e, - 0x380e, 0x380d, 0x380d, 0x380c, 0x380c, 0x380b, 0x380b, 0x380a, - 0x380a, 0x3809, 0x3809, 0x3808, 0x3808, 0x3807, 0x3807, 0x3806, - 0x3806, 0x3805, 0x3805, 0x3804, 0x3804, 0x3803, 0x3803, 0x3802, - 0x3802, 0x3801, 0x3801, 0x3800, 0x3800, 0x37ff, 0x37fe, 0x37fd, - 0x37fc, 0x37fb, 0x37fa, 0x37f9, 0x37f8, 0x37f7, 0x37f6, 0x37f5, - 0x37f4, 0x37f3, 0x37f2, 0x37f1, 0x37f0, 0x37ef, 0x37ee, 0x37ed, - 0x37ec, 0x37eb, 0x37ea, 0x37e9, 0x37e8, 0x37e7, 0x37e6, 0x37e5, - 0x37e4, 0x37e3, 0x37e2, 0x37e1, 0x37e0, 0x37df, 0x37de, 0x37dd, - 0x37dc, 0x37db, 0x37da, 0x37d9, 0x37d8, 0x37d7, 0x37d6, 0x37d5, - 0x37d4, 0x37d3, 0x37d2, 0x37d1, 0x37d0, 0x37cf, 0x37ce, 0x37cd, - 0x37cc, 0x37cb, 0x37ca, 0x37c9, 0x37c8, 0x37c7, 0x37c6, 0x37c5, - 0x37c4, 0x37c3, 0x37c3, 0x37c2, 0x37c1, 0x37c0, 0x37bf, 0x37be, - 0x37bd, 0x37bc, 0x37bb, 0x37ba, 0x37b9, 0x37b8, 0x37b7, 0x37b6, - 0x37b5, 0x37b4, 0x37b3, 0x37b2, 0x37b1, 0x37b0, 0x37af, 0x37ae, - 0x37ad, 0x37ac, 0x37ab, 0x37aa, 0x37a9, 0x37a8, 0x37a8, 0x37a7, - 0x37a6, 0x37a5, 0x37a4, 0x37a3, 0x37a2, 0x37a1, 0x37a0, 0x379f, - 0x379e, 0x379d, 0x379c, 0x379b, 0x379a, 0x3799, 0x3798, 0x3797, - 0x3796, 0x3795, 0x3794, 0x3794, 0x3793, 0x3792, 0x3791, 0x3790, - 0x378f, 0x378e, 0x378d, 0x378c, 0x378b, 0x378a, 0x3789, 0x3788, - 0x3787, 0x3786, 0x3785, 0x3784, 0x3784, 0x3783, 0x3782, 0x3781, - 0x3780, 0x377f, 0x377e, 0x377d, 0x377c, 0x377b, 0x377a, 0x3779, - 0x3778, 0x3777, 0x3776, 0x3775, 0x3775, 0x3774, 0x3773, 0x3772, - 0x3771, 0x3770, 0x376f, 0x376e, 0x376d, 0x376c, 0x376b, 0x376a, - 0x3769, 0x3768, 0x3768, 0x3767, 0x3766, 0x3765, 0x3764, 0x3763, - 0x3762, 0x3761, 0x3760, 0x375f, 0x375e, 0x375d, 0x375c, 0x375c, - 0x375b, 0x375a, 0x3759, 0x3758, 0x3757, 0x3756, 0x3755, 0x3754, - 0x3753, 0x3752, 0x3751, 0x3751, 0x3750, 0x374f, 0x374e, 0x374d, - 0x374c, 0x374b, 0x374a, 0x3749, 0x3748, 0x3747, 0x3747, 0x3746, - 0x3745, 0x3744, 0x3743, 0x3742, 0x3741, 0x3740, 0x373f, 0x373e, - 0x373d, 0x373d, 0x373c, 0x373b, 0x373a, 0x3739, 0x3738, 0x3737, - 0x3736, 0x3735, 0x3734, 0x3734, 0x3733, 0x3732, 0x3731, 0x3730, - 0x372f, 0x372e, 0x372d, 0x372c, 0x372b, 0x372b, 0x372a, 0x3729, - 0x3728, 0x3727, 0x3726, 0x3725, 0x3724, 0x3723, 0x3722, 0x3722, - 0x3721, 0x3720, 0x371f, 0x371e, 0x371d, 0x371c, 0x371b, 0x371a, - 0x371a, 0x3719, 0x3718, 0x3717, 0x3716, 0x3715, 0x3714, 0x3713, - 0x3713, 0x3712, 0x3711, 0x3710, 0x370f, 0x370e, 0x370d, 0x370c, - 0x370b, 0x370b, 0x370a, 0x3709, 0x3708, 0x3707, 0x3706, 0x3705, - 0x3704, 0x3704, 0x3703, 0x3702, 0x3701, 0x3700, 0x36ff, 0x36fe, - 0x36fd, 0x36fd, 0x36fc, 0x36fb, 0x36fa, 0x36f9, 0x36f8, 0x36f7, - 0x36f6, 0x36f6, 0x36f5, 0x36f4, 0x36f3, 0x36f2, 0x36f1, 0x36f0, - 0x36ef, 0x36ef, 0x36ee, 0x36ed, 0x36ec, 0x36eb, 0x36ea, 0x36e9, - 0x36e9, 0x36e8, 0x36e7, 0x36e6, 0x36e5, 0x36e4, 0x36e3, 0x36e3, - 0x36e2, 0x36e1, 0x36e0, 0x36df, 0x36de, 0x36dd, 0x36dd, 0x36dc, - 0x36db, 0x36da, 0x36d9, 0x36d8, 0x36d7, 0x36d7, 0x36d6, 0x36d5, - 0x36d4, 0x36d3, 0x36d2, 0x36d1, 0x36d1, 0x36d0, 0x36cf, 0x36ce, - 0x36cd, 0x36cc, 0x36cb, 0x36cb, 0x36ca, 0x36c9, 0x36c8, 0x36c7, - 0x36c6, 0x36c6, 0x36c5, 0x36c4, 0x36c3, 0x36c2, 0x36c1, 0x36c0, - 0x36c0, 0x36bf, 0x36be, 0x36bd, 0x36bc, 0x36bb, 0x36bb, 0x36ba, - 0x36b9, 0x36b8, 0x36b7, 0x36b6, 0x36b6, 0x36b5, 0x36b4, 0x36b3, - 0x36b2, 0x36b1, 0x36b0, 0x36b0, 0x36af, 0x36ae, 0x36ad, 0x36ac, - 0x36ab, 0x36ab, 0x36aa, 0x36a9, 0x36a8, 0x36a7, 0x36a6, 0x36a6, - 0x36a5, 0x36a4, 0x36a3, 0x36a2, 0x36a1, 0x36a1, 0x36a0, 0x369f, - 0x369e, 0x369d, 0x369d, 0x369c, 0x369b, 0x369a, 0x3699, 0x3698, - 0x3698, 0x3697, 0x3696, 0x3695, 0x3694, 0x3693, 0x3693, 0x3692, - 0x3691, 0x3690, 0x368f, 0x368f, 0x368e, 0x368d, 0x368c, 0x368b, - 0x368a, 0x368a, 0x3689, 0x3688, 0x3687, 0x3686, 0x3686, 0x3685, - 0x3684, 0x3683, 0x3682, 0x3681, 0x3681, 0x3680, 0x367f, 0x367e, - 0x367d, 0x367d, 0x367c, 0x367b, 0x367a, 0x3679, 0x3679, 0x3678, - 0x3677, 0x3676, 0x3675, 0x3675, 0x3674, 0x3673, 0x3672, 0x3671, - 0x3670, 0x3670, 0x366f, 0x366e, 0x366d, 0x366c, 0x366c, 0x366b, - 0x366a, 0x3669, 0x3668, 0x3668, 0x3667, 0x3666, 0x3665, 0x3664, - 0x3664, 0x3663, 0x3662, 0x3661, 0x3660, 0x3660, 0x365f, 0x365e, - 0x365d, 0x365c, 0x365c, 0x365b, 0x365a, 0x3659, 0x3659, 0x3658, - 0x3657, 0x3656, 0x3655, 0x3655, 0x3654, 0x3653, 0x3652, 0x3651, - 0x3651, 0x3650, 0x364f, 0x364e, 0x364d, 0x364d, 0x364c, 0x364b, - 0x364a, 0x364a, 0x3649, 0x3648, 0x3647, 0x3646, 0x3646, 0x3645, - 0x3644, 0x3643, 0x3642, 0x3642, 0x3641, 0x3640, 0x363f, 0x363f, - 0x363e, 0x363d, 0x363c, 0x363b, 0x363b, 0x363a, 0x3639, 0x3638, - 0x3638, 0x3637, 0x3636, 0x3635, 0x3634, 0x3634, 0x3633, 0x3632, - 0x3631, 0x3631, 0x3630, 0x362f, 0x362e, 0x362d, 0x362d, 0x362c, - 0x362b, 0x362a, 0x362a, 0x3629, 0x3628, 0x3627, 0x3627, 0x3626, - 0x3625, 0x3624, 0x3623, 0x3623, 0x3622, 0x3621, 0x3620, 0x3620, - 0x361f, 0x361e, 0x361d, 0x361d, 0x361c, 0x361b, 0x361a, 0x361a, - 0x3619, 0x3618, 0x3617, 0x3616, 0x3616, 0x3615, 0x3614, 0x3613, - 0x3613, 0x3612, 0x3611, 0x3610, 0x3610, 0x360f, 0x360e, 0x360d, - 0x360d, 0x360c, 0x360b, 0x360a, 0x360a, 0x3609, 0x3608, 0x3607, - 0x3607, 0x3606, 0x3605, 0x3604, 0x3604, 0x3603, 0x3602, 0x3601, - 0x3601, 0x3600, 0x35ff, 0x35fe, 0x35fe, 0x35fd, 0x35fc, 0x35fb, - 0x35fb, 0x35fa, 0x35f9, 0x35f8, 0x35f8, 0x35f7, 0x35f6, 0x35f5, - 0x35f5, 0x35f4, 0x35f3, 0x35f2, 0x35f2, 0x35f1, 0x35f0, 0x35ef, - 0x35ef, 0x35ee, 0x35ed, 0x35ec, 0x35ec, 0x35eb, 0x35ea, 0x35e9, - 0x35e9, 0x35e8, 0x35e7, 0x35e7, 0x35e6, 0x35e5, 0x35e4, 0x35e4, - 0x35e3, 0x35e1, 0x35e0, 0x35de, 0x35dd, 0x35db, 0x35da, 0x35d9, - 0x35d7, 0x35d6, 0x35d4, 0x35d3, 0x35d1, 0x35d0, 0x35ce, 0x35cd, - 0x35cb, 0x35ca, 0x35c9, 0x35c7, 0x35c6, 0x35c4, 0x35c3, 0x35c1, - 0x35c0, 0x35be, 0x35bd, 0x35bc, 0x35ba, 0x35b9, 0x35b7, 0x35b6, - 0x35b4, 0x35b3, 0x35b2, 0x35b0, 0x35af, 0x35ad, 0x35ac, 0x35ab, - 0x35a9, 0x35a8, 0x35a6, 0x35a5, 0x35a3, 0x35a2, 0x35a1, 0x359f, - 0x359e, 0x359c, 0x359b, 0x359a, 0x3598, 0x3597, 0x3595, 0x3594, - 0x3593, 0x3591, 0x3590, 0x358e, 0x358d, 0x358c, 0x358a, 0x3589, - 0x3588, 0x3586, 0x3585, 0x3583, 0x3582, 0x3581, 0x357f, 0x357e, - 0x357d, 0x357b, 0x357a, 0x3578, 0x3577, 0x3576, 0x3574, 0x3573, - 0x3572, 0x3570, 0x356f, 0x356e, 0x356c, 0x356b, 0x3569, 0x3568, - 0x3567, 0x3565, 0x3564, 0x3563, 0x3561, 0x3560, 0x355f, 0x355d, - 0x355c, 0x355b, 0x3559, 0x3558, 0x3557, 0x3555, 0x3554, 0x3553, - 0x3551, 0x3550, 0x354f, 0x354d, 0x354c, 0x354b, 0x3549, 0x3548, - 0x3547, 0x3545, 0x3544, 0x3543, 0x3541, 0x3540, 0x353f, 0x353e, - 0x353c, 0x353b, 0x353a, 0x3538, 0x3537, 0x3536, 0x3534, 0x3533, - 0x3532, 0x3530, 0x352f, 0x352e, 0x352d, 0x352b, 0x352a, 0x3529, - 0x3527, 0x3526, 0x3525, 0x3524, 0x3522, 0x3521, 0x3520, 0x351e, - 0x351d, 0x351c, 0x351b, 0x3519, 0x3518, 0x3517, 0x3516, 0x3514, - 0x3513, 0x3512, 0x3510, 0x350f, 0x350e, 0x350d, 0x350b, 0x350a, - 0x3509, 0x3508, 0x3506, 0x3505, 0x3504, 0x3503, 0x3501, 0x3500, - 0x34ff, 0x34fe, 0x34fc, 0x34fb, 0x34fa, 0x34f9, 0x34f7, 0x34f6, - 0x34f5, 0x34f4, 0x34f2, 0x34f1, 0x34f0, 0x34ef, 0x34ed, 0x34ec, - 0x34eb, 0x34ea, 0x34e9, 0x34e7, 0x34e6, 0x34e5, 0x34e4, 0x34e2, - 0x34e1, 0x34e0, 0x34df, 0x34de, 0x34dc, 0x34db, 0x34da, 0x34d9, - 0x34d7, 0x34d6, 0x34d5, 0x34d4, 0x34d3, 0x34d1, 0x34d0, 0x34cf, - 0x34ce, 0x34cd, 0x34cb, 0x34ca, 0x34c9, 0x34c8, 0x34c7, 0x34c5, - 0x34c4, 0x34c3, 0x34c2, 0x34c1, 0x34c0, 0x34be, 0x34bd, 0x34bc, - 0x34bb, 0x34ba, 0x34b8, 0x34b7, 0x34b6, 0x34b5, 0x34b4, 0x34b3, - 0x34b1, 0x34b0, 0x34af, 0x34ae, 0x34ad, 0x34ac, 0x34aa, 0x34a9, - 0x34a8, 0x34a7, 0x34a6, 0x34a5, 0x34a3, 0x34a2, 0x34a1, 0x34a0, - 0x349f, 0x349e, 0x349c, 0x349b, 0x349a, 0x3499, 0x3498, 0x3497, - 0x3496, 0x3494, 0x3493, 0x3492, 0x3491, 0x3490, 0x348f, 0x348e, - 0x348c, 0x348b, 0x348a, 0x3489, 0x3488, 0x3487, 0x3486, 0x3484, - 0x3483, 0x3482, 0x3481, 0x3480, 0x347f, 0x347e, 0x347d, 0x347b, - 0x347a, 0x3479, 0x3478, 0x3477, 0x3476, 0x3475, 0x3474, 0x3473, - 0x3471, 0x3470, 0x346f, 0x346e, 0x346d, 0x346c, 0x346b, 0x346a, - 0x3469, 0x3467, 0x3466, 0x3465, 0x3464, 0x3463, 0x3462, 0x3461, - 0x3460, 0x345f, 0x345e, 0x345d, 0x345b, 0x345a, 0x3459, 0x3458, - 0x3457, 0x3456, 0x3455, 0x3454, 0x3453, 0x3452, 0x3451, 0x3450, - 0x344e, 0x344d, 0x344c, 0x344b, 0x344a, 0x3449, 0x3448, 0x3447, - 0x3446, 0x3445, 0x3444, 0x3443, 0x3442, 0x3441, 0x343f, 0x343e, - 0x343d, 0x343c, 0x343b, 0x343a, 0x3439, 0x3438, 0x3437, 0x3436, - 0x3435, 0x3434, 0x3433, 0x3432, 0x3431, 0x3430, 0x342f, 0x342e, - 0x342d, 0x342b, 0x342a, 0x3429, 0x3428, 0x3427, 0x3426, 0x3425, - 0x3424, 0x3423, 0x3422, 0x3421, 0x3420, 0x341f, 0x341e, 0x341d, - 0x341c, 0x341b, 0x341a, 0x3419, 0x3418, 0x3417, 0x3416, 0x3415, - 0x3414, 0x3413, 0x3412, 0x3411, 0x3410, 0x340f, 0x340e, 0x340d, - 0x340c, 0x340b, 0x340a, 0x3409, 0x3408, 0x3407, 0x3406, 0x3405, - 0x3404, 0x3403, 0x3402, 0x3401, 0x33ff, 0x33fd, 0x33fb, 0x33f9, - 0x33f7, 0x33f5, 0x33f3, 0x33f1, 0x33ef, 0x33ed, 0x33eb, 0x33e9, - 0x33e7, 0x33e5, 0x33e3, 0x33e1, 0x33df, 0x33dd, 0x33db, 0x33d9, - 0x33d8, 0x33d6, 0x33d4, 0x33d2, 0x33d0, 0x33ce, 0x33cc, 0x33ca, - 0x33c8, 0x33c6, 0x33c4, 0x33c2, 0x33c0, 0x33be, 0x33bc, 0x33ba, - 0x33b8, 0x33b6, 0x33b5, 0x33b3, 0x33b1, 0x33af, 0x33ad, 0x33ab, - 0x33a9, 0x33a7, 0x33a5, 0x33a3, 0x33a1, 0x339f, 0x339e, 0x339c, - 0x339a, 0x3398, 0x3396, 0x3394, 0x3392, 0x3390, 0x338e, 0x338d, - 0x338b, 0x3389, 0x3387, 0x3385, 0x3383, 0x3381, 0x337f, 0x337d, - 0x337c, 0x337a, 0x3378, 0x3376, 0x3374, 0x3372, 0x3370, 0x336f, - 0x336d, 0x336b, 0x3369, 0x3367, 0x3365, 0x3363, 0x3362, 0x3360, - 0x335e, 0x335c, 0x335a, 0x3358, 0x3357, 0x3355, 0x3353, 0x3351, - 0x334f, 0x334d, 0x334c, 0x334a, 0x3348, 0x3346, 0x3344, 0x3342, - 0x3341, 0x333f, 0x333d, 0x333b, 0x3339, 0x3338, 0x3336, 0x3334, - 0x3332, 0x3330, 0x332f, 0x332d, 0x332b, 0x3329, 0x3327, 0x3326, - 0x3324, 0x3322, 0x3320, 0x331f, 0x331d, 0x331b, 0x3319, 0x3317, - 0x3316, 0x3314, 0x3312, 0x3310, 0x330f, 0x330d, 0x330b, 0x3309, - 0x3308, 0x3306, 0x3304, 0x3302, 0x3301, 0x32ff, 0x32fd, 0x32fb, - 0x32fa, 0x32f8, 0x32f6, 0x32f4, 0x32f3, 0x32f1, 0x32ef, 0x32ed, - 0x32ec, 0x32ea, 0x32e8, 0x32e6, 0x32e5, 0x32e3, 0x32e1, 0x32e0, - 0x32de, 0x32dc, 0x32da, 0x32d9, 0x32d7, 0x32d5, 0x32d4, 0x32d2, - 0x32d0, 0x32ce, 0x32cd, 0x32cb, 0x32c9, 0x32c8, 0x32c6, 0x32c4, - 0x32c3, 0x32c1, 0x32bf, 0x32be, 0x32bc, 0x32ba, 0x32b8, 0x32b7, - 0x32b5, 0x32b3, 0x32b2, 0x32b0, 0x32ae, 0x32ad, 0x32ab, 0x32a9, - 0x32a8, 0x32a6, 0x32a4, 0x32a3, 0x32a1, 0x329f, 0x329e, 0x329c, - 0x329b, 0x3299, 0x3297, 0x3296, 0x3294, 0x3292, 0x3291, 0x328f, - 0x328d, 0x328c, 0x328a, 0x3288, 0x3287, 0x3285, 0x3284, 0x3282, - 0x3280, 0x327f, 0x327d, 0x327b, 0x327a, 0x3278, 0x3277, 0x3275, - 0x3273, 0x3272, 0x3270, 0x326f, 0x326d, 0x326b, 0x326a, 0x3268, - 0x3267, 0x3265, 0x3263, 0x3262, 0x3260, 0x325f, 0x325d, 0x325b, - 0x325a, 0x3258, 0x3257, 0x3255, 0x3253, 0x3252, 0x3250, 0x324f, - 0x324d, 0x324c, 0x324a, 0x3248, 0x3247, 0x3245, 0x3244, 0x3242, - 0x3241, 0x323f, 0x323d, 0x323c, 0x323a, 0x3239, 0x3237, 0x3236, - 0x3234, 0x3233, 0x3231, 0x322f, 0x322e, 0x322c, 0x322b, 0x3229, - 0x3228, 0x3226, 0x3225, 0x3223, 0x3222, 0x3220, 0x321f, 0x321d, - 0x321b, 0x321a, 0x3218, 0x3217, 0x3215, 0x3214, 0x3212, 0x3211, - 0x320f, 0x320e, 0x320c, 0x320b, 0x3209, 0x3208, 0x3206, 0x3205, - 0x3203, 0x3202, 0x3200, 0x31ff, 0x31fd, 0x31fc, 0x31fa, 0x31f9, - 0x31f7, 0x31f6, 0x31f4, 0x31f3, 0x31f1, 0x31f0, 0x31ee, 0x31ed, - 0x31eb, 0x31ea, 0x31e8, 0x31e7, 0x31e5, 0x31e4, 0x31e3, 0x31e1, - 0x31e0, 0x31de, 0x31dd, 0x31db, 0x31da, 0x31d8, 0x31d7, 0x31d5, - 0x31d4, 0x31d2, 0x31d1, 0x31d0, 0x31ce, 0x31cd, 0x31cb, 0x31ca, - 0x31c8, 0x31c7, 0x31c5, 0x31c4, 0x31c2, 0x31c1, 0x31c0, 0x31be, - 0x31bd, 0x31bb, 0x31ba, 0x31b8, 0x31b7, 0x31b6, 0x31b4, 0x31b3, - 0x31b1, 0x31b0, 0x31ae, 0x31ad, 0x31ac, 0x31aa, 0x31a9, 0x31a7, - 0x31a6, 0x31a5, 0x31a3, 0x31a2, 0x31a0, 0x319f, 0x319e, 0x319c, - 0x319b, 0x3199, 0x3198, 0x3197, 0x3195, 0x3194, 0x3192, 0x3191, - 0x3190, 0x318e, 0x318d, 0x318b, 0x318a, 0x3189, 0x3187, 0x3186, - 0x3184, 0x3183, 0x3182, 0x3180, 0x317f, 0x317e, 0x317c, 0x317b, - 0x3179, 0x3178, 0x3177, 0x3175, 0x3174, 0x3173, 0x3171, 0x3170, - 0x316f, 0x316d, 0x316c, 0x316b, 0x3169, 0x3168, 0x3166, 0x3165, - 0x3164, 0x3162, 0x3161, 0x3160, 0x315e, 0x315d, 0x315c, 0x315a, - 0x3159, 0x3158, 0x3156, 0x3155, 0x3154, 0x3152, 0x3151, 0x3150, - 0x314e, 0x314d, 0x314c, 0x314a, 0x3149, 0x3148, 0x3146, 0x3145, - 0x3144, 0x3142, 0x3141, 0x3140, 0x313f, 0x313d, 0x313c, 0x313b, - 0x3139, 0x3138, 0x3137, 0x3135, 0x3134, 0x3133, 0x3131, 0x3130, - 0x312f, 0x312e, 0x312c, 0x312b, 0x312a, 0x3128, 0x3127, 0x3126, - 0x3125, 0x3123, 0x3122, 0x3121, 0x311f, 0x311e, 0x311d, 0x311c, - 0x311a, 0x3119, 0x3118, 0x3117, 0x3115, 0x3114, 0x3113, 0x3111, - 0x3110, 0x310f, 0x310e, 0x310c, 0x310b, 0x310a, 0x3109, 0x3107, - 0x3106, 0x3105, 0x3104, 0x3102, 0x3101, 0x3100, 0x30ff, 0x30fd, - 0x30fc, 0x30fb, 0x30fa, 0x30f8, 0x30f7, 0x30f6, 0x30f5, 0x30f3, - 0x30f2, 0x30f1, 0x30f0, 0x30ee, 0x30ed, 0x30ec, 0x30eb, 0x30ea, - 0x30e8, 0x30e7, 0x30e6, 0x30e5, 0x30e3, 0x30e2, 0x30e1, 0x30e0, - 0x30df, 0x30dd, 0x30dc, 0x30db, 0x30da, 0x30d8, 0x30d7, 0x30d6, - 0x30d5, 0x30d4, 0x30d2, 0x30d1, 0x30d0, 0x30cf, 0x30ce, 0x30cc, - 0x30cb, 0x30ca, 0x30c9, 0x30c8, 0x30c6, 0x30c5, 0x30c4, 0x30c3, - 0x30c2, 0x30c0, 0x30bf, 0x30be, 0x30bd, 0x30bc, 0x30bb, 0x30b9, - 0x30b8, 0x30b7, 0x30b6, 0x30b5, 0x30b3, 0x30b2, 0x30b1, 0x30b0, - 0x30af, 0x30ae, 0x30ac, 0x30ab, 0x30aa, 0x30a9, 0x30a8, 0x30a7, - 0x30a5, 0x30a4, 0x30a3, 0x30a2, 0x30a1, 0x30a0, 0x309e, 0x309d, - 0x309c, 0x309b, 0x309a, 0x3099, 0x3098, 0x3096, 0x3095, 0x3094, - 0x3093, 0x3092, 0x3091, 0x3090, 0x308e, 0x308d, 0x308c, 0x308b, - 0x308a, 0x3089, 0x3088, 0x3086, 0x3085, 0x3084, 0x3083, 0x3082, - 0x3081, 0x3080, 0x307f, 0x307d, 0x307c, 0x307b, 0x307a, 0x3079, - 0x3078, 0x3077, 0x3076, 0x3075, 0x3073, 0x3072, 0x3071, 0x3070, - 0x306f, 0x306e, 0x306d, 0x306c, 0x306b, 0x3069, 0x3068, 0x3067, - 0x3066, 0x3065, 0x3064, 0x3063, 0x3062, 0x3061, 0x3060, 0x305e, - 0x305d, 0x305c, 0x305b, 0x305a, 0x3059, 0x3058, 0x3057, 0x3056, - 0x3055, 0x3053, 0x3050, 0x304e, 0x304c, 0x304a, 0x3048, 0x3046, - 0x3043, 0x3041, 0x303f, 0x303d, 0x303b, 0x3039, 0x3037, 0x3035, - 0x3033, 0x3030, 0x302e, 0x302c, 0x302a, 0x3028, 0x3026, 0x3024, - 0x3022, 0x3020, 0x301e, 0x301c, 0x301a, 0x3018, 0x3016, 0x3014, - 0x3011, 0x300f, 0x300d, 0x300b, 0x3009, 0x3007, 0x3005, 0x3003, - 0x3001, 0x2fff, 0x2ffb, 0x2ff7, 0x2ff3, 0x2fef, 0x2feb, 0x2fe7, - 0x2fe3, 0x2fdf, 0x2fdb, 0x2fd7, 0x2fd3, 0x2fcf, 0x2fcb, 0x2fc7, - 0x2fc4, 0x2fc0, 0x2fbc, 0x2fb8, 0x2fb4, 0x2fb0, 0x2fac, 0x2fa9, - 0x2fa5, 0x2fa1, 0x2f9d, 0x2f99, 0x2f96, 0x2f92, 0x2f8e, 0x2f8a, - 0x2f86, 0x2f83, 0x2f7f, 0x2f7b, 0x2f77, 0x2f74, 0x2f70, 0x2f6c, - 0x2f69, 0x2f65, 0x2f61, 0x2f5e, 0x2f5a, 0x2f56, 0x2f52, 0x2f4f, - 0x2f4b, 0x2f48, 0x2f44, 0x2f40, 0x2f3d, 0x2f39, 0x2f35, 0x2f32, - 0x2f2e, 0x2f2b, 0x2f27, 0x2f23, 0x2f20, 0x2f1c, 0x2f19, 0x2f15, - 0x2f12, 0x2f0e, 0x2f0b, 0x2f07, 0x2f04, 0x2f00, 0x2efd, 0x2ef9, - 0x2ef6, 0x2ef2, 0x2eef, 0x2eeb, 0x2ee8, 0x2ee4, 0x2ee1, 0x2edd, - 0x2eda, 0x2ed7, 0x2ed3, 0x2ed0, 0x2ecc, 0x2ec9, 0x2ec6, 0x2ec2, - 0x2ebf, 0x2ebb, 0x2eb8, 0x2eb5, 0x2eb1, 0x2eae, 0x2eab, 0x2ea7, - 0x2ea4, 0x2ea1, 0x2e9d, 0x2e9a, 0x2e97, 0x2e94, 0x2e90, 0x2e8d, - 0x2e8a, 0x2e86, 0x2e83, 0x2e80, 0x2e7d, 0x2e79, 0x2e76, 0x2e73, - 0x2e70, 0x2e6d, 0x2e69, 0x2e66, 0x2e63, 0x2e60, 0x2e5d, 0x2e59, - 0x2e56, 0x2e53, 0x2e50, 0x2e4d, 0x2e4a, 0x2e46, 0x2e43, 0x2e40, - 0x2e3d, 0x2e3a, 0x2e37, 0x2e34, 0x2e31, 0x2e2e, 0x2e2a, 0x2e27, - 0x2e24, 0x2e21, 0x2e1e, 0x2e1b, 0x2e18, 0x2e15, 0x2e12, 0x2e0f, - 0x2e0c, 0x2e09, 0x2e06, 0x2e03, 0x2e00, 0x2dfd, 0x2dfa, 0x2df7, - 0x2df4, 0x2df1, 0x2dee, 0x2deb, 0x2de8, 0x2de5, 0x2de2, 0x2ddf, - 0x2ddc, 0x2dd9, 0x2dd6, 0x2dd4, 0x2dd1, 0x2dce, 0x2dcb, 0x2dc8, - 0x2dc5, 0x2dc2, 0x2dbf, 0x2dbc, 0x2dba, 0x2db7, 0x2db4, 0x2db1, - 0x2dae, 0x2dab, 0x2da8, 0x2da6, 0x2da3, 0x2da0, 0x2d9d, 0x2d9a, - 0x2d98, 0x2d95, 0x2d92, 0x2d8f, 0x2d8c, 0x2d8a, 0x2d87, 0x2d84, - 0x2d81, 0x2d7f, 0x2d7c, 0x2d79, 0x2d76, 0x2d74, 0x2d71, 0x2d6e, - 0x2d6c, 0x2d69, 0x2d66, 0x2d63, 0x2d61, 0x2d5e, 0x2d5b, 0x2d59, - 0x2d56, 0x2d53, 0x2d51, 0x2d4e, 0x2d4b, 0x2d49, 0x2d46, 0x2d44, - 0x2d41, 0x2d3e, 0x2d3c, 0x2d39, 0x2d36, 0x2d34, 0x2d31, 0x2d2f, - 0x2d2c, 0x2d29, 0x2d27, 0x2d24, 0x2d22, 0x2d1f, 0x2d1d, 0x2d1a, - 0x2d18, 0x2d15, 0x2d12, 0x2d10, 0x2d0d, 0x2d0b, 0x2d08, 0x2d06, - 0x2d03, 0x2d01, 0x2cfe, 0x2cfc, 0x2cf9, 0x2cf7, 0x2cf4, 0x2cf2, - 0x2cef, 0x2ced, 0x2cea, 0x2ce8, 0x2ce6, 0x2ce3, 0x2ce1, 0x2cde, - 0x2cdc, 0x2cd9, 0x2cd7, 0x2cd5, 0x2cd2, 0x2cd0, 0x2ccd, 0x2ccb, - 0x2cc9, 0x2cc6, 0x2cc4, 0x2cc1, 0x2cbf, 0x2cbd, 0x2cba, 0x2cb8, - 0x2cb6, 0x2cb3, 0x2cb1, 0x2caf, 0x2cac, 0x2caa, 0x2ca7, 0x2ca5, - 0x2ca3, 0x2ca1, 0x2c9e, 0x2c9c, 0x2c9a, 0x2c97, 0x2c95, 0x2c93, - 0x2c90, 0x2c8e, 0x2c8c, 0x2c8a, 0x2c87, 0x2c85, 0x2c83, 0x2c81, - 0x2c7e, 0x2c7c, 0x2c7a, 0x2c78, 0x2c75, 0x2c73, 0x2c71, 0x2c6f, - 0x2c6d, 0x2c6a, 0x2c68, 0x2c66, 0x2c64, 0x2c61, 0x2c5f, 0x2c5d, - 0x2c5b, 0x2c59, 0x2c57, 0x2c54, 0x2c52, 0x2c50, 0x2c4e, 0x2c4c, - 0x2c4a, 0x2c48, 0x2c45, 0x2c43, 0x2c41, 0x2c3f, 0x2c3d, 0x2c3b, - 0x2c39, 0x2c37, 0x2c34, 0x2c32, 0x2c30, 0x2c2e, 0x2c2c, 0x2c2a, - 0x2c28, 0x2c26, 0x2c24, 0x2c22, 0x2c20, 0x2c1e, 0x2c1b, 0x2c19, - 0x2c17, 0x2c15, 0x2c13, 0x2c11, 0x2c0f, 0x2c0d, 0x2c0b, 0x2c09, - 0x2c07, 0x2c05, 0x2c03, 0x2c01, 0x2bfe, 0x2bfa, 0x2bf6, 0x2bf2, - 0x2bee, 0x2bea, 0x2be6, 0x2be2, 0x2bdf, 0x2bdb, 0x2bd7, 0x2bd3, - 0x2bcf, 0x2bcb, 0x2bc7, 0x2bc3, 0x2bbf, 0x2bbb, 0x2bb8, 0x2bb4, - 0x2bb0, 0x2bac, 0x2ba8, 0x2ba4, 0x2ba1, 0x2b9d, 0x2b99, 0x2b95, - 0x2b91, 0x2b8e, 0x2b8a, 0x2b86, 0x2b82, 0x2b7f, 0x2b7b, 0x2b77, - 0x2b73, 0x2b70, 0x2b6c, 0x2b68, 0x2b64, 0x2b61, 0x2b5d, 0x2b59, - 0x2b56, 0x2b52, 0x2b4e, 0x2b4b, 0x2b47, 0x2b44, 0x2b40, 0x2b3c, - 0x2b39, 0x2b35, 0x2b31, 0x2b2e, 0x2b2a, 0x2b27, 0x2b23, 0x2b20, - 0x2b1c, 0x2b18, 0x2b15, 0x2b11, 0x2b0e, 0x2b0a, 0x2b07, 0x2b03, - 0x2b00, 0x2afc, 0x2af9, 0x2af5, 0x2af2, 0x2aee, 0x2aeb, 0x2ae7, - 0x2ae4, 0x2ae1, 0x2add, 0x2ada, 0x2ad6, 0x2ad3, 0x2acf, 0x2acc, - 0x2ac9, 0x2ac5, 0x2ac2, 0x2abe, 0x2abb, 0x2ab8, 0x2ab4, 0x2ab1, - 0x2aae, 0x2aaa, 0x2aa7, 0x2aa4, 0x2aa0, 0x2a9d, 0x2a9a, 0x2a97, - 0x2a93, 0x2a90, 0x2a8d, 0x2a89, 0x2a86, 0x2a83, 0x2a80, 0x2a7c, - 0x2a79, 0x2a76, 0x2a73, 0x2a6f, 0x2a6c, 0x2a69, 0x2a66, 0x2a63, - 0x2a5f, 0x2a5c, 0x2a59, 0x2a56, 0x2a53, 0x2a50, 0x2a4c, 0x2a49, - 0x2a46, 0x2a43, 0x2a40, 0x2a3d, 0x2a3a, 0x2a37, 0x2a33, 0x2a30, - 0x2a2d, 0x2a2a, 0x2a27, 0x2a24, 0x2a21, 0x2a1e, 0x2a1b, 0x2a18, - 0x2a15, 0x2a12, 0x2a0f, 0x2a0c, 0x2a09, 0x2a06, 0x2a03, 0x2a00, - 0x29fd, 0x29fa, 0x29f7, 0x29f4, 0x29f1, 0x29ee, 0x29eb, 0x29e8, - 0x29e5, 0x29e2, 0x29df, 0x29dc, 0x29d9, 0x29d6, 0x29d3, 0x29d0, - 0x29cd, 0x29cb, 0x29c8, 0x29c5, 0x29c2, 0x29bf, 0x29bc, 0x29b9, - 0x29b6, 0x29b4, 0x29b1, 0x29ae, 0x29ab, 0x29a8, 0x29a5, 0x29a3, - 0x29a0, 0x299d, 0x299a, 0x2997, 0x2995, 0x2992, 0x298f, 0x298c, - 0x2989, 0x2987, 0x2984, 0x2981, 0x297e, 0x297c, 0x2979, 0x2976, - 0x2973, 0x2971, 0x296e, 0x296b, 0x2969, 0x2966, 0x2963, 0x2960, - 0x295e, 0x295b, 0x2958, 0x2956, 0x2953, 0x2950, 0x294e, 0x294b, - 0x2948, 0x2946, 0x2943, 0x2941, 0x293e, 0x293b, 0x2939, 0x2936, - 0x2934, 0x2931, 0x292e, 0x292c, 0x2929, 0x2927, 0x2924, 0x2921, - 0x291f, 0x291c, 0x291a, 0x2917, 0x2915, 0x2912, 0x2910, 0x290d, - 0x290b, 0x2908, 0x2906, 0x2903, 0x2901, 0x28fe, 0x28fc, 0x28f9, - 0x28f7, 0x28f4, 0x28f2, 0x28ef, 0x28ed, 0x28ea, 0x28e8, 0x28e5, - 0x28e3, 0x28e0, 0x28de, 0x28dc, 0x28d9, 0x28d7, 0x28d4, 0x28d2, - 0x28cf, 0x28cd, 0x28cb, 0x28c8, 0x28c6, 0x28c3, 0x28c1, 0x28bf, - 0x28bc, 0x28ba, 0x28b8, 0x28b5, 0x28b3, 0x28b1, 0x28ae, 0x28ac, - 0x28aa, 0x28a7, 0x28a5, 0x28a3, 0x28a0, 0x289e, 0x289c, 0x2899, - 0x2897, 0x2895, 0x2892, 0x2890, 0x288e, 0x288c, 0x2889, 0x2887, - 0x2885, 0x2883, 0x2880, 0x287e, 0x287c, 0x287a, 0x2877, 0x2875, - 0x2873, 0x2871, 0x286e, 0x286c, 0x286a, 0x2868, 0x2866, 0x2863, - 0x2861, 0x285f, 0x285d, 0x285b, 0x2859, 0x2856, 0x2854, 0x2852, - 0x2850, 0x284e, 0x284c, 0x2849, 0x2847, 0x2845, 0x2843, 0x2841, - 0x283f, 0x283d, 0x283b, 0x2838, 0x2836, 0x2834, 0x2832, 0x2830, - 0x282e, 0x282c, 0x282a, 0x2828, 0x2826, 0x2824, 0x2821, 0x281f, - 0x281d, 0x281b, 0x2819, 0x2817, 0x2815, 0x2813, 0x2811, 0x280f, - 0x280d, 0x280b, 0x2809, 0x2807, 0x2805, 0x2803, 0x2801, 0x27fe, - 0x27fa, 0x27f6, 0x27f2, 0x27ee, 0x27ea, 0x27e6, 0x27e2, 0x27de, - 0x27da, 0x27d6, 0x27d2, 0x27ce, 0x27cb, 0x27c7, 0x27c3, 0x27bf, - 0x27bb, 0x27b7, 0x27b3, 0x27af, 0x27ac, 0x27a8, 0x27a4, 0x27a0, - 0x279c, 0x2799, 0x2795, 0x2791, 0x278d, 0x2789, 0x2786, 0x2782, - 0x277e, 0x277a, 0x2777, 0x2773, 0x276f, 0x276b, 0x2768, 0x2764, - 0x2760, 0x275d, 0x2759, 0x2755, 0x2752, 0x274e, 0x274a, 0x2747, - 0x2743, 0x273f, 0x273c, 0x2738, 0x2735, 0x2731, 0x272d, 0x272a, - 0x2726, 0x2723, 0x271f, 0x271c, 0x2718, 0x2715, 0x2711, 0x270d, - 0x270a, 0x2706, 0x2703, 0x26ff, 0x26fc, 0x26f8, 0x26f5, 0x26f1, - 0x26ee, 0x26eb, 0x26e7, 0x26e4, 0x26e0, 0x26dd, 0x26d9, 0x26d6, - 0x26d2, 0x26cf, 0x26cc, 0x26c8, 0x26c5, 0x26c2, 0x26be, 0x26bb, - 0x26b7, 0x26b4, 0x26b1, 0x26ad, 0x26aa, 0x26a7, 0x26a3, 0x26a0, - 0x269d, 0x2699, 0x2696, 0x2693, 0x2690, 0x268c, 0x2689, 0x2686, - 0x2682, 0x267f, 0x267c, 0x2679, 0x2676, 0x2672, 0x266f, 0x266c, - 0x2669, 0x2665, 0x2662, 0x265f, 0x265c, 0x2659, 0x2656, 0x2652, - 0x264f, 0x264c, 0x2649, 0x2646, 0x2643, 0x2640, 0x263c, 0x2639, - 0x2636, 0x2633, 0x2630, 0x262d, 0x262a, 0x2627, 0x2624, 0x2621, - 0x261e, 0x261a, 0x2617, 0x2614, 0x2611, 0x260e, 0x260b, 0x2608, - 0x2605, 0x2602, 0x25ff, 0x25fc, 0x25f9, 0x25f6, 0x25f3, 0x25f0, - 0x25ed, 0x25ea, 0x25e7, 0x25e4, 0x25e2, 0x25df, 0x25dc, 0x25d9, - 0x25d6, 0x25d3, 0x25d0, 0x25cd, 0x25ca, 0x25c7, 0x25c4, 0x25c2, - 0x25bf, 0x25bc, 0x25b9, 0x25b6, 0x25b3, 0x25b0, 0x25ae, 0x25ab, - 0x25a8, 0x25a5, 0x25a2, 0x259f, 0x259d, 0x259a, 0x2597, 0x2594, - 0x2591, 0x258f, 0x258c, 0x2589, 0x2586, 0x2584, 0x2581, 0x257e, - 0x257b, 0x2579, 0x2576, 0x2573, 0x2570, 0x256e, 0x256b, 0x2568, - 0x2566, 0x2563, 0x2560, 0x255e, 0x255b, 0x2558, 0x2555, 0x2553, - 0x2550, 0x254e, 0x254b, 0x2548, 0x2546, 0x2543, 0x2540, 0x253e, - 0x253b, 0x2538, 0x2536, 0x2533, 0x2531, 0x252e, 0x252b, 0x2529, - 0x2526, 0x2524, 0x2521, 0x251f, 0x251c, 0x2519, 0x2517, 0x2514, - 0x2512, 0x250f, 0x250d, 0x250a, 0x2508, 0x2505, 0x2503, 0x2500, - 0x24fe, 0x24fb, 0x24f9, 0x24f6, 0x24f4, 0x24f1, 0x24ef, 0x24ec, - 0x24ea, 0x24e7, 0x24e5, 0x24e3, 0x24e0, 0x24de, 0x24db, 0x24d9, - 0x24d6, 0x24d4, 0x24d2, 0x24cf, 0x24cd, 0x24ca, 0x24c8, 0x24c6, - 0x24c3, 0x24c1, 0x24be, 0x24bc, 0x24ba, 0x24b7, 0x24b5, 0x24b3, - 0x24b0, 0x24ac, 0x24a7, 0x24a2, 0x249e, 0x2499, 0x2495, 0x2490, - 0x248b, 0x2487, 0x2482, 0x247e, 0x2479, 0x2475, 0x2470, 0x246c, - 0x2468, 0x2463, 0x245f, 0x245a, 0x2456, 0x2452, 0x244d, 0x2449, - 0x2445, 0x2441, 0x243c, 0x2438, 0x2434, 0x2430, 0x242c, 0x2427, - 0x2423, 0x241f, 0x241b, 0x2417, 0x2413, 0x240f, 0x240b, 0x2407, - 0x2403, 0x23fd, 0x23f5, 0x23ed, 0x23e6, 0x23de, 0x23d6, 0x23ce, - 0x23c6, 0x23be, 0x23b7, 0x23af, 0x23a7, 0x23a0, 0x2398, 0x2391, - 0x2389, 0x2381, 0x237a, 0x2373, 0x236b, 0x2364, 0x235c, 0x2355, - 0x234e, 0x2346, 0x233f, 0x2338, 0x2331, 0x2329, 0x2322, 0x231b, - 0x2314, 0x230d, 0x2306, 0x22ff, 0x22f8, 0x22f1, 0x22ea, 0x22e3, - 0x22dc, 0x22d6, 0x22cf, 0x22c8, 0x22c1, 0x22ba, 0x22b4, 0x22ad, - 0x22a6, 0x22a0, 0x2299, 0x2292, 0x228c, 0x2285, 0x227f, 0x2278, - 0x2272, 0x226c, 0x2265, 0x225f, 0x2258, 0x2252, 0x224c, 0x2245, - 0x223f, 0x2239, 0x2233, 0x222d, 0x2226, 0x2220, 0x221a, 0x2214, - 0x220e, 0x2208, 0x2202, 0x21fc, 0x21f6, 0x21f0, 0x21ea, 0x21e4, - 0x21de, 0x21d8, 0x21d3, 0x21cd, 0x21c7, 0x21c1, 0x21bb, 0x21b6, - 0x21b0, 0x21aa, 0x21a5, 0x219f, 0x219a, 0x2194, 0x218e, 0x2189, - 0x2183, 0x217e, 0x2178, 0x2173, 0x216d, 0x2168, 0x2163, 0x215d, - 0x2158, 0x2153, 0x214d, 0x2148, 0x2143, 0x213d, 0x2138, 0x2133, - 0x212e, 0x2129, 0x2123, 0x211e, 0x2119, 0x2114, 0x210f, 0x210a, - 0x2105, 0x2100, 0x20fb, 0x20f6, 0x20f1, 0x20ec, 0x20e7, 0x20e2, - 0x20dd, 0x20d9, 0x20d4, 0x20cf, 0x20ca, 0x20c5, 0x20c1, 0x20bc, - 0x20b7, 0x20b2, 0x20ae, 0x20a9, 0x20a4, 0x20a0, 0x209b, 0x2097, - 0x2092, 0x208d, 0x2089, 0x2084, 0x2080, 0x207b, 0x2077, 0x2072, - 0x206e, 0x206a, 0x2065, 0x2061, 0x205c, 0x2058, 0x2054, 0x204f, - 0x204b, 0x2047, 0x2043, 0x203e, 0x203a, 0x2036, 0x2032, 0x202d, - 0x2029, 0x2025, 0x2021, 0x201d, 0x2019, 0x2015, 0x2011, 0x200d, - 0x2009, 0x2004, 0x2000, 0x1ff9, 0x1ff1, 0x1fe9, 0x1fe1, 0x1fd9, - 0x1fd1, 0x1fca, 0x1fc2, 0x1fba, 0x1fb2, 0x1fab, 0x1fa3, 0x1f9c, - 0x1f94, 0x1f8c, 0x1f85, 0x1f7d, 0x1f76, 0x1f6e, 0x1f67, 0x1f60, - 0x1f58, 0x1f51, 0x1f4a, 0x1f42, 0x1f3b, 0x1f34, 0x1f2d, 0x1f26, - 0x1f1e, 0x1f17, 0x1f10, 0x1f09, 0x1f02, 0x1efb, 0x1ef4, 0x1eed, - 0x1ee6, 0x1edf, 0x1ed9, 0x1ed2, 0x1ecb, 0x1ec4, 0x1ebd, 0x1eb7, - 0x1eb0, 0x1ea9, 0x1ea3, 0x1e9c, 0x1e95, 0x1e8f, 0x1e88, 0x1e82, - 0x1e7b, 0x1e75, 0x1e6e, 0x1e68, 0x1e62, 0x1e5b, 0x1e55, 0x1e4f, - 0x1e48, 0x1e42, 0x1e3c, 0x1e36, 0x1e2f, 0x1e29, 0x1e23, 0x1e1d, - 0x1e17, 0x1e11, 0x1e0b, 0x1e05, 0x1dff, 0x1df9, 0x1df3, 0x1ded, - 0x1de7, 0x1de1, 0x1ddb, 0x1dd5, 0x1dcf, 0x1dca, 0x1dc4, 0x1dbe, - 0x1db8, 0x1db3, 0x1dad, 0x1da7, 0x1da2, 0x1d9c, 0x1d96, 0x1d91, - 0x1d8b, 0x1d86, 0x1d80, 0x1d7b, 0x1d75, 0x1d70, 0x1d6a, 0x1d65, - 0x1d60, 0x1d5a, 0x1d55, 0x1d50, 0x1d4a, 0x1d45, 0x1d40, 0x1d3b, - 0x1d35, 0x1d30, 0x1d2b, 0x1d26, 0x1d21, 0x1d1b, 0x1d16, 0x1d11, - 0x1d0c, 0x1d07, 0x1d02, 0x1cfd, 0x1cf8, 0x1cf3, 0x1cee, 0x1ce9, - 0x1ce5, 0x1ce0, 0x1cdb, 0x1cd6, 0x1cd1, 0x1ccc, 0x1cc7, 0x1cc3, - 0x1cbe, 0x1cb9, 0x1cb5, 0x1cb0, 0x1cab, 0x1ca6, 0x1ca2, 0x1c9d, - 0x1c99, 0x1c94, 0x1c8f, 0x1c8b, 0x1c86, 0x1c82, 0x1c7d, 0x1c79, - 0x1c74, 0x1c70, 0x1c6c, 0x1c67, 0x1c63, 0x1c5e, 0x1c5a, 0x1c56, - 0x1c51, 0x1c4d, 0x1c49, 0x1c44, 0x1c40, 0x1c3c, 0x1c38, 0x1c34, - 0x1c2f, 0x1c2b, 0x1c27, 0x1c23, 0x1c1f, 0x1c1b, 0x1c17, 0x1c12, - 0x1c0e, 0x1c0a, 0x1c06, 0x1c02, 0x1bfd, 0x1bf5, 0x1bed, 0x1be5, - 0x1bdd, 0x1bd5, 0x1bcd, 0x1bc5, 0x1bbe, 0x1bb6, 0x1bae, 0x1ba7, - 0x1b9f, 0x1b97, 0x1b90, 0x1b88, 0x1b81, 0x1b79, 0x1b72, 0x1b6a, - 0x1b63, 0x1b5c, 0x1b54, 0x1b4d, 0x1b46, 0x1b3e, 0x1b37, 0x1b30, - 0x1b29, 0x1b22, 0x1b1a, 0x1b13, 0x1b0c, 0x1b05, 0x1afe, 0x1af7, - 0x1af0, 0x1ae9, 0x1ae2, 0x1adc, 0x1ad5, 0x1ace, 0x1ac7, 0x1ac0, - 0x1aba, 0x1ab3, 0x1aac, 0x1aa6, 0x1a9f, 0x1a98, 0x1a92, 0x1a8b, - 0x1a85, 0x1a7e, 0x1a78, 0x1a71, 0x1a6b, 0x1a64, 0x1a5e, 0x1a58, - 0x1a51, 0x1a4b, 0x1a45, 0x1a3f, 0x1a38, 0x1a32, 0x1a2c, 0x1a26, - 0x1a20, 0x1a19, 0x1a13, 0x1a0d, 0x1a07, 0x1a01, 0x19fb, 0x19f5, - 0x19ef, 0x19e9, 0x19e4, 0x19de, 0x19d8, 0x19d2, 0x19cc, 0x19c6, - 0x19c1, 0x19bb, 0x19b5, 0x19af, 0x19aa, 0x19a4, 0x199f, 0x1999, - 0x1993, 0x198e, 0x1988, 0x1983, 0x197d, 0x1978, 0x1972, 0x196d, - 0x1967, 0x1962, 0x195d, 0x1957, 0x1952, 0x194d, 0x1947, 0x1942, - 0x193d, 0x1938, 0x1932, 0x192d, 0x1928, 0x1923, 0x191e, 0x1919, - 0x1914, 0x190f, 0x1909, 0x1904, 0x18ff, 0x18fa, 0x18f5, 0x18f1, - 0x18ec, 0x18e7, 0x18e2, 0x18dd, 0x18d8, 0x18d3, 0x18ce, 0x18ca, - 0x18c5, 0x18c0, 0x18bb, 0x18b7, 0x18b2, 0x18ad, 0x18a9, 0x18a4, - 0x189f, 0x189b, 0x1896, 0x1891, 0x188d, 0x1888, 0x1884, 0x187f, - 0x187b, 0x1876, 0x1872, 0x186e, 0x1869, 0x1865, 0x1860, 0x185c, - 0x1858, 0x1853, 0x184f, 0x184b, 0x1846, 0x1842, 0x183e, 0x183a, - 0x1835, 0x1831, 0x182d, 0x1829, 0x1825, 0x1821, 0x181c, 0x1818, - 0x1814, 0x1810, 0x180c, 0x1808, 0x1804, 0x1800, 0x17f8, 0x17f0, - 0x17e8, 0x17e0, 0x17d8, 0x17d1, 0x17c9, 0x17c1, 0x17b9, 0x17b2, - 0x17aa, 0x17a2, 0x179b, 0x1793, 0x178c, 0x1784, 0x177d, 0x1775, - 0x176e, 0x1766, 0x175f, 0x1757, 0x1750, 0x1749, 0x1742, 0x173a, - 0x1733, 0x172c, 0x1725, 0x171e, 0x1717, 0x170f, 0x1708, 0x1701, - 0x16fa, 0x16f3, 0x16ec, 0x16e6, 0x16df, 0x16d8, 0x16d1, 0x16ca, - 0x16c3, 0x16bd, 0x16b6, 0x16af, 0x16a9, 0x16a2, 0x169b, 0x1695, - 0x168e, 0x1688, 0x1681, 0x167b, 0x1674, 0x166e, 0x1667, 0x1661, - 0x165b, 0x1654, 0x164e, 0x1648, 0x1641, 0x163b, 0x1635, 0x162f, - 0x1628, 0x1622, 0x161c, 0x1616, 0x1610, 0x160a, 0x1604, 0x15fe, - 0x15f8, 0x15f2, 0x15ec, 0x15e6, 0x15e0, 0x15da, 0x15d5, 0x15cf, - 0x15c9, 0x15c3, 0x15bd, 0x15b8, 0x15b2, 0x15ac, 0x15a7, 0x15a1, - 0x159b, 0x1596, 0x1590, 0x158b, 0x1585, 0x1580, 0x157a, 0x1575, - 0x156f, 0x156a, 0x1564, 0x155f, 0x155a, 0x1554, 0x154f, 0x154a, - 0x1544, 0x153f, 0x153a, 0x1535, 0x1530, 0x152a, 0x1525, 0x1520, - 0x151b, 0x1516, 0x1511, 0x150c, 0x1507, 0x1502, 0x14fd, 0x14f8, - 0x14f3, 0x14ee, 0x14e9, 0x14e4, 0x14df, 0x14da, 0x14d5, 0x14d1, - 0x14cc, 0x14c7, 0x14c2, 0x14bd, 0x14b9, 0x14b4, 0x14af, 0x14ab, - 0x14a6, 0x14a1, 0x149d, 0x1498, 0x1494, 0x148f, 0x148a, 0x1486, - 0x1481, 0x147d, 0x1478, 0x1474, 0x146f, 0x146b, 0x1467, 0x1462, - 0x145e, 0x145a, 0x1455, 0x1451, 0x144d, 0x1448, 0x1444, 0x1440, - 0x143b, 0x1437, 0x1433, 0x142f, 0x142b, 0x1427, 0x1422, 0x141e, - 0x141a, 0x1416, 0x1412, 0x140e, 0x140a, 0x1406, 0x1402, 0x13fc, - 0x13f4, 0x13ec, 0x13e4, 0x13dc, 0x13d4, 0x13cc, 0x13c5, 0x13bd, - 0x13b5, 0x13ad, 0x13a6, 0x139e, 0x1396, 0x138f, 0x1387, 0x1380, - 0x1378, 0x1371, 0x1369, 0x1362, 0x135b, 0x1353, 0x134c, 0x1345, - 0x133e, 0x1336, 0x132f, 0x1328, 0x1321, 0x131a, 0x1313, 0x130c, - 0x1304, 0x12fd, 0x12f7, 0x12f0, 0x12e9, 0x12e2, 0x12db, 0x12d4, - 0x12cd, 0x12c6, 0x12c0, 0x12b9, 0x12b2, 0x12ac, 0x12a5, 0x129e, - 0x1298, 0x1291, 0x128b, 0x1284, 0x127d, 0x1277, 0x1271, 0x126a, - 0x1264, 0x125d, 0x1257, 0x1251, 0x124a, 0x1244, 0x123e, 0x1238, - 0x1231, 0x122b, 0x1225, 0x121f, 0x1219, 0x1213, 0x120d, 0x1207, - 0x1201, 0x11fb, 0x11f5, 0x11ef, 0x11e9, 0x11e3, 0x11dd, 0x11d7, - 0x11d1, 0x11cc, 0x11c6, 0x11c0, 0x11ba, 0x11b5, 0x11af, 0x11a9, - 0x11a4, 0x119e, 0x1198, 0x1193, 0x118d, 0x1188, 0x1182, 0x117d, - 0x1177, 0x1172, 0x116c, 0x1167, 0x1161, 0x115c, 0x1157, 0x1151, - 0x114c, 0x1147, 0x1142, 0x113c, 0x1137, 0x1132, 0x112d, 0x1127, - 0x1122, 0x111d, 0x1118, 0x1113, 0x110e, 0x1109, 0x1104, 0x10ff, - 0x10fa, 0x10f5, 0x10f0, 0x10eb, 0x10e6, 0x10e1, 0x10dc, 0x10d8, - 0x10d3, 0x10ce, 0x10c9, 0x10c4, 0x10c0, 0x10bb, 0x10b6, 0x10b1, - 0x10ad, 0x10a8, 0x10a3, 0x109f, 0x109a, 0x1096, 0x1091, 0x108c, - 0x1088, 0x1083, 0x107f, 0x107a, 0x1076, 0x1071, 0x106d, 0x1069, - 0x1064, 0x1060, 0x105b, 0x1057, 0x1053, 0x104e, 0x104a, 0x1046, - 0x1042, 0x103d, 0x1039, 0x1035, 0x1031, 0x102d, 0x1028, 0x1024, - 0x1020, 0x101c, 0x1018, 0x1014, 0x1010, 0x100c, 0x1008, 0x1004, - 0x0fff, 0x0ff7, 0x0fef, 0x0fe7, 0x0fdf, 0x0fd8, 0x0fd0, 0x0fc8, - 0x0fc0, 0x0fb8, 0x0fb1, 0x0fa9, 0x0fa1, 0x0f9a, 0x0f92, 0x0f8b, - 0x0f83, 0x0f7c, 0x0f74, 0x0f6d, 0x0f65, 0x0f5e, 0x0f57, 0x0f4f, - 0x0f48, 0x0f41, 0x0f3a, 0x0f32, 0x0f2b, 0x0f24, 0x0f1d, 0x0f16, - 0x0f0f, 0x0f08, 0x0f01, 0x0efa, 0x0ef3, 0x0eec, 0x0ee5, 0x0ede, - 0x0ed7, 0x0ed0, 0x0ec9, 0x0ec3, 0x0ebc, 0x0eb5, 0x0eaf, 0x0ea8, - 0x0ea1, 0x0e9b, 0x0e94, 0x0e8d, 0x0e87, 0x0e80, 0x0e7a, 0x0e73, - 0x0e6d, 0x0e67, 0x0e60, 0x0e5a, 0x0e53, 0x0e4d, 0x0e47, 0x0e41, - 0x0e3a, 0x0e34, 0x0e2e, 0x0e28, 0x0e22, 0x0e1c, 0x0e15, 0x0e0f, - 0x0e09, 0x0e03, 0x0dfd, 0x0df7, 0x0df1, 0x0deb, 0x0de6, 0x0de0, - 0x0dda, 0x0dd4, 0x0dce, 0x0dc8, 0x0dc3, 0x0dbd, 0x0db7, 0x0db1, - 0x0dac, 0x0da6, 0x0da0, 0x0d9b, 0x0d95, 0x0d90, 0x0d8a, 0x0d85, - 0x0d7f, 0x0d74, 0x0d69, 0x0d5e, 0x0d54, 0x0d49, 0x0d3f, 0x0d34, - 0x0d2a, 0x0d1f, 0x0d15, 0x0d0b, 0x0d01, 0x0cf7, 0x0ced, 0x0ce3, - 0x0cda, 0x0cd0, 0x0cc6, 0x0cbd, 0x0cb3, 0x0caa, 0x0ca1, 0x0c98, - 0x0c8e, 0x0c85, 0x0c7c, 0x0c73, 0x0c6b, 0x0c62, 0x0c59, 0x0c50, - 0x0c48, 0x0c3f, 0x0c37, 0x0c2e, 0x0c26, 0x0c1e, 0x0c16, 0x0c0d, - 0x0c05, 0x0bfb, 0x0beb, 0x0bdb, 0x0bcb, 0x0bbc, 0x0bad, 0x0b9d, - 0x0b8e, 0x0b7f, 0x0b70, 0x0b61, 0x0b53, 0x0b44, 0x0b36, 0x0b27, - 0x0b19, 0x0b0b, 0x0afd, 0x0aef, 0x0ae1, 0x0ad3, 0x0ac6, 0x0ab8, - 0x0aab, 0x0a9e, 0x0a90, 0x0a83, 0x0a76, 0x0a69, 0x0a5d, 0x0a50, - 0x0a43, 0x0a37, 0x0a2b, 0x0a1e, 0x0a12, 0x0a06, 0x09fa, 0x09ee, - 0x09e2, 0x09d7, 0x09cb, 0x09bf, 0x09b4, 0x09a9, 0x099d, 0x0992, - 0x0987, 0x097c, 0x0971, 0x0966, 0x095b, 0x0951, 0x0946, 0x093c, - 0x0931, 0x0927, 0x091d, 0x0912, 0x0908, 0x08fe, 0x08f4, 0x08eb, - 0x08e1, 0x08d7, 0x08cd, 0x08c4, 0x08ba, 0x08b1, 0x08a8, 0x089e, - 0x0895, 0x088c, 0x0883, 0x087a, 0x0871, 0x0868, 0x085f, 0x0857, - 0x084e, 0x0845, 0x083d, 0x0834, 0x082c, 0x0824, 0x081c, 0x0813, - 0x080b, 0x0803, 0x07f6, 0x07e7, 0x07d7, 0x07c7, 0x07b8, 0x07a8, - 0x0799, 0x078a, 0x077b, 0x076c, 0x075d, 0x074f, 0x0740, 0x0732, - 0x0723, 0x0715, 0x0707, 0x06f9, 0x06eb, 0x06dd, 0x06d0, 0x06c2, - 0x06b4, 0x06a7, 0x069a, 0x068d, 0x0680, 0x0673, 0x0666, 0x0659, - 0x064c, 0x0640, 0x0633, 0x0627, 0x061b, 0x060f, 0x0603, 0x05f7, - 0x05eb, 0x05df, 0x05d3, 0x05c8, 0x05bc, 0x05b1, 0x05a5, 0x059a, - 0x058f, 0x0584, 0x0579, 0x056e, 0x0563, 0x0558, 0x054e, 0x0543, - 0x0539, 0x052e, 0x0524, 0x051a, 0x0510, 0x0506, 0x04fc, 0x04f2, - 0x04e8, 0x04de, 0x04d4, 0x04cb, 0x04c1, 0x04b8, 0x04ae, 0x04a5, - 0x049c, 0x0493, 0x0489, 0x0480, 0x0477, 0x046f, 0x0466, 0x045d, - 0x0454, 0x044c, 0x0443, 0x043b, 0x0432, 0x042a, 0x0421, 0x0419, - 0x0411, 0x0409, 0x0401, 0x03f9, 0x03f1, 0x03e9, 0x03e1, 0x03da, - 0x03d2, 0x03ca, 0x03c3, 0x03bb, 0x03b4, 0x03ad, 0x03a5, 0x039e, - 0x0397, 0x0390, 0x0389, 0x0381, 0x037a, 0x0374, 0x036d, 0x0366, - 0x035f, 0x0358, 0x0352, 0x034b, 0x0345, 0x033e, 0x0338, 0x0331, - 0x032b, 0x0324, 0x031e, 0x0318, 0x0312, 0x030c, 0x0306, 0x0300, - 0x02fa, 0x02f4, 0x02ee, 0x02e8, 0x02e2, 0x02dd, 0x02d7, 0x02d1, - 0x02cc, 0x02c6, 0x02c0, 0x02bb, 0x02b6, 0x02b0, 0x02ab, 0x02a5, - 0x02a0, 0x029b, 0x0296, 0x0291, 0x028c, 0x0286, 0x0281, 0x027c, - 0x0277, 0x0273, 0x026e, 0x0269, 0x0264, 0x025f, 0x025b, 0x0256, - 0x0251, 0x024d, 0x0248, 0x0243, 0x023f, 0x023a, 0x0236, 0x0232, - 0x022d, 0x0229, 0x0225, 0x0220, 0x021c, 0x0218, 0x0214, 0x0210, - 0x020b, 0x0207, 0x0203, 0x01ff, 0x01fb, 0x01f7, 0x01f4, 0x01f0, - 0x01ec, 0x01e8, 0x01e4, 0x01e0, 0x01dd, 0x01d9, 0x01d5, 0x01d2, - 0x01ce, 0x01ca, 0x01c7, 0x01c3, 0x01c0, 0x01bc, 0x01b9, 0x01b5, - 0x01b2, 0x01af, 0x01ab, 0x01a8, 0x01a5, 0x01a1, 0x019e, 0x019b, - 0x0198, 0x0195, 0x0191, 0x018e, 0x018b, 0x0188, 0x0185, 0x0182, - 0x017f, 0x017c, 0x0179, 0x0176, 0x0173, 0x0170, 0x016d, 0x016b, - 0x0168, 0x0165, 0x0162, 0x015f, 0x015d, 0x015a, 0x0157, 0x0155, - 0x0152, 0x014f, 0x014d, 0x014a, 0x0148, 0x0145, 0x0143, 0x0140, - 0x013e, 0x013b, 0x0139, 0x0136, 0x0134, 0x0131, 0x012f, 0x012d, - 0x012a, 0x0128, 0x0126, 0x0123, 0x0121, 0x011f, 0x011d, 0x011a, - 0x0118, 0x0116, 0x0114, 0x0112, 0x0110, 0x010d, 0x010b, 0x0109, - 0x0107, 0x0105, 0x0103, 0x0101, 0x00ff, 0x00fd, 0x00fb, 0x00f9, - 0x00f7, 0x00f5, 0x00f3, 0x00f2, 0x00f0, 0x00ee, 0x00ec, 0x00ea, - 0x00e8, 0x00e6, 0x00e5, 0x00e3, 0x00e1, 0x00df, 0x00de, 0x00dc, - 0x00da, 0x00d9, 0x00d7, 0x00d5, 0x00d4, 0x00d2, 0x00d0, 0x00cf, - 0x00cd, 0x00cb, 0x00ca, 0x00c8, 0x00c7, 0x00c5, 0x00c4, 0x00c2, - 0x00c1, 0x00bf, 0x00be, 0x00bc, 0x00bb, 0x00b9, 0x00b8, 0x00b6, - 0x00b5, 0x00b4, 0x00b2, 0x00b1, 0x00af, 0x00ae, 0x00ad, 0x00ab, - 0x00aa, 0x00a9, 0x00a7, 0x00a6, 0x00a5, 0x00a3, 0x00a2, 0x00a1, - 0x00a0, 0x009e, 0x009d, 0x009c, 0x009b, 0x009a, 0x0098, 0x0097, - 0x0096, 0x0095, 0x0094, 0x0093, 0x0091, 0x0090, 0x008f, 0x008e, - 0x008d, 0x008c, 0x008b, 0x008a, 0x0089, 0x0087, 0x0086, 0x0085, - 0x0084, 0x0083, 0x0082, 0x0081, 0x0080, 0x007f, 0x007e, 0x007d, - 0x007c, 0x007b, 0x007a, 0x0079, 0x0079, 0x0078, 0x0077, 0x0076, - 0x0075, 0x0074, 0x0073, 0x0072, 0x0071, 0x0070, 0x006f, 0x006f, - 0x006e, 0x006d, 0x006c, 0x006b, 0x006a, 0x006a, 0x0069, 0x0068, - 0x0067, 0x0066, 0x0065, 0x0065, 0x0064, 0x0063, 0x0062, 0x0062, - 0x0061, 0x0060, 0x005f, 0x005f, 0x005e, 0x005d, 0x005c, 0x005c, - 0x005b, 0x005a, 0x005a, 0x0059, 0x0058, 0x0057, 0x0057, 0x0056, - 0x0055, 0x0055, 0x0054, 0x0053, 0x0053, 0x0052, 0x0052, 0x0051, - 0x0050, 0x0050, 0x004f, 0x004e, 0x004e, 0x004d, 0x004d, 0x004c, - 0x004b, 0x004b, 0x004a, 0x004a, 0x0049, 0x0049, 0x0048, 0x0047, - 0x0047, 0x0046, 0x0046, 0x0045, 0x0045, 0x0044, 0x0044, 0x0043, - 0x0043, 0x0042, 0x0042, 0x0041, 0x0041, 0x0040, 0x0040, 0x003f, - 0x003f, 0x003e, 0x003e, 0x003d, 0x003d, 0x003c, 0x003c, 0x003b, - 0x003b, 0x003a, 0x003a, 0x0039, 0x0039, 0x0038, 0x0038, 0x0038, - 0x0037, 0x0037, 0x0036, 0x0036, 0x0035, 0x0035, 0x0035, 0x0034, - 0x0034, 0x0033, 0x0033, 0x0033, 0x0032, 0x0032, 0x0031, 0x0031, - 0x0031, 0x0030, 0x0030, 0x0030, 0x002f, 0x002f, 0x002e, 0x002e, - 0x002e, 0x002d, 0x002d, 0x002d, 0x002c, 0x002c, 0x002c, 0x002b, - 0x002b, 0x002b, 0x002a, 0x002a, 0x002a, 0x0029, 0x0029, 0x0029, - 0x0028, 0x0028, 0x0028, 0x0027, 0x0027, 0x0027, 0x0027, 0x0026, - 0x0026, 0x0026, 0x0025, 0x0025, 0x0025, 0x0024, 0x0024, 0x0024, - 0x0024, 0x0023, 0x0023, 0x0023, 0x0023, 0x0022, 0x0022, 0x0022, - 0x0021, 0x0021, 0x0021, 0x0021, 0x0020, 0x0020, 0x0020, 0x0020, - 0x001f, 0x001f, 0x001f, 0x001f, 0x001e, 0x001e, 0x001e, 0x001e, - 0x001e, 0x001d, 0x001d, 0x001d, 0x001d, 0x001c, 0x001c, 0x001c, - 0x001c, 0x001c, 0x001b, 0x001b, 0x001b, 0x001b, 0x001a, 0x001a, - 0x001a, 0x001a, 0x001a, 0x0019, 0x0019, 0x0019, 0x0019, 0x0019, - 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0017, 0x0017, - 0x0017, 0x0017, 0x0017, 0x0016, 0x0016, 0x0016, 0x0016, 0x0016, - 0x0016, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0015, 0x0014, - 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0014, 0x0013, 0x0013, - 0x0013, 0x0013, 0x0013, 0x0013, 0x0012, 0x0012, 0x0012, 0x0012, - 0x0012, 0x0012, 0x0012, 0x0011, 0x0011, 0x0011, 0x0011, 0x0011, - 0x0011, 0x0011, 0x0011, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, - 0x0010, 0x0010, 0x0010, 0x000f, 0x000f, 0x000f, 0x000f, 0x000f, - 0x000f, 0x000f, 0x000f, 0x000f, 0x000e, 0x000e, 0x000e, 0x000e, - 0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000d, 0x000d, 0x000d, - 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000d, 0x000c, - 0x000c, 0x000c, 0x000c, 0x000c, 0x000c, 0x000c, 0x000c, 0x000c, - 0x000c, 0x000b, 0x000b, 0x000b, 0x000b, 0x000b, 0x000b, 0x000b, - 0x000b, 0x000b, 0x000b, 0x000b, 0x000b, 0x000a, 0x000a, 0x000a, - 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, - 0x000a, 0x000a, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, - 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, 0x0009, - 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, - 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, - 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, - 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, - 0x0007, 0x0007, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, - 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, - 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, - 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, - 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, - 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, - 0x0005, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, - 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, - 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, - 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, - 0x0004, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, - 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, - 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, - 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, - 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, - 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0002, 0x0002, 0x0002, - 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, - 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, - 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, - 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, - 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, - 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0001, - 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, - 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, - 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, - 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, - 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, - 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, - 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, - 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, - 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, -}; - -const unsigned short logTable[] = -{ - 0xfc00, 0xd829, 0xd7f9, 0xd7c5, 0xd7a0, 0xd783, 0xd76c, 0xd758, - 0xd747, 0xd738, 0xd72b, 0xd71e, 0xd713, 0xd709, 0xd700, 0xd6f7, - 0xd6ee, 0xd6e7, 0xd6df, 0xd6d8, 0xd6d2, 0xd6cc, 0xd6c6, 0xd6c0, - 0xd6bb, 0xd6b5, 0xd6b0, 0xd6ab, 0xd6a7, 0xd6a2, 0xd69e, 0xd69a, - 0xd696, 0xd692, 0xd68e, 0xd68a, 0xd687, 0xd683, 0xd680, 0xd67c, - 0xd679, 0xd676, 0xd673, 0xd670, 0xd66d, 0xd66a, 0xd667, 0xd665, - 0xd662, 0xd65f, 0xd65d, 0xd65a, 0xd658, 0xd655, 0xd653, 0xd650, - 0xd64e, 0xd64c, 0xd64a, 0xd647, 0xd645, 0xd643, 0xd641, 0xd63f, - 0xd63d, 0xd63b, 0xd639, 0xd637, 0xd635, 0xd633, 0xd632, 0xd630, - 0xd62e, 0xd62c, 0xd62a, 0xd629, 0xd627, 0xd625, 0xd624, 0xd622, - 0xd620, 0xd61f, 0xd61d, 0xd61c, 0xd61a, 0xd619, 0xd617, 0xd616, - 0xd614, 0xd613, 0xd611, 0xd610, 0xd60f, 0xd60d, 0xd60c, 0xd60a, - 0xd609, 0xd608, 0xd606, 0xd605, 0xd604, 0xd603, 0xd601, 0xd600, - 0xd5ff, 0xd5fe, 0xd5fc, 0xd5fb, 0xd5fa, 0xd5f9, 0xd5f8, 0xd5f7, - 0xd5f5, 0xd5f4, 0xd5f3, 0xd5f2, 0xd5f1, 0xd5f0, 0xd5ef, 0xd5ee, - 0xd5ed, 0xd5eb, 0xd5ea, 0xd5e9, 0xd5e8, 0xd5e7, 0xd5e6, 0xd5e5, - 0xd5e4, 0xd5e3, 0xd5e2, 0xd5e1, 0xd5e0, 0xd5df, 0xd5de, 0xd5dd, - 0xd5dd, 0xd5dc, 0xd5db, 0xd5da, 0xd5d9, 0xd5d8, 0xd5d7, 0xd5d6, - 0xd5d5, 0xd5d4, 0xd5d3, 0xd5d3, 0xd5d2, 0xd5d1, 0xd5d0, 0xd5cf, - 0xd5ce, 0xd5cd, 0xd5cd, 0xd5cc, 0xd5cb, 0xd5ca, 0xd5c9, 0xd5c9, - 0xd5c8, 0xd5c7, 0xd5c6, 0xd5c5, 0xd5c5, 0xd5c4, 0xd5c3, 0xd5c2, - 0xd5c1, 0xd5c1, 0xd5c0, 0xd5bf, 0xd5be, 0xd5be, 0xd5bd, 0xd5bc, - 0xd5bc, 0xd5bb, 0xd5ba, 0xd5b9, 0xd5b9, 0xd5b8, 0xd5b7, 0xd5b7, - 0xd5b6, 0xd5b5, 0xd5b4, 0xd5b4, 0xd5b3, 0xd5b2, 0xd5b2, 0xd5b1, - 0xd5b0, 0xd5b0, 0xd5af, 0xd5ae, 0xd5ae, 0xd5ad, 0xd5ac, 0xd5ac, - 0xd5ab, 0xd5ab, 0xd5aa, 0xd5a9, 0xd5a9, 0xd5a8, 0xd5a7, 0xd5a7, - 0xd5a6, 0xd5a6, 0xd5a5, 0xd5a4, 0xd5a4, 0xd5a3, 0xd5a3, 0xd5a2, - 0xd5a1, 0xd5a1, 0xd5a0, 0xd5a0, 0xd59f, 0xd59e, 0xd59e, 0xd59d, - 0xd59d, 0xd59c, 0xd59c, 0xd59b, 0xd59a, 0xd59a, 0xd599, 0xd599, - 0xd598, 0xd598, 0xd597, 0xd597, 0xd596, 0xd595, 0xd595, 0xd594, - 0xd594, 0xd593, 0xd593, 0xd592, 0xd592, 0xd591, 0xd591, 0xd590, - 0xd590, 0xd58f, 0xd58f, 0xd58e, 0xd58e, 0xd58d, 0xd58d, 0xd58c, - 0xd58c, 0xd58b, 0xd58b, 0xd58a, 0xd58a, 0xd589, 0xd589, 0xd588, - 0xd588, 0xd587, 0xd587, 0xd586, 0xd586, 0xd585, 0xd585, 0xd584, - 0xd584, 0xd583, 0xd583, 0xd582, 0xd582, 0xd581, 0xd581, 0xd581, - 0xd580, 0xd580, 0xd57f, 0xd57f, 0xd57e, 0xd57e, 0xd57d, 0xd57d, - 0xd57c, 0xd57c, 0xd57c, 0xd57b, 0xd57b, 0xd57a, 0xd57a, 0xd579, - 0xd579, 0xd579, 0xd578, 0xd578, 0xd577, 0xd577, 0xd576, 0xd576, - 0xd576, 0xd575, 0xd575, 0xd574, 0xd574, 0xd573, 0xd573, 0xd573, - 0xd572, 0xd572, 0xd571, 0xd571, 0xd571, 0xd570, 0xd570, 0xd56f, - 0xd56f, 0xd56f, 0xd56e, 0xd56e, 0xd56d, 0xd56d, 0xd56d, 0xd56c, - 0xd56c, 0xd56b, 0xd56b, 0xd56b, 0xd56a, 0xd56a, 0xd56a, 0xd569, - 0xd569, 0xd568, 0xd568, 0xd568, 0xd567, 0xd567, 0xd566, 0xd566, - 0xd566, 0xd565, 0xd565, 0xd565, 0xd564, 0xd564, 0xd564, 0xd563, - 0xd563, 0xd562, 0xd562, 0xd562, 0xd561, 0xd561, 0xd561, 0xd560, - 0xd560, 0xd560, 0xd55f, 0xd55f, 0xd55f, 0xd55e, 0xd55e, 0xd55d, - 0xd55d, 0xd55d, 0xd55c, 0xd55c, 0xd55c, 0xd55b, 0xd55b, 0xd55b, - 0xd55a, 0xd55a, 0xd55a, 0xd559, 0xd559, 0xd559, 0xd558, 0xd558, - 0xd558, 0xd557, 0xd557, 0xd557, 0xd556, 0xd556, 0xd556, 0xd555, - 0xd555, 0xd555, 0xd554, 0xd554, 0xd554, 0xd553, 0xd553, 0xd553, - 0xd552, 0xd552, 0xd552, 0xd551, 0xd551, 0xd551, 0xd551, 0xd550, - 0xd550, 0xd550, 0xd54f, 0xd54f, 0xd54f, 0xd54e, 0xd54e, 0xd54e, - 0xd54d, 0xd54d, 0xd54d, 0xd54d, 0xd54c, 0xd54c, 0xd54c, 0xd54b, - 0xd54b, 0xd54b, 0xd54a, 0xd54a, 0xd54a, 0xd549, 0xd549, 0xd549, - 0xd549, 0xd548, 0xd548, 0xd548, 0xd547, 0xd547, 0xd547, 0xd547, - 0xd546, 0xd546, 0xd546, 0xd545, 0xd545, 0xd545, 0xd545, 0xd544, - 0xd544, 0xd544, 0xd543, 0xd543, 0xd543, 0xd543, 0xd542, 0xd542, - 0xd542, 0xd541, 0xd541, 0xd541, 0xd541, 0xd540, 0xd540, 0xd540, - 0xd53f, 0xd53f, 0xd53f, 0xd53f, 0xd53e, 0xd53e, 0xd53e, 0xd53e, - 0xd53d, 0xd53d, 0xd53d, 0xd53c, 0xd53c, 0xd53c, 0xd53c, 0xd53b, - 0xd53b, 0xd53b, 0xd53b, 0xd53a, 0xd53a, 0xd53a, 0xd53a, 0xd539, - 0xd539, 0xd539, 0xd538, 0xd538, 0xd538, 0xd538, 0xd537, 0xd537, - 0xd537, 0xd537, 0xd536, 0xd536, 0xd536, 0xd536, 0xd535, 0xd535, - 0xd535, 0xd535, 0xd534, 0xd534, 0xd534, 0xd534, 0xd533, 0xd533, - 0xd533, 0xd533, 0xd532, 0xd532, 0xd532, 0xd532, 0xd531, 0xd531, - 0xd531, 0xd531, 0xd530, 0xd530, 0xd530, 0xd530, 0xd52f, 0xd52f, - 0xd52f, 0xd52f, 0xd52e, 0xd52e, 0xd52e, 0xd52e, 0xd52d, 0xd52d, - 0xd52d, 0xd52d, 0xd52d, 0xd52c, 0xd52c, 0xd52c, 0xd52c, 0xd52b, - 0xd52b, 0xd52b, 0xd52b, 0xd52a, 0xd52a, 0xd52a, 0xd52a, 0xd529, - 0xd529, 0xd529, 0xd529, 0xd529, 0xd528, 0xd528, 0xd528, 0xd528, - 0xd527, 0xd527, 0xd527, 0xd527, 0xd526, 0xd526, 0xd526, 0xd526, - 0xd526, 0xd525, 0xd525, 0xd525, 0xd525, 0xd524, 0xd524, 0xd524, - 0xd524, 0xd524, 0xd523, 0xd523, 0xd523, 0xd523, 0xd522, 0xd522, - 0xd522, 0xd522, 0xd522, 0xd521, 0xd521, 0xd521, 0xd521, 0xd520, - 0xd520, 0xd520, 0xd520, 0xd520, 0xd51f, 0xd51f, 0xd51f, 0xd51f, - 0xd51f, 0xd51e, 0xd51e, 0xd51e, 0xd51e, 0xd51d, 0xd51d, 0xd51d, - 0xd51d, 0xd51d, 0xd51c, 0xd51c, 0xd51c, 0xd51c, 0xd51c, 0xd51b, - 0xd51b, 0xd51b, 0xd51b, 0xd51b, 0xd51a, 0xd51a, 0xd51a, 0xd51a, - 0xd51a, 0xd519, 0xd519, 0xd519, 0xd519, 0xd518, 0xd518, 0xd518, - 0xd518, 0xd518, 0xd517, 0xd517, 0xd517, 0xd517, 0xd517, 0xd516, - 0xd516, 0xd516, 0xd516, 0xd516, 0xd515, 0xd515, 0xd515, 0xd515, - 0xd515, 0xd514, 0xd514, 0xd514, 0xd514, 0xd514, 0xd514, 0xd513, - 0xd513, 0xd513, 0xd513, 0xd513, 0xd512, 0xd512, 0xd512, 0xd512, - 0xd512, 0xd511, 0xd511, 0xd511, 0xd511, 0xd511, 0xd510, 0xd510, - 0xd510, 0xd510, 0xd510, 0xd50f, 0xd50f, 0xd50f, 0xd50f, 0xd50f, - 0xd50f, 0xd50e, 0xd50e, 0xd50e, 0xd50e, 0xd50e, 0xd50d, 0xd50d, - 0xd50d, 0xd50d, 0xd50d, 0xd50c, 0xd50c, 0xd50c, 0xd50c, 0xd50c, - 0xd50c, 0xd50b, 0xd50b, 0xd50b, 0xd50b, 0xd50b, 0xd50a, 0xd50a, - 0xd50a, 0xd50a, 0xd50a, 0xd50a, 0xd509, 0xd509, 0xd509, 0xd509, - 0xd509, 0xd508, 0xd508, 0xd508, 0xd508, 0xd508, 0xd508, 0xd507, - 0xd507, 0xd507, 0xd507, 0xd507, 0xd506, 0xd506, 0xd506, 0xd506, - 0xd506, 0xd506, 0xd505, 0xd505, 0xd505, 0xd505, 0xd505, 0xd505, - 0xd504, 0xd504, 0xd504, 0xd504, 0xd504, 0xd504, 0xd503, 0xd503, - 0xd503, 0xd503, 0xd503, 0xd502, 0xd502, 0xd502, 0xd502, 0xd502, - 0xd502, 0xd501, 0xd501, 0xd501, 0xd501, 0xd501, 0xd501, 0xd500, - 0xd500, 0xd500, 0xd500, 0xd500, 0xd500, 0xd4ff, 0xd4ff, 0xd4ff, - 0xd4ff, 0xd4ff, 0xd4ff, 0xd4fe, 0xd4fe, 0xd4fe, 0xd4fe, 0xd4fe, - 0xd4fe, 0xd4fd, 0xd4fd, 0xd4fd, 0xd4fd, 0xd4fd, 0xd4fd, 0xd4fc, - 0xd4fc, 0xd4fc, 0xd4fc, 0xd4fc, 0xd4fc, 0xd4fb, 0xd4fb, 0xd4fb, - 0xd4fb, 0xd4fb, 0xd4fb, 0xd4fb, 0xd4fa, 0xd4fa, 0xd4fa, 0xd4fa, - 0xd4fa, 0xd4fa, 0xd4f9, 0xd4f9, 0xd4f9, 0xd4f9, 0xd4f9, 0xd4f9, - 0xd4f8, 0xd4f8, 0xd4f8, 0xd4f8, 0xd4f8, 0xd4f8, 0xd4f7, 0xd4f7, - 0xd4f7, 0xd4f7, 0xd4f7, 0xd4f7, 0xd4f7, 0xd4f6, 0xd4f6, 0xd4f6, - 0xd4f6, 0xd4f6, 0xd4f6, 0xd4f5, 0xd4f5, 0xd4f5, 0xd4f5, 0xd4f5, - 0xd4f5, 0xd4f5, 0xd4f4, 0xd4f4, 0xd4f4, 0xd4f4, 0xd4f4, 0xd4f4, - 0xd4f3, 0xd4f3, 0xd4f3, 0xd4f3, 0xd4f3, 0xd4f3, 0xd4f3, 0xd4f2, - 0xd4f2, 0xd4f2, 0xd4f2, 0xd4f2, 0xd4f2, 0xd4f2, 0xd4f1, 0xd4f1, - 0xd4f1, 0xd4f1, 0xd4f1, 0xd4f1, 0xd4f0, 0xd4f0, 0xd4f0, 0xd4f0, - 0xd4f0, 0xd4f0, 0xd4f0, 0xd4ef, 0xd4ef, 0xd4ef, 0xd4ef, 0xd4ef, - 0xd4ef, 0xd4ef, 0xd4ee, 0xd4ee, 0xd4ee, 0xd4ee, 0xd4ee, 0xd4ee, - 0xd4ee, 0xd4ed, 0xd4ed, 0xd4ed, 0xd4ed, 0xd4ed, 0xd4ed, 0xd4ed, - 0xd4ec, 0xd4ec, 0xd4ec, 0xd4ec, 0xd4ec, 0xd4ec, 0xd4eb, 0xd4eb, - 0xd4eb, 0xd4eb, 0xd4eb, 0xd4eb, 0xd4eb, 0xd4ea, 0xd4ea, 0xd4ea, - 0xd4ea, 0xd4ea, 0xd4ea, 0xd4ea, 0xd4ea, 0xd4e9, 0xd4e9, 0xd4e9, - 0xd4e9, 0xd4e9, 0xd4e9, 0xd4e9, 0xd4e8, 0xd4e8, 0xd4e8, 0xd4e8, - 0xd4e8, 0xd4e8, 0xd4e8, 0xd4e7, 0xd4e7, 0xd4e7, 0xd4e7, 0xd4e7, - 0xd4e7, 0xd4e7, 0xd4e6, 0xd4e6, 0xd4e6, 0xd4e6, 0xd4e6, 0xd4e6, - 0xd4e6, 0xd4e5, 0xd4e5, 0xd4e5, 0xd4e5, 0xd4e5, 0xd4e5, 0xd4e5, - 0xd4e5, 0xd4e4, 0xd4e4, 0xd4e4, 0xd4e4, 0xd4e4, 0xd4e4, 0xd4e4, - 0xd4e3, 0xd4e3, 0xd4e3, 0xd4e3, 0xd4e3, 0xd4e3, 0xd4e3, 0xd4e3, - 0xd4e2, 0xd4e2, 0xd4e2, 0xd4e2, 0xd4e2, 0xd4e2, 0xd4e2, 0xd4e1, - 0xd4e1, 0xd4e1, 0xd4e1, 0xd4e1, 0xd4e1, 0xd4e1, 0xd4e1, 0xd4e0, - 0xd4e0, 0xd4e0, 0xd4e0, 0xd4e0, 0xd4e0, 0xd4e0, 0xd4df, 0xd4df, - 0xd4df, 0xd4df, 0xd4df, 0xd4df, 0xd4df, 0xd4df, 0xd4de, 0xd4de, - 0xd4de, 0xd4de, 0xd4de, 0xd4de, 0xd4de, 0xd4de, 0xd4dd, 0xd4dd, - 0xd4dd, 0xd4dd, 0xd4dd, 0xd4dd, 0xd4dd, 0xd4dd, 0xd4dc, 0xd4dc, - 0xd4dc, 0xd4dc, 0xd4dc, 0xd4dc, 0xd4dc, 0xd4dc, 0xd4db, 0xd4db, - 0xd4db, 0xd4db, 0xd4db, 0xd4db, 0xd4db, 0xd4da, 0xd4da, 0xd4da, - 0xd4da, 0xd4da, 0xd4da, 0xd4da, 0xd4da, 0xd4d9, 0xd4d9, 0xd4d9, - 0xd4d9, 0xd4d9, 0xd4d9, 0xd4d9, 0xd4d9, 0xd4d9, 0xd4d8, 0xd4d8, - 0xd4d8, 0xd4d8, 0xd4d8, 0xd4d8, 0xd4d8, 0xd4d8, 0xd4d7, 0xd4d7, - 0xd4d7, 0xd4d7, 0xd4d7, 0xd4d7, 0xd4d7, 0xd4d7, 0xd4d6, 0xd4d6, - 0xd4d6, 0xd4d6, 0xd4d6, 0xd4d6, 0xd4d6, 0xd4d6, 0xd4d5, 0xd4d5, - 0xd4d5, 0xd4d5, 0xd4d5, 0xd4d5, 0xd4d5, 0xd4d5, 0xd4d4, 0xd4d4, - 0xd4d4, 0xd4d4, 0xd4d4, 0xd4d4, 0xd4d4, 0xd4d4, 0xd4d4, 0xd4d3, - 0xd4d3, 0xd4d3, 0xd4d3, 0xd4d3, 0xd4d3, 0xd4d3, 0xd4d3, 0xd4d2, - 0xd4d2, 0xd4d2, 0xd4d2, 0xd4d2, 0xd4d2, 0xd4d2, 0xd4d2, 0xd4d2, - 0xd4d1, 0xd4d1, 0xd4d1, 0xd4d1, 0xd4d1, 0xd4d1, 0xd4d1, 0xd4d1, - 0xd4d0, 0xd4d0, 0xd4d0, 0xd4d0, 0xd4d0, 0xd4d0, 0xd4d0, 0xd4d0, - 0xd4d0, 0xd4cf, 0xd4cf, 0xd4cf, 0xd4cf, 0xd4cf, 0xd4cf, 0xd4cf, - 0xd4cf, 0xd4cf, 0xd4ce, 0xd4ce, 0xd4ce, 0xd4ce, 0xd4ce, 0xd4ce, - 0xd4ce, 0xd4ce, 0xd4ce, 0xd4cd, 0xd4cd, 0xd4cd, 0xd4cd, 0xd4cd, - 0xd4cd, 0xd4cd, 0xd4cd, 0xd4cc, 0xd4cc, 0xd4cc, 0xd4cc, 0xd4cc, - 0xd4cc, 0xd4cc, 0xd4cc, 0xd4cc, 0xd4cb, 0xd4cb, 0xd4cb, 0xd4cb, - 0xd4cb, 0xd4cb, 0xd4cb, 0xd4cb, 0xd4cb, 0xd4ca, 0xd4ca, 0xd4ca, - 0xd4ca, 0xd4ca, 0xd4ca, 0xd4ca, 0xd4ca, 0xd4ca, 0xd4c9, 0xd4c9, - 0xd4c9, 0xd4c9, 0xd4c9, 0xd4c9, 0xd4c9, 0xd4c9, 0xd4c9, 0xd4c9, - 0xd4c8, 0xd4c8, 0xd4c8, 0xd4c8, 0xd4c8, 0xd4c8, 0xd4c8, 0xd4c8, - 0xd4c8, 0xd4c7, 0xd4c7, 0xd4c7, 0xd4c7, 0xd4c7, 0xd4c7, 0xd4c7, - 0xd4c7, 0xd4c7, 0xd4c6, 0xd4c6, 0xd4c6, 0xd4c6, 0xd4c6, 0xd4c6, - 0xd4c6, 0xd4c6, 0xd4c6, 0xd4c5, 0xd4c5, 0xd4c5, 0xd4c5, 0xd4c5, - 0xd4c5, 0xd4c5, 0xd4c5, 0xd4c5, 0xd4c5, 0xd4c4, 0xd4c4, 0xd4c4, - 0xd4c4, 0xd4c4, 0xd4c4, 0xd4c4, 0xd4c4, 0xd4c4, 0xd4c3, 0xd4c3, - 0xd4c3, 0xd4c3, 0xd4c3, 0xd4c3, 0xd4c3, 0xd4c3, 0xd4c3, 0xd4c3, - 0xd4c2, 0xd4c2, 0xd4c2, 0xd4c2, 0xd4c2, 0xd4c2, 0xd4c2, 0xd4c2, - 0xd4c2, 0xd4c2, 0xd4c1, 0xd4c1, 0xd4c1, 0xd4c1, 0xd4c1, 0xd4c1, - 0xd4c1, 0xd4c1, 0xd4c1, 0xd4c0, 0xd4c0, 0xd4c0, 0xd4c0, 0xd4c0, - 0xd4c0, 0xd4c0, 0xd4c0, 0xd4c0, 0xd4c0, 0xd4bf, 0xd4bf, 0xd4bf, - 0xd4bf, 0xd4bf, 0xd4bf, 0xd4bf, 0xd4bf, 0xd4bf, 0xd4bf, 0xd4be, - 0xd4be, 0xd4be, 0xd4be, 0xd4be, 0xd4be, 0xd4be, 0xd4be, 0xd4be, - 0xd4be, 0xd4bd, 0xd4bd, 0xd4bd, 0xd4bd, 0xd4bd, 0xd4bd, 0xd4bd, - 0xd4bd, 0xd4bd, 0xd4bd, 0xd4bc, 0xd4bc, 0xd4bc, 0xd4bc, 0xd4bc, - 0xd4bc, 0xd4bc, 0xd4bc, 0xd4bc, 0xd4bc, 0xd4bb, 0xd4bb, 0xd4bb, - 0xd4bb, 0xd4bb, 0xd4bb, 0xd4bb, 0xd4bb, 0xd4bb, 0xd4bb, 0xd4ba, - 0xd4ba, 0xd4ba, 0xd4ba, 0xd4ba, 0xd4ba, 0xd4ba, 0xd4ba, 0xd4ba, - 0xd4ba, 0xd4ba, 0xd4b9, 0xd4b9, 0xd4b9, 0xd4b9, 0xd4b9, 0xd4b9, - 0xd4b9, 0xd4b9, 0xd4b9, 0xd4b9, 0xd4b8, 0xd4b8, 0xd4b8, 0xd4b8, - 0xd4b8, 0xd4b8, 0xd4b8, 0xd4b8, 0xd4b8, 0xd4b8, 0xd4b8, 0xd4b7, - 0xd4b7, 0xd4b7, 0xd4b7, 0xd4b7, 0xd4b7, 0xd4b7, 0xd4b7, 0xd4b7, - 0xd4b7, 0xd4b6, 0xd4b6, 0xd4b6, 0xd4b6, 0xd4b6, 0xd4b6, 0xd4b6, - 0xd4b6, 0xd4b6, 0xd4b6, 0xd4b6, 0xd4b5, 0xd4b5, 0xd4b5, 0xd4b5, - 0xd4b5, 0xd4b5, 0xd4b5, 0xd4b5, 0xd4b5, 0xd4b5, 0xd4b4, 0xd4b4, - 0xd4b4, 0xd4b4, 0xd4b4, 0xd4b4, 0xd4b4, 0xd4b4, 0xd4b4, 0xd4b4, - 0xd4b4, 0xd4b3, 0xd4b3, 0xd4b3, 0xd4b3, 0xd4b3, 0xd4b3, 0xd4b3, - 0xd4b3, 0xd4b3, 0xd4b3, 0xd4b3, 0xd4b2, 0xd4b2, 0xd4b2, 0xd4b2, - 0xd4b2, 0xd4b2, 0xd4b2, 0xd4b2, 0xd4b2, 0xd4b2, 0xd4b2, 0xd4b1, - 0xd4b1, 0xd4b1, 0xd4b1, 0xd4b1, 0xd4b1, 0xd4b1, 0xd4b1, 0xd4b1, - 0xd4b1, 0xd4b1, 0xd4b0, 0xd4b0, 0xd4b0, 0xd4b0, 0xd4b0, 0xd4b0, - 0xd4b0, 0xd4b0, 0xd4b0, 0xd4b0, 0xd4b0, 0xd4af, 0xd4af, 0xd4af, - 0xd4af, 0xd4af, 0xd4af, 0xd4af, 0xd4af, 0xd4af, 0xd4af, 0xd4af, - 0xd4ae, 0xd4ae, 0xd4ae, 0xd4ae, 0xd4ae, 0xd4ae, 0xd4ae, 0xd4ae, - 0xd4ae, 0xd4ae, 0xd4ae, 0xd4ae, 0xd4ad, 0xd4ad, 0xd4ad, 0xd4ad, - 0xd4ad, 0xd4ad, 0xd4ad, 0xd4ad, 0xd4ad, 0xd4ad, 0xd4ad, 0xd4ac, - 0xd4ac, 0xd4ac, 0xd4ac, 0xd4ac, 0xd4ac, 0xd4ac, 0xd4ac, 0xd4ac, - 0xd4ac, 0xd4ac, 0xd4ab, 0xd4ab, 0xd4ab, 0xd4ab, 0xd4ab, 0xd4ab, - 0xd4ab, 0xd4ab, 0xd4ab, 0xd4ab, 0xd4ab, 0xd4ab, 0xd4aa, 0xd4aa, - 0xd4aa, 0xd4aa, 0xd4aa, 0xd4aa, 0xd4aa, 0xd4aa, 0xd4aa, 0xd4aa, - 0xd4aa, 0xd4aa, 0xd4a9, 0xd4a9, 0xd4a9, 0xd4a9, 0xd4a9, 0xd4a9, - 0xd4a9, 0xd4a9, 0xd4a9, 0xd4a9, 0xd4a9, 0xd4a8, 0xd4a8, 0xd4a8, - 0xd4a8, 0xd4a8, 0xd4a8, 0xd4a8, 0xd4a8, 0xd4a8, 0xd4a8, 0xd4a8, - 0xd4a8, 0xd4a7, 0xd4a7, 0xd4a7, 0xd4a7, 0xd4a7, 0xd4a7, 0xd4a7, - 0xd4a7, 0xd4a7, 0xd4a7, 0xd4a7, 0xd4a7, 0xd4a6, 0xd4a6, 0xd4a6, - 0xd4a6, 0xd4a6, 0xd4a6, 0xd4a6, 0xd4a6, 0xd4a6, 0xd4a6, 0xd4a6, - 0xd4a6, 0xd4a5, 0xd4a5, 0xd4a5, 0xd4a5, 0xd4a5, 0xd4a5, 0xd4a5, - 0xd4a5, 0xd4a5, 0xd4a5, 0xd4a5, 0xd4a5, 0xd4a4, 0xd4a4, 0xd4a4, - 0xd4a4, 0xd4a4, 0xd4a4, 0xd4a4, 0xd4a4, 0xd4a4, 0xd4a4, 0xd4a4, - 0xd4a4, 0xd4a3, 0xd4a3, 0xd4a3, 0xd4a3, 0xd4a3, 0xd4a3, 0xd4a3, - 0xd4a3, 0xd4a3, 0xd4a3, 0xd4a3, 0xd4a3, 0xd4a3, 0xd4a2, 0xd4a2, - 0xd4a2, 0xd4a2, 0xd4a2, 0xd4a2, 0xd4a2, 0xd4a2, 0xd4a2, 0xd4a2, - 0xd4a2, 0xd4a2, 0xd4a1, 0xd4a1, 0xd4a1, 0xd4a1, 0xd4a1, 0xd4a1, - 0xd4a1, 0xd4a1, 0xd4a1, 0xd4a1, 0xd4a1, 0xd4a1, 0xd4a1, 0xd4a0, - 0xd4a0, 0xd4a0, 0xd4a0, 0xd4a0, 0xd4a0, 0xd4a0, 0xd4a0, 0xd4a0, - 0xd4a0, 0xd4a0, 0xd4a0, 0xd49f, 0xd49f, 0xd49f, 0xd49f, 0xd49f, - 0xd49f, 0xd49f, 0xd49f, 0xd49f, 0xd49f, 0xd49f, 0xd49f, 0xd49f, - 0xd49e, 0xd49e, 0xd49e, 0xd49e, 0xd49e, 0xd49e, 0xd49e, 0xd49e, - 0xd49e, 0xd49e, 0xd49e, 0xd49e, 0xd49e, 0xd49d, 0xd49d, 0xd49d, - 0xd49d, 0xd49d, 0xd49d, 0xd49d, 0xd49d, 0xd49d, 0xd49d, 0xd49d, - 0xd49d, 0xd49d, 0xd49c, 0xd49c, 0xd49c, 0xd49c, 0xd49c, 0xd49c, - 0xd49c, 0xd49c, 0xd49c, 0xd49c, 0xd49c, 0xd49c, 0xd49c, 0xd49b, - 0xd49b, 0xd49b, 0xd49b, 0xd49b, 0xd49b, 0xd49b, 0xd49b, 0xd49b, - 0xd49b, 0xd49b, 0xd49b, 0xd49b, 0xd49a, 0xd49a, 0xd49a, 0xd49a, - 0xd49a, 0xd49a, 0xd49a, 0xd49a, 0xd49a, 0xd49a, 0xd49a, 0xd49a, - 0xd49a, 0xd499, 0xd499, 0xd499, 0xd499, 0xd499, 0xd499, 0xd499, - 0xd499, 0xd499, 0xd499, 0xd499, 0xd499, 0xd499, 0xd498, 0xd498, - 0xd498, 0xd498, 0xd498, 0xd498, 0xd498, 0xd498, 0xd498, 0xd498, - 0xd498, 0xd498, 0xd498, 0xd498, 0xd497, 0xd497, 0xd497, 0xd497, - 0xd497, 0xd497, 0xd497, 0xd497, 0xd497, 0xd497, 0xd497, 0xd497, - 0xd497, 0xd496, 0xd496, 0xd496, 0xd496, 0xd496, 0xd496, 0xd496, - 0xd496, 0xd496, 0xd496, 0xd496, 0xd496, 0xd496, 0xd496, 0xd495, - 0xd495, 0xd495, 0xd495, 0xd495, 0xd495, 0xd495, 0xd495, 0xd495, - 0xd495, 0xd495, 0xd495, 0xd495, 0xd495, 0xd494, 0xd494, 0xd494, - 0xd494, 0xd494, 0xd494, 0xd494, 0xd494, 0xd494, 0xd494, 0xd494, - 0xd494, 0xd494, 0xd493, 0xd493, 0xd493, 0xd493, 0xd493, 0xd493, - 0xd493, 0xd493, 0xd493, 0xd493, 0xd493, 0xd493, 0xd493, 0xd493, - 0xd492, 0xd492, 0xd492, 0xd492, 0xd492, 0xd492, 0xd492, 0xd492, - 0xd492, 0xd492, 0xd492, 0xd492, 0xd492, 0xd492, 0xd491, 0xd491, - 0xd491, 0xd491, 0xd491, 0xd491, 0xd491, 0xd491, 0xd491, 0xd491, - 0xd491, 0xd491, 0xd491, 0xd491, 0xd491, 0xd490, 0xd490, 0xd490, - 0xd490, 0xd490, 0xd490, 0xd490, 0xd490, 0xd490, 0xd490, 0xd490, - 0xd490, 0xd490, 0xd490, 0xd48f, 0xd48f, 0xd48f, 0xd48f, 0xd48f, - 0xd48f, 0xd48f, 0xd48f, 0xd48f, 0xd48f, 0xd48f, 0xd48f, 0xd48f, - 0xd48f, 0xd48e, 0xd48e, 0xd48e, 0xd48e, 0xd48e, 0xd48e, 0xd48e, - 0xd48e, 0xd48e, 0xd48e, 0xd48e, 0xd48e, 0xd48e, 0xd48e, 0xd48e, - 0xd48d, 0xd48d, 0xd48d, 0xd48d, 0xd48d, 0xd48d, 0xd48d, 0xd48d, - 0xd48d, 0xd48d, 0xd48d, 0xd48d, 0xd48d, 0xd48d, 0xd48c, 0xd48c, - 0xd48c, 0xd48c, 0xd48c, 0xd48c, 0xd48c, 0xd48c, 0xd48c, 0xd48c, - 0xd48c, 0xd48c, 0xd48c, 0xd48c, 0xd48c, 0xd48b, 0xd48b, 0xd48b, - 0xd48b, 0xd48b, 0xd48b, 0xd48b, 0xd48b, 0xd48b, 0xd48b, 0xd48b, - 0xd48b, 0xd48b, 0xd48b, 0xd48b, 0xd48a, 0xd48a, 0xd48a, 0xd48a, - 0xd48a, 0xd48a, 0xd48a, 0xd48a, 0xd48a, 0xd48a, 0xd48a, 0xd48a, - 0xd48a, 0xd48a, 0xd48a, 0xd489, 0xd489, 0xd489, 0xd489, 0xd489, - 0xd489, 0xd489, 0xd489, 0xd489, 0xd489, 0xd489, 0xd489, 0xd489, - 0xd489, 0xd489, 0xd488, 0xd488, 0xd488, 0xd488, 0xd488, 0xd488, - 0xd488, 0xd488, 0xd488, 0xd488, 0xd488, 0xd488, 0xd488, 0xd488, - 0xd488, 0xd487, 0xd487, 0xd487, 0xd487, 0xd487, 0xd487, 0xd487, - 0xd487, 0xd487, 0xd487, 0xd487, 0xd487, 0xd487, 0xd487, 0xd487, - 0xd486, 0xd486, 0xd486, 0xd486, 0xd486, 0xd486, 0xd486, 0xd486, - 0xd486, 0xd486, 0xd486, 0xd486, 0xd486, 0xd486, 0xd486, 0xd486, - 0xd485, 0xd485, 0xd485, 0xd485, 0xd485, 0xd485, 0xd485, 0xd485, - 0xd485, 0xd485, 0xd485, 0xd485, 0xd485, 0xd485, 0xd485, 0xd484, - 0xd484, 0xd484, 0xd484, 0xd484, 0xd484, 0xd484, 0xd484, 0xd484, - 0xd484, 0xd484, 0xd484, 0xd484, 0xd484, 0xd484, 0xd484, 0xd483, - 0xd483, 0xd483, 0xd483, 0xd483, 0xd483, 0xd483, 0xd483, 0xd483, - 0xd483, 0xd483, 0xd483, 0xd483, 0xd483, 0xd483, 0xd483, 0xd482, - 0xd482, 0xd482, 0xd482, 0xd482, 0xd482, 0xd482, 0xd482, 0xd482, - 0xd482, 0xd482, 0xd482, 0xd482, 0xd482, 0xd482, 0xd482, 0xd481, - 0xd481, 0xd481, 0xd481, 0xd481, 0xd481, 0xd481, 0xd481, 0xd481, - 0xd480, 0xd480, 0xd480, 0xd480, 0xd480, 0xd480, 0xd480, 0xd480, - 0xd47f, 0xd47f, 0xd47f, 0xd47f, 0xd47f, 0xd47f, 0xd47f, 0xd47f, - 0xd47e, 0xd47e, 0xd47e, 0xd47e, 0xd47e, 0xd47e, 0xd47e, 0xd47e, - 0xd47d, 0xd47d, 0xd47d, 0xd47d, 0xd47d, 0xd47d, 0xd47d, 0xd47d, - 0xd47c, 0xd47c, 0xd47c, 0xd47c, 0xd47c, 0xd47c, 0xd47c, 0xd47c, - 0xd47c, 0xd47b, 0xd47b, 0xd47b, 0xd47b, 0xd47b, 0xd47b, 0xd47b, - 0xd47b, 0xd47a, 0xd47a, 0xd47a, 0xd47a, 0xd47a, 0xd47a, 0xd47a, - 0xd47a, 0xd47a, 0xd479, 0xd479, 0xd479, 0xd479, 0xd479, 0xd479, - 0xd479, 0xd479, 0xd478, 0xd478, 0xd478, 0xd478, 0xd478, 0xd478, - 0xd478, 0xd478, 0xd478, 0xd477, 0xd477, 0xd477, 0xd477, 0xd477, - 0xd477, 0xd477, 0xd477, 0xd476, 0xd476, 0xd476, 0xd476, 0xd476, - 0xd476, 0xd476, 0xd476, 0xd476, 0xd475, 0xd475, 0xd475, 0xd475, - 0xd475, 0xd475, 0xd475, 0xd475, 0xd475, 0xd474, 0xd474, 0xd474, - 0xd474, 0xd474, 0xd474, 0xd474, 0xd474, 0xd474, 0xd473, 0xd473, - 0xd473, 0xd473, 0xd473, 0xd473, 0xd473, 0xd473, 0xd473, 0xd472, - 0xd472, 0xd472, 0xd472, 0xd472, 0xd472, 0xd472, 0xd472, 0xd472, - 0xd471, 0xd471, 0xd471, 0xd471, 0xd471, 0xd471, 0xd471, 0xd471, - 0xd471, 0xd470, 0xd470, 0xd470, 0xd470, 0xd470, 0xd470, 0xd470, - 0xd470, 0xd470, 0xd46f, 0xd46f, 0xd46f, 0xd46f, 0xd46f, 0xd46f, - 0xd46f, 0xd46f, 0xd46f, 0xd46e, 0xd46e, 0xd46e, 0xd46e, 0xd46e, - 0xd46e, 0xd46e, 0xd46e, 0xd46e, 0xd46e, 0xd46d, 0xd46d, 0xd46d, - 0xd46d, 0xd46d, 0xd46d, 0xd46d, 0xd46d, 0xd46d, 0xd46c, 0xd46c, - 0xd46c, 0xd46c, 0xd46c, 0xd46c, 0xd46c, 0xd46c, 0xd46c, 0xd46c, - 0xd46b, 0xd46b, 0xd46b, 0xd46b, 0xd46b, 0xd46b, 0xd46b, 0xd46b, - 0xd46b, 0xd46a, 0xd46a, 0xd46a, 0xd46a, 0xd46a, 0xd46a, 0xd46a, - 0xd46a, 0xd46a, 0xd46a, 0xd469, 0xd469, 0xd469, 0xd469, 0xd469, - 0xd469, 0xd469, 0xd469, 0xd469, 0xd468, 0xd468, 0xd468, 0xd468, - 0xd468, 0xd468, 0xd468, 0xd468, 0xd468, 0xd468, 0xd467, 0xd467, - 0xd467, 0xd467, 0xd467, 0xd467, 0xd467, 0xd467, 0xd467, 0xd467, - 0xd466, 0xd466, 0xd466, 0xd466, 0xd466, 0xd466, 0xd466, 0xd466, - 0xd466, 0xd466, 0xd465, 0xd465, 0xd465, 0xd465, 0xd465, 0xd465, - 0xd465, 0xd465, 0xd465, 0xd465, 0xd464, 0xd464, 0xd464, 0xd464, - 0xd464, 0xd464, 0xd464, 0xd464, 0xd464, 0xd464, 0xd463, 0xd463, - 0xd463, 0xd463, 0xd463, 0xd463, 0xd463, 0xd463, 0xd463, 0xd463, - 0xd462, 0xd462, 0xd462, 0xd462, 0xd462, 0xd462, 0xd462, 0xd462, - 0xd462, 0xd462, 0xd461, 0xd461, 0xd461, 0xd461, 0xd461, 0xd461, - 0xd461, 0xd461, 0xd461, 0xd461, 0xd461, 0xd460, 0xd460, 0xd460, - 0xd460, 0xd460, 0xd460, 0xd460, 0xd460, 0xd460, 0xd460, 0xd45f, - 0xd45f, 0xd45f, 0xd45f, 0xd45f, 0xd45f, 0xd45f, 0xd45f, 0xd45f, - 0xd45f, 0xd45e, 0xd45e, 0xd45e, 0xd45e, 0xd45e, 0xd45e, 0xd45e, - 0xd45e, 0xd45e, 0xd45e, 0xd45e, 0xd45d, 0xd45d, 0xd45d, 0xd45d, - 0xd45d, 0xd45d, 0xd45d, 0xd45d, 0xd45d, 0xd45d, 0xd45d, 0xd45c, - 0xd45c, 0xd45c, 0xd45c, 0xd45c, 0xd45c, 0xd45c, 0xd45c, 0xd45c, - 0xd45c, 0xd45b, 0xd45b, 0xd45b, 0xd45b, 0xd45b, 0xd45b, 0xd45b, - 0xd45b, 0xd45b, 0xd45b, 0xd45b, 0xd45a, 0xd45a, 0xd45a, 0xd45a, - 0xd45a, 0xd45a, 0xd45a, 0xd45a, 0xd45a, 0xd45a, 0xd45a, 0xd459, - 0xd459, 0xd459, 0xd459, 0xd459, 0xd459, 0xd459, 0xd459, 0xd459, - 0xd459, 0xd459, 0xd458, 0xd458, 0xd458, 0xd458, 0xd458, 0xd458, - 0xd458, 0xd458, 0xd458, 0xd458, 0xd458, 0xd457, 0xd457, 0xd457, - 0xd457, 0xd457, 0xd457, 0xd457, 0xd457, 0xd457, 0xd457, 0xd457, - 0xd456, 0xd456, 0xd456, 0xd456, 0xd456, 0xd456, 0xd456, 0xd456, - 0xd456, 0xd456, 0xd456, 0xd455, 0xd455, 0xd455, 0xd455, 0xd455, - 0xd455, 0xd455, 0xd455, 0xd455, 0xd455, 0xd455, 0xd455, 0xd454, - 0xd454, 0xd454, 0xd454, 0xd454, 0xd454, 0xd454, 0xd454, 0xd454, - 0xd454, 0xd454, 0xd453, 0xd453, 0xd453, 0xd453, 0xd453, 0xd453, - 0xd453, 0xd453, 0xd453, 0xd453, 0xd453, 0xd453, 0xd452, 0xd452, - 0xd452, 0xd452, 0xd452, 0xd452, 0xd452, 0xd452, 0xd452, 0xd452, - 0xd452, 0xd451, 0xd451, 0xd451, 0xd451, 0xd451, 0xd451, 0xd451, - 0xd451, 0xd451, 0xd451, 0xd451, 0xd451, 0xd450, 0xd450, 0xd450, - 0xd450, 0xd450, 0xd450, 0xd450, 0xd450, 0xd450, 0xd450, 0xd450, - 0xd450, 0xd44f, 0xd44f, 0xd44f, 0xd44f, 0xd44f, 0xd44f, 0xd44f, - 0xd44f, 0xd44f, 0xd44f, 0xd44f, 0xd44f, 0xd44e, 0xd44e, 0xd44e, - 0xd44e, 0xd44e, 0xd44e, 0xd44e, 0xd44e, 0xd44e, 0xd44e, 0xd44e, - 0xd44d, 0xd44d, 0xd44d, 0xd44d, 0xd44d, 0xd44d, 0xd44d, 0xd44d, - 0xd44d, 0xd44d, 0xd44d, 0xd44d, 0xd44d, 0xd44c, 0xd44c, 0xd44c, - 0xd44c, 0xd44c, 0xd44c, 0xd44c, 0xd44c, 0xd44c, 0xd44c, 0xd44c, - 0xd44c, 0xd44b, 0xd44b, 0xd44b, 0xd44b, 0xd44b, 0xd44b, 0xd44b, - 0xd44b, 0xd44b, 0xd44b, 0xd44b, 0xd44b, 0xd44a, 0xd44a, 0xd44a, - 0xd44a, 0xd44a, 0xd44a, 0xd44a, 0xd44a, 0xd44a, 0xd44a, 0xd44a, - 0xd44a, 0xd449, 0xd449, 0xd449, 0xd449, 0xd449, 0xd449, 0xd449, - 0xd449, 0xd449, 0xd449, 0xd449, 0xd449, 0xd449, 0xd448, 0xd448, - 0xd448, 0xd448, 0xd448, 0xd448, 0xd448, 0xd448, 0xd448, 0xd448, - 0xd448, 0xd448, 0xd447, 0xd447, 0xd447, 0xd447, 0xd447, 0xd447, - 0xd447, 0xd447, 0xd447, 0xd447, 0xd447, 0xd447, 0xd447, 0xd446, - 0xd446, 0xd446, 0xd446, 0xd446, 0xd446, 0xd446, 0xd446, 0xd446, - 0xd446, 0xd446, 0xd446, 0xd446, 0xd445, 0xd445, 0xd445, 0xd445, - 0xd445, 0xd445, 0xd445, 0xd445, 0xd445, 0xd445, 0xd445, 0xd445, - 0xd444, 0xd444, 0xd444, 0xd444, 0xd444, 0xd444, 0xd444, 0xd444, - 0xd444, 0xd444, 0xd444, 0xd444, 0xd444, 0xd443, 0xd443, 0xd443, - 0xd443, 0xd443, 0xd443, 0xd443, 0xd443, 0xd443, 0xd443, 0xd443, - 0xd443, 0xd443, 0xd442, 0xd442, 0xd442, 0xd442, 0xd442, 0xd442, - 0xd442, 0xd442, 0xd442, 0xd442, 0xd442, 0xd442, 0xd442, 0xd441, - 0xd441, 0xd441, 0xd441, 0xd441, 0xd441, 0xd441, 0xd441, 0xd441, - 0xd441, 0xd441, 0xd441, 0xd441, 0xd441, 0xd440, 0xd440, 0xd440, - 0xd440, 0xd440, 0xd440, 0xd440, 0xd440, 0xd440, 0xd440, 0xd440, - 0xd440, 0xd440, 0xd43f, 0xd43f, 0xd43f, 0xd43f, 0xd43f, 0xd43f, - 0xd43f, 0xd43f, 0xd43f, 0xd43f, 0xd43f, 0xd43f, 0xd43f, 0xd43e, - 0xd43e, 0xd43e, 0xd43e, 0xd43e, 0xd43e, 0xd43e, 0xd43e, 0xd43e, - 0xd43e, 0xd43e, 0xd43e, 0xd43e, 0xd43e, 0xd43d, 0xd43d, 0xd43d, - 0xd43d, 0xd43d, 0xd43d, 0xd43d, 0xd43d, 0xd43d, 0xd43d, 0xd43d, - 0xd43d, 0xd43d, 0xd43d, 0xd43c, 0xd43c, 0xd43c, 0xd43c, 0xd43c, - 0xd43c, 0xd43c, 0xd43c, 0xd43c, 0xd43c, 0xd43c, 0xd43c, 0xd43c, - 0xd43b, 0xd43b, 0xd43b, 0xd43b, 0xd43b, 0xd43b, 0xd43b, 0xd43b, - 0xd43b, 0xd43b, 0xd43b, 0xd43b, 0xd43b, 0xd43b, 0xd43a, 0xd43a, - 0xd43a, 0xd43a, 0xd43a, 0xd43a, 0xd43a, 0xd43a, 0xd43a, 0xd43a, - 0xd43a, 0xd43a, 0xd43a, 0xd43a, 0xd439, 0xd439, 0xd439, 0xd439, - 0xd439, 0xd439, 0xd439, 0xd439, 0xd439, 0xd439, 0xd439, 0xd439, - 0xd439, 0xd439, 0xd438, 0xd438, 0xd438, 0xd438, 0xd438, 0xd438, - 0xd438, 0xd438, 0xd438, 0xd438, 0xd438, 0xd438, 0xd438, 0xd438, - 0xd438, 0xd437, 0xd437, 0xd437, 0xd437, 0xd437, 0xd437, 0xd437, - 0xd437, 0xd437, 0xd437, 0xd437, 0xd437, 0xd437, 0xd437, 0xd436, - 0xd436, 0xd436, 0xd436, 0xd436, 0xd436, 0xd436, 0xd436, 0xd436, - 0xd436, 0xd436, 0xd436, 0xd436, 0xd436, 0xd435, 0xd435, 0xd435, - 0xd435, 0xd435, 0xd435, 0xd435, 0xd435, 0xd435, 0xd435, 0xd435, - 0xd435, 0xd435, 0xd435, 0xd435, 0xd434, 0xd434, 0xd434, 0xd434, - 0xd434, 0xd434, 0xd434, 0xd434, 0xd434, 0xd434, 0xd434, 0xd434, - 0xd434, 0xd434, 0xd433, 0xd433, 0xd433, 0xd433, 0xd433, 0xd433, - 0xd433, 0xd433, 0xd433, 0xd433, 0xd433, 0xd433, 0xd433, 0xd433, - 0xd433, 0xd432, 0xd432, 0xd432, 0xd432, 0xd432, 0xd432, 0xd432, - 0xd432, 0xd432, 0xd432, 0xd432, 0xd432, 0xd432, 0xd432, 0xd432, - 0xd431, 0xd431, 0xd431, 0xd431, 0xd431, 0xd431, 0xd431, 0xd431, - 0xd431, 0xd431, 0xd431, 0xd431, 0xd431, 0xd431, 0xd431, 0xd430, - 0xd430, 0xd430, 0xd430, 0xd430, 0xd430, 0xd430, 0xd430, 0xd430, - 0xd430, 0xd430, 0xd430, 0xd430, 0xd430, 0xd430, 0xd42f, 0xd42f, - 0xd42f, 0xd42f, 0xd42f, 0xd42f, 0xd42f, 0xd42f, 0xd42f, 0xd42f, - 0xd42f, 0xd42f, 0xd42f, 0xd42f, 0xd42f, 0xd42e, 0xd42e, 0xd42e, - 0xd42e, 0xd42e, 0xd42e, 0xd42e, 0xd42e, 0xd42e, 0xd42e, 0xd42e, - 0xd42e, 0xd42e, 0xd42e, 0xd42e, 0xd42e, 0xd42d, 0xd42d, 0xd42d, - 0xd42d, 0xd42d, 0xd42d, 0xd42d, 0xd42d, 0xd42d, 0xd42d, 0xd42d, - 0xd42d, 0xd42d, 0xd42d, 0xd42d, 0xd42c, 0xd42c, 0xd42c, 0xd42c, - 0xd42c, 0xd42c, 0xd42c, 0xd42c, 0xd42c, 0xd42c, 0xd42c, 0xd42c, - 0xd42c, 0xd42c, 0xd42c, 0xd42c, 0xd42b, 0xd42b, 0xd42b, 0xd42b, - 0xd42b, 0xd42b, 0xd42b, 0xd42b, 0xd42b, 0xd42b, 0xd42b, 0xd42b, - 0xd42b, 0xd42b, 0xd42b, 0xd42a, 0xd42a, 0xd42a, 0xd42a, 0xd42a, - 0xd42a, 0xd42a, 0xd42a, 0xd42a, 0xd42a, 0xd42a, 0xd42a, 0xd42a, - 0xd42a, 0xd42a, 0xd42a, 0xd429, 0xd429, 0xd429, 0xd429, 0xd429, - 0xd429, 0xd429, 0xd429, 0xd429, 0xd429, 0xd429, 0xd429, 0xd429, - 0xd429, 0xd429, 0xd428, 0xd428, 0xd428, 0xd428, 0xd428, 0xd428, - 0xd428, 0xd428, 0xd427, 0xd427, 0xd427, 0xd427, 0xd427, 0xd427, - 0xd427, 0xd427, 0xd426, 0xd426, 0xd426, 0xd426, 0xd426, 0xd426, - 0xd426, 0xd426, 0xd425, 0xd425, 0xd425, 0xd425, 0xd425, 0xd425, - 0xd425, 0xd425, 0xd424, 0xd424, 0xd424, 0xd424, 0xd424, 0xd424, - 0xd424, 0xd424, 0xd424, 0xd423, 0xd423, 0xd423, 0xd423, 0xd423, - 0xd423, 0xd423, 0xd423, 0xd422, 0xd422, 0xd422, 0xd422, 0xd422, - 0xd422, 0xd422, 0xd422, 0xd422, 0xd421, 0xd421, 0xd421, 0xd421, - 0xd421, 0xd421, 0xd421, 0xd421, 0xd420, 0xd420, 0xd420, 0xd420, - 0xd420, 0xd420, 0xd420, 0xd420, 0xd420, 0xd41f, 0xd41f, 0xd41f, - 0xd41f, 0xd41f, 0xd41f, 0xd41f, 0xd41f, 0xd41e, 0xd41e, 0xd41e, - 0xd41e, 0xd41e, 0xd41e, 0xd41e, 0xd41e, 0xd41e, 0xd41d, 0xd41d, - 0xd41d, 0xd41d, 0xd41d, 0xd41d, 0xd41d, 0xd41d, 0xd41d, 0xd41c, - 0xd41c, 0xd41c, 0xd41c, 0xd41c, 0xd41c, 0xd41c, 0xd41c, 0xd41c, - 0xd41b, 0xd41b, 0xd41b, 0xd41b, 0xd41b, 0xd41b, 0xd41b, 0xd41b, - 0xd41a, 0xd41a, 0xd41a, 0xd41a, 0xd41a, 0xd41a, 0xd41a, 0xd41a, - 0xd41a, 0xd419, 0xd419, 0xd419, 0xd419, 0xd419, 0xd419, 0xd419, - 0xd419, 0xd419, 0xd418, 0xd418, 0xd418, 0xd418, 0xd418, 0xd418, - 0xd418, 0xd418, 0xd418, 0xd418, 0xd417, 0xd417, 0xd417, 0xd417, - 0xd417, 0xd417, 0xd417, 0xd417, 0xd417, 0xd416, 0xd416, 0xd416, - 0xd416, 0xd416, 0xd416, 0xd416, 0xd416, 0xd416, 0xd415, 0xd415, - 0xd415, 0xd415, 0xd415, 0xd415, 0xd415, 0xd415, 0xd415, 0xd414, - 0xd414, 0xd414, 0xd414, 0xd414, 0xd414, 0xd414, 0xd414, 0xd414, - 0xd414, 0xd413, 0xd413, 0xd413, 0xd413, 0xd413, 0xd413, 0xd413, - 0xd413, 0xd413, 0xd412, 0xd412, 0xd412, 0xd412, 0xd412, 0xd412, - 0xd412, 0xd412, 0xd412, 0xd412, 0xd411, 0xd411, 0xd411, 0xd411, - 0xd411, 0xd411, 0xd411, 0xd411, 0xd411, 0xd410, 0xd410, 0xd410, - 0xd410, 0xd410, 0xd410, 0xd410, 0xd410, 0xd410, 0xd410, 0xd40f, - 0xd40f, 0xd40f, 0xd40f, 0xd40f, 0xd40f, 0xd40f, 0xd40f, 0xd40f, - 0xd40f, 0xd40e, 0xd40e, 0xd40e, 0xd40e, 0xd40e, 0xd40e, 0xd40e, - 0xd40e, 0xd40e, 0xd40e, 0xd40d, 0xd40d, 0xd40d, 0xd40d, 0xd40d, - 0xd40d, 0xd40d, 0xd40d, 0xd40d, 0xd40d, 0xd40c, 0xd40c, 0xd40c, - 0xd40c, 0xd40c, 0xd40c, 0xd40c, 0xd40c, 0xd40c, 0xd40c, 0xd40b, - 0xd40b, 0xd40b, 0xd40b, 0xd40b, 0xd40b, 0xd40b, 0xd40b, 0xd40b, - 0xd40b, 0xd40a, 0xd40a, 0xd40a, 0xd40a, 0xd40a, 0xd40a, 0xd40a, - 0xd40a, 0xd40a, 0xd40a, 0xd409, 0xd409, 0xd409, 0xd409, 0xd409, - 0xd409, 0xd409, 0xd409, 0xd409, 0xd409, 0xd408, 0xd408, 0xd408, - 0xd408, 0xd408, 0xd408, 0xd408, 0xd408, 0xd408, 0xd408, 0xd407, - 0xd407, 0xd407, 0xd407, 0xd407, 0xd407, 0xd407, 0xd407, 0xd407, - 0xd407, 0xd407, 0xd406, 0xd406, 0xd406, 0xd406, 0xd406, 0xd406, - 0xd406, 0xd406, 0xd406, 0xd406, 0xd405, 0xd405, 0xd405, 0xd405, - 0xd405, 0xd405, 0xd405, 0xd405, 0xd405, 0xd405, 0xd405, 0xd404, - 0xd404, 0xd404, 0xd404, 0xd404, 0xd404, 0xd404, 0xd404, 0xd404, - 0xd404, 0xd404, 0xd403, 0xd403, 0xd403, 0xd403, 0xd403, 0xd403, - 0xd403, 0xd403, 0xd403, 0xd403, 0xd402, 0xd402, 0xd402, 0xd402, - 0xd402, 0xd402, 0xd402, 0xd402, 0xd402, 0xd402, 0xd402, 0xd401, - 0xd401, 0xd401, 0xd401, 0xd401, 0xd401, 0xd401, 0xd401, 0xd401, - 0xd401, 0xd401, 0xd400, 0xd400, 0xd400, 0xd400, 0xd400, 0xd400, - 0xd400, 0xd400, 0xd3ff, 0xd3ff, 0xd3ff, 0xd3ff, 0xd3ff, 0xd3ff, - 0xd3fe, 0xd3fe, 0xd3fe, 0xd3fe, 0xd3fe, 0xd3fd, 0xd3fd, 0xd3fd, - 0xd3fd, 0xd3fd, 0xd3fd, 0xd3fc, 0xd3fc, 0xd3fc, 0xd3fc, 0xd3fc, - 0xd3fb, 0xd3fb, 0xd3fb, 0xd3fb, 0xd3fb, 0xd3fb, 0xd3fa, 0xd3fa, - 0xd3fa, 0xd3fa, 0xd3fa, 0xd3fa, 0xd3f9, 0xd3f9, 0xd3f9, 0xd3f9, - 0xd3f9, 0xd3f8, 0xd3f8, 0xd3f8, 0xd3f8, 0xd3f8, 0xd3f8, 0xd3f7, - 0xd3f7, 0xd3f7, 0xd3f7, 0xd3f7, 0xd3f7, 0xd3f6, 0xd3f6, 0xd3f6, - 0xd3f6, 0xd3f6, 0xd3f5, 0xd3f5, 0xd3f5, 0xd3f5, 0xd3f5, 0xd3f5, - 0xd3f4, 0xd3f4, 0xd3f4, 0xd3f4, 0xd3f4, 0xd3f4, 0xd3f3, 0xd3f3, - 0xd3f3, 0xd3f3, 0xd3f3, 0xd3f3, 0xd3f2, 0xd3f2, 0xd3f2, 0xd3f2, - 0xd3f2, 0xd3f2, 0xd3f1, 0xd3f1, 0xd3f1, 0xd3f1, 0xd3f1, 0xd3f0, - 0xd3f0, 0xd3f0, 0xd3f0, 0xd3f0, 0xd3f0, 0xd3ef, 0xd3ef, 0xd3ef, - 0xd3ef, 0xd3ef, 0xd3ef, 0xd3ee, 0xd3ee, 0xd3ee, 0xd3ee, 0xd3ee, - 0xd3ee, 0xd3ed, 0xd3ed, 0xd3ed, 0xd3ed, 0xd3ed, 0xd3ed, 0xd3ec, - 0xd3ec, 0xd3ec, 0xd3ec, 0xd3ec, 0xd3ec, 0xd3eb, 0xd3eb, 0xd3eb, - 0xd3eb, 0xd3eb, 0xd3eb, 0xd3ea, 0xd3ea, 0xd3ea, 0xd3ea, 0xd3ea, - 0xd3ea, 0xd3e9, 0xd3e9, 0xd3e9, 0xd3e9, 0xd3e9, 0xd3e9, 0xd3e8, - 0xd3e8, 0xd3e8, 0xd3e8, 0xd3e8, 0xd3e8, 0xd3e7, 0xd3e7, 0xd3e7, - 0xd3e7, 0xd3e7, 0xd3e7, 0xd3e6, 0xd3e6, 0xd3e6, 0xd3e6, 0xd3e6, - 0xd3e6, 0xd3e5, 0xd3e5, 0xd3e5, 0xd3e5, 0xd3e5, 0xd3e5, 0xd3e4, - 0xd3e4, 0xd3e4, 0xd3e4, 0xd3e4, 0xd3e4, 0xd3e3, 0xd3e3, 0xd3e3, - 0xd3e3, 0xd3e3, 0xd3e3, 0xd3e2, 0xd3e2, 0xd3e2, 0xd3e2, 0xd3e2, - 0xd3e2, 0xd3e2, 0xd3e1, 0xd3e1, 0xd3e1, 0xd3e1, 0xd3e1, 0xd3e1, - 0xd3e0, 0xd3e0, 0xd3e0, 0xd3e0, 0xd3e0, 0xd3e0, 0xd3df, 0xd3df, - 0xd3df, 0xd3df, 0xd3df, 0xd3df, 0xd3de, 0xd3de, 0xd3de, 0xd3de, - 0xd3de, 0xd3de, 0xd3de, 0xd3dd, 0xd3dd, 0xd3dd, 0xd3dd, 0xd3dd, - 0xd3dd, 0xd3dc, 0xd3dc, 0xd3dc, 0xd3dc, 0xd3dc, 0xd3dc, 0xd3db, - 0xd3db, 0xd3db, 0xd3db, 0xd3db, 0xd3db, 0xd3db, 0xd3da, 0xd3da, - 0xd3da, 0xd3da, 0xd3da, 0xd3da, 0xd3d9, 0xd3d9, 0xd3d9, 0xd3d9, - 0xd3d9, 0xd3d9, 0xd3d8, 0xd3d8, 0xd3d8, 0xd3d8, 0xd3d8, 0xd3d8, - 0xd3d8, 0xd3d7, 0xd3d7, 0xd3d7, 0xd3d7, 0xd3d7, 0xd3d7, 0xd3d6, - 0xd3d6, 0xd3d6, 0xd3d6, 0xd3d6, 0xd3d6, 0xd3d6, 0xd3d5, 0xd3d5, - 0xd3d5, 0xd3d5, 0xd3d5, 0xd3d5, 0xd3d4, 0xd3d4, 0xd3d4, 0xd3d4, - 0xd3d4, 0xd3d4, 0xd3d4, 0xd3d3, 0xd3d3, 0xd3d3, 0xd3d3, 0xd3d3, - 0xd3d3, 0xd3d2, 0xd3d2, 0xd3d2, 0xd3d2, 0xd3d2, 0xd3d2, 0xd3d2, - 0xd3d1, 0xd3d1, 0xd3d1, 0xd3d1, 0xd3d1, 0xd3d1, 0xd3d0, 0xd3d0, - 0xd3d0, 0xd3d0, 0xd3d0, 0xd3d0, 0xd3d0, 0xd3cf, 0xd3cf, 0xd3cf, - 0xd3cf, 0xd3cf, 0xd3cf, 0xd3cf, 0xd3ce, 0xd3ce, 0xd3ce, 0xd3ce, - 0xd3ce, 0xd3ce, 0xd3cd, 0xd3cd, 0xd3cd, 0xd3cd, 0xd3cd, 0xd3cd, - 0xd3cd, 0xd3cc, 0xd3cc, 0xd3cc, 0xd3cc, 0xd3cc, 0xd3cc, 0xd3cc, - 0xd3cb, 0xd3cb, 0xd3cb, 0xd3cb, 0xd3cb, 0xd3cb, 0xd3cb, 0xd3ca, - 0xd3ca, 0xd3ca, 0xd3ca, 0xd3ca, 0xd3ca, 0xd3c9, 0xd3c9, 0xd3c9, - 0xd3c9, 0xd3c9, 0xd3c9, 0xd3c9, 0xd3c8, 0xd3c8, 0xd3c8, 0xd3c8, - 0xd3c8, 0xd3c8, 0xd3c8, 0xd3c7, 0xd3c7, 0xd3c7, 0xd3c7, 0xd3c7, - 0xd3c7, 0xd3c7, 0xd3c6, 0xd3c6, 0xd3c6, 0xd3c6, 0xd3c6, 0xd3c6, - 0xd3c6, 0xd3c5, 0xd3c5, 0xd3c5, 0xd3c5, 0xd3c5, 0xd3c5, 0xd3c5, - 0xd3c4, 0xd3c4, 0xd3c4, 0xd3c4, 0xd3c4, 0xd3c4, 0xd3c4, 0xd3c3, - 0xd3c3, 0xd3c3, 0xd3c3, 0xd3c3, 0xd3c3, 0xd3c3, 0xd3c2, 0xd3c2, - 0xd3c2, 0xd3c2, 0xd3c2, 0xd3c2, 0xd3c2, 0xd3c1, 0xd3c1, 0xd3c1, - 0xd3c1, 0xd3c1, 0xd3c1, 0xd3c1, 0xd3c0, 0xd3c0, 0xd3c0, 0xd3c0, - 0xd3c0, 0xd3c0, 0xd3c0, 0xd3bf, 0xd3bf, 0xd3bf, 0xd3bf, 0xd3bf, - 0xd3bf, 0xd3bf, 0xd3be, 0xd3be, 0xd3be, 0xd3be, 0xd3be, 0xd3be, - 0xd3be, 0xd3bd, 0xd3bd, 0xd3bd, 0xd3bd, 0xd3bd, 0xd3bd, 0xd3bd, - 0xd3bc, 0xd3bc, 0xd3bc, 0xd3bc, 0xd3bc, 0xd3bc, 0xd3bc, 0xd3bb, - 0xd3bb, 0xd3bb, 0xd3bb, 0xd3bb, 0xd3bb, 0xd3bb, 0xd3ba, 0xd3ba, - 0xd3ba, 0xd3ba, 0xd3ba, 0xd3ba, 0xd3ba, 0xd3ba, 0xd3b9, 0xd3b9, - 0xd3b9, 0xd3b9, 0xd3b9, 0xd3b9, 0xd3b9, 0xd3b8, 0xd3b8, 0xd3b8, - 0xd3b8, 0xd3b8, 0xd3b8, 0xd3b8, 0xd3b7, 0xd3b7, 0xd3b7, 0xd3b7, - 0xd3b7, 0xd3b7, 0xd3b7, 0xd3b6, 0xd3b6, 0xd3b6, 0xd3b6, 0xd3b6, - 0xd3b6, 0xd3b6, 0xd3b6, 0xd3b5, 0xd3b5, 0xd3b5, 0xd3b5, 0xd3b5, - 0xd3b5, 0xd3b5, 0xd3b4, 0xd3b4, 0xd3b4, 0xd3b4, 0xd3b4, 0xd3b4, - 0xd3b4, 0xd3b4, 0xd3b3, 0xd3b3, 0xd3b3, 0xd3b3, 0xd3b3, 0xd3b3, - 0xd3b3, 0xd3b2, 0xd3b2, 0xd3b2, 0xd3b2, 0xd3b2, 0xd3b2, 0xd3b2, - 0xd3b1, 0xd3b1, 0xd3b1, 0xd3b1, 0xd3b1, 0xd3b1, 0xd3b1, 0xd3b1, - 0xd3b0, 0xd3b0, 0xd3b0, 0xd3b0, 0xd3b0, 0xd3b0, 0xd3b0, 0xd3af, - 0xd3af, 0xd3af, 0xd3af, 0xd3af, 0xd3af, 0xd3af, 0xd3af, 0xd3ae, - 0xd3ae, 0xd3ae, 0xd3ae, 0xd3ae, 0xd3ae, 0xd3ae, 0xd3ae, 0xd3ad, - 0xd3ad, 0xd3ad, 0xd3ad, 0xd3ad, 0xd3ad, 0xd3ad, 0xd3ac, 0xd3ac, - 0xd3ac, 0xd3ac, 0xd3ac, 0xd3ac, 0xd3ac, 0xd3ac, 0xd3ab, 0xd3ab, - 0xd3ab, 0xd3ab, 0xd3ab, 0xd3ab, 0xd3ab, 0xd3aa, 0xd3aa, 0xd3aa, - 0xd3aa, 0xd3aa, 0xd3aa, 0xd3aa, 0xd3aa, 0xd3a9, 0xd3a9, 0xd3a9, - 0xd3a9, 0xd3a9, 0xd3a9, 0xd3a9, 0xd3a9, 0xd3a8, 0xd3a8, 0xd3a8, - 0xd3a8, 0xd3a8, 0xd3a8, 0xd3a8, 0xd3a8, 0xd3a7, 0xd3a7, 0xd3a7, - 0xd3a7, 0xd3a7, 0xd3a7, 0xd3a7, 0xd3a6, 0xd3a6, 0xd3a6, 0xd3a6, - 0xd3a6, 0xd3a6, 0xd3a6, 0xd3a6, 0xd3a5, 0xd3a5, 0xd3a5, 0xd3a5, - 0xd3a5, 0xd3a5, 0xd3a5, 0xd3a5, 0xd3a4, 0xd3a4, 0xd3a4, 0xd3a4, - 0xd3a4, 0xd3a4, 0xd3a4, 0xd3a4, 0xd3a3, 0xd3a3, 0xd3a3, 0xd3a3, - 0xd3a3, 0xd3a3, 0xd3a3, 0xd3a3, 0xd3a2, 0xd3a2, 0xd3a2, 0xd3a2, - 0xd3a2, 0xd3a2, 0xd3a2, 0xd3a2, 0xd3a1, 0xd3a1, 0xd3a1, 0xd3a1, - 0xd3a1, 0xd3a1, 0xd3a1, 0xd3a1, 0xd3a0, 0xd3a0, 0xd3a0, 0xd3a0, - 0xd3a0, 0xd3a0, 0xd39f, 0xd39f, 0xd39f, 0xd39f, 0xd39e, 0xd39e, - 0xd39e, 0xd39e, 0xd39d, 0xd39d, 0xd39d, 0xd39d, 0xd39c, 0xd39c, - 0xd39c, 0xd39c, 0xd39b, 0xd39b, 0xd39b, 0xd39b, 0xd39a, 0xd39a, - 0xd39a, 0xd39a, 0xd399, 0xd399, 0xd399, 0xd399, 0xd399, 0xd398, - 0xd398, 0xd398, 0xd398, 0xd397, 0xd397, 0xd397, 0xd397, 0xd396, - 0xd396, 0xd396, 0xd396, 0xd395, 0xd395, 0xd395, 0xd395, 0xd394, - 0xd394, 0xd394, 0xd394, 0xd393, 0xd393, 0xd393, 0xd393, 0xd393, - 0xd392, 0xd392, 0xd392, 0xd392, 0xd391, 0xd391, 0xd391, 0xd391, - 0xd390, 0xd390, 0xd390, 0xd390, 0xd38f, 0xd38f, 0xd38f, 0xd38f, - 0xd38f, 0xd38e, 0xd38e, 0xd38e, 0xd38e, 0xd38d, 0xd38d, 0xd38d, - 0xd38d, 0xd38c, 0xd38c, 0xd38c, 0xd38c, 0xd38b, 0xd38b, 0xd38b, - 0xd38b, 0xd38b, 0xd38a, 0xd38a, 0xd38a, 0xd38a, 0xd389, 0xd389, - 0xd389, 0xd389, 0xd389, 0xd388, 0xd388, 0xd388, 0xd388, 0xd387, - 0xd387, 0xd387, 0xd387, 0xd386, 0xd386, 0xd386, 0xd386, 0xd386, - 0xd385, 0xd385, 0xd385, 0xd385, 0xd384, 0xd384, 0xd384, 0xd384, - 0xd384, 0xd383, 0xd383, 0xd383, 0xd383, 0xd382, 0xd382, 0xd382, - 0xd382, 0xd382, 0xd381, 0xd381, 0xd381, 0xd381, 0xd380, 0xd380, - 0xd380, 0xd380, 0xd380, 0xd37f, 0xd37f, 0xd37f, 0xd37f, 0xd37e, - 0xd37e, 0xd37e, 0xd37e, 0xd37e, 0xd37d, 0xd37d, 0xd37d, 0xd37d, - 0xd37c, 0xd37c, 0xd37c, 0xd37c, 0xd37c, 0xd37b, 0xd37b, 0xd37b, - 0xd37b, 0xd37b, 0xd37a, 0xd37a, 0xd37a, 0xd37a, 0xd379, 0xd379, - 0xd379, 0xd379, 0xd379, 0xd378, 0xd378, 0xd378, 0xd378, 0xd378, - 0xd377, 0xd377, 0xd377, 0xd377, 0xd376, 0xd376, 0xd376, 0xd376, - 0xd376, 0xd375, 0xd375, 0xd375, 0xd375, 0xd375, 0xd374, 0xd374, - 0xd374, 0xd374, 0xd373, 0xd373, 0xd373, 0xd373, 0xd373, 0xd372, - 0xd372, 0xd372, 0xd372, 0xd372, 0xd371, 0xd371, 0xd371, 0xd371, - 0xd371, 0xd370, 0xd370, 0xd370, 0xd370, 0xd370, 0xd36f, 0xd36f, - 0xd36f, 0xd36f, 0xd36e, 0xd36e, 0xd36e, 0xd36e, 0xd36e, 0xd36d, - 0xd36d, 0xd36d, 0xd36d, 0xd36d, 0xd36c, 0xd36c, 0xd36c, 0xd36c, - 0xd36c, 0xd36b, 0xd36b, 0xd36b, 0xd36b, 0xd36b, 0xd36a, 0xd36a, - 0xd36a, 0xd36a, 0xd36a, 0xd369, 0xd369, 0xd369, 0xd369, 0xd369, - 0xd368, 0xd368, 0xd368, 0xd368, 0xd368, 0xd367, 0xd367, 0xd367, - 0xd367, 0xd367, 0xd366, 0xd366, 0xd366, 0xd366, 0xd366, 0xd365, - 0xd365, 0xd365, 0xd365, 0xd365, 0xd364, 0xd364, 0xd364, 0xd364, - 0xd364, 0xd363, 0xd363, 0xd363, 0xd363, 0xd363, 0xd362, 0xd362, - 0xd362, 0xd362, 0xd362, 0xd361, 0xd361, 0xd361, 0xd361, 0xd361, - 0xd360, 0xd360, 0xd360, 0xd360, 0xd360, 0xd35f, 0xd35f, 0xd35f, - 0xd35f, 0xd35f, 0xd35f, 0xd35e, 0xd35e, 0xd35e, 0xd35e, 0xd35e, - 0xd35d, 0xd35d, 0xd35d, 0xd35d, 0xd35d, 0xd35c, 0xd35c, 0xd35c, - 0xd35c, 0xd35c, 0xd35b, 0xd35b, 0xd35b, 0xd35b, 0xd35b, 0xd35a, - 0xd35a, 0xd35a, 0xd35a, 0xd35a, 0xd35a, 0xd359, 0xd359, 0xd359, - 0xd359, 0xd359, 0xd358, 0xd358, 0xd358, 0xd358, 0xd358, 0xd357, - 0xd357, 0xd357, 0xd357, 0xd357, 0xd357, 0xd356, 0xd356, 0xd356, - 0xd356, 0xd356, 0xd355, 0xd355, 0xd355, 0xd355, 0xd355, 0xd354, - 0xd354, 0xd354, 0xd354, 0xd354, 0xd354, 0xd353, 0xd353, 0xd353, - 0xd353, 0xd353, 0xd352, 0xd352, 0xd352, 0xd352, 0xd352, 0xd351, - 0xd351, 0xd351, 0xd351, 0xd351, 0xd351, 0xd350, 0xd350, 0xd350, - 0xd350, 0xd350, 0xd34f, 0xd34f, 0xd34f, 0xd34f, 0xd34f, 0xd34f, - 0xd34e, 0xd34e, 0xd34e, 0xd34e, 0xd34e, 0xd34d, 0xd34d, 0xd34d, - 0xd34d, 0xd34d, 0xd34d, 0xd34c, 0xd34c, 0xd34c, 0xd34c, 0xd34c, - 0xd34b, 0xd34b, 0xd34b, 0xd34b, 0xd34b, 0xd34b, 0xd34a, 0xd34a, - 0xd34a, 0xd34a, 0xd34a, 0xd34a, 0xd349, 0xd349, 0xd349, 0xd349, - 0xd349, 0xd348, 0xd348, 0xd348, 0xd348, 0xd348, 0xd348, 0xd347, - 0xd347, 0xd347, 0xd347, 0xd347, 0xd347, 0xd346, 0xd346, 0xd346, - 0xd346, 0xd346, 0xd345, 0xd345, 0xd345, 0xd345, 0xd345, 0xd345, - 0xd344, 0xd344, 0xd344, 0xd344, 0xd344, 0xd344, 0xd343, 0xd343, - 0xd343, 0xd343, 0xd343, 0xd342, 0xd342, 0xd342, 0xd342, 0xd342, - 0xd342, 0xd341, 0xd341, 0xd341, 0xd341, 0xd341, 0xd341, 0xd340, - 0xd340, 0xd340, 0xd340, 0xd340, 0xd340, 0xd33f, 0xd33f, 0xd33f, - 0xd33f, 0xd33f, 0xd33f, 0xd33e, 0xd33e, 0xd33e, 0xd33e, 0xd33e, - 0xd33d, 0xd33d, 0xd33d, 0xd33d, 0xd33d, 0xd33d, 0xd33c, 0xd33c, - 0xd33c, 0xd33c, 0xd33c, 0xd33c, 0xd33b, 0xd33b, 0xd33b, 0xd33b, - 0xd33b, 0xd33b, 0xd33a, 0xd33a, 0xd33a, 0xd33a, 0xd33a, 0xd33a, - 0xd339, 0xd339, 0xd339, 0xd339, 0xd339, 0xd339, 0xd338, 0xd338, - 0xd338, 0xd338, 0xd338, 0xd338, 0xd337, 0xd337, 0xd337, 0xd337, - 0xd337, 0xd337, 0xd336, 0xd336, 0xd336, 0xd336, 0xd336, 0xd336, - 0xd335, 0xd335, 0xd335, 0xd335, 0xd335, 0xd335, 0xd334, 0xd334, - 0xd334, 0xd334, 0xd334, 0xd334, 0xd333, 0xd333, 0xd333, 0xd333, - 0xd333, 0xd333, 0xd332, 0xd332, 0xd332, 0xd332, 0xd332, 0xd332, - 0xd332, 0xd331, 0xd331, 0xd331, 0xd331, 0xd331, 0xd331, 0xd330, - 0xd330, 0xd330, 0xd330, 0xd330, 0xd330, 0xd32f, 0xd32f, 0xd32f, - 0xd32f, 0xd32f, 0xd32f, 0xd32e, 0xd32e, 0xd32e, 0xd32e, 0xd32e, - 0xd32e, 0xd32d, 0xd32d, 0xd32d, 0xd32d, 0xd32d, 0xd32d, 0xd32d, - 0xd32c, 0xd32c, 0xd32c, 0xd32c, 0xd32c, 0xd32c, 0xd32b, 0xd32b, - 0xd32b, 0xd32b, 0xd32b, 0xd32b, 0xd32a, 0xd32a, 0xd32a, 0xd32a, - 0xd32a, 0xd32a, 0xd32a, 0xd329, 0xd329, 0xd329, 0xd329, 0xd329, - 0xd329, 0xd328, 0xd328, 0xd328, 0xd328, 0xd328, 0xd328, 0xd327, - 0xd327, 0xd327, 0xd327, 0xd327, 0xd327, 0xd327, 0xd326, 0xd326, - 0xd326, 0xd326, 0xd326, 0xd326, 0xd325, 0xd325, 0xd325, 0xd325, - 0xd325, 0xd325, 0xd325, 0xd324, 0xd324, 0xd324, 0xd324, 0xd324, - 0xd324, 0xd323, 0xd323, 0xd323, 0xd323, 0xd323, 0xd323, 0xd323, - 0xd322, 0xd322, 0xd322, 0xd322, 0xd322, 0xd322, 0xd321, 0xd321, - 0xd321, 0xd321, 0xd321, 0xd321, 0xd321, 0xd320, 0xd320, 0xd320, - 0xd320, 0xd320, 0xd320, 0xd31f, 0xd31f, 0xd31f, 0xd31f, 0xd31f, - 0xd31f, 0xd31f, 0xd31e, 0xd31e, 0xd31e, 0xd31e, 0xd31e, 0xd31e, - 0xd31e, 0xd31d, 0xd31d, 0xd31d, 0xd31d, 0xd31d, 0xd31d, 0xd31c, - 0xd31c, 0xd31c, 0xd31c, 0xd31c, 0xd31c, 0xd31c, 0xd31b, 0xd31b, - 0xd31b, 0xd31b, 0xd31b, 0xd31b, 0xd31b, 0xd31a, 0xd31a, 0xd31a, - 0xd31a, 0xd31a, 0xd31a, 0xd31a, 0xd319, 0xd319, 0xd319, 0xd319, - 0xd319, 0xd319, 0xd318, 0xd318, 0xd318, 0xd318, 0xd318, 0xd318, - 0xd318, 0xd317, 0xd317, 0xd317, 0xd317, 0xd317, 0xd317, 0xd317, - 0xd316, 0xd316, 0xd316, 0xd316, 0xd316, 0xd316, 0xd316, 0xd315, - 0xd315, 0xd315, 0xd315, 0xd315, 0xd315, 0xd315, 0xd314, 0xd314, - 0xd314, 0xd314, 0xd314, 0xd314, 0xd314, 0xd313, 0xd313, 0xd313, - 0xd313, 0xd313, 0xd313, 0xd313, 0xd312, 0xd312, 0xd312, 0xd312, - 0xd312, 0xd312, 0xd311, 0xd311, 0xd311, 0xd311, 0xd311, 0xd311, - 0xd311, 0xd310, 0xd310, 0xd310, 0xd310, 0xd310, 0xd310, 0xd310, - 0xd310, 0xd30f, 0xd30f, 0xd30f, 0xd30f, 0xd30f, 0xd30f, 0xd30f, - 0xd30e, 0xd30e, 0xd30e, 0xd30e, 0xd30e, 0xd30e, 0xd30e, 0xd30d, - 0xd30d, 0xd30d, 0xd30d, 0xd30d, 0xd30d, 0xd30d, 0xd30c, 0xd30c, - 0xd30c, 0xd30c, 0xd30c, 0xd30c, 0xd30c, 0xd30b, 0xd30b, 0xd30b, - 0xd30b, 0xd30b, 0xd30b, 0xd30b, 0xd30a, 0xd30a, 0xd30a, 0xd30a, - 0xd30a, 0xd30a, 0xd30a, 0xd309, 0xd309, 0xd309, 0xd309, 0xd309, - 0xd309, 0xd309, 0xd308, 0xd308, 0xd308, 0xd308, 0xd308, 0xd308, - 0xd308, 0xd308, 0xd307, 0xd307, 0xd307, 0xd307, 0xd307, 0xd307, - 0xd307, 0xd306, 0xd306, 0xd306, 0xd306, 0xd306, 0xd306, 0xd306, - 0xd305, 0xd305, 0xd305, 0xd305, 0xd305, 0xd305, 0xd305, 0xd305, - 0xd304, 0xd304, 0xd304, 0xd304, 0xd304, 0xd304, 0xd304, 0xd303, - 0xd303, 0xd303, 0xd303, 0xd303, 0xd303, 0xd303, 0xd302, 0xd302, - 0xd302, 0xd302, 0xd302, 0xd302, 0xd302, 0xd302, 0xd301, 0xd301, - 0xd301, 0xd301, 0xd301, 0xd301, 0xd301, 0xd300, 0xd300, 0xd300, - 0xd300, 0xd300, 0xd300, 0xd300, 0xd300, 0xd2ff, 0xd2ff, 0xd2ff, - 0xd2ff, 0xd2ff, 0xd2ff, 0xd2ff, 0xd2fe, 0xd2fe, 0xd2fe, 0xd2fe, - 0xd2fe, 0xd2fe, 0xd2fe, 0xd2fe, 0xd2fd, 0xd2fd, 0xd2fd, 0xd2fd, - 0xd2fd, 0xd2fd, 0xd2fd, 0xd2fc, 0xd2fc, 0xd2fc, 0xd2fc, 0xd2fc, - 0xd2fc, 0xd2fc, 0xd2fc, 0xd2fb, 0xd2fb, 0xd2fb, 0xd2fb, 0xd2fb, - 0xd2fb, 0xd2fb, 0xd2fa, 0xd2fa, 0xd2fa, 0xd2fa, 0xd2fa, 0xd2fa, - 0xd2fa, 0xd2fa, 0xd2f9, 0xd2f9, 0xd2f9, 0xd2f9, 0xd2f9, 0xd2f9, - 0xd2f9, 0xd2f9, 0xd2f8, 0xd2f8, 0xd2f8, 0xd2f8, 0xd2f8, 0xd2f8, - 0xd2f8, 0xd2f7, 0xd2f7, 0xd2f7, 0xd2f7, 0xd2f7, 0xd2f7, 0xd2f7, - 0xd2f7, 0xd2f6, 0xd2f6, 0xd2f6, 0xd2f6, 0xd2f6, 0xd2f6, 0xd2f6, - 0xd2f6, 0xd2f5, 0xd2f5, 0xd2f5, 0xd2f5, 0xd2f5, 0xd2f5, 0xd2f5, - 0xd2f5, 0xd2f4, 0xd2f4, 0xd2f4, 0xd2f4, 0xd2f4, 0xd2f4, 0xd2f4, - 0xd2f4, 0xd2f3, 0xd2f3, 0xd2f3, 0xd2f3, 0xd2f3, 0xd2f3, 0xd2f3, - 0xd2f2, 0xd2f2, 0xd2f2, 0xd2f2, 0xd2f2, 0xd2f2, 0xd2f2, 0xd2f2, - 0xd2f1, 0xd2f1, 0xd2f1, 0xd2f1, 0xd2f1, 0xd2f1, 0xd2f1, 0xd2f1, - 0xd2f0, 0xd2f0, 0xd2f0, 0xd2f0, 0xd2f0, 0xd2f0, 0xd2f0, 0xd2f0, - 0xd2ef, 0xd2ef, 0xd2ef, 0xd2ef, 0xd2ef, 0xd2ef, 0xd2ef, 0xd2ef, - 0xd2ee, 0xd2ee, 0xd2ee, 0xd2ee, 0xd2ed, 0xd2ed, 0xd2ed, 0xd2ed, - 0xd2ec, 0xd2ec, 0xd2ec, 0xd2ec, 0xd2eb, 0xd2eb, 0xd2eb, 0xd2eb, - 0xd2ea, 0xd2ea, 0xd2ea, 0xd2ea, 0xd2ea, 0xd2e9, 0xd2e9, 0xd2e9, - 0xd2e9, 0xd2e8, 0xd2e8, 0xd2e8, 0xd2e8, 0xd2e7, 0xd2e7, 0xd2e7, - 0xd2e7, 0xd2e6, 0xd2e6, 0xd2e6, 0xd2e6, 0xd2e5, 0xd2e5, 0xd2e5, - 0xd2e5, 0xd2e4, 0xd2e4, 0xd2e4, 0xd2e4, 0xd2e3, 0xd2e3, 0xd2e3, - 0xd2e3, 0xd2e2, 0xd2e2, 0xd2e2, 0xd2e2, 0xd2e2, 0xd2e1, 0xd2e1, - 0xd2e1, 0xd2e1, 0xd2e0, 0xd2e0, 0xd2e0, 0xd2e0, 0xd2df, 0xd2df, - 0xd2df, 0xd2df, 0xd2de, 0xd2de, 0xd2de, 0xd2de, 0xd2de, 0xd2dd, - 0xd2dd, 0xd2dd, 0xd2dd, 0xd2dc, 0xd2dc, 0xd2dc, 0xd2dc, 0xd2db, - 0xd2db, 0xd2db, 0xd2db, 0xd2db, 0xd2da, 0xd2da, 0xd2da, 0xd2da, - 0xd2d9, 0xd2d9, 0xd2d9, 0xd2d9, 0xd2d8, 0xd2d8, 0xd2d8, 0xd2d8, - 0xd2d8, 0xd2d7, 0xd2d7, 0xd2d7, 0xd2d7, 0xd2d6, 0xd2d6, 0xd2d6, - 0xd2d6, 0xd2d5, 0xd2d5, 0xd2d5, 0xd2d5, 0xd2d5, 0xd2d4, 0xd2d4, - 0xd2d4, 0xd2d4, 0xd2d3, 0xd2d3, 0xd2d3, 0xd2d3, 0xd2d3, 0xd2d2, - 0xd2d2, 0xd2d2, 0xd2d2, 0xd2d1, 0xd2d1, 0xd2d1, 0xd2d1, 0xd2d1, - 0xd2d0, 0xd2d0, 0xd2d0, 0xd2d0, 0xd2cf, 0xd2cf, 0xd2cf, 0xd2cf, - 0xd2cf, 0xd2ce, 0xd2ce, 0xd2ce, 0xd2ce, 0xd2cd, 0xd2cd, 0xd2cd, - 0xd2cd, 0xd2cd, 0xd2cc, 0xd2cc, 0xd2cc, 0xd2cc, 0xd2cb, 0xd2cb, - 0xd2cb, 0xd2cb, 0xd2cb, 0xd2ca, 0xd2ca, 0xd2ca, 0xd2ca, 0xd2ca, - 0xd2c9, 0xd2c9, 0xd2c9, 0xd2c9, 0xd2c8, 0xd2c8, 0xd2c8, 0xd2c8, - 0xd2c8, 0xd2c7, 0xd2c7, 0xd2c7, 0xd2c7, 0xd2c6, 0xd2c6, 0xd2c6, - 0xd2c6, 0xd2c6, 0xd2c5, 0xd2c5, 0xd2c5, 0xd2c5, 0xd2c5, 0xd2c4, - 0xd2c4, 0xd2c4, 0xd2c4, 0xd2c4, 0xd2c3, 0xd2c3, 0xd2c3, 0xd2c3, - 0xd2c2, 0xd2c2, 0xd2c2, 0xd2c2, 0xd2c2, 0xd2c1, 0xd2c1, 0xd2c1, - 0xd2c1, 0xd2c1, 0xd2c0, 0xd2c0, 0xd2c0, 0xd2c0, 0xd2c0, 0xd2bf, - 0xd2bf, 0xd2bf, 0xd2bf, 0xd2be, 0xd2be, 0xd2be, 0xd2be, 0xd2be, - 0xd2bd, 0xd2bd, 0xd2bd, 0xd2bd, 0xd2bd, 0xd2bc, 0xd2bc, 0xd2bc, - 0xd2bc, 0xd2bc, 0xd2bb, 0xd2bb, 0xd2bb, 0xd2bb, 0xd2bb, 0xd2ba, - 0xd2ba, 0xd2ba, 0xd2ba, 0xd2ba, 0xd2b9, 0xd2b9, 0xd2b9, 0xd2b9, - 0xd2b9, 0xd2b8, 0xd2b8, 0xd2b8, 0xd2b8, 0xd2b8, 0xd2b7, 0xd2b7, - 0xd2b7, 0xd2b7, 0xd2b7, 0xd2b6, 0xd2b6, 0xd2b6, 0xd2b6, 0xd2b6, - 0xd2b5, 0xd2b5, 0xd2b5, 0xd2b5, 0xd2b5, 0xd2b4, 0xd2b4, 0xd2b4, - 0xd2b4, 0xd2b4, 0xd2b3, 0xd2b3, 0xd2b3, 0xd2b3, 0xd2b3, 0xd2b2, - 0xd2b2, 0xd2b2, 0xd2b2, 0xd2b2, 0xd2b1, 0xd2b1, 0xd2b1, 0xd2b1, - 0xd2b1, 0xd2b0, 0xd2b0, 0xd2b0, 0xd2b0, 0xd2b0, 0xd2af, 0xd2af, - 0xd2af, 0xd2af, 0xd2af, 0xd2ae, 0xd2ae, 0xd2ae, 0xd2ae, 0xd2ae, - 0xd2ad, 0xd2ad, 0xd2ad, 0xd2ad, 0xd2ad, 0xd2ac, 0xd2ac, 0xd2ac, - 0xd2ac, 0xd2ac, 0xd2ac, 0xd2ab, 0xd2ab, 0xd2ab, 0xd2ab, 0xd2ab, - 0xd2aa, 0xd2aa, 0xd2aa, 0xd2aa, 0xd2aa, 0xd2a9, 0xd2a9, 0xd2a9, - 0xd2a9, 0xd2a9, 0xd2a8, 0xd2a8, 0xd2a8, 0xd2a8, 0xd2a8, 0xd2a8, - 0xd2a7, 0xd2a7, 0xd2a7, 0xd2a7, 0xd2a7, 0xd2a6, 0xd2a6, 0xd2a6, - 0xd2a6, 0xd2a6, 0xd2a5, 0xd2a5, 0xd2a5, 0xd2a5, 0xd2a5, 0xd2a4, - 0xd2a4, 0xd2a4, 0xd2a4, 0xd2a4, 0xd2a4, 0xd2a3, 0xd2a3, 0xd2a3, - 0xd2a3, 0xd2a3, 0xd2a2, 0xd2a2, 0xd2a2, 0xd2a2, 0xd2a2, 0xd2a2, - 0xd2a1, 0xd2a1, 0xd2a1, 0xd2a1, 0xd2a1, 0xd2a0, 0xd2a0, 0xd2a0, - 0xd2a0, 0xd2a0, 0xd29f, 0xd29f, 0xd29f, 0xd29f, 0xd29f, 0xd29f, - 0xd29e, 0xd29e, 0xd29e, 0xd29e, 0xd29e, 0xd29d, 0xd29d, 0xd29d, - 0xd29d, 0xd29d, 0xd29d, 0xd29c, 0xd29c, 0xd29c, 0xd29c, 0xd29c, - 0xd29b, 0xd29b, 0xd29b, 0xd29b, 0xd29b, 0xd29b, 0xd29a, 0xd29a, - 0xd29a, 0xd29a, 0xd29a, 0xd29a, 0xd299, 0xd299, 0xd299, 0xd299, - 0xd299, 0xd298, 0xd298, 0xd298, 0xd298, 0xd298, 0xd298, 0xd297, - 0xd297, 0xd297, 0xd297, 0xd297, 0xd296, 0xd296, 0xd296, 0xd296, - 0xd296, 0xd296, 0xd295, 0xd295, 0xd295, 0xd295, 0xd295, 0xd295, - 0xd294, 0xd294, 0xd294, 0xd294, 0xd294, 0xd293, 0xd293, 0xd293, - 0xd293, 0xd293, 0xd293, 0xd292, 0xd292, 0xd292, 0xd292, 0xd292, - 0xd292, 0xd291, 0xd291, 0xd291, 0xd291, 0xd291, 0xd291, 0xd290, - 0xd290, 0xd290, 0xd290, 0xd290, 0xd28f, 0xd28f, 0xd28f, 0xd28f, - 0xd28f, 0xd28f, 0xd28e, 0xd28e, 0xd28e, 0xd28e, 0xd28e, 0xd28e, - 0xd28d, 0xd28d, 0xd28d, 0xd28d, 0xd28d, 0xd28d, 0xd28c, 0xd28c, - 0xd28c, 0xd28c, 0xd28c, 0xd28c, 0xd28b, 0xd28b, 0xd28b, 0xd28b, - 0xd28b, 0xd28b, 0xd28a, 0xd28a, 0xd28a, 0xd28a, 0xd28a, 0xd28a, - 0xd289, 0xd289, 0xd289, 0xd289, 0xd289, 0xd288, 0xd288, 0xd288, - 0xd288, 0xd288, 0xd288, 0xd287, 0xd287, 0xd287, 0xd287, 0xd287, - 0xd287, 0xd286, 0xd286, 0xd286, 0xd286, 0xd286, 0xd286, 0xd285, - 0xd285, 0xd285, 0xd285, 0xd285, 0xd285, 0xd285, 0xd284, 0xd284, - 0xd284, 0xd284, 0xd284, 0xd284, 0xd283, 0xd283, 0xd283, 0xd283, - 0xd283, 0xd283, 0xd282, 0xd282, 0xd282, 0xd282, 0xd282, 0xd282, - 0xd281, 0xd281, 0xd281, 0xd281, 0xd281, 0xd281, 0xd280, 0xd280, - 0xd280, 0xd280, 0xd280, 0xd280, 0xd27f, 0xd27f, 0xd27f, 0xd27f, - 0xd27f, 0xd27f, 0xd27e, 0xd27e, 0xd27e, 0xd27e, 0xd27e, 0xd27e, - 0xd27d, 0xd27d, 0xd27d, 0xd27d, 0xd27d, 0xd27d, 0xd27d, 0xd27c, - 0xd27c, 0xd27c, 0xd27c, 0xd27c, 0xd27c, 0xd27b, 0xd27b, 0xd27b, - 0xd27b, 0xd27b, 0xd27b, 0xd27a, 0xd27a, 0xd27a, 0xd27a, 0xd27a, - 0xd27a, 0xd27a, 0xd279, 0xd279, 0xd279, 0xd279, 0xd279, 0xd279, - 0xd278, 0xd278, 0xd278, 0xd278, 0xd278, 0xd278, 0xd277, 0xd277, - 0xd277, 0xd277, 0xd277, 0xd277, 0xd277, 0xd276, 0xd276, 0xd276, - 0xd276, 0xd276, 0xd276, 0xd275, 0xd275, 0xd275, 0xd275, 0xd275, - 0xd275, 0xd274, 0xd274, 0xd274, 0xd274, 0xd274, 0xd274, 0xd274, - 0xd273, 0xd273, 0xd273, 0xd273, 0xd273, 0xd273, 0xd272, 0xd272, - 0xd272, 0xd272, 0xd272, 0xd272, 0xd272, 0xd271, 0xd271, 0xd271, - 0xd271, 0xd271, 0xd271, 0xd270, 0xd270, 0xd270, 0xd270, 0xd270, - 0xd270, 0xd270, 0xd26f, 0xd26f, 0xd26f, 0xd26f, 0xd26f, 0xd26f, - 0xd26f, 0xd26e, 0xd26e, 0xd26e, 0xd26e, 0xd26e, 0xd26e, 0xd26d, - 0xd26d, 0xd26d, 0xd26d, 0xd26d, 0xd26d, 0xd26d, 0xd26c, 0xd26c, - 0xd26c, 0xd26c, 0xd26c, 0xd26c, 0xd26b, 0xd26b, 0xd26b, 0xd26b, - 0xd26b, 0xd26b, 0xd26b, 0xd26a, 0xd26a, 0xd26a, 0xd26a, 0xd26a, - 0xd26a, 0xd26a, 0xd269, 0xd269, 0xd269, 0xd269, 0xd269, 0xd269, - 0xd269, 0xd268, 0xd268, 0xd268, 0xd268, 0xd268, 0xd268, 0xd267, - 0xd267, 0xd267, 0xd267, 0xd267, 0xd267, 0xd267, 0xd266, 0xd266, - 0xd266, 0xd266, 0xd266, 0xd266, 0xd266, 0xd265, 0xd265, 0xd265, - 0xd265, 0xd265, 0xd265, 0xd265, 0xd264, 0xd264, 0xd264, 0xd264, - 0xd264, 0xd264, 0xd264, 0xd263, 0xd263, 0xd263, 0xd263, 0xd263, - 0xd263, 0xd263, 0xd262, 0xd262, 0xd262, 0xd262, 0xd262, 0xd262, - 0xd261, 0xd261, 0xd261, 0xd261, 0xd261, 0xd261, 0xd261, 0xd260, - 0xd260, 0xd260, 0xd260, 0xd260, 0xd260, 0xd260, 0xd25f, 0xd25f, - 0xd25f, 0xd25f, 0xd25f, 0xd25f, 0xd25f, 0xd25e, 0xd25e, 0xd25e, - 0xd25e, 0xd25e, 0xd25e, 0xd25e, 0xd25d, 0xd25d, 0xd25d, 0xd25d, - 0xd25d, 0xd25d, 0xd25d, 0xd25c, 0xd25c, 0xd25c, 0xd25c, 0xd25c, - 0xd25c, 0xd25c, 0xd25c, 0xd25b, 0xd25b, 0xd25b, 0xd25b, 0xd25b, - 0xd25b, 0xd25b, 0xd25a, 0xd25a, 0xd25a, 0xd25a, 0xd25a, 0xd25a, - 0xd25a, 0xd259, 0xd259, 0xd259, 0xd259, 0xd259, 0xd259, 0xd259, - 0xd258, 0xd258, 0xd258, 0xd258, 0xd258, 0xd258, 0xd258, 0xd257, - 0xd257, 0xd257, 0xd257, 0xd257, 0xd257, 0xd257, 0xd256, 0xd256, - 0xd256, 0xd256, 0xd256, 0xd256, 0xd256, 0xd256, 0xd255, 0xd255, - 0xd255, 0xd255, 0xd255, 0xd255, 0xd255, 0xd254, 0xd254, 0xd254, - 0xd254, 0xd254, 0xd254, 0xd254, 0xd253, 0xd253, 0xd253, 0xd253, - 0xd253, 0xd253, 0xd253, 0xd253, 0xd252, 0xd252, 0xd252, 0xd252, - 0xd252, 0xd252, 0xd252, 0xd251, 0xd251, 0xd251, 0xd251, 0xd251, - 0xd251, 0xd251, 0xd250, 0xd250, 0xd250, 0xd250, 0xd250, 0xd250, - 0xd250, 0xd250, 0xd24f, 0xd24f, 0xd24f, 0xd24f, 0xd24f, 0xd24f, - 0xd24f, 0xd24e, 0xd24e, 0xd24e, 0xd24e, 0xd24e, 0xd24e, 0xd24e, - 0xd24e, 0xd24d, 0xd24d, 0xd24d, 0xd24d, 0xd24d, 0xd24d, 0xd24d, - 0xd24c, 0xd24c, 0xd24c, 0xd24c, 0xd24c, 0xd24c, 0xd24c, 0xd24c, - 0xd24b, 0xd24b, 0xd24b, 0xd24b, 0xd24b, 0xd24b, 0xd24b, 0xd24a, - 0xd24a, 0xd24a, 0xd24a, 0xd24a, 0xd24a, 0xd24a, 0xd24a, 0xd249, - 0xd249, 0xd249, 0xd249, 0xd249, 0xd249, 0xd249, 0xd249, 0xd248, - 0xd248, 0xd248, 0xd248, 0xd248, 0xd248, 0xd248, 0xd247, 0xd247, - 0xd247, 0xd247, 0xd247, 0xd247, 0xd247, 0xd247, 0xd246, 0xd246, - 0xd246, 0xd246, 0xd246, 0xd246, 0xd246, 0xd246, 0xd245, 0xd245, - 0xd245, 0xd245, 0xd245, 0xd245, 0xd245, 0xd244, 0xd244, 0xd244, - 0xd244, 0xd244, 0xd244, 0xd244, 0xd244, 0xd243, 0xd243, 0xd243, - 0xd243, 0xd243, 0xd243, 0xd243, 0xd243, 0xd242, 0xd242, 0xd242, - 0xd242, 0xd242, 0xd242, 0xd242, 0xd242, 0xd241, 0xd241, 0xd241, - 0xd241, 0xd241, 0xd241, 0xd241, 0xd241, 0xd240, 0xd240, 0xd240, - 0xd240, 0xd240, 0xd240, 0xd240, 0xd240, 0xd23f, 0xd23f, 0xd23f, - 0xd23f, 0xd23f, 0xd23f, 0xd23f, 0xd23f, 0xd23e, 0xd23e, 0xd23e, - 0xd23e, 0xd23e, 0xd23e, 0xd23e, 0xd23e, 0xd23d, 0xd23d, 0xd23d, - 0xd23d, 0xd23d, 0xd23d, 0xd23c, 0xd23c, 0xd23c, 0xd23c, 0xd23b, - 0xd23b, 0xd23b, 0xd23b, 0xd23a, 0xd23a, 0xd23a, 0xd23a, 0xd239, - 0xd239, 0xd239, 0xd239, 0xd238, 0xd238, 0xd238, 0xd238, 0xd237, - 0xd237, 0xd237, 0xd237, 0xd236, 0xd236, 0xd236, 0xd236, 0xd235, - 0xd235, 0xd235, 0xd235, 0xd234, 0xd234, 0xd234, 0xd234, 0xd233, - 0xd233, 0xd233, 0xd233, 0xd232, 0xd232, 0xd232, 0xd232, 0xd232, - 0xd231, 0xd231, 0xd231, 0xd231, 0xd230, 0xd230, 0xd230, 0xd230, - 0xd22f, 0xd22f, 0xd22f, 0xd22f, 0xd22e, 0xd22e, 0xd22e, 0xd22e, - 0xd22d, 0xd22d, 0xd22d, 0xd22d, 0xd22d, 0xd22c, 0xd22c, 0xd22c, - 0xd22c, 0xd22b, 0xd22b, 0xd22b, 0xd22b, 0xd22a, 0xd22a, 0xd22a, - 0xd22a, 0xd22a, 0xd229, 0xd229, 0xd229, 0xd229, 0xd228, 0xd228, - 0xd228, 0xd228, 0xd227, 0xd227, 0xd227, 0xd227, 0xd227, 0xd226, - 0xd226, 0xd226, 0xd226, 0xd225, 0xd225, 0xd225, 0xd225, 0xd224, - 0xd224, 0xd224, 0xd224, 0xd224, 0xd223, 0xd223, 0xd223, 0xd223, - 0xd222, 0xd222, 0xd222, 0xd222, 0xd222, 0xd221, 0xd221, 0xd221, - 0xd221, 0xd220, 0xd220, 0xd220, 0xd220, 0xd220, 0xd21f, 0xd21f, - 0xd21f, 0xd21f, 0xd21e, 0xd21e, 0xd21e, 0xd21e, 0xd21e, 0xd21d, - 0xd21d, 0xd21d, 0xd21d, 0xd21c, 0xd21c, 0xd21c, 0xd21c, 0xd21c, - 0xd21b, 0xd21b, 0xd21b, 0xd21b, 0xd21a, 0xd21a, 0xd21a, 0xd21a, - 0xd21a, 0xd219, 0xd219, 0xd219, 0xd219, 0xd218, 0xd218, 0xd218, - 0xd218, 0xd218, 0xd217, 0xd217, 0xd217, 0xd217, 0xd217, 0xd216, - 0xd216, 0xd216, 0xd216, 0xd215, 0xd215, 0xd215, 0xd215, 0xd215, - 0xd214, 0xd214, 0xd214, 0xd214, 0xd214, 0xd213, 0xd213, 0xd213, - 0xd213, 0xd212, 0xd212, 0xd212, 0xd212, 0xd212, 0xd211, 0xd211, - 0xd211, 0xd211, 0xd211, 0xd210, 0xd210, 0xd210, 0xd210, 0xd210, - 0xd20f, 0xd20f, 0xd20f, 0xd20f, 0xd20f, 0xd20e, 0xd20e, 0xd20e, - 0xd20e, 0xd20d, 0xd20d, 0xd20d, 0xd20d, 0xd20d, 0xd20c, 0xd20c, - 0xd20c, 0xd20c, 0xd20c, 0xd20b, 0xd20b, 0xd20b, 0xd20b, 0xd20b, - 0xd20a, 0xd20a, 0xd20a, 0xd20a, 0xd20a, 0xd209, 0xd209, 0xd209, - 0xd209, 0xd209, 0xd208, 0xd208, 0xd208, 0xd208, 0xd208, 0xd207, - 0xd207, 0xd207, 0xd207, 0xd206, 0xd206, 0xd206, 0xd206, 0xd206, - 0xd205, 0xd205, 0xd205, 0xd205, 0xd205, 0xd204, 0xd204, 0xd204, - 0xd204, 0xd204, 0xd203, 0xd203, 0xd203, 0xd203, 0xd203, 0xd202, - 0xd202, 0xd202, 0xd202, 0xd202, 0xd201, 0xd201, 0xd201, 0xd201, - 0xd201, 0xd201, 0xd200, 0xd200, 0xd200, 0xd200, 0xd200, 0xd1ff, - 0xd1ff, 0xd1ff, 0xd1ff, 0xd1ff, 0xd1fe, 0xd1fe, 0xd1fe, 0xd1fe, - 0xd1fe, 0xd1fd, 0xd1fd, 0xd1fd, 0xd1fd, 0xd1fd, 0xd1fc, 0xd1fc, - 0xd1fc, 0xd1fc, 0xd1fc, 0xd1fb, 0xd1fb, 0xd1fb, 0xd1fb, 0xd1fb, - 0xd1fa, 0xd1fa, 0xd1fa, 0xd1fa, 0xd1fa, 0xd1f9, 0xd1f9, 0xd1f9, - 0xd1f9, 0xd1f9, 0xd1f9, 0xd1f8, 0xd1f8, 0xd1f8, 0xd1f8, 0xd1f8, - 0xd1f7, 0xd1f7, 0xd1f7, 0xd1f7, 0xd1f7, 0xd1f6, 0xd1f6, 0xd1f6, - 0xd1f6, 0xd1f6, 0xd1f5, 0xd1f5, 0xd1f5, 0xd1f5, 0xd1f5, 0xd1f5, - 0xd1f4, 0xd1f4, 0xd1f4, 0xd1f4, 0xd1f4, 0xd1f3, 0xd1f3, 0xd1f3, - 0xd1f3, 0xd1f3, 0xd1f2, 0xd1f2, 0xd1f2, 0xd1f2, 0xd1f2, 0xd1f2, - 0xd1f1, 0xd1f1, 0xd1f1, 0xd1f1, 0xd1f1, 0xd1f0, 0xd1f0, 0xd1f0, - 0xd1f0, 0xd1f0, 0xd1f0, 0xd1ef, 0xd1ef, 0xd1ef, 0xd1ef, 0xd1ef, - 0xd1ee, 0xd1ee, 0xd1ee, 0xd1ee, 0xd1ee, 0xd1ed, 0xd1ed, 0xd1ed, - 0xd1ed, 0xd1ed, 0xd1ed, 0xd1ec, 0xd1ec, 0xd1ec, 0xd1ec, 0xd1ec, - 0xd1eb, 0xd1eb, 0xd1eb, 0xd1eb, 0xd1eb, 0xd1eb, 0xd1ea, 0xd1ea, - 0xd1ea, 0xd1ea, 0xd1ea, 0xd1e9, 0xd1e9, 0xd1e9, 0xd1e9, 0xd1e9, - 0xd1e9, 0xd1e8, 0xd1e8, 0xd1e8, 0xd1e8, 0xd1e8, 0xd1e8, 0xd1e7, - 0xd1e7, 0xd1e7, 0xd1e7, 0xd1e7, 0xd1e6, 0xd1e6, 0xd1e6, 0xd1e6, - 0xd1e6, 0xd1e6, 0xd1e5, 0xd1e5, 0xd1e5, 0xd1e5, 0xd1e5, 0xd1e4, - 0xd1e4, 0xd1e4, 0xd1e4, 0xd1e4, 0xd1e4, 0xd1e3, 0xd1e3, 0xd1e3, - 0xd1e3, 0xd1e3, 0xd1e3, 0xd1e2, 0xd1e2, 0xd1e2, 0xd1e2, 0xd1e2, - 0xd1e2, 0xd1e1, 0xd1e1, 0xd1e1, 0xd1e1, 0xd1e1, 0xd1e0, 0xd1e0, - 0xd1e0, 0xd1e0, 0xd1e0, 0xd1e0, 0xd1df, 0xd1df, 0xd1df, 0xd1df, - 0xd1df, 0xd1df, 0xd1de, 0xd1de, 0xd1de, 0xd1de, 0xd1de, 0xd1de, - 0xd1dd, 0xd1dd, 0xd1dd, 0xd1dd, 0xd1dd, 0xd1dc, 0xd1dc, 0xd1dc, - 0xd1dc, 0xd1dc, 0xd1dc, 0xd1db, 0xd1db, 0xd1db, 0xd1db, 0xd1db, - 0xd1db, 0xd1da, 0xd1da, 0xd1da, 0xd1da, 0xd1da, 0xd1da, 0xd1d9, - 0xd1d9, 0xd1d9, 0xd1d9, 0xd1d9, 0xd1d9, 0xd1d8, 0xd1d8, 0xd1d8, - 0xd1d8, 0xd1d8, 0xd1d8, 0xd1d7, 0xd1d7, 0xd1d7, 0xd1d7, 0xd1d7, - 0xd1d7, 0xd1d6, 0xd1d6, 0xd1d6, 0xd1d6, 0xd1d6, 0xd1d6, 0xd1d5, - 0xd1d5, 0xd1d5, 0xd1d5, 0xd1d5, 0xd1d5, 0xd1d4, 0xd1d4, 0xd1d4, - 0xd1d4, 0xd1d4, 0xd1d4, 0xd1d3, 0xd1d3, 0xd1d3, 0xd1d3, 0xd1d3, - 0xd1d3, 0xd1d2, 0xd1d2, 0xd1d2, 0xd1d2, 0xd1d2, 0xd1d2, 0xd1d1, - 0xd1d1, 0xd1d1, 0xd1d1, 0xd1d1, 0xd1d1, 0xd1d0, 0xd1d0, 0xd1d0, - 0xd1d0, 0xd1d0, 0xd1d0, 0xd1cf, 0xd1cf, 0xd1cf, 0xd1cf, 0xd1cf, - 0xd1cf, 0xd1ce, 0xd1ce, 0xd1ce, 0xd1ce, 0xd1ce, 0xd1ce, 0xd1cd, - 0xd1cd, 0xd1cd, 0xd1cd, 0xd1cd, 0xd1cd, 0xd1cd, 0xd1cc, 0xd1cc, - 0xd1cc, 0xd1cc, 0xd1cc, 0xd1cc, 0xd1cb, 0xd1cb, 0xd1cb, 0xd1cb, - 0xd1cb, 0xd1cb, 0xd1ca, 0xd1ca, 0xd1ca, 0xd1ca, 0xd1ca, 0xd1ca, - 0xd1c9, 0xd1c9, 0xd1c9, 0xd1c9, 0xd1c9, 0xd1c9, 0xd1c9, 0xd1c8, - 0xd1c8, 0xd1c8, 0xd1c8, 0xd1c8, 0xd1c8, 0xd1c7, 0xd1c7, 0xd1c7, - 0xd1c7, 0xd1c7, 0xd1c7, 0xd1c6, 0xd1c6, 0xd1c6, 0xd1c6, 0xd1c6, - 0xd1c6, 0xd1c6, 0xd1c5, 0xd1c5, 0xd1c5, 0xd1c5, 0xd1c5, 0xd1c5, - 0xd1c4, 0xd1c4, 0xd1c4, 0xd1c4, 0xd1c4, 0xd1c4, 0xd1c4, 0xd1c3, - 0xd1c3, 0xd1c3, 0xd1c3, 0xd1c3, 0xd1c3, 0xd1c2, 0xd1c2, 0xd1c2, - 0xd1c2, 0xd1c2, 0xd1c2, 0xd1c1, 0xd1c1, 0xd1c1, 0xd1c1, 0xd1c1, - 0xd1c1, 0xd1c1, 0xd1c0, 0xd1c0, 0xd1c0, 0xd1c0, 0xd1c0, 0xd1c0, - 0xd1bf, 0xd1bf, 0xd1bf, 0xd1bf, 0xd1bf, 0xd1bf, 0xd1bf, 0xd1be, - 0xd1be, 0xd1be, 0xd1be, 0xd1be, 0xd1be, 0xd1be, 0xd1bd, 0xd1bd, - 0xd1bd, 0xd1bd, 0xd1bd, 0xd1bd, 0xd1bc, 0xd1bc, 0xd1bc, 0xd1bc, - 0xd1bc, 0xd1bc, 0xd1bc, 0xd1bb, 0xd1bb, 0xd1bb, 0xd1bb, 0xd1bb, - 0xd1bb, 0xd1ba, 0xd1ba, 0xd1ba, 0xd1ba, 0xd1ba, 0xd1ba, 0xd1ba, - 0xd1b9, 0xd1b9, 0xd1b9, 0xd1b9, 0xd1b9, 0xd1b9, 0xd1b9, 0xd1b8, - 0xd1b8, 0xd1b8, 0xd1b8, 0xd1b8, 0xd1b8, 0xd1b8, 0xd1b7, 0xd1b7, - 0xd1b7, 0xd1b7, 0xd1b7, 0xd1b7, 0xd1b6, 0xd1b6, 0xd1b6, 0xd1b6, - 0xd1b6, 0xd1b6, 0xd1b6, 0xd1b5, 0xd1b5, 0xd1b5, 0xd1b5, 0xd1b5, - 0xd1b5, 0xd1b5, 0xd1b4, 0xd1b4, 0xd1b4, 0xd1b4, 0xd1b4, 0xd1b4, - 0xd1b4, 0xd1b3, 0xd1b3, 0xd1b3, 0xd1b3, 0xd1b3, 0xd1b3, 0xd1b3, - 0xd1b2, 0xd1b2, 0xd1b2, 0xd1b2, 0xd1b2, 0xd1b2, 0xd1b1, 0xd1b1, - 0xd1b1, 0xd1b1, 0xd1b1, 0xd1b1, 0xd1b1, 0xd1b0, 0xd1b0, 0xd1b0, - 0xd1b0, 0xd1b0, 0xd1b0, 0xd1b0, 0xd1af, 0xd1af, 0xd1af, 0xd1af, - 0xd1af, 0xd1af, 0xd1af, 0xd1ae, 0xd1ae, 0xd1ae, 0xd1ae, 0xd1ae, - 0xd1ae, 0xd1ae, 0xd1ad, 0xd1ad, 0xd1ad, 0xd1ad, 0xd1ad, 0xd1ad, - 0xd1ad, 0xd1ac, 0xd1ac, 0xd1ac, 0xd1ac, 0xd1ac, 0xd1ac, 0xd1ac, - 0xd1ab, 0xd1ab, 0xd1ab, 0xd1ab, 0xd1ab, 0xd1ab, 0xd1ab, 0xd1aa, - 0xd1aa, 0xd1aa, 0xd1aa, 0xd1aa, 0xd1aa, 0xd1aa, 0xd1a9, 0xd1a9, - 0xd1a9, 0xd1a9, 0xd1a9, 0xd1a9, 0xd1a9, 0xd1a9, 0xd1a8, 0xd1a8, - 0xd1a8, 0xd1a8, 0xd1a8, 0xd1a8, 0xd1a8, 0xd1a7, 0xd1a7, 0xd1a7, - 0xd1a7, 0xd1a7, 0xd1a7, 0xd1a7, 0xd1a6, 0xd1a6, 0xd1a6, 0xd1a6, - 0xd1a6, 0xd1a6, 0xd1a6, 0xd1a5, 0xd1a5, 0xd1a5, 0xd1a5, 0xd1a5, - 0xd1a5, 0xd1a5, 0xd1a4, 0xd1a4, 0xd1a4, 0xd1a4, 0xd1a4, 0xd1a4, - 0xd1a4, 0xd1a4, 0xd1a3, 0xd1a3, 0xd1a3, 0xd1a3, 0xd1a3, 0xd1a3, - 0xd1a3, 0xd1a2, 0xd1a2, 0xd1a2, 0xd1a2, 0xd1a2, 0xd1a2, 0xd1a2, - 0xd1a1, 0xd1a1, 0xd1a1, 0xd1a1, 0xd1a1, 0xd1a1, 0xd1a1, 0xd1a1, - 0xd1a0, 0xd1a0, 0xd1a0, 0xd1a0, 0xd1a0, 0xd1a0, 0xd1a0, 0xd19f, - 0xd19f, 0xd19f, 0xd19f, 0xd19f, 0xd19f, 0xd19f, 0xd19e, 0xd19e, - 0xd19e, 0xd19e, 0xd19e, 0xd19e, 0xd19e, 0xd19e, 0xd19d, 0xd19d, - 0xd19d, 0xd19d, 0xd19d, 0xd19d, 0xd19d, 0xd19c, 0xd19c, 0xd19c, - 0xd19c, 0xd19c, 0xd19c, 0xd19c, 0xd19c, 0xd19b, 0xd19b, 0xd19b, - 0xd19b, 0xd19b, 0xd19b, 0xd19b, 0xd19a, 0xd19a, 0xd19a, 0xd19a, - 0xd19a, 0xd19a, 0xd19a, 0xd19a, 0xd199, 0xd199, 0xd199, 0xd199, - 0xd199, 0xd199, 0xd199, 0xd199, 0xd198, 0xd198, 0xd198, 0xd198, - 0xd198, 0xd198, 0xd198, 0xd197, 0xd197, 0xd197, 0xd197, 0xd197, - 0xd197, 0xd197, 0xd197, 0xd196, 0xd196, 0xd196, 0xd196, 0xd196, - 0xd196, 0xd196, 0xd196, 0xd195, 0xd195, 0xd195, 0xd195, 0xd195, - 0xd195, 0xd195, 0xd194, 0xd194, 0xd194, 0xd194, 0xd194, 0xd194, - 0xd194, 0xd194, 0xd193, 0xd193, 0xd193, 0xd193, 0xd193, 0xd193, - 0xd193, 0xd193, 0xd192, 0xd192, 0xd192, 0xd192, 0xd192, 0xd192, - 0xd192, 0xd192, 0xd191, 0xd191, 0xd191, 0xd191, 0xd191, 0xd191, - 0xd191, 0xd190, 0xd190, 0xd190, 0xd190, 0xd190, 0xd190, 0xd190, - 0xd190, 0xd18f, 0xd18f, 0xd18f, 0xd18f, 0xd18f, 0xd18f, 0xd18f, - 0xd18f, 0xd18e, 0xd18e, 0xd18e, 0xd18e, 0xd18e, 0xd18e, 0xd18e, - 0xd18e, 0xd18d, 0xd18d, 0xd18d, 0xd18d, 0xd18d, 0xd18d, 0xd18d, - 0xd18d, 0xd18c, 0xd18c, 0xd18c, 0xd18c, 0xd18c, 0xd18c, 0xd18c, - 0xd18c, 0xd18b, 0xd18b, 0xd18b, 0xd18b, 0xd18a, 0xd18a, 0xd18a, - 0xd18a, 0xd189, 0xd189, 0xd189, 0xd189, 0xd188, 0xd188, 0xd188, - 0xd188, 0xd187, 0xd187, 0xd187, 0xd187, 0xd186, 0xd186, 0xd186, - 0xd186, 0xd185, 0xd185, 0xd185, 0xd185, 0xd184, 0xd184, 0xd184, - 0xd184, 0xd183, 0xd183, 0xd183, 0xd183, 0xd182, 0xd182, 0xd182, - 0xd182, 0xd182, 0xd181, 0xd181, 0xd181, 0xd181, 0xd180, 0xd180, - 0xd180, 0xd180, 0xd17f, 0xd17f, 0xd17f, 0xd17f, 0xd17e, 0xd17e, - 0xd17e, 0xd17e, 0xd17d, 0xd17d, 0xd17d, 0xd17d, 0xd17d, 0xd17c, - 0xd17c, 0xd17c, 0xd17c, 0xd17b, 0xd17b, 0xd17b, 0xd17b, 0xd17a, - 0xd17a, 0xd17a, 0xd17a, 0xd179, 0xd179, 0xd179, 0xd179, 0xd179, - 0xd178, 0xd178, 0xd178, 0xd178, 0xd177, 0xd177, 0xd177, 0xd177, - 0xd176, 0xd176, 0xd176, 0xd176, 0xd176, 0xd175, 0xd175, 0xd175, - 0xd175, 0xd174, 0xd174, 0xd174, 0xd174, 0xd173, 0xd173, 0xd173, - 0xd173, 0xd173, 0xd172, 0xd172, 0xd172, 0xd172, 0xd171, 0xd171, - 0xd171, 0xd171, 0xd171, 0xd170, 0xd170, 0xd170, 0xd170, 0xd16f, - 0xd16f, 0xd16f, 0xd16f, 0xd16f, 0xd16e, 0xd16e, 0xd16e, 0xd16e, - 0xd16d, 0xd16d, 0xd16d, 0xd16d, 0xd16d, 0xd16c, 0xd16c, 0xd16c, - 0xd16c, 0xd16b, 0xd16b, 0xd16b, 0xd16b, 0xd16b, 0xd16a, 0xd16a, - 0xd16a, 0xd16a, 0xd169, 0xd169, 0xd169, 0xd169, 0xd169, 0xd168, - 0xd168, 0xd168, 0xd168, 0xd167, 0xd167, 0xd167, 0xd167, 0xd167, - 0xd166, 0xd166, 0xd166, 0xd166, 0xd166, 0xd165, 0xd165, 0xd165, - 0xd165, 0xd164, 0xd164, 0xd164, 0xd164, 0xd164, 0xd163, 0xd163, - 0xd163, 0xd163, 0xd163, 0xd162, 0xd162, 0xd162, 0xd162, 0xd161, - 0xd161, 0xd161, 0xd161, 0xd161, 0xd160, 0xd160, 0xd160, 0xd160, - 0xd160, 0xd15f, 0xd15f, 0xd15f, 0xd15f, 0xd15f, 0xd15e, 0xd15e, - 0xd15e, 0xd15e, 0xd15d, 0xd15d, 0xd15d, 0xd15d, 0xd15d, 0xd15c, - 0xd15c, 0xd15c, 0xd15c, 0xd15c, 0xd15b, 0xd15b, 0xd15b, 0xd15b, - 0xd15b, 0xd15a, 0xd15a, 0xd15a, 0xd15a, 0xd15a, 0xd159, 0xd159, - 0xd159, 0xd159, 0xd159, 0xd158, 0xd158, 0xd158, 0xd158, 0xd157, - 0xd157, 0xd157, 0xd157, 0xd157, 0xd156, 0xd156, 0xd156, 0xd156, - 0xd156, 0xd155, 0xd155, 0xd155, 0xd155, 0xd155, 0xd154, 0xd154, - 0xd154, 0xd154, 0xd154, 0xd153, 0xd153, 0xd153, 0xd153, 0xd153, - 0xd152, 0xd152, 0xd152, 0xd152, 0xd152, 0xd151, 0xd151, 0xd151, - 0xd151, 0xd151, 0xd150, 0xd150, 0xd150, 0xd150, 0xd150, 0xd14f, - 0xd14f, 0xd14f, 0xd14f, 0xd14f, 0xd14e, 0xd14e, 0xd14e, 0xd14e, - 0xd14e, 0xd14d, 0xd14d, 0xd14d, 0xd14d, 0xd14d, 0xd14d, 0xd14c, - 0xd14c, 0xd14c, 0xd14c, 0xd14c, 0xd14b, 0xd14b, 0xd14b, 0xd14b, - 0xd14b, 0xd14a, 0xd14a, 0xd14a, 0xd14a, 0xd14a, 0xd149, 0xd149, - 0xd149, 0xd149, 0xd149, 0xd148, 0xd148, 0xd148, 0xd148, 0xd148, - 0xd147, 0xd147, 0xd147, 0xd147, 0xd147, 0xd147, 0xd146, 0xd146, - 0xd146, 0xd146, 0xd146, 0xd145, 0xd145, 0xd145, 0xd145, 0xd145, - 0xd144, 0xd144, 0xd144, 0xd144, 0xd144, 0xd143, 0xd143, 0xd143, - 0xd143, 0xd143, 0xd143, 0xd142, 0xd142, 0xd142, 0xd142, 0xd142, - 0xd141, 0xd141, 0xd141, 0xd141, 0xd141, 0xd140, 0xd140, 0xd140, - 0xd140, 0xd140, 0xd140, 0xd13f, 0xd13f, 0xd13f, 0xd13f, 0xd13f, - 0xd13e, 0xd13e, 0xd13e, 0xd13e, 0xd13e, 0xd13e, 0xd13d, 0xd13d, - 0xd13d, 0xd13d, 0xd13d, 0xd13c, 0xd13c, 0xd13c, 0xd13c, 0xd13c, - 0xd13c, 0xd13b, 0xd13b, 0xd13b, 0xd13b, 0xd13b, 0xd13a, 0xd13a, - 0xd13a, 0xd13a, 0xd13a, 0xd139, 0xd139, 0xd139, 0xd139, 0xd139, - 0xd139, 0xd138, 0xd138, 0xd138, 0xd138, 0xd138, 0xd138, 0xd137, - 0xd137, 0xd137, 0xd137, 0xd137, 0xd136, 0xd136, 0xd136, 0xd136, - 0xd136, 0xd136, 0xd135, 0xd135, 0xd135, 0xd135, 0xd135, 0xd134, - 0xd134, 0xd134, 0xd134, 0xd134, 0xd134, 0xd133, 0xd133, 0xd133, - 0xd133, 0xd133, 0xd133, 0xd132, 0xd132, 0xd132, 0xd132, 0xd132, - 0xd131, 0xd131, 0xd131, 0xd131, 0xd131, 0xd131, 0xd130, 0xd130, - 0xd130, 0xd130, 0xd130, 0xd130, 0xd12f, 0xd12f, 0xd12f, 0xd12f, - 0xd12f, 0xd12e, 0xd12e, 0xd12e, 0xd12e, 0xd12e, 0xd12e, 0xd12d, - 0xd12d, 0xd12d, 0xd12d, 0xd12d, 0xd12d, 0xd12c, 0xd12c, 0xd12c, - 0xd12c, 0xd12c, 0xd12c, 0xd12b, 0xd12b, 0xd12b, 0xd12b, 0xd12b, - 0xd12b, 0xd12a, 0xd12a, 0xd12a, 0xd12a, 0xd12a, 0xd129, 0xd129, - 0xd129, 0xd129, 0xd129, 0xd129, 0xd128, 0xd128, 0xd128, 0xd128, - 0xd128, 0xd128, 0xd127, 0xd127, 0xd127, 0xd127, 0xd127, 0xd127, - 0xd126, 0xd126, 0xd126, 0xd126, 0xd126, 0xd126, 0xd125, 0xd125, - 0xd125, 0xd125, 0xd125, 0xd125, 0xd124, 0xd124, 0xd124, 0xd124, - 0xd124, 0xd124, 0xd123, 0xd123, 0xd123, 0xd123, 0xd123, 0xd123, - 0xd122, 0xd122, 0xd122, 0xd122, 0xd122, 0xd122, 0xd121, 0xd121, - 0xd121, 0xd121, 0xd121, 0xd121, 0xd120, 0xd120, 0xd120, 0xd120, - 0xd120, 0xd120, 0xd11f, 0xd11f, 0xd11f, 0xd11f, 0xd11f, 0xd11f, - 0xd11e, 0xd11e, 0xd11e, 0xd11e, 0xd11e, 0xd11e, 0xd11e, 0xd11d, - 0xd11d, 0xd11d, 0xd11d, 0xd11d, 0xd11d, 0xd11c, 0xd11c, 0xd11c, - 0xd11c, 0xd11c, 0xd11c, 0xd11b, 0xd11b, 0xd11b, 0xd11b, 0xd11b, - 0xd11b, 0xd11a, 0xd11a, 0xd11a, 0xd11a, 0xd11a, 0xd11a, 0xd119, - 0xd119, 0xd119, 0xd119, 0xd119, 0xd119, 0xd119, 0xd118, 0xd118, - 0xd118, 0xd118, 0xd118, 0xd118, 0xd117, 0xd117, 0xd117, 0xd117, - 0xd117, 0xd117, 0xd116, 0xd116, 0xd116, 0xd116, 0xd116, 0xd116, - 0xd116, 0xd115, 0xd115, 0xd115, 0xd115, 0xd115, 0xd115, 0xd114, - 0xd114, 0xd114, 0xd114, 0xd114, 0xd114, 0xd113, 0xd113, 0xd113, - 0xd113, 0xd113, 0xd113, 0xd113, 0xd112, 0xd112, 0xd112, 0xd112, - 0xd112, 0xd112, 0xd111, 0xd111, 0xd111, 0xd111, 0xd111, 0xd111, - 0xd111, 0xd110, 0xd110, 0xd110, 0xd110, 0xd110, 0xd110, 0xd10f, - 0xd10f, 0xd10f, 0xd10f, 0xd10f, 0xd10f, 0xd10f, 0xd10e, 0xd10e, - 0xd10e, 0xd10e, 0xd10e, 0xd10e, 0xd10d, 0xd10d, 0xd10d, 0xd10d, - 0xd10d, 0xd10d, 0xd10d, 0xd10c, 0xd10c, 0xd10c, 0xd10c, 0xd10c, - 0xd10c, 0xd10b, 0xd10b, 0xd10b, 0xd10b, 0xd10b, 0xd10b, 0xd10b, - 0xd10a, 0xd10a, 0xd10a, 0xd10a, 0xd10a, 0xd10a, 0xd109, 0xd109, - 0xd109, 0xd109, 0xd109, 0xd109, 0xd109, 0xd108, 0xd108, 0xd108, - 0xd108, 0xd108, 0xd108, 0xd108, 0xd107, 0xd107, 0xd107, 0xd107, - 0xd107, 0xd107, 0xd107, 0xd106, 0xd106, 0xd106, 0xd106, 0xd106, - 0xd106, 0xd105, 0xd105, 0xd105, 0xd105, 0xd105, 0xd105, 0xd105, - 0xd104, 0xd104, 0xd104, 0xd104, 0xd104, 0xd104, 0xd104, 0xd103, - 0xd103, 0xd103, 0xd103, 0xd103, 0xd103, 0xd103, 0xd102, 0xd102, - 0xd102, 0xd102, 0xd102, 0xd102, 0xd101, 0xd101, 0xd101, 0xd101, - 0xd101, 0xd101, 0xd101, 0xd100, 0xd100, 0xd100, 0xd100, 0xd100, - 0xd100, 0xd100, 0xd0ff, 0xd0ff, 0xd0ff, 0xd0ff, 0xd0ff, 0xd0ff, - 0xd0ff, 0xd0fe, 0xd0fe, 0xd0fe, 0xd0fe, 0xd0fe, 0xd0fe, 0xd0fe, - 0xd0fd, 0xd0fd, 0xd0fd, 0xd0fd, 0xd0fd, 0xd0fd, 0xd0fd, 0xd0fc, - 0xd0fc, 0xd0fc, 0xd0fc, 0xd0fc, 0xd0fc, 0xd0fc, 0xd0fb, 0xd0fb, - 0xd0fb, 0xd0fb, 0xd0fb, 0xd0fb, 0xd0fb, 0xd0fa, 0xd0fa, 0xd0fa, - 0xd0fa, 0xd0fa, 0xd0fa, 0xd0fa, 0xd0f9, 0xd0f9, 0xd0f9, 0xd0f9, - 0xd0f9, 0xd0f9, 0xd0f9, 0xd0f8, 0xd0f8, 0xd0f8, 0xd0f8, 0xd0f8, - 0xd0f8, 0xd0f8, 0xd0f7, 0xd0f7, 0xd0f7, 0xd0f7, 0xd0f7, 0xd0f7, - 0xd0f7, 0xd0f7, 0xd0f6, 0xd0f6, 0xd0f6, 0xd0f6, 0xd0f6, 0xd0f6, - 0xd0f6, 0xd0f5, 0xd0f5, 0xd0f5, 0xd0f5, 0xd0f5, 0xd0f5, 0xd0f5, - 0xd0f4, 0xd0f4, 0xd0f4, 0xd0f4, 0xd0f4, 0xd0f4, 0xd0f4, 0xd0f3, - 0xd0f3, 0xd0f3, 0xd0f3, 0xd0f3, 0xd0f3, 0xd0f3, 0xd0f2, 0xd0f2, - 0xd0f2, 0xd0f2, 0xd0f2, 0xd0f2, 0xd0f2, 0xd0f2, 0xd0f1, 0xd0f1, - 0xd0f1, 0xd0f1, 0xd0f1, 0xd0f1, 0xd0f1, 0xd0f0, 0xd0f0, 0xd0f0, - 0xd0f0, 0xd0f0, 0xd0f0, 0xd0f0, 0xd0ef, 0xd0ef, 0xd0ef, 0xd0ef, - 0xd0ef, 0xd0ef, 0xd0ef, 0xd0ef, 0xd0ee, 0xd0ee, 0xd0ee, 0xd0ee, - 0xd0ee, 0xd0ee, 0xd0ee, 0xd0ed, 0xd0ed, 0xd0ed, 0xd0ed, 0xd0ed, - 0xd0ed, 0xd0ed, 0xd0ed, 0xd0ec, 0xd0ec, 0xd0ec, 0xd0ec, 0xd0ec, - 0xd0ec, 0xd0ec, 0xd0eb, 0xd0eb, 0xd0eb, 0xd0eb, 0xd0eb, 0xd0eb, - 0xd0eb, 0xd0eb, 0xd0ea, 0xd0ea, 0xd0ea, 0xd0ea, 0xd0ea, 0xd0ea, - 0xd0ea, 0xd0e9, 0xd0e9, 0xd0e9, 0xd0e9, 0xd0e9, 0xd0e9, 0xd0e9, - 0xd0e9, 0xd0e8, 0xd0e8, 0xd0e8, 0xd0e8, 0xd0e8, 0xd0e8, 0xd0e8, - 0xd0e7, 0xd0e7, 0xd0e7, 0xd0e7, 0xd0e7, 0xd0e7, 0xd0e7, 0xd0e7, - 0xd0e6, 0xd0e6, 0xd0e6, 0xd0e6, 0xd0e6, 0xd0e6, 0xd0e6, 0xd0e5, - 0xd0e5, 0xd0e5, 0xd0e5, 0xd0e5, 0xd0e5, 0xd0e5, 0xd0e5, 0xd0e4, - 0xd0e4, 0xd0e4, 0xd0e4, 0xd0e4, 0xd0e4, 0xd0e4, 0xd0e4, 0xd0e3, - 0xd0e3, 0xd0e3, 0xd0e3, 0xd0e3, 0xd0e3, 0xd0e3, 0xd0e3, 0xd0e2, - 0xd0e2, 0xd0e2, 0xd0e2, 0xd0e2, 0xd0e2, 0xd0e2, 0xd0e1, 0xd0e1, - 0xd0e1, 0xd0e1, 0xd0e1, 0xd0e1, 0xd0e1, 0xd0e1, 0xd0e0, 0xd0e0, - 0xd0e0, 0xd0e0, 0xd0e0, 0xd0e0, 0xd0e0, 0xd0e0, 0xd0df, 0xd0df, - 0xd0df, 0xd0df, 0xd0df, 0xd0df, 0xd0df, 0xd0df, 0xd0de, 0xd0de, - 0xd0de, 0xd0de, 0xd0de, 0xd0de, 0xd0de, 0xd0de, 0xd0dd, 0xd0dd, - 0xd0dd, 0xd0dd, 0xd0dd, 0xd0dd, 0xd0dd, 0xd0dd, 0xd0dc, 0xd0dc, - 0xd0dc, 0xd0dc, 0xd0dc, 0xd0dc, 0xd0dc, 0xd0db, 0xd0db, 0xd0db, - 0xd0db, 0xd0db, 0xd0db, 0xd0db, 0xd0db, 0xd0da, 0xd0da, 0xd0da, - 0xd0da, 0xd0da, 0xd0da, 0xd0d9, 0xd0d9, 0xd0d9, 0xd0d9, 0xd0d8, - 0xd0d8, 0xd0d8, 0xd0d8, 0xd0d7, 0xd0d7, 0xd0d7, 0xd0d7, 0xd0d6, - 0xd0d6, 0xd0d6, 0xd0d6, 0xd0d5, 0xd0d5, 0xd0d5, 0xd0d5, 0xd0d4, - 0xd0d4, 0xd0d4, 0xd0d4, 0xd0d3, 0xd0d3, 0xd0d3, 0xd0d3, 0xd0d2, - 0xd0d2, 0xd0d2, 0xd0d2, 0xd0d2, 0xd0d1, 0xd0d1, 0xd0d1, 0xd0d1, - 0xd0d0, 0xd0d0, 0xd0d0, 0xd0d0, 0xd0cf, 0xd0cf, 0xd0cf, 0xd0cf, - 0xd0ce, 0xd0ce, 0xd0ce, 0xd0ce, 0xd0cd, 0xd0cd, 0xd0cd, 0xd0cd, - 0xd0cc, 0xd0cc, 0xd0cc, 0xd0cc, 0xd0cc, 0xd0cb, 0xd0cb, 0xd0cb, - 0xd0cb, 0xd0ca, 0xd0ca, 0xd0ca, 0xd0ca, 0xd0c9, 0xd0c9, 0xd0c9, - 0xd0c9, 0xd0c8, 0xd0c8, 0xd0c8, 0xd0c8, 0xd0c8, 0xd0c7, 0xd0c7, - 0xd0c7, 0xd0c7, 0xd0c6, 0xd0c6, 0xd0c6, 0xd0c6, 0xd0c5, 0xd0c5, - 0xd0c5, 0xd0c5, 0xd0c5, 0xd0c4, 0xd0c4, 0xd0c4, 0xd0c4, 0xd0c3, - 0xd0c3, 0xd0c3, 0xd0c3, 0xd0c2, 0xd0c2, 0xd0c2, 0xd0c2, 0xd0c2, - 0xd0c1, 0xd0c1, 0xd0c1, 0xd0c1, 0xd0c0, 0xd0c0, 0xd0c0, 0xd0c0, - 0xd0c0, 0xd0bf, 0xd0bf, 0xd0bf, 0xd0bf, 0xd0be, 0xd0be, 0xd0be, - 0xd0be, 0xd0be, 0xd0bd, 0xd0bd, 0xd0bd, 0xd0bd, 0xd0bc, 0xd0bc, - 0xd0bc, 0xd0bc, 0xd0bc, 0xd0bb, 0xd0bb, 0xd0bb, 0xd0bb, 0xd0ba, - 0xd0ba, 0xd0ba, 0xd0ba, 0xd0ba, 0xd0b9, 0xd0b9, 0xd0b9, 0xd0b9, - 0xd0b8, 0xd0b8, 0xd0b8, 0xd0b8, 0xd0b8, 0xd0b7, 0xd0b7, 0xd0b7, - 0xd0b7, 0xd0b6, 0xd0b6, 0xd0b6, 0xd0b6, 0xd0b6, 0xd0b5, 0xd0b5, - 0xd0b5, 0xd0b5, 0xd0b5, 0xd0b4, 0xd0b4, 0xd0b4, 0xd0b4, 0xd0b3, - 0xd0b3, 0xd0b3, 0xd0b3, 0xd0b3, 0xd0b2, 0xd0b2, 0xd0b2, 0xd0b2, - 0xd0b2, 0xd0b1, 0xd0b1, 0xd0b1, 0xd0b1, 0xd0b0, 0xd0b0, 0xd0b0, - 0xd0b0, 0xd0b0, 0xd0af, 0xd0af, 0xd0af, 0xd0af, 0xd0af, 0xd0ae, - 0xd0ae, 0xd0ae, 0xd0ae, 0xd0ad, 0xd0ad, 0xd0ad, 0xd0ad, 0xd0ad, - 0xd0ac, 0xd0ac, 0xd0ac, 0xd0ac, 0xd0ac, 0xd0ab, 0xd0ab, 0xd0ab, - 0xd0ab, 0xd0ab, 0xd0aa, 0xd0aa, 0xd0aa, 0xd0aa, 0xd0aa, 0xd0a9, - 0xd0a9, 0xd0a9, 0xd0a9, 0xd0a9, 0xd0a8, 0xd0a8, 0xd0a8, 0xd0a8, - 0xd0a7, 0xd0a7, 0xd0a7, 0xd0a7, 0xd0a7, 0xd0a6, 0xd0a6, 0xd0a6, - 0xd0a6, 0xd0a6, 0xd0a5, 0xd0a5, 0xd0a5, 0xd0a5, 0xd0a5, 0xd0a4, - 0xd0a4, 0xd0a4, 0xd0a4, 0xd0a4, 0xd0a3, 0xd0a3, 0xd0a3, 0xd0a3, - 0xd0a3, 0xd0a2, 0xd0a2, 0xd0a2, 0xd0a2, 0xd0a2, 0xd0a1, 0xd0a1, - 0xd0a1, 0xd0a1, 0xd0a1, 0xd0a0, 0xd0a0, 0xd0a0, 0xd0a0, 0xd0a0, - 0xd09f, 0xd09f, 0xd09f, 0xd09f, 0xd09f, 0xd09e, 0xd09e, 0xd09e, - 0xd09e, 0xd09e, 0xd09d, 0xd09d, 0xd09d, 0xd09d, 0xd09d, 0xd09c, - 0xd09c, 0xd09c, 0xd09c, 0xd09c, 0xd09b, 0xd09b, 0xd09b, 0xd09b, - 0xd09b, 0xd09a, 0xd09a, 0xd09a, 0xd09a, 0xd09a, 0xd09a, 0xd099, - 0xd099, 0xd099, 0xd099, 0xd099, 0xd098, 0xd098, 0xd098, 0xd098, - 0xd098, 0xd097, 0xd097, 0xd097, 0xd097, 0xd097, 0xd096, 0xd096, - 0xd096, 0xd096, 0xd096, 0xd095, 0xd095, 0xd095, 0xd095, 0xd095, - 0xd095, 0xd094, 0xd094, 0xd094, 0xd094, 0xd094, 0xd093, 0xd093, - 0xd093, 0xd093, 0xd093, 0xd092, 0xd092, 0xd092, 0xd092, 0xd092, - 0xd091, 0xd091, 0xd091, 0xd091, 0xd091, 0xd091, 0xd090, 0xd090, - 0xd090, 0xd090, 0xd090, 0xd08f, 0xd08f, 0xd08f, 0xd08f, 0xd08f, - 0xd08e, 0xd08e, 0xd08e, 0xd08e, 0xd08e, 0xd08e, 0xd08d, 0xd08d, - 0xd08d, 0xd08d, 0xd08d, 0xd08c, 0xd08c, 0xd08c, 0xd08c, 0xd08c, - 0xd08c, 0xd08b, 0xd08b, 0xd08b, 0xd08b, 0xd08b, 0xd08a, 0xd08a, - 0xd08a, 0xd08a, 0xd08a, 0xd08a, 0xd089, 0xd089, 0xd089, 0xd089, - 0xd089, 0xd088, 0xd088, 0xd088, 0xd088, 0xd088, 0xd088, 0xd087, - 0xd087, 0xd087, 0xd087, 0xd087, 0xd086, 0xd086, 0xd086, 0xd086, - 0xd086, 0xd086, 0xd085, 0xd085, 0xd085, 0xd085, 0xd085, 0xd084, - 0xd084, 0xd084, 0xd084, 0xd084, 0xd084, 0xd083, 0xd083, 0xd083, - 0xd083, 0xd083, 0xd082, 0xd082, 0xd082, 0xd082, 0xd082, 0xd082, - 0xd081, 0xd081, 0xd081, 0xd081, 0xd081, 0xd081, 0xd080, 0xd080, - 0xd080, 0xd080, 0xd080, 0xd07f, 0xd07f, 0xd07f, 0xd07f, 0xd07f, - 0xd07f, 0xd07e, 0xd07e, 0xd07e, 0xd07e, 0xd07e, 0xd07e, 0xd07d, - 0xd07d, 0xd07d, 0xd07d, 0xd07d, 0xd07d, 0xd07c, 0xd07c, 0xd07c, - 0xd07c, 0xd07c, 0xd07b, 0xd07b, 0xd07b, 0xd07b, 0xd07b, 0xd07b, - 0xd07a, 0xd07a, 0xd07a, 0xd07a, 0xd07a, 0xd07a, 0xd079, 0xd079, - 0xd079, 0xd079, 0xd079, 0xd079, 0xd078, 0xd078, 0xd078, 0xd078, - 0xd078, 0xd078, 0xd077, 0xd077, 0xd077, 0xd077, 0xd077, 0xd077, - 0xd076, 0xd076, 0xd076, 0xd076, 0xd076, 0xd076, 0xd075, 0xd075, - 0xd075, 0xd075, 0xd075, 0xd074, 0xd074, 0xd074, 0xd074, 0xd074, - 0xd074, 0xd073, 0xd073, 0xd073, 0xd073, 0xd073, 0xd073, 0xd072, - 0xd072, 0xd072, 0xd072, 0xd072, 0xd072, 0xd071, 0xd071, 0xd071, - 0xd071, 0xd071, 0xd071, 0xd070, 0xd070, 0xd070, 0xd070, 0xd070, - 0xd070, 0xd070, 0xd06f, 0xd06f, 0xd06f, 0xd06f, 0xd06f, 0xd06f, - 0xd06e, 0xd06e, 0xd06e, 0xd06e, 0xd06e, 0xd06e, 0xd06d, 0xd06d, - 0xd06d, 0xd06d, 0xd06d, 0xd06d, 0xd06c, 0xd06c, 0xd06c, 0xd06c, - 0xd06c, 0xd06c, 0xd06b, 0xd06b, 0xd06b, 0xd06b, 0xd06b, 0xd06b, - 0xd06a, 0xd06a, 0xd06a, 0xd06a, 0xd06a, 0xd06a, 0xd069, 0xd069, - 0xd069, 0xd069, 0xd069, 0xd069, 0xd069, 0xd068, 0xd068, 0xd068, - 0xd068, 0xd068, 0xd068, 0xd067, 0xd067, 0xd067, 0xd067, 0xd067, - 0xd067, 0xd066, 0xd066, 0xd066, 0xd066, 0xd066, 0xd066, 0xd065, - 0xd065, 0xd065, 0xd065, 0xd065, 0xd065, 0xd065, 0xd064, 0xd064, - 0xd064, 0xd064, 0xd064, 0xd064, 0xd063, 0xd063, 0xd063, 0xd063, - 0xd063, 0xd063, 0xd062, 0xd062, 0xd062, 0xd062, 0xd062, 0xd062, - 0xd062, 0xd061, 0xd061, 0xd061, 0xd061, 0xd061, 0xd061, 0xd060, - 0xd060, 0xd060, 0xd060, 0xd060, 0xd060, 0xd060, 0xd05f, 0xd05f, - 0xd05f, 0xd05f, 0xd05f, 0xd05f, 0xd05e, 0xd05e, 0xd05e, 0xd05e, - 0xd05e, 0xd05e, 0xd05e, 0xd05d, 0xd05d, 0xd05d, 0xd05d, 0xd05d, - 0xd05d, 0xd05c, 0xd05c, 0xd05c, 0xd05c, 0xd05c, 0xd05c, 0xd05c, - 0xd05b, 0xd05b, 0xd05b, 0xd05b, 0xd05b, 0xd05b, 0xd05a, 0xd05a, - 0xd05a, 0xd05a, 0xd05a, 0xd05a, 0xd05a, 0xd059, 0xd059, 0xd059, - 0xd059, 0xd059, 0xd059, 0xd059, 0xd058, 0xd058, 0xd058, 0xd058, - 0xd058, 0xd058, 0xd057, 0xd057, 0xd057, 0xd057, 0xd057, 0xd057, - 0xd057, 0xd056, 0xd056, 0xd056, 0xd056, 0xd056, 0xd056, 0xd056, - 0xd055, 0xd055, 0xd055, 0xd055, 0xd055, 0xd055, 0xd054, 0xd054, - 0xd054, 0xd054, 0xd054, 0xd054, 0xd054, 0xd053, 0xd053, 0xd053, - 0xd053, 0xd053, 0xd053, 0xd053, 0xd052, 0xd052, 0xd052, 0xd052, - 0xd052, 0xd052, 0xd052, 0xd051, 0xd051, 0xd051, 0xd051, 0xd051, - 0xd051, 0xd050, 0xd050, 0xd050, 0xd050, 0xd050, 0xd050, 0xd050, - 0xd04f, 0xd04f, 0xd04f, 0xd04f, 0xd04f, 0xd04f, 0xd04f, 0xd04e, - 0xd04e, 0xd04e, 0xd04e, 0xd04e, 0xd04e, 0xd04e, 0xd04d, 0xd04d, - 0xd04d, 0xd04d, 0xd04d, 0xd04d, 0xd04d, 0xd04c, 0xd04c, 0xd04c, - 0xd04c, 0xd04c, 0xd04c, 0xd04c, 0xd04b, 0xd04b, 0xd04b, 0xd04b, - 0xd04b, 0xd04b, 0xd04b, 0xd04a, 0xd04a, 0xd04a, 0xd04a, 0xd04a, - 0xd04a, 0xd04a, 0xd049, 0xd049, 0xd049, 0xd049, 0xd049, 0xd049, - 0xd049, 0xd048, 0xd048, 0xd048, 0xd048, 0xd048, 0xd048, 0xd048, - 0xd047, 0xd047, 0xd047, 0xd047, 0xd047, 0xd047, 0xd047, 0xd046, - 0xd046, 0xd046, 0xd046, 0xd046, 0xd046, 0xd046, 0xd045, 0xd045, - 0xd045, 0xd045, 0xd045, 0xd045, 0xd045, 0xd045, 0xd044, 0xd044, - 0xd044, 0xd044, 0xd044, 0xd044, 0xd044, 0xd043, 0xd043, 0xd043, - 0xd043, 0xd043, 0xd043, 0xd043, 0xd042, 0xd042, 0xd042, 0xd042, - 0xd042, 0xd042, 0xd042, 0xd041, 0xd041, 0xd041, 0xd041, 0xd041, - 0xd041, 0xd041, 0xd040, 0xd040, 0xd040, 0xd040, 0xd040, 0xd040, - 0xd040, 0xd040, 0xd03f, 0xd03f, 0xd03f, 0xd03f, 0xd03f, 0xd03f, - 0xd03f, 0xd03e, 0xd03e, 0xd03e, 0xd03e, 0xd03e, 0xd03e, 0xd03e, - 0xd03d, 0xd03d, 0xd03d, 0xd03d, 0xd03d, 0xd03d, 0xd03d, 0xd03d, - 0xd03c, 0xd03c, 0xd03c, 0xd03c, 0xd03c, 0xd03c, 0xd03c, 0xd03b, - 0xd03b, 0xd03b, 0xd03b, 0xd03b, 0xd03b, 0xd03b, 0xd03b, 0xd03a, - 0xd03a, 0xd03a, 0xd03a, 0xd03a, 0xd03a, 0xd03a, 0xd039, 0xd039, - 0xd039, 0xd039, 0xd039, 0xd039, 0xd039, 0xd039, 0xd038, 0xd038, - 0xd038, 0xd038, 0xd038, 0xd038, 0xd038, 0xd037, 0xd037, 0xd037, - 0xd037, 0xd037, 0xd037, 0xd037, 0xd037, 0xd036, 0xd036, 0xd036, - 0xd036, 0xd036, 0xd036, 0xd036, 0xd035, 0xd035, 0xd035, 0xd035, - 0xd035, 0xd035, 0xd035, 0xd035, 0xd034, 0xd034, 0xd034, 0xd034, - 0xd034, 0xd034, 0xd034, 0xd034, 0xd033, 0xd033, 0xd033, 0xd033, - 0xd033, 0xd033, 0xd033, 0xd032, 0xd032, 0xd032, 0xd032, 0xd032, - 0xd032, 0xd032, 0xd032, 0xd031, 0xd031, 0xd031, 0xd031, 0xd031, - 0xd031, 0xd031, 0xd031, 0xd030, 0xd030, 0xd030, 0xd030, 0xd030, - 0xd030, 0xd030, 0xd030, 0xd02f, 0xd02f, 0xd02f, 0xd02f, 0xd02f, - 0xd02f, 0xd02f, 0xd02e, 0xd02e, 0xd02e, 0xd02e, 0xd02e, 0xd02e, - 0xd02e, 0xd02e, 0xd02d, 0xd02d, 0xd02d, 0xd02d, 0xd02d, 0xd02d, - 0xd02d, 0xd02d, 0xd02c, 0xd02c, 0xd02c, 0xd02c, 0xd02c, 0xd02c, - 0xd02c, 0xd02c, 0xd02b, 0xd02b, 0xd02b, 0xd02b, 0xd02b, 0xd02b, - 0xd02b, 0xd02b, 0xd02a, 0xd02a, 0xd02a, 0xd02a, 0xd02a, 0xd02a, - 0xd02a, 0xd02a, 0xd029, 0xd029, 0xd029, 0xd029, 0xd029, 0xd029, - 0xd029, 0xd028, 0xd028, 0xd028, 0xd028, 0xd027, 0xd027, 0xd027, - 0xd027, 0xd026, 0xd026, 0xd026, 0xd026, 0xd025, 0xd025, 0xd025, - 0xd025, 0xd024, 0xd024, 0xd024, 0xd024, 0xd023, 0xd023, 0xd023, - 0xd023, 0xd022, 0xd022, 0xd022, 0xd022, 0xd022, 0xd021, 0xd021, - 0xd021, 0xd021, 0xd020, 0xd020, 0xd020, 0xd020, 0xd01f, 0xd01f, - 0xd01f, 0xd01f, 0xd01e, 0xd01e, 0xd01e, 0xd01e, 0xd01d, 0xd01d, - 0xd01d, 0xd01d, 0xd01c, 0xd01c, 0xd01c, 0xd01c, 0xd01c, 0xd01b, - 0xd01b, 0xd01b, 0xd01b, 0xd01a, 0xd01a, 0xd01a, 0xd01a, 0xd019, - 0xd019, 0xd019, 0xd019, 0xd018, 0xd018, 0xd018, 0xd018, 0xd018, - 0xd017, 0xd017, 0xd017, 0xd017, 0xd016, 0xd016, 0xd016, 0xd016, - 0xd015, 0xd015, 0xd015, 0xd015, 0xd014, 0xd014, 0xd014, 0xd014, - 0xd014, 0xd013, 0xd013, 0xd013, 0xd013, 0xd012, 0xd012, 0xd012, - 0xd012, 0xd012, 0xd011, 0xd011, 0xd011, 0xd011, 0xd010, 0xd010, - 0xd010, 0xd010, 0xd00f, 0xd00f, 0xd00f, 0xd00f, 0xd00f, 0xd00e, - 0xd00e, 0xd00e, 0xd00e, 0xd00d, 0xd00d, 0xd00d, 0xd00d, 0xd00d, - 0xd00c, 0xd00c, 0xd00c, 0xd00c, 0xd00b, 0xd00b, 0xd00b, 0xd00b, - 0xd00b, 0xd00a, 0xd00a, 0xd00a, 0xd00a, 0xd009, 0xd009, 0xd009, - 0xd009, 0xd009, 0xd008, 0xd008, 0xd008, 0xd008, 0xd007, 0xd007, - 0xd007, 0xd007, 0xd007, 0xd006, 0xd006, 0xd006, 0xd006, 0xd005, - 0xd005, 0xd005, 0xd005, 0xd005, 0xd004, 0xd004, 0xd004, 0xd004, - 0xd004, 0xd003, 0xd003, 0xd003, 0xd003, 0xd002, 0xd002, 0xd002, - 0xd002, 0xd002, 0xd001, 0xd001, 0xd001, 0xd001, 0xd000, 0xd000, - 0xd000, 0xd000, 0xcfff, 0xcfff, 0xcffe, 0xcffe, 0xcffe, 0xcffd, - 0xcffd, 0xcffc, 0xcffc, 0xcffb, 0xcffb, 0xcffb, 0xcffa, 0xcffa, - 0xcff9, 0xcff9, 0xcff9, 0xcff8, 0xcff8, 0xcff7, 0xcff7, 0xcff6, - 0xcff6, 0xcff6, 0xcff5, 0xcff5, 0xcff4, 0xcff4, 0xcff3, 0xcff3, - 0xcff3, 0xcff2, 0xcff2, 0xcff1, 0xcff1, 0xcff1, 0xcff0, 0xcff0, - 0xcfef, 0xcfef, 0xcfef, 0xcfee, 0xcfee, 0xcfed, 0xcfed, 0xcfec, - 0xcfec, 0xcfec, 0xcfeb, 0xcfeb, 0xcfea, 0xcfea, 0xcfea, 0xcfe9, - 0xcfe9, 0xcfe8, 0xcfe8, 0xcfe8, 0xcfe7, 0xcfe7, 0xcfe6, 0xcfe6, - 0xcfe6, 0xcfe5, 0xcfe5, 0xcfe4, 0xcfe4, 0xcfe4, 0xcfe3, 0xcfe3, - 0xcfe2, 0xcfe2, 0xcfe2, 0xcfe1, 0xcfe1, 0xcfe0, 0xcfe0, 0xcfdf, - 0xcfdf, 0xcfdf, 0xcfde, 0xcfde, 0xcfde, 0xcfdd, 0xcfdd, 0xcfdc, - 0xcfdc, 0xcfdc, 0xcfdb, 0xcfdb, 0xcfda, 0xcfda, 0xcfda, 0xcfd9, - 0xcfd9, 0xcfd8, 0xcfd8, 0xcfd8, 0xcfd7, 0xcfd7, 0xcfd6, 0xcfd6, - 0xcfd6, 0xcfd5, 0xcfd5, 0xcfd4, 0xcfd4, 0xcfd4, 0xcfd3, 0xcfd3, - 0xcfd2, 0xcfd2, 0xcfd2, 0xcfd1, 0xcfd1, 0xcfd1, 0xcfd0, 0xcfd0, - 0xcfcf, 0xcfcf, 0xcfcf, 0xcfce, 0xcfce, 0xcfcd, 0xcfcd, 0xcfcd, - 0xcfcc, 0xcfcc, 0xcfcb, 0xcfcb, 0xcfcb, 0xcfca, 0xcfca, 0xcfca, - 0xcfc9, 0xcfc9, 0xcfc8, 0xcfc8, 0xcfc8, 0xcfc7, 0xcfc7, 0xcfc6, - 0xcfc6, 0xcfc6, 0xcfc5, 0xcfc5, 0xcfc5, 0xcfc4, 0xcfc4, 0xcfc3, - 0xcfc3, 0xcfc3, 0xcfc2, 0xcfc2, 0xcfc2, 0xcfc1, 0xcfc1, 0xcfc0, - 0xcfc0, 0xcfc0, 0xcfbf, 0xcfbf, 0xcfbf, 0xcfbe, 0xcfbe, 0xcfbd, - 0xcfbd, 0xcfbd, 0xcfbc, 0xcfbc, 0xcfbc, 0xcfbb, 0xcfbb, 0xcfba, - 0xcfba, 0xcfba, 0xcfb9, 0xcfb9, 0xcfb9, 0xcfb8, 0xcfb8, 0xcfb7, - 0xcfb7, 0xcfb7, 0xcfb6, 0xcfb6, 0xcfb6, 0xcfb5, 0xcfb5, 0xcfb5, - 0xcfb4, 0xcfb4, 0xcfb3, 0xcfb3, 0xcfb3, 0xcfb2, 0xcfb2, 0xcfb2, - 0xcfb1, 0xcfb1, 0xcfb0, 0xcfb0, 0xcfb0, 0xcfaf, 0xcfaf, 0xcfaf, - 0xcfae, 0xcfae, 0xcfae, 0xcfad, 0xcfad, 0xcfac, 0xcfac, 0xcfac, - 0xcfab, 0xcfab, 0xcfab, 0xcfaa, 0xcfaa, 0xcfaa, 0xcfa9, 0xcfa9, - 0xcfa9, 0xcfa8, 0xcfa8, 0xcfa7, 0xcfa7, 0xcfa7, 0xcfa6, 0xcfa6, - 0xcfa6, 0xcfa5, 0xcfa5, 0xcfa5, 0xcfa4, 0xcfa4, 0xcfa4, 0xcfa3, - 0xcfa3, 0xcfa2, 0xcfa2, 0xcfa2, 0xcfa1, 0xcfa1, 0xcfa1, 0xcfa0, - 0xcfa0, 0xcfa0, 0xcf9f, 0xcf9f, 0xcf9f, 0xcf9e, 0xcf9e, 0xcf9d, - 0xcf9d, 0xcf9d, 0xcf9c, 0xcf9c, 0xcf9c, 0xcf9b, 0xcf9b, 0xcf9b, - 0xcf9a, 0xcf9a, 0xcf9a, 0xcf99, 0xcf99, 0xcf99, 0xcf98, 0xcf98, - 0xcf98, 0xcf97, 0xcf97, 0xcf96, 0xcf96, 0xcf96, 0xcf95, 0xcf95, - 0xcf95, 0xcf94, 0xcf94, 0xcf94, 0xcf93, 0xcf93, 0xcf93, 0xcf92, - 0xcf92, 0xcf92, 0xcf91, 0xcf91, 0xcf91, 0xcf90, 0xcf90, 0xcf90, - 0xcf8f, 0xcf8f, 0xcf8f, 0xcf8e, 0xcf8e, 0xcf8e, 0xcf8d, 0xcf8d, - 0xcf8d, 0xcf8c, 0xcf8c, 0xcf8c, 0xcf8b, 0xcf8b, 0xcf8a, 0xcf8a, - 0xcf8a, 0xcf89, 0xcf89, 0xcf89, 0xcf88, 0xcf88, 0xcf88, 0xcf87, - 0xcf87, 0xcf87, 0xcf86, 0xcf86, 0xcf86, 0xcf85, 0xcf85, 0xcf85, - 0xcf84, 0xcf84, 0xcf84, 0xcf83, 0xcf83, 0xcf83, 0xcf82, 0xcf82, - 0xcf82, 0xcf81, 0xcf81, 0xcf81, 0xcf80, 0xcf80, 0xcf80, 0xcf7f, - 0xcf7f, 0xcf7f, 0xcf7e, 0xcf7e, 0xcf7e, 0xcf7d, 0xcf7d, 0xcf7d, - 0xcf7c, 0xcf7c, 0xcf7c, 0xcf7b, 0xcf7b, 0xcf7b, 0xcf7a, 0xcf7a, - 0xcf7a, 0xcf79, 0xcf79, 0xcf79, 0xcf79, 0xcf78, 0xcf78, 0xcf78, - 0xcf77, 0xcf77, 0xcf77, 0xcf76, 0xcf76, 0xcf76, 0xcf75, 0xcf75, - 0xcf75, 0xcf74, 0xcf74, 0xcf74, 0xcf73, 0xcf73, 0xcf73, 0xcf72, - 0xcf72, 0xcf72, 0xcf71, 0xcf71, 0xcf71, 0xcf70, 0xcf70, 0xcf70, - 0xcf6f, 0xcf6f, 0xcf6f, 0xcf6e, 0xcf6e, 0xcf6e, 0xcf6d, 0xcf6d, - 0xcf6d, 0xcf6d, 0xcf6c, 0xcf6c, 0xcf6c, 0xcf6b, 0xcf6b, 0xcf6b, - 0xcf6a, 0xcf6a, 0xcf6a, 0xcf69, 0xcf69, 0xcf69, 0xcf68, 0xcf68, - 0xcf68, 0xcf67, 0xcf67, 0xcf67, 0xcf66, 0xcf66, 0xcf66, 0xcf66, - 0xcf65, 0xcf65, 0xcf65, 0xcf64, 0xcf64, 0xcf64, 0xcf63, 0xcf63, - 0xcf63, 0xcf62, 0xcf62, 0xcf62, 0xcf61, 0xcf61, 0xcf61, 0xcf61, - 0xcf60, 0xcf60, 0xcf60, 0xcf5f, 0xcf5f, 0xcf5f, 0xcf5e, 0xcf5e, - 0xcf5e, 0xcf5d, 0xcf5d, 0xcf5d, 0xcf5c, 0xcf5c, 0xcf5c, 0xcf5c, - 0xcf5b, 0xcf5b, 0xcf5b, 0xcf5a, 0xcf5a, 0xcf5a, 0xcf59, 0xcf59, - 0xcf59, 0xcf58, 0xcf58, 0xcf58, 0xcf58, 0xcf57, 0xcf57, 0xcf57, - 0xcf56, 0xcf56, 0xcf56, 0xcf55, 0xcf55, 0xcf55, 0xcf54, 0xcf54, - 0xcf54, 0xcf54, 0xcf53, 0xcf53, 0xcf53, 0xcf52, 0xcf52, 0xcf52, - 0xcf51, 0xcf51, 0xcf51, 0xcf51, 0xcf50, 0xcf50, 0xcf50, 0xcf4f, - 0xcf4f, 0xcf4f, 0xcf4e, 0xcf4e, 0xcf4e, 0xcf4e, 0xcf4d, 0xcf4d, - 0xcf4d, 0xcf4c, 0xcf4c, 0xcf4c, 0xcf4b, 0xcf4b, 0xcf4b, 0xcf4b, - 0xcf4a, 0xcf4a, 0xcf4a, 0xcf49, 0xcf49, 0xcf49, 0xcf48, 0xcf48, - 0xcf48, 0xcf48, 0xcf47, 0xcf47, 0xcf47, 0xcf46, 0xcf46, 0xcf46, - 0xcf45, 0xcf45, 0xcf45, 0xcf45, 0xcf44, 0xcf44, 0xcf44, 0xcf43, - 0xcf43, 0xcf43, 0xcf42, 0xcf42, 0xcf42, 0xcf42, 0xcf41, 0xcf41, - 0xcf41, 0xcf40, 0xcf40, 0xcf40, 0xcf40, 0xcf3f, 0xcf3f, 0xcf3f, - 0xcf3e, 0xcf3e, 0xcf3e, 0xcf3e, 0xcf3d, 0xcf3d, 0xcf3d, 0xcf3c, - 0xcf3c, 0xcf3c, 0xcf3b, 0xcf3b, 0xcf3b, 0xcf3b, 0xcf3a, 0xcf3a, - 0xcf3a, 0xcf39, 0xcf39, 0xcf39, 0xcf39, 0xcf38, 0xcf38, 0xcf38, - 0xcf37, 0xcf37, 0xcf37, 0xcf37, 0xcf36, 0xcf36, 0xcf36, 0xcf35, - 0xcf35, 0xcf35, 0xcf35, 0xcf34, 0xcf34, 0xcf34, 0xcf33, 0xcf33, - 0xcf33, 0xcf33, 0xcf32, 0xcf32, 0xcf32, 0xcf31, 0xcf31, 0xcf31, - 0xcf31, 0xcf30, 0xcf30, 0xcf30, 0xcf2f, 0xcf2f, 0xcf2f, 0xcf2f, - 0xcf2e, 0xcf2e, 0xcf2e, 0xcf2d, 0xcf2d, 0xcf2d, 0xcf2d, 0xcf2c, - 0xcf2c, 0xcf2c, 0xcf2b, 0xcf2b, 0xcf2b, 0xcf2b, 0xcf2a, 0xcf2a, - 0xcf2a, 0xcf29, 0xcf29, 0xcf29, 0xcf29, 0xcf28, 0xcf28, 0xcf28, - 0xcf28, 0xcf27, 0xcf27, 0xcf27, 0xcf26, 0xcf26, 0xcf26, 0xcf26, - 0xcf25, 0xcf25, 0xcf25, 0xcf24, 0xcf24, 0xcf24, 0xcf24, 0xcf23, - 0xcf23, 0xcf23, 0xcf23, 0xcf22, 0xcf22, 0xcf22, 0xcf21, 0xcf21, - 0xcf21, 0xcf21, 0xcf20, 0xcf20, 0xcf20, 0xcf1f, 0xcf1f, 0xcf1f, - 0xcf1f, 0xcf1e, 0xcf1e, 0xcf1e, 0xcf1e, 0xcf1d, 0xcf1d, 0xcf1d, - 0xcf1c, 0xcf1c, 0xcf1c, 0xcf1c, 0xcf1b, 0xcf1b, 0xcf1b, 0xcf1b, - 0xcf1a, 0xcf1a, 0xcf1a, 0xcf19, 0xcf19, 0xcf19, 0xcf19, 0xcf18, - 0xcf18, 0xcf18, 0xcf18, 0xcf17, 0xcf17, 0xcf17, 0xcf16, 0xcf16, - 0xcf16, 0xcf16, 0xcf15, 0xcf15, 0xcf15, 0xcf15, 0xcf14, 0xcf14, - 0xcf14, 0xcf14, 0xcf13, 0xcf13, 0xcf13, 0xcf12, 0xcf12, 0xcf12, - 0xcf12, 0xcf11, 0xcf11, 0xcf11, 0xcf11, 0xcf10, 0xcf10, 0xcf10, - 0xcf10, 0xcf0f, 0xcf0f, 0xcf0f, 0xcf0e, 0xcf0e, 0xcf0e, 0xcf0e, - 0xcf0d, 0xcf0d, 0xcf0d, 0xcf0d, 0xcf0c, 0xcf0c, 0xcf0c, 0xcf0c, - 0xcf0b, 0xcf0b, 0xcf0b, 0xcf0a, 0xcf0a, 0xcf0a, 0xcf0a, 0xcf09, - 0xcf09, 0xcf09, 0xcf09, 0xcf08, 0xcf08, 0xcf08, 0xcf08, 0xcf07, - 0xcf07, 0xcf07, 0xcf07, 0xcf06, 0xcf06, 0xcf06, 0xcf05, 0xcf05, - 0xcf05, 0xcf05, 0xcf04, 0xcf04, 0xcf04, 0xcf04, 0xcf03, 0xcf03, - 0xcf03, 0xcf03, 0xcf02, 0xcf02, 0xcf02, 0xcf02, 0xcf01, 0xcf01, - 0xcf01, 0xcf01, 0xcf00, 0xcf00, 0xcf00, 0xceff, 0xceff, 0xceff, - 0xceff, 0xcefe, 0xcefe, 0xcefe, 0xcefe, 0xcefd, 0xcefd, 0xcefd, - 0xcefd, 0xcefc, 0xcefc, 0xcefc, 0xcefc, 0xcefb, 0xcefb, 0xcefb, - 0xcefb, 0xcefa, 0xcefa, 0xcefa, 0xcefa, 0xcef9, 0xcef9, 0xcef9, - 0xcef9, 0xcef8, 0xcef8, 0xcef8, 0xcef8, 0xcef7, 0xcef7, 0xcef7, - 0xcef7, 0xcef6, 0xcef6, 0xcef6, 0xcef6, 0xcef5, 0xcef5, 0xcef5, - 0xcef4, 0xcef4, 0xcef4, 0xcef4, 0xcef3, 0xcef3, 0xcef3, 0xcef3, - 0xcef2, 0xcef2, 0xcef2, 0xcef2, 0xcef1, 0xcef1, 0xcef1, 0xcef1, - 0xcef0, 0xcef0, 0xcef0, 0xcef0, 0xceef, 0xceef, 0xceef, 0xceef, - 0xceee, 0xceee, 0xceed, 0xceed, 0xceec, 0xceec, 0xceeb, 0xceeb, - 0xceea, 0xceea, 0xcee9, 0xcee9, 0xcee8, 0xcee8, 0xcee8, 0xcee7, - 0xcee7, 0xcee6, 0xcee6, 0xcee5, 0xcee5, 0xcee4, 0xcee4, 0xcee3, - 0xcee3, 0xcee2, 0xcee2, 0xcee1, 0xcee1, 0xcee0, 0xcee0, 0xcedf, - 0xcedf, 0xcede, 0xcede, 0xcedd, 0xcedd, 0xcedc, 0xcedc, 0xcedb, - 0xcedb, 0xceda, 0xceda, 0xced9, 0xced9, 0xced8, 0xced8, 0xced7, - 0xced7, 0xced7, 0xced6, 0xced6, 0xced5, 0xced5, 0xced4, 0xced4, - 0xced3, 0xced3, 0xced2, 0xced2, 0xced1, 0xced1, 0xced0, 0xced0, - 0xcecf, 0xcecf, 0xcece, 0xcece, 0xcece, 0xcecd, 0xcecd, 0xcecc, - 0xcecc, 0xcecb, 0xcecb, 0xceca, 0xceca, 0xcec9, 0xcec9, 0xcec8, - 0xcec8, 0xcec7, 0xcec7, 0xcec7, 0xcec6, 0xcec6, 0xcec5, 0xcec5, - 0xcec4, 0xcec4, 0xcec3, 0xcec3, 0xcec2, 0xcec2, 0xcec1, 0xcec1, - 0xcec1, 0xcec0, 0xcec0, 0xcebf, 0xcebf, 0xcebe, 0xcebe, 0xcebd, - 0xcebd, 0xcebc, 0xcebc, 0xcebc, 0xcebb, 0xcebb, 0xceba, 0xceba, - 0xceb9, 0xceb9, 0xceb8, 0xceb8, 0xceb8, 0xceb7, 0xceb7, 0xceb6, - 0xceb6, 0xceb5, 0xceb5, 0xceb4, 0xceb4, 0xceb3, 0xceb3, 0xceb3, - 0xceb2, 0xceb2, 0xceb1, 0xceb1, 0xceb0, 0xceb0, 0xceaf, 0xceaf, - 0xceaf, 0xceae, 0xceae, 0xcead, 0xcead, 0xceac, 0xceac, 0xceac, - 0xceab, 0xceab, 0xceaa, 0xceaa, 0xcea9, 0xcea9, 0xcea8, 0xcea8, - 0xcea8, 0xcea7, 0xcea7, 0xcea6, 0xcea6, 0xcea5, 0xcea5, 0xcea5, - 0xcea4, 0xcea4, 0xcea3, 0xcea3, 0xcea2, 0xcea2, 0xcea2, 0xcea1, - 0xcea1, 0xcea0, 0xcea0, 0xce9f, 0xce9f, 0xce9f, 0xce9e, 0xce9e, - 0xce9d, 0xce9d, 0xce9c, 0xce9c, 0xce9c, 0xce9b, 0xce9b, 0xce9a, - 0xce9a, 0xce99, 0xce99, 0xce99, 0xce98, 0xce98, 0xce97, 0xce97, - 0xce96, 0xce96, 0xce96, 0xce95, 0xce95, 0xce94, 0xce94, 0xce94, - 0xce93, 0xce93, 0xce92, 0xce92, 0xce91, 0xce91, 0xce91, 0xce90, - 0xce90, 0xce8f, 0xce8f, 0xce8f, 0xce8e, 0xce8e, 0xce8d, 0xce8d, - 0xce8c, 0xce8c, 0xce8c, 0xce8b, 0xce8b, 0xce8a, 0xce8a, 0xce8a, - 0xce89, 0xce89, 0xce88, 0xce88, 0xce88, 0xce87, 0xce87, 0xce86, - 0xce86, 0xce85, 0xce85, 0xce85, 0xce84, 0xce84, 0xce83, 0xce83, - 0xce83, 0xce82, 0xce82, 0xce81, 0xce81, 0xce81, 0xce80, 0xce80, - 0xce7f, 0xce7f, 0xce7f, 0xce7e, 0xce7e, 0xce7d, 0xce7d, 0xce7d, - 0xce7c, 0xce7c, 0xce7b, 0xce7b, 0xce7b, 0xce7a, 0xce7a, 0xce79, - 0xce79, 0xce79, 0xce78, 0xce78, 0xce77, 0xce77, 0xce77, 0xce76, - 0xce76, 0xce75, 0xce75, 0xce75, 0xce74, 0xce74, 0xce73, 0xce73, - 0xce73, 0xce72, 0xce72, 0xce72, 0xce71, 0xce71, 0xce70, 0xce70, - 0xce70, 0xce6f, 0xce6f, 0xce6e, 0xce6e, 0xce6e, 0xce6d, 0xce6d, - 0xce6c, 0xce6c, 0xce6c, 0xce6b, 0xce6b, 0xce6b, 0xce6a, 0xce6a, - 0xce69, 0xce69, 0xce69, 0xce68, 0xce68, 0xce67, 0xce67, 0xce67, - 0xce66, 0xce66, 0xce66, 0xce65, 0xce65, 0xce64, 0xce64, 0xce64, - 0xce63, 0xce63, 0xce62, 0xce62, 0xce62, 0xce61, 0xce61, 0xce61, - 0xce60, 0xce60, 0xce5f, 0xce5f, 0xce5f, 0xce5e, 0xce5e, 0xce5e, - 0xce5d, 0xce5d, 0xce5c, 0xce5c, 0xce5c, 0xce5b, 0xce5b, 0xce5b, - 0xce5a, 0xce5a, 0xce59, 0xce59, 0xce59, 0xce58, 0xce58, 0xce58, - 0xce57, 0xce57, 0xce56, 0xce56, 0xce56, 0xce55, 0xce55, 0xce55, - 0xce54, 0xce54, 0xce53, 0xce53, 0xce53, 0xce52, 0xce52, 0xce52, - 0xce51, 0xce51, 0xce51, 0xce50, 0xce50, 0xce4f, 0xce4f, 0xce4f, - 0xce4e, 0xce4e, 0xce4e, 0xce4d, 0xce4d, 0xce4d, 0xce4c, 0xce4c, - 0xce4b, 0xce4b, 0xce4b, 0xce4a, 0xce4a, 0xce4a, 0xce49, 0xce49, - 0xce49, 0xce48, 0xce48, 0xce47, 0xce47, 0xce47, 0xce46, 0xce46, - 0xce46, 0xce45, 0xce45, 0xce45, 0xce44, 0xce44, 0xce43, 0xce43, - 0xce43, 0xce42, 0xce42, 0xce42, 0xce41, 0xce41, 0xce41, 0xce40, - 0xce40, 0xce40, 0xce3f, 0xce3f, 0xce3e, 0xce3e, 0xce3e, 0xce3d, - 0xce3d, 0xce3d, 0xce3c, 0xce3c, 0xce3c, 0xce3b, 0xce3b, 0xce3b, - 0xce3a, 0xce3a, 0xce3a, 0xce39, 0xce39, 0xce38, 0xce38, 0xce38, - 0xce37, 0xce37, 0xce37, 0xce36, 0xce36, 0xce36, 0xce35, 0xce35, - 0xce35, 0xce34, 0xce34, 0xce34, 0xce33, 0xce33, 0xce33, 0xce32, - 0xce32, 0xce32, 0xce31, 0xce31, 0xce30, 0xce30, 0xce30, 0xce2f, - 0xce2f, 0xce2f, 0xce2e, 0xce2e, 0xce2e, 0xce2d, 0xce2d, 0xce2d, - 0xce2c, 0xce2c, 0xce2c, 0xce2b, 0xce2b, 0xce2b, 0xce2a, 0xce2a, - 0xce2a, 0xce29, 0xce29, 0xce29, 0xce28, 0xce28, 0xce28, 0xce27, - 0xce27, 0xce27, 0xce26, 0xce26, 0xce26, 0xce25, 0xce25, 0xce25, - 0xce24, 0xce24, 0xce24, 0xce23, 0xce23, 0xce23, 0xce22, 0xce22, - 0xce22, 0xce21, 0xce21, 0xce21, 0xce20, 0xce20, 0xce20, 0xce1f, - 0xce1f, 0xce1f, 0xce1e, 0xce1e, 0xce1e, 0xce1d, 0xce1d, 0xce1d, - 0xce1c, 0xce1c, 0xce1c, 0xce1b, 0xce1b, 0xce1b, 0xce1a, 0xce1a, - 0xce1a, 0xce19, 0xce19, 0xce19, 0xce18, 0xce18, 0xce18, 0xce17, - 0xce17, 0xce17, 0xce16, 0xce16, 0xce16, 0xce15, 0xce15, 0xce15, - 0xce14, 0xce14, 0xce14, 0xce13, 0xce13, 0xce13, 0xce12, 0xce12, - 0xce12, 0xce11, 0xce11, 0xce11, 0xce10, 0xce10, 0xce10, 0xce0f, - 0xce0f, 0xce0f, 0xce0e, 0xce0e, 0xce0e, 0xce0d, 0xce0d, 0xce0d, - 0xce0d, 0xce0c, 0xce0c, 0xce0c, 0xce0b, 0xce0b, 0xce0b, 0xce0a, - 0xce0a, 0xce0a, 0xce09, 0xce09, 0xce09, 0xce08, 0xce08, 0xce08, - 0xce07, 0xce07, 0xce07, 0xce06, 0xce06, 0xce06, 0xce05, 0xce05, - 0xce05, 0xce05, 0xce04, 0xce04, 0xce04, 0xce03, 0xce03, 0xce03, - 0xce02, 0xce02, 0xce02, 0xce01, 0xce01, 0xce01, 0xce00, 0xce00, - 0xce00, 0xce00, 0xcdff, 0xcdff, 0xcdff, 0xcdfe, 0xcdfe, 0xcdfe, - 0xcdfd, 0xcdfd, 0xcdfd, 0xcdfc, 0xcdfc, 0xcdfc, 0xcdfb, 0xcdfb, - 0xcdfb, 0xcdfb, 0xcdfa, 0xcdfa, 0xcdfa, 0xcdf9, 0xcdf9, 0xcdf9, - 0xcdf8, 0xcdf8, 0xcdf8, 0xcdf7, 0xcdf7, 0xcdf7, 0xcdf6, 0xcdf6, - 0xcdf6, 0xcdf6, 0xcdf5, 0xcdf5, 0xcdf5, 0xcdf4, 0xcdf4, 0xcdf4, - 0xcdf3, 0xcdf3, 0xcdf3, 0xcdf3, 0xcdf2, 0xcdf2, 0xcdf2, 0xcdf1, - 0xcdf1, 0xcdf1, 0xcdf0, 0xcdf0, 0xcdf0, 0xcdef, 0xcdef, 0xcdef, - 0xcdef, 0xcdee, 0xcdee, 0xcdee, 0xcded, 0xcded, 0xcded, 0xcdec, - 0xcdec, 0xcdec, 0xcdec, 0xcdeb, 0xcdeb, 0xcdeb, 0xcdea, 0xcdea, - 0xcdea, 0xcde9, 0xcde9, 0xcde9, 0xcde9, 0xcde8, 0xcde8, 0xcde8, - 0xcde7, 0xcde7, 0xcde7, 0xcde6, 0xcde6, 0xcde6, 0xcde6, 0xcde5, - 0xcde5, 0xcde5, 0xcde4, 0xcde4, 0xcde4, 0xcde3, 0xcde3, 0xcde3, - 0xcde3, 0xcde2, 0xcde2, 0xcde2, 0xcde1, 0xcde1, 0xcde1, 0xcde0, - 0xcde0, 0xcde0, 0xcde0, 0xcddf, 0xcddf, 0xcddf, 0xcdde, 0xcdde, - 0xcdde, 0xcdde, 0xcddd, 0xcddd, 0xcddd, 0xcddc, 0xcddc, 0xcddc, - 0xcddb, 0xcddb, 0xcddb, 0xcddb, 0xcdda, 0xcdda, 0xcdda, 0xcdd9, - 0xcdd9, 0xcdd9, 0xcdd9, 0xcdd8, 0xcdd8, 0xcdd8, 0xcdd7, 0xcdd7, - 0xcdd7, 0xcdd7, 0xcdd6, 0xcdd6, 0xcdd6, 0xcdd5, 0xcdd5, 0xcdd5, - 0xcdd5, 0xcdd4, 0xcdd4, 0xcdd4, 0xcdd3, 0xcdd3, 0xcdd3, 0xcdd3, - 0xcdd2, 0xcdd2, 0xcdd2, 0xcdd1, 0xcdd1, 0xcdd1, 0xcdd1, 0xcdd0, - 0xcdd0, 0xcdd0, 0xcdcf, 0xcdcf, 0xcdcf, 0xcdcf, 0xcdce, 0xcdce, - 0xcdce, 0xcdcd, 0xcdcd, 0xcdcd, 0xcdcd, 0xcdcc, 0xcdcc, 0xcdcc, - 0xcdcb, 0xcdcb, 0xcdcb, 0xcdcb, 0xcdca, 0xcdca, 0xcdca, 0xcdc9, - 0xcdc9, 0xcdc9, 0xcdc9, 0xcdc8, 0xcdc8, 0xcdc8, 0xcdc7, 0xcdc7, - 0xcdc7, 0xcdc7, 0xcdc6, 0xcdc6, 0xcdc6, 0xcdc5, 0xcdc5, 0xcdc5, - 0xcdc5, 0xcdc4, 0xcdc4, 0xcdc4, 0xcdc4, 0xcdc3, 0xcdc3, 0xcdc3, - 0xcdc2, 0xcdc2, 0xcdc2, 0xcdc2, 0xcdc1, 0xcdc1, 0xcdc1, 0xcdc0, - 0xcdc0, 0xcdc0, 0xcdc0, 0xcdbf, 0xcdbf, 0xcdbf, 0xcdbf, 0xcdbe, - 0xcdbe, 0xcdbe, 0xcdbd, 0xcdbd, 0xcdbd, 0xcdbd, 0xcdbc, 0xcdbc, - 0xcdbc, 0xcdbb, 0xcdbb, 0xcdbb, 0xcdbb, 0xcdba, 0xcdba, 0xcdba, - 0xcdba, 0xcdb9, 0xcdb9, 0xcdb9, 0xcdb8, 0xcdb8, 0xcdb8, 0xcdb8, - 0xcdb7, 0xcdb7, 0xcdb7, 0xcdb7, 0xcdb6, 0xcdb6, 0xcdb6, 0xcdb5, - 0xcdb5, 0xcdb5, 0xcdb5, 0xcdb4, 0xcdb4, 0xcdb4, 0xcdb4, 0xcdb3, - 0xcdb3, 0xcdb3, 0xcdb3, 0xcdb2, 0xcdb2, 0xcdb2, 0xcdb1, 0xcdb1, - 0xcdb1, 0xcdb1, 0xcdb0, 0xcdb0, 0xcdb0, 0xcdb0, 0xcdaf, 0xcdaf, - 0xcdaf, 0xcdae, 0xcdae, 0xcdae, 0xcdae, 0xcdad, 0xcdad, 0xcdad, - 0xcdad, 0xcdac, 0xcdac, 0xcdac, 0xcdac, 0xcdab, 0xcdab, 0xcdab, - 0xcdaa, 0xcdaa, 0xcdaa, 0xcdaa, 0xcda9, 0xcda9, 0xcda9, 0xcda9, - 0xcda8, 0xcda8, 0xcda8, 0xcda8, 0xcda7, 0xcda7, 0xcda7, 0xcda7, - 0xcda6, 0xcda6, 0xcda6, 0xcda5, 0xcda5, 0xcda5, 0xcda5, 0xcda4, - 0xcda4, 0xcda4, 0xcda4, 0xcda3, 0xcda3, 0xcda3, 0xcda3, 0xcda2, - 0xcda2, 0xcda2, 0xcda2, 0xcda1, 0xcda1, 0xcda1, 0xcda0, 0xcda0, - 0xcda0, 0xcda0, 0xcd9f, 0xcd9f, 0xcd9f, 0xcd9f, 0xcd9e, 0xcd9e, - 0xcd9e, 0xcd9e, 0xcd9d, 0xcd9d, 0xcd9d, 0xcd9d, 0xcd9c, 0xcd9c, - 0xcd9c, 0xcd9c, 0xcd9b, 0xcd9b, 0xcd9b, 0xcd9b, 0xcd9a, 0xcd9a, - 0xcd9a, 0xcd9a, 0xcd99, 0xcd99, 0xcd99, 0xcd98, 0xcd98, 0xcd98, - 0xcd98, 0xcd97, 0xcd97, 0xcd97, 0xcd97, 0xcd96, 0xcd96, 0xcd96, - 0xcd96, 0xcd95, 0xcd95, 0xcd95, 0xcd95, 0xcd94, 0xcd94, 0xcd94, - 0xcd94, 0xcd93, 0xcd93, 0xcd93, 0xcd93, 0xcd92, 0xcd92, 0xcd92, - 0xcd92, 0xcd91, 0xcd91, 0xcd91, 0xcd91, 0xcd90, 0xcd90, 0xcd90, - 0xcd90, 0xcd8f, 0xcd8f, 0xcd8f, 0xcd8f, 0xcd8e, 0xcd8e, 0xcd8e, - 0xcd8e, 0xcd8d, 0xcd8d, 0xcd8d, 0xcd8d, 0xcd8c, 0xcd8c, 0xcd8c, - 0xcd8c, 0xcd8b, 0xcd8b, 0xcd8a, 0xcd8a, 0xcd89, 0xcd89, 0xcd88, - 0xcd88, 0xcd87, 0xcd87, 0xcd86, 0xcd86, 0xcd85, 0xcd85, 0xcd84, - 0xcd84, 0xcd83, 0xcd83, 0xcd82, 0xcd82, 0xcd81, 0xcd81, 0xcd80, - 0xcd80, 0xcd7f, 0xcd7f, 0xcd7e, 0xcd7e, 0xcd7d, 0xcd7d, 0xcd7c, - 0xcd7c, 0xcd7b, 0xcd7b, 0xcd7a, 0xcd7a, 0xcd79, 0xcd79, 0xcd78, - 0xcd78, 0xcd77, 0xcd77, 0xcd77, 0xcd76, 0xcd76, 0xcd75, 0xcd75, - 0xcd74, 0xcd74, 0xcd73, 0xcd73, 0xcd72, 0xcd72, 0xcd71, 0xcd71, - 0xcd70, 0xcd70, 0xcd6f, 0xcd6f, 0xcd6e, 0xcd6e, 0xcd6d, 0xcd6d, - 0xcd6d, 0xcd6c, 0xcd6c, 0xcd6b, 0xcd6b, 0xcd6a, 0xcd6a, 0xcd69, - 0xcd69, 0xcd68, 0xcd68, 0xcd67, 0xcd67, 0xcd66, 0xcd66, 0xcd66, - 0xcd65, 0xcd65, 0xcd64, 0xcd64, 0xcd63, 0xcd63, 0xcd62, 0xcd62, - 0xcd61, 0xcd61, 0xcd60, 0xcd60, 0xcd60, 0xcd5f, 0xcd5f, 0xcd5e, - 0xcd5e, 0xcd5d, 0xcd5d, 0xcd5c, 0xcd5c, 0xcd5b, 0xcd5b, 0xcd5a, - 0xcd5a, 0xcd5a, 0xcd59, 0xcd59, 0xcd58, 0xcd58, 0xcd57, 0xcd57, - 0xcd56, 0xcd56, 0xcd56, 0xcd55, 0xcd55, 0xcd54, 0xcd54, 0xcd53, - 0xcd53, 0xcd52, 0xcd52, 0xcd51, 0xcd51, 0xcd51, 0xcd50, 0xcd50, - 0xcd4f, 0xcd4f, 0xcd4e, 0xcd4e, 0xcd4d, 0xcd4d, 0xcd4d, 0xcd4c, - 0xcd4c, 0xcd4b, 0xcd4b, 0xcd4a, 0xcd4a, 0xcd4a, 0xcd49, 0xcd49, - 0xcd48, 0xcd48, 0xcd47, 0xcd47, 0xcd46, 0xcd46, 0xcd46, 0xcd45, - 0xcd45, 0xcd44, 0xcd44, 0xcd43, 0xcd43, 0xcd43, 0xcd42, 0xcd42, - 0xcd41, 0xcd41, 0xcd40, 0xcd40, 0xcd40, 0xcd3f, 0xcd3f, 0xcd3e, - 0xcd3e, 0xcd3d, 0xcd3d, 0xcd3c, 0xcd3c, 0xcd3c, 0xcd3b, 0xcd3b, - 0xcd3a, 0xcd3a, 0xcd3a, 0xcd39, 0xcd39, 0xcd38, 0xcd38, 0xcd37, - 0xcd37, 0xcd37, 0xcd36, 0xcd36, 0xcd35, 0xcd35, 0xcd34, 0xcd34, - 0xcd34, 0xcd33, 0xcd33, 0xcd32, 0xcd32, 0xcd31, 0xcd31, 0xcd31, - 0xcd30, 0xcd30, 0xcd2f, 0xcd2f, 0xcd2f, 0xcd2e, 0xcd2e, 0xcd2d, - 0xcd2d, 0xcd2c, 0xcd2c, 0xcd2c, 0xcd2b, 0xcd2b, 0xcd2a, 0xcd2a, - 0xcd2a, 0xcd29, 0xcd29, 0xcd28, 0xcd28, 0xcd28, 0xcd27, 0xcd27, - 0xcd26, 0xcd26, 0xcd25, 0xcd25, 0xcd25, 0xcd24, 0xcd24, 0xcd23, - 0xcd23, 0xcd23, 0xcd22, 0xcd22, 0xcd21, 0xcd21, 0xcd21, 0xcd20, - 0xcd20, 0xcd1f, 0xcd1f, 0xcd1f, 0xcd1e, 0xcd1e, 0xcd1d, 0xcd1d, - 0xcd1d, 0xcd1c, 0xcd1c, 0xcd1b, 0xcd1b, 0xcd1b, 0xcd1a, 0xcd1a, - 0xcd19, 0xcd19, 0xcd19, 0xcd18, 0xcd18, 0xcd17, 0xcd17, 0xcd17, - 0xcd16, 0xcd16, 0xcd15, 0xcd15, 0xcd15, 0xcd14, 0xcd14, 0xcd13, - 0xcd13, 0xcd13, 0xcd12, 0xcd12, 0xcd11, 0xcd11, 0xcd11, 0xcd10, - 0xcd10, 0xcd0f, 0xcd0f, 0xcd0f, 0xcd0e, 0xcd0e, 0xcd0d, 0xcd0d, - 0xcd0d, 0xcd0c, 0xcd0c, 0xcd0c, 0xcd0b, 0xcd0b, 0xcd0a, 0xcd0a, - 0xcd0a, 0xcd09, 0xcd09, 0xcd08, 0xcd08, 0xcd08, 0xcd07, 0xcd07, - 0xcd06, 0xcd06, 0xcd06, 0xcd05, 0xcd05, 0xcd05, 0xcd04, 0xcd04, - 0xcd03, 0xcd03, 0xcd03, 0xcd02, 0xcd02, 0xcd01, 0xcd01, 0xcd01, - 0xcd00, 0xcd00, 0xcd00, 0xccff, 0xccff, 0xccfe, 0xccfe, 0xccfe, - 0xccfd, 0xccfd, 0xccfd, 0xccfc, 0xccfc, 0xccfb, 0xccfb, 0xccfb, - 0xccfa, 0xccfa, 0xccfa, 0xccf9, 0xccf9, 0xccf8, 0xccf8, 0xccf8, - 0xccf7, 0xccf7, 0xccf7, 0xccf6, 0xccf6, 0xccf5, 0xccf5, 0xccf5, - 0xccf4, 0xccf4, 0xccf4, 0xccf3, 0xccf3, 0xccf2, 0xccf2, 0xccf2, - 0xccf1, 0xccf1, 0xccf1, 0xccf0, 0xccf0, 0xccef, 0xccef, 0xccef, - 0xccee, 0xccee, 0xccee, 0xcced, 0xcced, 0xcced, 0xccec, 0xccec, - 0xcceb, 0xcceb, 0xcceb, 0xccea, 0xccea, 0xccea, 0xcce9, 0xcce9, - 0xcce9, 0xcce8, 0xcce8, 0xcce7, 0xcce7, 0xcce7, 0xcce6, 0xcce6, - 0xcce6, 0xcce5, 0xcce5, 0xcce5, 0xcce4, 0xcce4, 0xcce3, 0xcce3, - 0xcce3, 0xcce2, 0xcce2, 0xcce2, 0xcce1, 0xcce1, 0xcce1, 0xcce0, - 0xcce0, 0xcce0, 0xccdf, 0xccdf, 0xccde, 0xccde, 0xccde, 0xccdd, - 0xccdd, 0xccdd, 0xccdc, 0xccdc, 0xccdc, 0xccdb, 0xccdb, 0xccdb, - 0xccda, 0xccda, 0xccd9, 0xccd9, 0xccd9, 0xccd8, 0xccd8, 0xccd8, - 0xccd7, 0xccd7, 0xccd7, 0xccd6, 0xccd6, 0xccd6, 0xccd5, 0xccd5, - 0xccd5, 0xccd4, 0xccd4, 0xccd3, 0xccd3, 0xccd3, 0xccd2, 0xccd2, - 0xccd2, 0xccd1, 0xccd1, 0xccd1, 0xccd0, 0xccd0, 0xccd0, 0xcccf, - 0xcccf, 0xcccf, 0xccce, 0xccce, 0xccce, 0xcccd, 0xcccd, 0xcccd, - 0xcccc, 0xcccc, 0xcccc, 0xcccb, 0xcccb, 0xcccb, 0xccca, 0xccca, - 0xccc9, 0xccc9, 0xccc9, 0xccc8, 0xccc8, 0xccc8, 0xccc7, 0xccc7, - 0xccc7, 0xccc6, 0xccc6, 0xccc6, 0xccc5, 0xccc5, 0xccc5, 0xccc4, - 0xccc4, 0xccc4, 0xccc3, 0xccc3, 0xccc3, 0xccc2, 0xccc2, 0xccc2, - 0xccc1, 0xccc1, 0xccc1, 0xccc0, 0xccc0, 0xccc0, 0xccbf, 0xccbf, - 0xccbf, 0xccbe, 0xccbe, 0xccbe, 0xccbd, 0xccbd, 0xccbd, 0xccbc, - 0xccbc, 0xccbc, 0xccbb, 0xccbb, 0xccbb, 0xccba, 0xccba, 0xccba, - 0xccb9, 0xccb9, 0xccb9, 0xccb8, 0xccb8, 0xccb8, 0xccb7, 0xccb7, - 0xccb7, 0xccb6, 0xccb6, 0xccb6, 0xccb5, 0xccb5, 0xccb5, 0xccb4, - 0xccb4, 0xccb4, 0xccb3, 0xccb3, 0xccb3, 0xccb2, 0xccb2, 0xccb2, - 0xccb1, 0xccb1, 0xccb1, 0xccb0, 0xccb0, 0xccb0, 0xccaf, 0xccaf, - 0xccaf, 0xccae, 0xccae, 0xccae, 0xccae, 0xccad, 0xccad, 0xccad, - 0xccac, 0xccac, 0xccac, 0xccab, 0xccab, 0xccab, 0xccaa, 0xccaa, - 0xccaa, 0xcca9, 0xcca9, 0xcca9, 0xcca8, 0xcca8, 0xcca8, 0xcca7, - 0xcca7, 0xcca7, 0xcca6, 0xcca6, 0xcca6, 0xcca5, 0xcca5, 0xcca5, - 0xcca5, 0xcca4, 0xcca4, 0xcca4, 0xcca3, 0xcca3, 0xcca3, 0xcca2, - 0xcca2, 0xcca2, 0xcca1, 0xcca1, 0xcca1, 0xcca0, 0xcca0, 0xcca0, - 0xcc9f, 0xcc9f, 0xcc9f, 0xcc9e, 0xcc9e, 0xcc9e, 0xcc9e, 0xcc9d, - 0xcc9d, 0xcc9d, 0xcc9c, 0xcc9c, 0xcc9c, 0xcc9b, 0xcc9b, 0xcc9b, - 0xcc9a, 0xcc9a, 0xcc9a, 0xcc99, 0xcc99, 0xcc99, 0xcc99, 0xcc98, - 0xcc98, 0xcc98, 0xcc97, 0xcc97, 0xcc97, 0xcc96, 0xcc96, 0xcc96, - 0xcc95, 0xcc95, 0xcc95, 0xcc95, 0xcc94, 0xcc94, 0xcc94, 0xcc93, - 0xcc93, 0xcc93, 0xcc92, 0xcc92, 0xcc92, 0xcc91, 0xcc91, 0xcc91, - 0xcc91, 0xcc90, 0xcc90, 0xcc90, 0xcc8f, 0xcc8f, 0xcc8f, 0xcc8e, - 0xcc8e, 0xcc8e, 0xcc8d, 0xcc8d, 0xcc8d, 0xcc8d, 0xcc8c, 0xcc8c, - 0xcc8c, 0xcc8b, 0xcc8b, 0xcc8b, 0xcc8a, 0xcc8a, 0xcc8a, 0xcc8a, - 0xcc89, 0xcc89, 0xcc89, 0xcc88, 0xcc88, 0xcc88, 0xcc87, 0xcc87, - 0xcc87, 0xcc87, 0xcc86, 0xcc86, 0xcc86, 0xcc85, 0xcc85, 0xcc85, - 0xcc84, 0xcc84, 0xcc84, 0xcc84, 0xcc83, 0xcc83, 0xcc83, 0xcc82, - 0xcc82, 0xcc82, 0xcc81, 0xcc81, 0xcc81, 0xcc81, 0xcc80, 0xcc80, - 0xcc80, 0xcc7f, 0xcc7f, 0xcc7f, 0xcc7e, 0xcc7e, 0xcc7e, 0xcc7e, - 0xcc7d, 0xcc7d, 0xcc7d, 0xcc7c, 0xcc7c, 0xcc7c, 0xcc7c, 0xcc7b, - 0xcc7b, 0xcc7b, 0xcc7a, 0xcc7a, 0xcc7a, 0xcc79, 0xcc79, 0xcc79, - 0xcc79, 0xcc78, 0xcc78, 0xcc78, 0xcc77, 0xcc77, 0xcc77, 0xcc77, - 0xcc76, 0xcc76, 0xcc76, 0xcc75, 0xcc75, 0xcc75, 0xcc75, 0xcc74, - 0xcc74, 0xcc74, 0xcc73, 0xcc73, 0xcc73, 0xcc72, 0xcc72, 0xcc72, - 0xcc72, 0xcc71, 0xcc71, 0xcc71, 0xcc70, 0xcc70, 0xcc70, 0xcc70, - 0xcc6f, 0xcc6f, 0xcc6f, 0xcc6e, 0xcc6e, 0xcc6e, 0xcc6e, 0xcc6d, - 0xcc6d, 0xcc6d, 0xcc6c, 0xcc6c, 0xcc6c, 0xcc6c, 0xcc6b, 0xcc6b, - 0xcc6b, 0xcc6a, 0xcc6a, 0xcc6a, 0xcc6a, 0xcc69, 0xcc69, 0xcc69, - 0xcc68, 0xcc68, 0xcc68, 0xcc68, 0xcc67, 0xcc67, 0xcc67, 0xcc67, - 0xcc66, 0xcc66, 0xcc66, 0xcc65, 0xcc65, 0xcc65, 0xcc65, 0xcc64, - 0xcc64, 0xcc64, 0xcc63, 0xcc63, 0xcc63, 0xcc63, 0xcc62, 0xcc62, - 0xcc62, 0xcc61, 0xcc61, 0xcc61, 0xcc61, 0xcc60, 0xcc60, 0xcc60, - 0xcc60, 0xcc5f, 0xcc5f, 0xcc5f, 0xcc5e, 0xcc5e, 0xcc5e, 0xcc5e, - 0xcc5d, 0xcc5d, 0xcc5d, 0xcc5c, 0xcc5c, 0xcc5c, 0xcc5c, 0xcc5b, - 0xcc5b, 0xcc5b, 0xcc5b, 0xcc5a, 0xcc5a, 0xcc5a, 0xcc59, 0xcc59, - 0xcc59, 0xcc59, 0xcc58, 0xcc58, 0xcc58, 0xcc58, 0xcc57, 0xcc57, - 0xcc57, 0xcc56, 0xcc56, 0xcc56, 0xcc56, 0xcc55, 0xcc55, 0xcc55, - 0xcc54, 0xcc54, 0xcc54, 0xcc54, 0xcc53, 0xcc53, 0xcc53, 0xcc53, - 0xcc52, 0xcc52, 0xcc52, 0xcc52, 0xcc51, 0xcc51, 0xcc51, 0xcc50, - 0xcc50, 0xcc50, 0xcc50, 0xcc4f, 0xcc4f, 0xcc4f, 0xcc4f, 0xcc4e, - 0xcc4e, 0xcc4e, 0xcc4d, 0xcc4d, 0xcc4d, 0xcc4d, 0xcc4c, 0xcc4c, - 0xcc4c, 0xcc4c, 0xcc4b, 0xcc4b, 0xcc4b, 0xcc4b, 0xcc4a, 0xcc4a, - 0xcc4a, 0xcc49, 0xcc49, 0xcc49, 0xcc49, 0xcc48, 0xcc48, 0xcc48, - 0xcc48, 0xcc47, 0xcc47, 0xcc47, 0xcc47, 0xcc46, 0xcc46, 0xcc46, - 0xcc45, 0xcc45, 0xcc45, 0xcc45, 0xcc44, 0xcc44, 0xcc44, 0xcc44, - 0xcc43, 0xcc43, 0xcc43, 0xcc43, 0xcc42, 0xcc42, 0xcc42, 0xcc42, - 0xcc41, 0xcc41, 0xcc41, 0xcc40, 0xcc40, 0xcc40, 0xcc40, 0xcc3f, - 0xcc3f, 0xcc3f, 0xcc3f, 0xcc3e, 0xcc3e, 0xcc3e, 0xcc3e, 0xcc3d, - 0xcc3d, 0xcc3d, 0xcc3d, 0xcc3c, 0xcc3c, 0xcc3c, 0xcc3c, 0xcc3b, - 0xcc3b, 0xcc3b, 0xcc3a, 0xcc3a, 0xcc3a, 0xcc3a, 0xcc39, 0xcc39, - 0xcc39, 0xcc39, 0xcc38, 0xcc38, 0xcc38, 0xcc38, 0xcc37, 0xcc37, - 0xcc37, 0xcc37, 0xcc36, 0xcc36, 0xcc36, 0xcc36, 0xcc35, 0xcc35, - 0xcc35, 0xcc35, 0xcc34, 0xcc34, 0xcc34, 0xcc34, 0xcc33, 0xcc33, - 0xcc33, 0xcc33, 0xcc32, 0xcc32, 0xcc32, 0xcc31, 0xcc31, 0xcc31, - 0xcc31, 0xcc30, 0xcc30, 0xcc30, 0xcc30, 0xcc2f, 0xcc2f, 0xcc2f, - 0xcc2f, 0xcc2e, 0xcc2e, 0xcc2e, 0xcc2e, 0xcc2d, 0xcc2d, 0xcc2d, - 0xcc2d, 0xcc2c, 0xcc2c, 0xcc2c, 0xcc2c, 0xcc2b, 0xcc2b, 0xcc2b, - 0xcc2b, 0xcc2a, 0xcc2a, 0xcc2a, 0xcc2a, 0xcc29, 0xcc29, 0xcc29, - 0xcc29, 0xcc28, 0xcc28, 0xcc27, 0xcc27, 0xcc26, 0xcc26, 0xcc25, - 0xcc25, 0xcc24, 0xcc24, 0xcc23, 0xcc23, 0xcc22, 0xcc22, 0xcc21, - 0xcc21, 0xcc20, 0xcc20, 0xcc1f, 0xcc1f, 0xcc1e, 0xcc1e, 0xcc1d, - 0xcc1d, 0xcc1c, 0xcc1c, 0xcc1b, 0xcc1b, 0xcc1a, 0xcc1a, 0xcc19, - 0xcc19, 0xcc18, 0xcc18, 0xcc17, 0xcc17, 0xcc17, 0xcc16, 0xcc16, - 0xcc15, 0xcc15, 0xcc14, 0xcc14, 0xcc13, 0xcc13, 0xcc12, 0xcc12, - 0xcc11, 0xcc11, 0xcc10, 0xcc10, 0xcc0f, 0xcc0f, 0xcc0e, 0xcc0e, - 0xcc0d, 0xcc0d, 0xcc0c, 0xcc0c, 0xcc0c, 0xcc0b, 0xcc0b, 0xcc0a, - 0xcc0a, 0xcc09, 0xcc09, 0xcc08, 0xcc08, 0xcc07, 0xcc07, 0xcc06, - 0xcc06, 0xcc05, 0xcc05, 0xcc04, 0xcc04, 0xcc04, 0xcc03, 0xcc03, - 0xcc02, 0xcc02, 0xcc01, 0xcc01, 0xcc00, 0xcc00, 0xcbff, 0xcbfe, - 0xcbfd, 0xcbfc, 0xcbfb, 0xcbfa, 0xcbf9, 0xcbf8, 0xcbf7, 0xcbf6, - 0xcbf6, 0xcbf5, 0xcbf4, 0xcbf3, 0xcbf2, 0xcbf1, 0xcbf0, 0xcbef, - 0xcbee, 0xcbed, 0xcbec, 0xcbec, 0xcbeb, 0xcbea, 0xcbe9, 0xcbe8, - 0xcbe7, 0xcbe6, 0xcbe5, 0xcbe4, 0xcbe3, 0xcbe3, 0xcbe2, 0xcbe1, - 0xcbe0, 0xcbdf, 0xcbde, 0xcbdd, 0xcbdc, 0xcbdb, 0xcbdb, 0xcbda, - 0xcbd9, 0xcbd8, 0xcbd7, 0xcbd6, 0xcbd5, 0xcbd4, 0xcbd3, 0xcbd3, - 0xcbd2, 0xcbd1, 0xcbd0, 0xcbcf, 0xcbce, 0xcbcd, 0xcbcc, 0xcbcb, - 0xcbcb, 0xcbca, 0xcbc9, 0xcbc8, 0xcbc7, 0xcbc6, 0xcbc5, 0xcbc4, - 0xcbc4, 0xcbc3, 0xcbc2, 0xcbc1, 0xcbc0, 0xcbbf, 0xcbbe, 0xcbbe, - 0xcbbd, 0xcbbc, 0xcbbb, 0xcbba, 0xcbb9, 0xcbb8, 0xcbb8, 0xcbb7, - 0xcbb6, 0xcbb5, 0xcbb4, 0xcbb3, 0xcbb2, 0xcbb1, 0xcbb1, 0xcbb0, - 0xcbaf, 0xcbae, 0xcbad, 0xcbac, 0xcbac, 0xcbab, 0xcbaa, 0xcba9, - 0xcba8, 0xcba7, 0xcba6, 0xcba6, 0xcba5, 0xcba4, 0xcba3, 0xcba2, - 0xcba1, 0xcba1, 0xcba0, 0xcb9f, 0xcb9e, 0xcb9d, 0xcb9c, 0xcb9b, - 0xcb9b, 0xcb9a, 0xcb99, 0xcb98, 0xcb97, 0xcb96, 0xcb96, 0xcb95, - 0xcb94, 0xcb93, 0xcb92, 0xcb91, 0xcb91, 0xcb90, 0xcb8f, 0xcb8e, - 0xcb8d, 0xcb8d, 0xcb8c, 0xcb8b, 0xcb8a, 0xcb89, 0xcb88, 0xcb88, - 0xcb87, 0xcb86, 0xcb85, 0xcb84, 0xcb83, 0xcb83, 0xcb82, 0xcb81, - 0xcb80, 0xcb7f, 0xcb7f, 0xcb7e, 0xcb7d, 0xcb7c, 0xcb7b, 0xcb7b, - 0xcb7a, 0xcb79, 0xcb78, 0xcb77, 0xcb76, 0xcb76, 0xcb75, 0xcb74, - 0xcb73, 0xcb72, 0xcb72, 0xcb71, 0xcb70, 0xcb6f, 0xcb6e, 0xcb6e, - 0xcb6d, 0xcb6c, 0xcb6b, 0xcb6a, 0xcb6a, 0xcb69, 0xcb68, 0xcb67, - 0xcb66, 0xcb66, 0xcb65, 0xcb64, 0xcb63, 0xcb63, 0xcb62, 0xcb61, - 0xcb60, 0xcb5f, 0xcb5f, 0xcb5e, 0xcb5d, 0xcb5c, 0xcb5b, 0xcb5b, - 0xcb5a, 0xcb59, 0xcb58, 0xcb57, 0xcb57, 0xcb56, 0xcb55, 0xcb54, - 0xcb54, 0xcb53, 0xcb52, 0xcb51, 0xcb50, 0xcb50, 0xcb4f, 0xcb4e, - 0xcb4d, 0xcb4d, 0xcb4c, 0xcb4b, 0xcb4a, 0xcb49, 0xcb49, 0xcb48, - 0xcb47, 0xcb46, 0xcb46, 0xcb45, 0xcb44, 0xcb43, 0xcb43, 0xcb42, - 0xcb41, 0xcb40, 0xcb3f, 0xcb3f, 0xcb3e, 0xcb3d, 0xcb3c, 0xcb3c, - 0xcb3b, 0xcb3a, 0xcb39, 0xcb39, 0xcb38, 0xcb37, 0xcb36, 0xcb36, - 0xcb35, 0xcb34, 0xcb33, 0xcb33, 0xcb32, 0xcb31, 0xcb30, 0xcb30, - 0xcb2f, 0xcb2e, 0xcb2d, 0xcb2d, 0xcb2c, 0xcb2b, 0xcb2a, 0xcb2a, - 0xcb29, 0xcb28, 0xcb27, 0xcb27, 0xcb26, 0xcb25, 0xcb24, 0xcb24, - 0xcb23, 0xcb22, 0xcb21, 0xcb21, 0xcb20, 0xcb1f, 0xcb1e, 0xcb1e, - 0xcb1d, 0xcb1c, 0xcb1b, 0xcb1b, 0xcb1a, 0xcb19, 0xcb18, 0xcb18, - 0xcb17, 0xcb16, 0xcb15, 0xcb15, 0xcb14, 0xcb13, 0xcb13, 0xcb12, - 0xcb11, 0xcb10, 0xcb10, 0xcb0f, 0xcb0e, 0xcb0d, 0xcb0d, 0xcb0c, - 0xcb0b, 0xcb0b, 0xcb0a, 0xcb09, 0xcb08, 0xcb08, 0xcb07, 0xcb06, - 0xcb05, 0xcb05, 0xcb04, 0xcb03, 0xcb03, 0xcb02, 0xcb01, 0xcb00, - 0xcb00, 0xcaff, 0xcafe, 0xcafe, 0xcafd, 0xcafc, 0xcafb, 0xcafb, - 0xcafa, 0xcaf9, 0xcaf9, 0xcaf8, 0xcaf7, 0xcaf6, 0xcaf6, 0xcaf5, - 0xcaf4, 0xcaf4, 0xcaf3, 0xcaf2, 0xcaf1, 0xcaf1, 0xcaf0, 0xcaef, - 0xcaef, 0xcaee, 0xcaed, 0xcaec, 0xcaec, 0xcaeb, 0xcaea, 0xcaea, - 0xcae9, 0xcae8, 0xcae8, 0xcae7, 0xcae6, 0xcae5, 0xcae5, 0xcae4, - 0xcae3, 0xcae3, 0xcae2, 0xcae1, 0xcae1, 0xcae0, 0xcadf, 0xcade, - 0xcade, 0xcadd, 0xcadc, 0xcadc, 0xcadb, 0xcada, 0xcada, 0xcad9, - 0xcad8, 0xcad7, 0xcad7, 0xcad6, 0xcad5, 0xcad5, 0xcad4, 0xcad3, - 0xcad3, 0xcad2, 0xcad1, 0xcad1, 0xcad0, 0xcacf, 0xcacf, 0xcace, - 0xcacd, 0xcacc, 0xcacc, 0xcacb, 0xcaca, 0xcaca, 0xcac9, 0xcac8, - 0xcac8, 0xcac7, 0xcac6, 0xcac6, 0xcac5, 0xcac4, 0xcac4, 0xcac3, - 0xcac2, 0xcac2, 0xcac1, 0xcac0, 0xcac0, 0xcabf, 0xcabe, 0xcabe, - 0xcabd, 0xcabc, 0xcabc, 0xcabb, 0xcaba, 0xcaba, 0xcab9, 0xcab8, - 0xcab7, 0xcab7, 0xcab6, 0xcab5, 0xcab5, 0xcab4, 0xcab3, 0xcab3, - 0xcab2, 0xcab1, 0xcab1, 0xcab0, 0xcaaf, 0xcaaf, 0xcaae, 0xcaad, - 0xcaad, 0xcaac, 0xcaac, 0xcaab, 0xcaaa, 0xcaaa, 0xcaa9, 0xcaa8, - 0xcaa8, 0xcaa7, 0xcaa6, 0xcaa6, 0xcaa5, 0xcaa4, 0xcaa4, 0xcaa3, - 0xcaa2, 0xcaa2, 0xcaa1, 0xcaa0, 0xcaa0, 0xca9f, 0xca9e, 0xca9e, - 0xca9d, 0xca9c, 0xca9c, 0xca9b, 0xca9a, 0xca9a, 0xca99, 0xca98, - 0xca98, 0xca97, 0xca97, 0xca96, 0xca95, 0xca95, 0xca94, 0xca93, - 0xca93, 0xca92, 0xca91, 0xca91, 0xca90, 0xca8f, 0xca8f, 0xca8e, - 0xca8d, 0xca8d, 0xca8c, 0xca8c, 0xca8b, 0xca8a, 0xca8a, 0xca89, - 0xca88, 0xca88, 0xca87, 0xca86, 0xca86, 0xca85, 0xca85, 0xca84, - 0xca83, 0xca83, 0xca82, 0xca81, 0xca81, 0xca80, 0xca7f, 0xca7f, - 0xca7e, 0xca7e, 0xca7d, 0xca7c, 0xca7c, 0xca7b, 0xca7a, 0xca7a, - 0xca79, 0xca78, 0xca78, 0xca77, 0xca77, 0xca76, 0xca75, 0xca75, - 0xca74, 0xca73, 0xca73, 0xca72, 0xca72, 0xca71, 0xca70, 0xca70, - 0xca6f, 0xca6e, 0xca6e, 0xca6d, 0xca6d, 0xca6c, 0xca6b, 0xca6b, - 0xca6a, 0xca69, 0xca69, 0xca68, 0xca68, 0xca67, 0xca66, 0xca66, - 0xca65, 0xca65, 0xca64, 0xca63, 0xca63, 0xca62, 0xca61, 0xca61, - 0xca60, 0xca60, 0xca5f, 0xca5e, 0xca5e, 0xca5d, 0xca5d, 0xca5c, - 0xca5b, 0xca5b, 0xca5a, 0xca59, 0xca59, 0xca58, 0xca58, 0xca57, - 0xca56, 0xca56, 0xca55, 0xca55, 0xca54, 0xca53, 0xca53, 0xca52, - 0xca52, 0xca51, 0xca50, 0xca50, 0xca4f, 0xca4e, 0xca4e, 0xca4d, - 0xca4d, 0xca4c, 0xca4b, 0xca4b, 0xca4a, 0xca4a, 0xca49, 0xca48, - 0xca48, 0xca47, 0xca47, 0xca46, 0xca45, 0xca45, 0xca44, 0xca44, - 0xca43, 0xca42, 0xca42, 0xca41, 0xca41, 0xca40, 0xca3f, 0xca3f, - 0xca3e, 0xca3e, 0xca3d, 0xca3d, 0xca3c, 0xca3b, 0xca3b, 0xca3a, - 0xca3a, 0xca39, 0xca38, 0xca38, 0xca37, 0xca37, 0xca36, 0xca35, - 0xca35, 0xca34, 0xca34, 0xca33, 0xca32, 0xca32, 0xca31, 0xca31, - 0xca30, 0xca30, 0xca2f, 0xca2e, 0xca2e, 0xca2d, 0xca2d, 0xca2c, - 0xca2b, 0xca2b, 0xca2a, 0xca2a, 0xca29, 0xca28, 0xca28, 0xca27, - 0xca27, 0xca26, 0xca26, 0xca25, 0xca24, 0xca24, 0xca23, 0xca23, - 0xca22, 0xca22, 0xca21, 0xca20, 0xca20, 0xca1f, 0xca1f, 0xca1e, - 0xca1d, 0xca1d, 0xca1c, 0xca1c, 0xca1b, 0xca1b, 0xca1a, 0xca19, - 0xca19, 0xca18, 0xca18, 0xca17, 0xca17, 0xca16, 0xca15, 0xca15, - 0xca14, 0xca14, 0xca13, 0xca13, 0xca12, 0xca11, 0xca11, 0xca10, - 0xca10, 0xca0f, 0xca0f, 0xca0e, 0xca0d, 0xca0d, 0xca0c, 0xca0c, - 0xca0b, 0xca0b, 0xca0a, 0xca0a, 0xca09, 0xca08, 0xca08, 0xca07, - 0xca07, 0xca06, 0xca06, 0xca05, 0xca04, 0xca04, 0xca03, 0xca03, - 0xca02, 0xca02, 0xca01, 0xca00, 0xca00, 0xc9ff, 0xc9ff, 0xc9fe, - 0xc9fe, 0xc9fd, 0xc9fd, 0xc9fc, 0xc9fb, 0xc9fb, 0xc9fa, 0xc9fa, - 0xc9f9, 0xc9f9, 0xc9f8, 0xc9f8, 0xc9f7, 0xc9f6, 0xc9f6, 0xc9f5, - 0xc9f5, 0xc9f4, 0xc9f4, 0xc9f3, 0xc9f3, 0xc9f2, 0xc9f1, 0xc9f1, - 0xc9f0, 0xc9f0, 0xc9ef, 0xc9ef, 0xc9ee, 0xc9ee, 0xc9ed, 0xc9ed, - 0xc9ec, 0xc9eb, 0xc9eb, 0xc9ea, 0xc9ea, 0xc9e9, 0xc9e9, 0xc9e8, - 0xc9e8, 0xc9e7, 0xc9e6, 0xc9e6, 0xc9e5, 0xc9e5, 0xc9e4, 0xc9e4, - 0xc9e3, 0xc9e3, 0xc9e2, 0xc9e2, 0xc9e1, 0xc9e0, 0xc9e0, 0xc9df, - 0xc9df, 0xc9de, 0xc9de, 0xc9dd, 0xc9dd, 0xc9dc, 0xc9dc, 0xc9db, - 0xc9db, 0xc9da, 0xc9d9, 0xc9d9, 0xc9d8, 0xc9d8, 0xc9d7, 0xc9d7, - 0xc9d6, 0xc9d6, 0xc9d5, 0xc9d5, 0xc9d4, 0xc9d4, 0xc9d3, 0xc9d2, - 0xc9d2, 0xc9d1, 0xc9d1, 0xc9d0, 0xc9d0, 0xc9cf, 0xc9cf, 0xc9ce, - 0xc9ce, 0xc9cd, 0xc9cd, 0xc9cc, 0xc9cc, 0xc9cb, 0xc9ca, 0xc9ca, - 0xc9c9, 0xc9c9, 0xc9c8, 0xc9c8, 0xc9c7, 0xc9c7, 0xc9c6, 0xc9c6, - 0xc9c5, 0xc9c5, 0xc9c4, 0xc9c4, 0xc9c3, 0xc9c3, 0xc9c2, 0xc9c1, - 0xc9c1, 0xc9c0, 0xc9c0, 0xc9bf, 0xc9bf, 0xc9be, 0xc9be, 0xc9bd, - 0xc9bd, 0xc9bc, 0xc9bc, 0xc9bb, 0xc9bb, 0xc9ba, 0xc9ba, 0xc9b9, - 0xc9b9, 0xc9b8, 0xc9b7, 0xc9b7, 0xc9b6, 0xc9b6, 0xc9b5, 0xc9b5, - 0xc9b4, 0xc9b4, 0xc9b3, 0xc9b3, 0xc9b2, 0xc9b2, 0xc9b1, 0xc9b1, - 0xc9b0, 0xc9b0, 0xc9af, 0xc9af, 0xc9ae, 0xc9ae, 0xc9ad, 0xc9ad, - 0xc9ac, 0xc9ac, 0xc9ab, 0xc9ab, 0xc9aa, 0xc9a9, 0xc9a9, 0xc9a8, - 0xc9a8, 0xc9a7, 0xc9a7, 0xc9a6, 0xc9a6, 0xc9a5, 0xc9a5, 0xc9a4, - 0xc9a4, 0xc9a3, 0xc9a3, 0xc9a2, 0xc9a2, 0xc9a1, 0xc9a1, 0xc9a0, - 0xc9a0, 0xc99f, 0xc99f, 0xc99e, 0xc99e, 0xc99d, 0xc99d, 0xc99c, - 0xc99c, 0xc99b, 0xc99b, 0xc99a, 0xc99a, 0xc999, 0xc999, 0xc998, - 0xc998, 0xc997, 0xc997, 0xc996, 0xc996, 0xc995, 0xc995, 0xc994, - 0xc994, 0xc993, 0xc993, 0xc992, 0xc992, 0xc991, 0xc991, 0xc990, - 0xc990, 0xc98f, 0xc98f, 0xc98e, 0xc98e, 0xc98d, 0xc98d, 0xc98c, - 0xc98c, 0xc98b, 0xc98a, 0xc989, 0xc988, 0xc987, 0xc986, 0xc985, - 0xc984, 0xc983, 0xc982, 0xc981, 0xc980, 0xc97f, 0xc97e, 0xc97d, - 0xc97c, 0xc97b, 0xc97a, 0xc979, 0xc978, 0xc977, 0xc976, 0xc975, - 0xc974, 0xc973, 0xc972, 0xc971, 0xc970, 0xc96f, 0xc96e, 0xc96d, - 0xc96c, 0xc96b, 0xc96a, 0xc969, 0xc968, 0xc967, 0xc966, 0xc965, - 0xc964, 0xc963, 0xc962, 0xc961, 0xc960, 0xc960, 0xc95f, 0xc95e, - 0xc95d, 0xc95c, 0xc95b, 0xc95a, 0xc959, 0xc958, 0xc957, 0xc956, - 0xc955, 0xc954, 0xc953, 0xc952, 0xc951, 0xc950, 0xc94f, 0xc94e, - 0xc94d, 0xc94d, 0xc94c, 0xc94b, 0xc94a, 0xc949, 0xc948, 0xc947, - 0xc946, 0xc945, 0xc944, 0xc943, 0xc942, 0xc941, 0xc940, 0xc93f, - 0xc93f, 0xc93e, 0xc93d, 0xc93c, 0xc93b, 0xc93a, 0xc939, 0xc938, - 0xc937, 0xc936, 0xc935, 0xc934, 0xc933, 0xc933, 0xc932, 0xc931, - 0xc930, 0xc92f, 0xc92e, 0xc92d, 0xc92c, 0xc92b, 0xc92a, 0xc929, - 0xc929, 0xc928, 0xc927, 0xc926, 0xc925, 0xc924, 0xc923, 0xc922, - 0xc921, 0xc920, 0xc91f, 0xc91f, 0xc91e, 0xc91d, 0xc91c, 0xc91b, - 0xc91a, 0xc919, 0xc918, 0xc917, 0xc917, 0xc916, 0xc915, 0xc914, - 0xc913, 0xc912, 0xc911, 0xc910, 0xc90f, 0xc90f, 0xc90e, 0xc90d, - 0xc90c, 0xc90b, 0xc90a, 0xc909, 0xc908, 0xc907, 0xc907, 0xc906, - 0xc905, 0xc904, 0xc903, 0xc902, 0xc901, 0xc900, 0xc900, 0xc8ff, - 0xc8fe, 0xc8fd, 0xc8fc, 0xc8fb, 0xc8fa, 0xc8f9, 0xc8f9, 0xc8f8, - 0xc8f7, 0xc8f6, 0xc8f5, 0xc8f4, 0xc8f3, 0xc8f3, 0xc8f2, 0xc8f1, - 0xc8f0, 0xc8ef, 0xc8ee, 0xc8ed, 0xc8ed, 0xc8ec, 0xc8eb, 0xc8ea, - 0xc8e9, 0xc8e8, 0xc8e7, 0xc8e7, 0xc8e6, 0xc8e5, 0xc8e4, 0xc8e3, - 0xc8e2, 0xc8e2, 0xc8e1, 0xc8e0, 0xc8df, 0xc8de, 0xc8dd, 0xc8dc, - 0xc8dc, 0xc8db, 0xc8da, 0xc8d9, 0xc8d8, 0xc8d7, 0xc8d7, 0xc8d6, - 0xc8d5, 0xc8d4, 0xc8d3, 0xc8d2, 0xc8d2, 0xc8d1, 0xc8d0, 0xc8cf, - 0xc8ce, 0xc8cd, 0xc8cd, 0xc8cc, 0xc8cb, 0xc8ca, 0xc8c9, 0xc8c8, - 0xc8c8, 0xc8c7, 0xc8c6, 0xc8c5, 0xc8c4, 0xc8c3, 0xc8c3, 0xc8c2, - 0xc8c1, 0xc8c0, 0xc8bf, 0xc8bf, 0xc8be, 0xc8bd, 0xc8bc, 0xc8bb, - 0xc8ba, 0xc8ba, 0xc8b9, 0xc8b8, 0xc8b7, 0xc8b6, 0xc8b6, 0xc8b5, - 0xc8b4, 0xc8b3, 0xc8b2, 0xc8b2, 0xc8b1, 0xc8b0, 0xc8af, 0xc8ae, - 0xc8ad, 0xc8ad, 0xc8ac, 0xc8ab, 0xc8aa, 0xc8a9, 0xc8a9, 0xc8a8, - 0xc8a7, 0xc8a6, 0xc8a5, 0xc8a5, 0xc8a4, 0xc8a3, 0xc8a2, 0xc8a1, - 0xc8a1, 0xc8a0, 0xc89f, 0xc89e, 0xc89e, 0xc89d, 0xc89c, 0xc89b, - 0xc89a, 0xc89a, 0xc899, 0xc898, 0xc897, 0xc896, 0xc896, 0xc895, - 0xc894, 0xc893, 0xc892, 0xc892, 0xc891, 0xc890, 0xc88f, 0xc88f, - 0xc88e, 0xc88d, 0xc88c, 0xc88b, 0xc88b, 0xc88a, 0xc889, 0xc888, - 0xc888, 0xc887, 0xc886, 0xc885, 0xc884, 0xc884, 0xc883, 0xc882, - 0xc881, 0xc881, 0xc880, 0xc87f, 0xc87e, 0xc87e, 0xc87d, 0xc87c, - 0xc87b, 0xc87a, 0xc87a, 0xc879, 0xc878, 0xc877, 0xc877, 0xc876, - 0xc875, 0xc874, 0xc874, 0xc873, 0xc872, 0xc871, 0xc871, 0xc870, - 0xc86f, 0xc86e, 0xc86e, 0xc86d, 0xc86c, 0xc86b, 0xc86a, 0xc86a, - 0xc869, 0xc868, 0xc867, 0xc867, 0xc866, 0xc865, 0xc864, 0xc864, - 0xc863, 0xc862, 0xc861, 0xc861, 0xc860, 0xc85f, 0xc85e, 0xc85e, - 0xc85d, 0xc85c, 0xc85c, 0xc85b, 0xc85a, 0xc859, 0xc859, 0xc858, - 0xc857, 0xc856, 0xc856, 0xc855, 0xc854, 0xc853, 0xc853, 0xc852, - 0xc851, 0xc850, 0xc850, 0xc84f, 0xc84e, 0xc84e, 0xc84d, 0xc84c, - 0xc84b, 0xc84b, 0xc84a, 0xc849, 0xc848, 0xc848, 0xc847, 0xc846, - 0xc845, 0xc845, 0xc844, 0xc843, 0xc843, 0xc842, 0xc841, 0xc840, - 0xc840, 0xc83f, 0xc83e, 0xc83d, 0xc83d, 0xc83c, 0xc83b, 0xc83b, - 0xc83a, 0xc839, 0xc838, 0xc838, 0xc837, 0xc836, 0xc836, 0xc835, - 0xc834, 0xc833, 0xc833, 0xc832, 0xc831, 0xc831, 0xc830, 0xc82f, - 0xc82e, 0xc82e, 0xc82d, 0xc82c, 0xc82c, 0xc82b, 0xc82a, 0xc829, - 0xc829, 0xc828, 0xc827, 0xc827, 0xc826, 0xc825, 0xc825, 0xc824, - 0xc823, 0xc822, 0xc822, 0xc821, 0xc820, 0xc820, 0xc81f, 0xc81e, - 0xc81e, 0xc81d, 0xc81c, 0xc81b, 0xc81b, 0xc81a, 0xc819, 0xc819, - 0xc818, 0xc817, 0xc817, 0xc816, 0xc815, 0xc814, 0xc814, 0xc813, - 0xc812, 0xc812, 0xc811, 0xc810, 0xc810, 0xc80f, 0xc80e, 0xc80e, - 0xc80d, 0xc80c, 0xc80c, 0xc80b, 0xc80a, 0xc809, 0xc809, 0xc808, - 0xc807, 0xc807, 0xc806, 0xc805, 0xc805, 0xc804, 0xc803, 0xc803, - 0xc802, 0xc801, 0xc801, 0xc800, 0xc7fe, 0xc7fd, 0xc7fc, 0xc7fa, - 0xc7f9, 0xc7f8, 0xc7f6, 0xc7f5, 0xc7f4, 0xc7f2, 0xc7f1, 0xc7f0, - 0xc7ee, 0xc7ed, 0xc7eb, 0xc7ea, 0xc7e9, 0xc7e7, 0xc7e6, 0xc7e5, - 0xc7e3, 0xc7e2, 0xc7e1, 0xc7df, 0xc7de, 0xc7dd, 0xc7db, 0xc7da, - 0xc7d9, 0xc7d7, 0xc7d6, 0xc7d5, 0xc7d3, 0xc7d2, 0xc7d1, 0xc7cf, - 0xc7ce, 0xc7cd, 0xc7cb, 0xc7ca, 0xc7c9, 0xc7c7, 0xc7c6, 0xc7c5, - 0xc7c4, 0xc7c2, 0xc7c1, 0xc7c0, 0xc7be, 0xc7bd, 0xc7bc, 0xc7ba, - 0xc7b9, 0xc7b8, 0xc7b6, 0xc7b5, 0xc7b4, 0xc7b2, 0xc7b1, 0xc7b0, - 0xc7af, 0xc7ad, 0xc7ac, 0xc7ab, 0xc7a9, 0xc7a8, 0xc7a7, 0xc7a5, - 0xc7a4, 0xc7a3, 0xc7a1, 0xc7a0, 0xc79f, 0xc79e, 0xc79c, 0xc79b, - 0xc79a, 0xc798, 0xc797, 0xc796, 0xc795, 0xc793, 0xc792, 0xc791, - 0xc78f, 0xc78e, 0xc78d, 0xc78c, 0xc78a, 0xc789, 0xc788, 0xc786, - 0xc785, 0xc784, 0xc783, 0xc781, 0xc780, 0xc77f, 0xc77d, 0xc77c, - 0xc77b, 0xc77a, 0xc778, 0xc777, 0xc776, 0xc775, 0xc773, 0xc772, - 0xc771, 0xc76f, 0xc76e, 0xc76d, 0xc76c, 0xc76a, 0xc769, 0xc768, - 0xc767, 0xc765, 0xc764, 0xc763, 0xc762, 0xc760, 0xc75f, 0xc75e, - 0xc75d, 0xc75b, 0xc75a, 0xc759, 0xc758, 0xc756, 0xc755, 0xc754, - 0xc753, 0xc751, 0xc750, 0xc74f, 0xc74e, 0xc74c, 0xc74b, 0xc74a, - 0xc749, 0xc747, 0xc746, 0xc745, 0xc744, 0xc742, 0xc741, 0xc740, - 0xc73f, 0xc73d, 0xc73c, 0xc73b, 0xc73a, 0xc739, 0xc737, 0xc736, - 0xc735, 0xc734, 0xc732, 0xc731, 0xc730, 0xc72f, 0xc72d, 0xc72c, - 0xc72b, 0xc72a, 0xc729, 0xc727, 0xc726, 0xc725, 0xc724, 0xc722, - 0xc721, 0xc720, 0xc71f, 0xc71e, 0xc71c, 0xc71b, 0xc71a, 0xc719, - 0xc717, 0xc716, 0xc715, 0xc714, 0xc713, 0xc711, 0xc710, 0xc70f, - 0xc70e, 0xc70d, 0xc70b, 0xc70a, 0xc709, 0xc708, 0xc707, 0xc705, - 0xc704, 0xc703, 0xc702, 0xc701, 0xc6ff, 0xc6fe, 0xc6fd, 0xc6fc, - 0xc6fb, 0xc6f9, 0xc6f8, 0xc6f7, 0xc6f6, 0xc6f5, 0xc6f3, 0xc6f2, - 0xc6f1, 0xc6f0, 0xc6ef, 0xc6ed, 0xc6ec, 0xc6eb, 0xc6ea, 0xc6e9, - 0xc6e8, 0xc6e6, 0xc6e5, 0xc6e4, 0xc6e3, 0xc6e2, 0xc6e0, 0xc6df, - 0xc6de, 0xc6dd, 0xc6dc, 0xc6db, 0xc6d9, 0xc6d8, 0xc6d7, 0xc6d6, - 0xc6d5, 0xc6d3, 0xc6d2, 0xc6d1, 0xc6d0, 0xc6cf, 0xc6ce, 0xc6cc, - 0xc6cb, 0xc6ca, 0xc6c9, 0xc6c8, 0xc6c7, 0xc6c5, 0xc6c4, 0xc6c3, - 0xc6c2, 0xc6c1, 0xc6c0, 0xc6be, 0xc6bd, 0xc6bc, 0xc6bb, 0xc6ba, - 0xc6b9, 0xc6b7, 0xc6b6, 0xc6b5, 0xc6b4, 0xc6b3, 0xc6b2, 0xc6b1, - 0xc6af, 0xc6ae, 0xc6ad, 0xc6ac, 0xc6ab, 0xc6aa, 0xc6a8, 0xc6a7, - 0xc6a6, 0xc6a5, 0xc6a4, 0xc6a3, 0xc6a2, 0xc6a0, 0xc69f, 0xc69e, - 0xc69d, 0xc69c, 0xc69b, 0xc69a, 0xc698, 0xc697, 0xc696, 0xc695, - 0xc694, 0xc693, 0xc692, 0xc691, 0xc68f, 0xc68e, 0xc68d, 0xc68c, - 0xc68b, 0xc68a, 0xc689, 0xc687, 0xc686, 0xc685, 0xc684, 0xc683, - 0xc682, 0xc681, 0xc680, 0xc67e, 0xc67d, 0xc67c, 0xc67b, 0xc67a, - 0xc679, 0xc678, 0xc677, 0xc675, 0xc674, 0xc673, 0xc672, 0xc671, - 0xc670, 0xc66f, 0xc66e, 0xc66c, 0xc66b, 0xc66a, 0xc669, 0xc668, - 0xc667, 0xc666, 0xc665, 0xc664, 0xc662, 0xc661, 0xc660, 0xc65f, - 0xc65e, 0xc65d, 0xc65c, 0xc65b, 0xc65a, 0xc658, 0xc657, 0xc656, - 0xc655, 0xc654, 0xc653, 0xc652, 0xc651, 0xc650, 0xc64f, 0xc64d, - 0xc64c, 0xc64b, 0xc64a, 0xc649, 0xc648, 0xc647, 0xc646, 0xc645, - 0xc644, 0xc642, 0xc641, 0xc640, 0xc63f, 0xc63e, 0xc63d, 0xc63c, - 0xc63b, 0xc63a, 0xc639, 0xc638, 0xc637, 0xc635, 0xc634, 0xc633, - 0xc632, 0xc631, 0xc630, 0xc62f, 0xc62e, 0xc62d, 0xc62c, 0xc62b, - 0xc62a, 0xc628, 0xc627, 0xc626, 0xc625, 0xc624, 0xc623, 0xc622, - 0xc621, 0xc620, 0xc61f, 0xc61e, 0xc61d, 0xc61c, 0xc61a, 0xc619, - 0xc618, 0xc617, 0xc616, 0xc615, 0xc614, 0xc613, 0xc612, 0xc611, - 0xc610, 0xc60f, 0xc60e, 0xc60d, 0xc60b, 0xc60a, 0xc609, 0xc608, - 0xc607, 0xc606, 0xc605, 0xc604, 0xc603, 0xc602, 0xc601, 0xc600, - 0xc5ff, 0xc5fe, 0xc5fd, 0xc5fc, 0xc5fb, 0xc5f9, 0xc5f8, 0xc5f7, - 0xc5f6, 0xc5f5, 0xc5f4, 0xc5f3, 0xc5f2, 0xc5f1, 0xc5f0, 0xc5ef, - 0xc5ee, 0xc5ed, 0xc5ec, 0xc5eb, 0xc5ea, 0xc5e9, 0xc5e8, 0xc5e7, - 0xc5e6, 0xc5e4, 0xc5e3, 0xc5e2, 0xc5e1, 0xc5e0, 0xc5df, 0xc5de, - 0xc5dd, 0xc5dc, 0xc5db, 0xc5da, 0xc5d9, 0xc5d8, 0xc5d7, 0xc5d6, - 0xc5d5, 0xc5d4, 0xc5d3, 0xc5d2, 0xc5d1, 0xc5d0, 0xc5cf, 0xc5ce, - 0xc5cd, 0xc5cc, 0xc5cb, 0xc5c9, 0xc5c8, 0xc5c7, 0xc5c6, 0xc5c5, - 0xc5c4, 0xc5c3, 0xc5c2, 0xc5c1, 0xc5c0, 0xc5bf, 0xc5be, 0xc5bd, - 0xc5bc, 0xc5bb, 0xc5ba, 0xc5b9, 0xc5b8, 0xc5b7, 0xc5b6, 0xc5b5, - 0xc5b4, 0xc5b3, 0xc5b2, 0xc5b1, 0xc5b0, 0xc5af, 0xc5ae, 0xc5ad, - 0xc5ac, 0xc5ab, 0xc5aa, 0xc5a9, 0xc5a8, 0xc5a7, 0xc5a6, 0xc5a5, - 0xc5a4, 0xc5a3, 0xc5a2, 0xc5a1, 0xc5a0, 0xc59f, 0xc59e, 0xc59d, - 0xc59c, 0xc59b, 0xc59a, 0xc599, 0xc598, 0xc597, 0xc596, 0xc595, - 0xc594, 0xc593, 0xc592, 0xc591, 0xc590, 0xc58f, 0xc58e, 0xc58d, - 0xc58c, 0xc58a, 0xc588, 0xc586, 0xc584, 0xc582, 0xc580, 0xc57e, - 0xc57c, 0xc57a, 0xc578, 0xc576, 0xc574, 0xc572, 0xc570, 0xc56e, - 0xc56c, 0xc56a, 0xc568, 0xc566, 0xc564, 0xc562, 0xc560, 0xc55e, - 0xc55c, 0xc55a, 0xc558, 0xc556, 0xc554, 0xc552, 0xc550, 0xc54e, - 0xc54d, 0xc54b, 0xc549, 0xc547, 0xc545, 0xc543, 0xc541, 0xc53f, - 0xc53d, 0xc53b, 0xc539, 0xc537, 0xc535, 0xc533, 0xc532, 0xc530, - 0xc52e, 0xc52c, 0xc52a, 0xc528, 0xc526, 0xc524, 0xc522, 0xc520, - 0xc51f, 0xc51d, 0xc51b, 0xc519, 0xc517, 0xc515, 0xc513, 0xc511, - 0xc50f, 0xc50e, 0xc50c, 0xc50a, 0xc508, 0xc506, 0xc504, 0xc502, - 0xc500, 0xc4ff, 0xc4fd, 0xc4fb, 0xc4f9, 0xc4f7, 0xc4f5, 0xc4f3, - 0xc4f2, 0xc4f0, 0xc4ee, 0xc4ec, 0xc4ea, 0xc4e8, 0xc4e6, 0xc4e5, - 0xc4e3, 0xc4e1, 0xc4df, 0xc4dd, 0xc4db, 0xc4da, 0xc4d8, 0xc4d6, - 0xc4d4, 0xc4d2, 0xc4d0, 0xc4cf, 0xc4cd, 0xc4cb, 0xc4c9, 0xc4c7, - 0xc4c5, 0xc4c4, 0xc4c2, 0xc4c0, 0xc4be, 0xc4bc, 0xc4bb, 0xc4b9, - 0xc4b7, 0xc4b5, 0xc4b3, 0xc4b2, 0xc4b0, 0xc4ae, 0xc4ac, 0xc4aa, - 0xc4a9, 0xc4a7, 0xc4a5, 0xc4a3, 0xc4a1, 0xc4a0, 0xc49e, 0xc49c, - 0xc49a, 0xc499, 0xc497, 0xc495, 0xc493, 0xc491, 0xc490, 0xc48e, - 0xc48c, 0xc48a, 0xc489, 0xc487, 0xc485, 0xc483, 0xc482, 0xc480, - 0xc47e, 0xc47c, 0xc47b, 0xc479, 0xc477, 0xc475, 0xc474, 0xc472, - 0xc470, 0xc46e, 0xc46d, 0xc46b, 0xc469, 0xc467, 0xc466, 0xc464, - 0xc462, 0xc461, 0xc45f, 0xc45d, 0xc45b, 0xc45a, 0xc458, 0xc456, - 0xc454, 0xc453, 0xc451, 0xc44f, 0xc44e, 0xc44c, 0xc44a, 0xc448, - 0xc447, 0xc445, 0xc443, 0xc442, 0xc440, 0xc43e, 0xc43d, 0xc43b, - 0xc439, 0xc437, 0xc436, 0xc434, 0xc432, 0xc431, 0xc42f, 0xc42d, - 0xc42c, 0xc42a, 0xc428, 0xc427, 0xc425, 0xc423, 0xc422, 0xc420, - 0xc41e, 0xc41d, 0xc41b, 0xc419, 0xc418, 0xc416, 0xc414, 0xc413, - 0xc411, 0xc40f, 0xc40e, 0xc40c, 0xc40a, 0xc409, 0xc407, 0xc405, - 0xc404, 0xc402, 0xc400, 0xc3fd, 0xc3fa, 0xc3f7, 0xc3f3, 0xc3f0, - 0xc3ed, 0xc3ea, 0xc3e6, 0xc3e3, 0xc3e0, 0xc3dc, 0xc3d9, 0xc3d6, - 0xc3d3, 0xc3cf, 0xc3cc, 0xc3c9, 0xc3c6, 0xc3c2, 0xc3bf, 0xc3bc, - 0xc3b9, 0xc3b5, 0xc3b2, 0xc3af, 0xc3ac, 0xc3a8, 0xc3a5, 0xc3a2, - 0xc39f, 0xc39c, 0xc398, 0xc395, 0xc392, 0xc38f, 0xc38c, 0xc388, - 0xc385, 0xc382, 0xc37f, 0xc37c, 0xc378, 0xc375, 0xc372, 0xc36f, - 0xc36c, 0xc368, 0xc365, 0xc362, 0xc35f, 0xc35c, 0xc359, 0xc355, - 0xc352, 0xc34f, 0xc34c, 0xc349, 0xc346, 0xc342, 0xc33f, 0xc33c, - 0xc339, 0xc336, 0xc333, 0xc330, 0xc32d, 0xc329, 0xc326, 0xc323, - 0xc320, 0xc31d, 0xc31a, 0xc317, 0xc314, 0xc310, 0xc30d, 0xc30a, - 0xc307, 0xc304, 0xc301, 0xc2fe, 0xc2fb, 0xc2f8, 0xc2f5, 0xc2f1, - 0xc2ee, 0xc2eb, 0xc2e8, 0xc2e5, 0xc2e2, 0xc2df, 0xc2dc, 0xc2d9, - 0xc2d6, 0xc2d3, 0xc2d0, 0xc2cd, 0xc2c9, 0xc2c6, 0xc2c3, 0xc2c0, - 0xc2bd, 0xc2ba, 0xc2b7, 0xc2b4, 0xc2b1, 0xc2ae, 0xc2ab, 0xc2a8, - 0xc2a5, 0xc2a2, 0xc29f, 0xc29c, 0xc299, 0xc296, 0xc293, 0xc290, - 0xc28d, 0xc28a, 0xc287, 0xc284, 0xc281, 0xc27e, 0xc27b, 0xc278, - 0xc275, 0xc272, 0xc26f, 0xc26c, 0xc269, 0xc266, 0xc263, 0xc260, - 0xc25d, 0xc25a, 0xc257, 0xc254, 0xc251, 0xc24e, 0xc24b, 0xc248, - 0xc245, 0xc242, 0xc23f, 0xc23c, 0xc239, 0xc236, 0xc233, 0xc230, - 0xc22e, 0xc22b, 0xc228, 0xc225, 0xc222, 0xc21f, 0xc21c, 0xc219, - 0xc216, 0xc213, 0xc210, 0xc20d, 0xc20a, 0xc207, 0xc205, 0xc202, - 0xc1ff, 0xc1fc, 0xc1f9, 0xc1f6, 0xc1f3, 0xc1f0, 0xc1ed, 0xc1ea, - 0xc1e8, 0xc1e5, 0xc1e2, 0xc1df, 0xc1dc, 0xc1d9, 0xc1d6, 0xc1d3, - 0xc1d0, 0xc1ce, 0xc1cb, 0xc1c8, 0xc1c5, 0xc1c2, 0xc1bf, 0xc1bc, - 0xc1ba, 0xc1b7, 0xc1b4, 0xc1b1, 0xc1ae, 0xc1ab, 0xc1a8, 0xc1a6, - 0xc1a3, 0xc1a0, 0xc19d, 0xc19a, 0xc197, 0xc194, 0xc192, 0xc18f, - 0xc18c, 0xc189, 0xc186, 0xc184, 0xc181, 0xc17e, 0xc17b, 0xc178, - 0xc175, 0xc173, 0xc170, 0xc16d, 0xc16a, 0xc167, 0xc165, 0xc162, - 0xc15f, 0xc15c, 0xc159, 0xc157, 0xc154, 0xc151, 0xc14e, 0xc14b, - 0xc149, 0xc146, 0xc143, 0xc140, 0xc13e, 0xc13b, 0xc138, 0xc135, - 0xc132, 0xc130, 0xc12d, 0xc12a, 0xc127, 0xc125, 0xc122, 0xc11f, - 0xc11c, 0xc11a, 0xc117, 0xc114, 0xc111, 0xc10f, 0xc10c, 0xc109, - 0xc106, 0xc104, 0xc101, 0xc0fe, 0xc0fb, 0xc0f9, 0xc0f6, 0xc0f3, - 0xc0f1, 0xc0ee, 0xc0eb, 0xc0e8, 0xc0e6, 0xc0e3, 0xc0e0, 0xc0de, - 0xc0db, 0xc0d8, 0xc0d5, 0xc0d3, 0xc0d0, 0xc0cd, 0xc0cb, 0xc0c8, - 0xc0c5, 0xc0c3, 0xc0c0, 0xc0bd, 0xc0ba, 0xc0b8, 0xc0b5, 0xc0b2, - 0xc0b0, 0xc0ad, 0xc0aa, 0xc0a8, 0xc0a5, 0xc0a2, 0xc0a0, 0xc09d, - 0xc09a, 0xc098, 0xc095, 0xc092, 0xc090, 0xc08d, 0xc08a, 0xc088, - 0xc085, 0xc082, 0xc080, 0xc07d, 0xc07a, 0xc078, 0xc075, 0xc073, - 0xc070, 0xc06d, 0xc06b, 0xc068, 0xc065, 0xc063, 0xc060, 0xc05d, - 0xc05b, 0xc058, 0xc056, 0xc053, 0xc050, 0xc04e, 0xc04b, 0xc049, - 0xc046, 0xc043, 0xc041, 0xc03e, 0xc03b, 0xc039, 0xc036, 0xc034, - 0xc031, 0xc02e, 0xc02c, 0xc029, 0xc027, 0xc024, 0xc021, 0xc01f, - 0xc01c, 0xc01a, 0xc017, 0xc015, 0xc012, 0xc00f, 0xc00d, 0xc00a, - 0xc008, 0xc005, 0xc003, 0xc000, 0xbffb, 0xbff6, 0xbff1, 0xbfeb, - 0xbfe6, 0xbfe1, 0xbfdc, 0xbfd7, 0xbfd2, 0xbfcd, 0xbfc8, 0xbfc3, - 0xbfbd, 0xbfb8, 0xbfb3, 0xbfae, 0xbfa9, 0xbfa4, 0xbf9f, 0xbf9a, - 0xbf95, 0xbf90, 0xbf8b, 0xbf86, 0xbf81, 0xbf7b, 0xbf76, 0xbf71, - 0xbf6c, 0xbf67, 0xbf62, 0xbf5d, 0xbf58, 0xbf53, 0xbf4e, 0xbf49, - 0xbf44, 0xbf3f, 0xbf3a, 0xbf35, 0xbf30, 0xbf2b, 0xbf26, 0xbf21, - 0xbf1c, 0xbf17, 0xbf12, 0xbf0d, 0xbf08, 0xbf03, 0xbefe, 0xbef9, - 0xbef4, 0xbeef, 0xbeea, 0xbee5, 0xbee0, 0xbedb, 0xbed6, 0xbed1, - 0xbecc, 0xbec8, 0xbec3, 0xbebe, 0xbeb9, 0xbeb4, 0xbeaf, 0xbeaa, - 0xbea5, 0xbea0, 0xbe9b, 0xbe96, 0xbe91, 0xbe8c, 0xbe87, 0xbe83, - 0xbe7e, 0xbe79, 0xbe74, 0xbe6f, 0xbe6a, 0xbe65, 0xbe60, 0xbe5b, - 0xbe57, 0xbe52, 0xbe4d, 0xbe48, 0xbe43, 0xbe3e, 0xbe39, 0xbe35, - 0xbe30, 0xbe2b, 0xbe26, 0xbe21, 0xbe1c, 0xbe17, 0xbe13, 0xbe0e, - 0xbe09, 0xbe04, 0xbdff, 0xbdfa, 0xbdf6, 0xbdf1, 0xbdec, 0xbde7, - 0xbde2, 0xbdde, 0xbdd9, 0xbdd4, 0xbdcf, 0xbdca, 0xbdc6, 0xbdc1, - 0xbdbc, 0xbdb7, 0xbdb2, 0xbdae, 0xbda9, 0xbda4, 0xbd9f, 0xbd9b, - 0xbd96, 0xbd91, 0xbd8c, 0xbd88, 0xbd83, 0xbd7e, 0xbd79, 0xbd75, - 0xbd70, 0xbd6b, 0xbd66, 0xbd62, 0xbd5d, 0xbd58, 0xbd53, 0xbd4f, - 0xbd4a, 0xbd45, 0xbd41, 0xbd3c, 0xbd37, 0xbd32, 0xbd2e, 0xbd29, - 0xbd24, 0xbd20, 0xbd1b, 0xbd16, 0xbd12, 0xbd0d, 0xbd08, 0xbd03, - 0xbcff, 0xbcfa, 0xbcf5, 0xbcf1, 0xbcec, 0xbce7, 0xbce3, 0xbcde, - 0xbcd9, 0xbcd5, 0xbcd0, 0xbccc, 0xbcc7, 0xbcc2, 0xbcbe, 0xbcb9, - 0xbcb4, 0xbcb0, 0xbcab, 0xbca6, 0xbca2, 0xbc9d, 0xbc99, 0xbc94, - 0xbc8f, 0xbc8b, 0xbc86, 0xbc82, 0xbc7d, 0xbc78, 0xbc74, 0xbc6f, - 0xbc6b, 0xbc66, 0xbc61, 0xbc5d, 0xbc58, 0xbc54, 0xbc4f, 0xbc4a, - 0xbc46, 0xbc41, 0xbc3d, 0xbc38, 0xbc34, 0xbc2f, 0xbc2b, 0xbc26, - 0xbc21, 0xbc1d, 0xbc18, 0xbc14, 0xbc0f, 0xbc0b, 0xbc06, 0xbc02, - 0xbbfa, 0xbbf1, 0xbbe8, 0xbbdf, 0xbbd6, 0xbbcd, 0xbbc4, 0xbbbb, - 0xbbb2, 0xbba9, 0xbba0, 0xbb97, 0xbb8e, 0xbb85, 0xbb7c, 0xbb73, - 0xbb6a, 0xbb61, 0xbb58, 0xbb4f, 0xbb46, 0xbb3d, 0xbb34, 0xbb2b, - 0xbb22, 0xbb19, 0xbb10, 0xbb07, 0xbafe, 0xbaf5, 0xbaed, 0xbae4, - 0xbadb, 0xbad2, 0xbac9, 0xbac0, 0xbab7, 0xbaae, 0xbaa5, 0xba9c, - 0xba94, 0xba8b, 0xba82, 0xba79, 0xba70, 0xba67, 0xba5f, 0xba56, - 0xba4d, 0xba44, 0xba3b, 0xba32, 0xba2a, 0xba21, 0xba18, 0xba0f, - 0xba06, 0xb9fe, 0xb9f5, 0xb9ec, 0xb9e3, 0xb9da, 0xb9d2, 0xb9c9, - 0xb9c0, 0xb9b7, 0xb9af, 0xb9a6, 0xb99d, 0xb995, 0xb98c, 0xb983, - 0xb97a, 0xb972, 0xb969, 0xb960, 0xb958, 0xb94f, 0xb946, 0xb93d, - 0xb935, 0xb92c, 0xb923, 0xb91b, 0xb912, 0xb909, 0xb901, 0xb8f8, - 0xb8ef, 0xb8e7, 0xb8de, 0xb8d6, 0xb8cd, 0xb8c4, 0xb8bc, 0xb8b3, - 0xb8ab, 0xb8a2, 0xb899, 0xb891, 0xb888, 0xb880, 0xb877, 0xb86e, - 0xb866, 0xb85d, 0xb855, 0xb84c, 0xb844, 0xb83b, 0xb832, 0xb82a, - 0xb821, 0xb819, 0xb810, 0xb808, 0xb7ff, 0xb7ee, 0xb7dd, 0xb7cc, - 0xb7bb, 0xb7aa, 0xb799, 0xb788, 0xb777, 0xb766, 0xb755, 0xb744, - 0xb733, 0xb722, 0xb711, 0xb700, 0xb6ef, 0xb6de, 0xb6cd, 0xb6bd, - 0xb6ac, 0xb69b, 0xb68a, 0xb679, 0xb668, 0xb658, 0xb647, 0xb636, - 0xb625, 0xb614, 0xb604, 0xb5f3, 0xb5e2, 0xb5d1, 0xb5c1, 0xb5b0, - 0xb59f, 0xb58e, 0xb57e, 0xb56d, 0xb55c, 0xb54c, 0xb53b, 0xb52a, - 0xb51a, 0xb509, 0xb4f8, 0xb4e8, 0xb4d7, 0xb4c7, 0xb4b6, 0xb4a5, - 0xb495, 0xb484, 0xb474, 0xb463, 0xb452, 0xb442, 0xb431, 0xb421, - 0xb410, 0xb400, 0xb3df, 0xb3be, 0xb39d, 0xb37c, 0xb35b, 0xb33a, - 0xb319, 0xb2f8, 0xb2d7, 0xb2b6, 0xb295, 0xb275, 0xb254, 0xb233, - 0xb212, 0xb1f2, 0xb1d1, 0xb1b0, 0xb18f, 0xb16f, 0xb14e, 0xb12d, - 0xb10d, 0xb0ec, 0xb0cb, 0xb0ab, 0xb08a, 0xb06a, 0xb049, 0xb029, - 0xb008, 0xafcf, 0xaf8e, 0xaf4d, 0xaf0c, 0xaecb, 0xae8b, 0xae4a, - 0xae09, 0xadc8, 0xad88, 0xad47, 0xad06, 0xacc6, 0xac85, 0xac45, - 0xac04, 0xab87, 0xab06, 0xaa85, 0xaa05, 0xa984, 0xa903, 0xa883, - 0xa802, 0xa703, 0xa602, 0xa502, 0xa401, 0xa201, 0xa001, 0x9c00, - 0x0000, 0x1fff, 0x23fe, 0x25fe, 0x27fc, 0x28fd, 0x29fc, 0x2afa, - 0x2bf8, 0x2c7b, 0x2cfa, 0x2d78, 0x2df7, 0x2e76, 0x2ef4, 0x2f72, - 0x2ff0, 0x3037, 0x3076, 0x30b5, 0x30f4, 0x3132, 0x3171, 0x31b0, - 0x31ee, 0x322d, 0x326b, 0x32aa, 0x32e8, 0x3326, 0x3364, 0x33a3, - 0x33e1, 0x340f, 0x342e, 0x344d, 0x346c, 0x348b, 0x34aa, 0x34c9, - 0x34e8, 0x3506, 0x3525, 0x3544, 0x3563, 0x3581, 0x35a0, 0x35bf, - 0x35dd, 0x35fc, 0x361a, 0x3639, 0x3657, 0x3676, 0x3694, 0x36b2, - 0x36d1, 0x36ef, 0x370d, 0x372c, 0x374a, 0x3768, 0x3786, 0x37a4, - 0x37c3, 0x37e1, 0x37ff, 0x380e, 0x381d, 0x382c, 0x383b, 0x384a, - 0x3859, 0x3868, 0x3877, 0x3886, 0x3895, 0x38a4, 0x38b3, 0x38c2, - 0x38d0, 0x38df, 0x38ee, 0x38fd, 0x390c, 0x391a, 0x3929, 0x3938, - 0x3947, 0x3955, 0x3964, 0x3973, 0x3982, 0x3990, 0x399f, 0x39ae, - 0x39bc, 0x39cb, 0x39d9, 0x39e8, 0x39f7, 0x3a05, 0x3a14, 0x3a22, - 0x3a31, 0x3a3f, 0x3a4e, 0x3a5c, 0x3a6b, 0x3a79, 0x3a88, 0x3a96, - 0x3aa5, 0x3ab3, 0x3ac1, 0x3ad0, 0x3ade, 0x3aed, 0x3afb, 0x3b09, - 0x3b18, 0x3b26, 0x3b34, 0x3b42, 0x3b51, 0x3b5f, 0x3b6d, 0x3b7c, - 0x3b8a, 0x3b98, 0x3ba6, 0x3bb4, 0x3bc3, 0x3bd1, 0x3bdf, 0x3bed, - 0x3bfb, 0x3c05, 0x3c0c, 0x3c13, 0x3c1a, 0x3c21, 0x3c28, 0x3c2f, - 0x3c36, 0x3c3d, 0x3c44, 0x3c4b, 0x3c52, 0x3c59, 0x3c60, 0x3c67, - 0x3c6e, 0x3c75, 0x3c7c, 0x3c83, 0x3c8a, 0x3c91, 0x3c97, 0x3c9e, - 0x3ca5, 0x3cac, 0x3cb3, 0x3cba, 0x3cc1, 0x3cc8, 0x3ccf, 0x3cd6, - 0x3cdc, 0x3ce3, 0x3cea, 0x3cf1, 0x3cf8, 0x3cff, 0x3d06, 0x3d0c, - 0x3d13, 0x3d1a, 0x3d21, 0x3d28, 0x3d2f, 0x3d35, 0x3d3c, 0x3d43, - 0x3d4a, 0x3d51, 0x3d57, 0x3d5e, 0x3d65, 0x3d6c, 0x3d72, 0x3d79, - 0x3d80, 0x3d87, 0x3d8d, 0x3d94, 0x3d9b, 0x3da1, 0x3da8, 0x3daf, - 0x3db6, 0x3dbc, 0x3dc3, 0x3dca, 0x3dd0, 0x3dd7, 0x3dde, 0x3de4, - 0x3deb, 0x3df2, 0x3df8, 0x3dff, 0x3e05, 0x3e0c, 0x3e13, 0x3e19, - 0x3e20, 0x3e27, 0x3e2d, 0x3e34, 0x3e3a, 0x3e41, 0x3e47, 0x3e4e, - 0x3e55, 0x3e5b, 0x3e62, 0x3e68, 0x3e6f, 0x3e75, 0x3e7c, 0x3e82, - 0x3e89, 0x3e8f, 0x3e96, 0x3e9c, 0x3ea3, 0x3ea9, 0x3eb0, 0x3eb6, - 0x3ebd, 0x3ec3, 0x3eca, 0x3ed0, 0x3ed7, 0x3edd, 0x3ee4, 0x3eea, - 0x3ef1, 0x3ef7, 0x3efe, 0x3f04, 0x3f0a, 0x3f11, 0x3f17, 0x3f1e, - 0x3f24, 0x3f2a, 0x3f31, 0x3f37, 0x3f3e, 0x3f44, 0x3f4a, 0x3f51, - 0x3f57, 0x3f5d, 0x3f64, 0x3f6a, 0x3f70, 0x3f77, 0x3f7d, 0x3f83, - 0x3f8a, 0x3f90, 0x3f96, 0x3f9d, 0x3fa3, 0x3fa9, 0x3fb0, 0x3fb6, - 0x3fbc, 0x3fc2, 0x3fc9, 0x3fcf, 0x3fd5, 0x3fdc, 0x3fe2, 0x3fe8, - 0x3fee, 0x3ff5, 0x3ffb, 0x4000, 0x4004, 0x4007, 0x400a, 0x400d, - 0x4010, 0x4013, 0x4016, 0x4019, 0x401c, 0x4020, 0x4023, 0x4026, - 0x4029, 0x402c, 0x402f, 0x4032, 0x4035, 0x4038, 0x403b, 0x403e, - 0x4041, 0x4044, 0x4048, 0x404b, 0x404e, 0x4051, 0x4054, 0x4057, - 0x405a, 0x405d, 0x4060, 0x4063, 0x4066, 0x4069, 0x406c, 0x406f, - 0x4072, 0x4075, 0x4078, 0x407b, 0x407e, 0x4081, 0x4084, 0x4087, - 0x408a, 0x408d, 0x4090, 0x4093, 0x4096, 0x4099, 0x409c, 0x409f, - 0x40a2, 0x40a5, 0x40a8, 0x40ab, 0x40ae, 0x40b1, 0x40b4, 0x40b7, - 0x40ba, 0x40bd, 0x40c0, 0x40c3, 0x40c6, 0x40c9, 0x40cc, 0x40cf, - 0x40d2, 0x40d5, 0x40d8, 0x40db, 0x40de, 0x40e1, 0x40e4, 0x40e7, - 0x40ea, 0x40ed, 0x40ef, 0x40f2, 0x40f5, 0x40f8, 0x40fb, 0x40fe, - 0x4101, 0x4104, 0x4107, 0x410a, 0x410d, 0x4110, 0x4113, 0x4115, - 0x4118, 0x411b, 0x411e, 0x4121, 0x4124, 0x4127, 0x412a, 0x412d, - 0x4130, 0x4132, 0x4135, 0x4138, 0x413b, 0x413e, 0x4141, 0x4144, - 0x4147, 0x414a, 0x414c, 0x414f, 0x4152, 0x4155, 0x4158, 0x415b, - 0x415e, 0x4160, 0x4163, 0x4166, 0x4169, 0x416c, 0x416f, 0x4172, - 0x4174, 0x4177, 0x417a, 0x417d, 0x4180, 0x4183, 0x4185, 0x4188, - 0x418b, 0x418e, 0x4191, 0x4194, 0x4196, 0x4199, 0x419c, 0x419f, - 0x41a2, 0x41a5, 0x41a7, 0x41aa, 0x41ad, 0x41b0, 0x41b3, 0x41b5, - 0x41b8, 0x41bb, 0x41be, 0x41c1, 0x41c3, 0x41c6, 0x41c9, 0x41cc, - 0x41ce, 0x41d1, 0x41d4, 0x41d7, 0x41da, 0x41dc, 0x41df, 0x41e2, - 0x41e5, 0x41e7, 0x41ea, 0x41ed, 0x41f0, 0x41f2, 0x41f5, 0x41f8, - 0x41fb, 0x41fd, 0x4200, 0x4203, 0x4206, 0x4208, 0x420b, 0x420e, - 0x4211, 0x4213, 0x4216, 0x4219, 0x421c, 0x421e, 0x4221, 0x4224, - 0x4227, 0x4229, 0x422c, 0x422f, 0x4231, 0x4234, 0x4237, 0x423a, - 0x423c, 0x423f, 0x4242, 0x4244, 0x4247, 0x424a, 0x424d, 0x424f, - 0x4252, 0x4255, 0x4257, 0x425a, 0x425d, 0x425f, 0x4262, 0x4265, - 0x4267, 0x426a, 0x426d, 0x426f, 0x4272, 0x4275, 0x4277, 0x427a, - 0x427d, 0x427f, 0x4282, 0x4285, 0x4287, 0x428a, 0x428d, 0x428f, - 0x4292, 0x4295, 0x4297, 0x429a, 0x429d, 0x429f, 0x42a2, 0x42a5, - 0x42a7, 0x42aa, 0x42ad, 0x42af, 0x42b2, 0x42b4, 0x42b7, 0x42ba, - 0x42bc, 0x42bf, 0x42c2, 0x42c4, 0x42c7, 0x42c9, 0x42cc, 0x42cf, - 0x42d1, 0x42d4, 0x42d6, 0x42d9, 0x42dc, 0x42de, 0x42e1, 0x42e3, - 0x42e6, 0x42e9, 0x42eb, 0x42ee, 0x42f0, 0x42f3, 0x42f6, 0x42f8, - 0x42fb, 0x42fd, 0x4300, 0x4303, 0x4305, 0x4308, 0x430a, 0x430d, - 0x430f, 0x4312, 0x4315, 0x4317, 0x431a, 0x431c, 0x431f, 0x4321, - 0x4324, 0x4327, 0x4329, 0x432c, 0x432e, 0x4331, 0x4333, 0x4336, - 0x4338, 0x433b, 0x433e, 0x4340, 0x4343, 0x4345, 0x4348, 0x434a, - 0x434d, 0x434f, 0x4352, 0x4354, 0x4357, 0x4359, 0x435c, 0x435e, - 0x4361, 0x4363, 0x4366, 0x4369, 0x436b, 0x436e, 0x4370, 0x4373, - 0x4375, 0x4378, 0x437a, 0x437d, 0x437f, 0x4382, 0x4384, 0x4387, - 0x4389, 0x438c, 0x438e, 0x4391, 0x4393, 0x4396, 0x4398, 0x439b, - 0x439d, 0x43a0, 0x43a2, 0x43a5, 0x43a7, 0x43a9, 0x43ac, 0x43ae, - 0x43b1, 0x43b3, 0x43b6, 0x43b8, 0x43bb, 0x43bd, 0x43c0, 0x43c2, - 0x43c5, 0x43c7, 0x43ca, 0x43cc, 0x43ce, 0x43d1, 0x43d3, 0x43d6, - 0x43d8, 0x43db, 0x43dd, 0x43e0, 0x43e2, 0x43e5, 0x43e7, 0x43e9, - 0x43ec, 0x43ee, 0x43f1, 0x43f3, 0x43f6, 0x43f8, 0x43fa, 0x43fd, - 0x43ff, 0x4401, 0x4402, 0x4403, 0x4404, 0x4406, 0x4407, 0x4408, - 0x4409, 0x440b, 0x440c, 0x440d, 0x440e, 0x440f, 0x4411, 0x4412, - 0x4413, 0x4414, 0x4415, 0x4417, 0x4418, 0x4419, 0x441a, 0x441b, - 0x441d, 0x441e, 0x441f, 0x4420, 0x4421, 0x4423, 0x4424, 0x4425, - 0x4426, 0x4427, 0x4428, 0x442a, 0x442b, 0x442c, 0x442d, 0x442e, - 0x4430, 0x4431, 0x4432, 0x4433, 0x4434, 0x4436, 0x4437, 0x4438, - 0x4439, 0x443a, 0x443b, 0x443d, 0x443e, 0x443f, 0x4440, 0x4441, - 0x4442, 0x4444, 0x4445, 0x4446, 0x4447, 0x4448, 0x444a, 0x444b, - 0x444c, 0x444d, 0x444e, 0x444f, 0x4451, 0x4452, 0x4453, 0x4454, - 0x4455, 0x4456, 0x4458, 0x4459, 0x445a, 0x445b, 0x445c, 0x445d, - 0x445e, 0x4460, 0x4461, 0x4462, 0x4463, 0x4464, 0x4465, 0x4467, - 0x4468, 0x4469, 0x446a, 0x446b, 0x446c, 0x446d, 0x446f, 0x4470, - 0x4471, 0x4472, 0x4473, 0x4474, 0x4476, 0x4477, 0x4478, 0x4479, - 0x447a, 0x447b, 0x447c, 0x447e, 0x447f, 0x4480, 0x4481, 0x4482, - 0x4483, 0x4484, 0x4485, 0x4487, 0x4488, 0x4489, 0x448a, 0x448b, - 0x448c, 0x448d, 0x448f, 0x4490, 0x4491, 0x4492, 0x4493, 0x4494, - 0x4495, 0x4496, 0x4498, 0x4499, 0x449a, 0x449b, 0x449c, 0x449d, - 0x449e, 0x449f, 0x44a1, 0x44a2, 0x44a3, 0x44a4, 0x44a5, 0x44a6, - 0x44a7, 0x44a8, 0x44aa, 0x44ab, 0x44ac, 0x44ad, 0x44ae, 0x44af, - 0x44b0, 0x44b1, 0x44b2, 0x44b4, 0x44b5, 0x44b6, 0x44b7, 0x44b8, - 0x44b9, 0x44ba, 0x44bb, 0x44bc, 0x44be, 0x44bf, 0x44c0, 0x44c1, - 0x44c2, 0x44c3, 0x44c4, 0x44c5, 0x44c6, 0x44c7, 0x44c9, 0x44ca, - 0x44cb, 0x44cc, 0x44cd, 0x44ce, 0x44cf, 0x44d0, 0x44d1, 0x44d2, - 0x44d4, 0x44d5, 0x44d6, 0x44d7, 0x44d8, 0x44d9, 0x44da, 0x44db, - 0x44dc, 0x44dd, 0x44de, 0x44e0, 0x44e1, 0x44e2, 0x44e3, 0x44e4, - 0x44e5, 0x44e6, 0x44e7, 0x44e8, 0x44e9, 0x44ea, 0x44eb, 0x44ed, - 0x44ee, 0x44ef, 0x44f0, 0x44f1, 0x44f2, 0x44f3, 0x44f4, 0x44f5, - 0x44f6, 0x44f7, 0x44f8, 0x44f9, 0x44fb, 0x44fc, 0x44fd, 0x44fe, - 0x44ff, 0x4500, 0x4501, 0x4502, 0x4503, 0x4504, 0x4505, 0x4506, - 0x4507, 0x4508, 0x450a, 0x450b, 0x450c, 0x450d, 0x450e, 0x450f, - 0x4510, 0x4511, 0x4512, 0x4513, 0x4514, 0x4515, 0x4516, 0x4517, - 0x4518, 0x4519, 0x451b, 0x451c, 0x451d, 0x451e, 0x451f, 0x4520, - 0x4521, 0x4522, 0x4523, 0x4524, 0x4525, 0x4526, 0x4527, 0x4528, - 0x4529, 0x452a, 0x452b, 0x452c, 0x452d, 0x452e, 0x4530, 0x4531, - 0x4532, 0x4533, 0x4534, 0x4535, 0x4536, 0x4537, 0x4538, 0x4539, - 0x453a, 0x453b, 0x453c, 0x453d, 0x453e, 0x453f, 0x4540, 0x4541, - 0x4542, 0x4543, 0x4544, 0x4545, 0x4546, 0x4547, 0x4548, 0x454a, - 0x454b, 0x454c, 0x454d, 0x454e, 0x454f, 0x4550, 0x4551, 0x4552, - 0x4553, 0x4554, 0x4555, 0x4556, 0x4557, 0x4558, 0x4559, 0x455a, - 0x455b, 0x455c, 0x455d, 0x455e, 0x455f, 0x4560, 0x4561, 0x4562, - 0x4563, 0x4564, 0x4565, 0x4566, 0x4567, 0x4568, 0x4569, 0x456a, - 0x456b, 0x456c, 0x456d, 0x456e, 0x456f, 0x4570, 0x4571, 0x4572, - 0x4573, 0x4574, 0x4575, 0x4576, 0x4577, 0x4578, 0x4579, 0x457a, - 0x457c, 0x457d, 0x457e, 0x457f, 0x4580, 0x4581, 0x4582, 0x4583, - 0x4584, 0x4585, 0x4586, 0x4587, 0x4588, 0x4589, 0x458a, 0x458b, - 0x458c, 0x458e, 0x4590, 0x4592, 0x4594, 0x4596, 0x4598, 0x459a, - 0x459c, 0x459d, 0x459f, 0x45a1, 0x45a3, 0x45a5, 0x45a7, 0x45a9, - 0x45ab, 0x45ad, 0x45af, 0x45b1, 0x45b3, 0x45b5, 0x45b7, 0x45b9, - 0x45bb, 0x45bd, 0x45bf, 0x45c1, 0x45c3, 0x45c5, 0x45c7, 0x45c9, - 0x45cb, 0x45cd, 0x45ce, 0x45d0, 0x45d2, 0x45d4, 0x45d6, 0x45d8, - 0x45da, 0x45dc, 0x45de, 0x45e0, 0x45e2, 0x45e4, 0x45e6, 0x45e7, - 0x45e9, 0x45eb, 0x45ed, 0x45ef, 0x45f1, 0x45f3, 0x45f5, 0x45f7, - 0x45f9, 0x45fb, 0x45fc, 0x45fe, 0x4600, 0x4602, 0x4604, 0x4606, - 0x4608, 0x460a, 0x460b, 0x460d, 0x460f, 0x4611, 0x4613, 0x4615, - 0x4617, 0x4619, 0x461a, 0x461c, 0x461e, 0x4620, 0x4622, 0x4624, - 0x4626, 0x4627, 0x4629, 0x462b, 0x462d, 0x462f, 0x4631, 0x4633, - 0x4634, 0x4636, 0x4638, 0x463a, 0x463c, 0x463e, 0x463f, 0x4641, - 0x4643, 0x4645, 0x4647, 0x4649, 0x464a, 0x464c, 0x464e, 0x4650, - 0x4652, 0x4653, 0x4655, 0x4657, 0x4659, 0x465b, 0x465d, 0x465e, - 0x4660, 0x4662, 0x4664, 0x4666, 0x4667, 0x4669, 0x466b, 0x466d, - 0x466f, 0x4670, 0x4672, 0x4674, 0x4676, 0x4677, 0x4679, 0x467b, - 0x467d, 0x467f, 0x4680, 0x4682, 0x4684, 0x4686, 0x4687, 0x4689, - 0x468b, 0x468d, 0x468e, 0x4690, 0x4692, 0x4694, 0x4696, 0x4697, - 0x4699, 0x469b, 0x469d, 0x469e, 0x46a0, 0x46a2, 0x46a4, 0x46a5, - 0x46a7, 0x46a9, 0x46aa, 0x46ac, 0x46ae, 0x46b0, 0x46b1, 0x46b3, - 0x46b5, 0x46b7, 0x46b8, 0x46ba, 0x46bc, 0x46be, 0x46bf, 0x46c1, - 0x46c3, 0x46c4, 0x46c6, 0x46c8, 0x46ca, 0x46cb, 0x46cd, 0x46cf, - 0x46d0, 0x46d2, 0x46d4, 0x46d6, 0x46d7, 0x46d9, 0x46db, 0x46dc, - 0x46de, 0x46e0, 0x46e1, 0x46e3, 0x46e5, 0x46e6, 0x46e8, 0x46ea, - 0x46ec, 0x46ed, 0x46ef, 0x46f1, 0x46f2, 0x46f4, 0x46f6, 0x46f7, - 0x46f9, 0x46fb, 0x46fc, 0x46fe, 0x4700, 0x4701, 0x4703, 0x4705, - 0x4706, 0x4708, 0x470a, 0x470b, 0x470d, 0x470f, 0x4710, 0x4712, - 0x4714, 0x4715, 0x4717, 0x4718, 0x471a, 0x471c, 0x471d, 0x471f, - 0x4721, 0x4722, 0x4724, 0x4726, 0x4727, 0x4729, 0x472b, 0x472c, - 0x472e, 0x472f, 0x4731, 0x4733, 0x4734, 0x4736, 0x4738, 0x4739, - 0x473b, 0x473c, 0x473e, 0x4740, 0x4741, 0x4743, 0x4745, 0x4746, - 0x4748, 0x4749, 0x474b, 0x474d, 0x474e, 0x4750, 0x4751, 0x4753, - 0x4755, 0x4756, 0x4758, 0x4759, 0x475b, 0x475d, 0x475e, 0x4760, - 0x4761, 0x4763, 0x4765, 0x4766, 0x4768, 0x4769, 0x476b, 0x476c, - 0x476e, 0x4770, 0x4771, 0x4773, 0x4774, 0x4776, 0x4777, 0x4779, - 0x477b, 0x477c, 0x477e, 0x477f, 0x4781, 0x4782, 0x4784, 0x4786, - 0x4787, 0x4789, 0x478a, 0x478c, 0x478d, 0x478f, 0x4790, 0x4792, - 0x4794, 0x4795, 0x4797, 0x4798, 0x479a, 0x479b, 0x479d, 0x479e, - 0x47a0, 0x47a2, 0x47a3, 0x47a5, 0x47a6, 0x47a8, 0x47a9, 0x47ab, - 0x47ac, 0x47ae, 0x47af, 0x47b1, 0x47b2, 0x47b4, 0x47b5, 0x47b7, - 0x47b8, 0x47ba, 0x47bc, 0x47bd, 0x47bf, 0x47c0, 0x47c2, 0x47c3, - 0x47c5, 0x47c6, 0x47c8, 0x47c9, 0x47cb, 0x47cc, 0x47ce, 0x47cf, - 0x47d1, 0x47d2, 0x47d4, 0x47d5, 0x47d7, 0x47d8, 0x47da, 0x47db, - 0x47dd, 0x47de, 0x47e0, 0x47e1, 0x47e3, 0x47e4, 0x47e6, 0x47e7, - 0x47e9, 0x47ea, 0x47ec, 0x47ed, 0x47ef, 0x47f0, 0x47f2, 0x47f3, - 0x47f5, 0x47f6, 0x47f8, 0x47f9, 0x47fa, 0x47fc, 0x47fd, 0x47ff, - 0x4800, 0x4801, 0x4802, 0x4802, 0x4803, 0x4804, 0x4805, 0x4805, - 0x4806, 0x4807, 0x4808, 0x4808, 0x4809, 0x480a, 0x480a, 0x480b, - 0x480c, 0x480d, 0x480d, 0x480e, 0x480f, 0x4810, 0x4810, 0x4811, - 0x4812, 0x4812, 0x4813, 0x4814, 0x4815, 0x4815, 0x4816, 0x4817, - 0x4817, 0x4818, 0x4819, 0x481a, 0x481a, 0x481b, 0x481c, 0x481c, - 0x481d, 0x481e, 0x481f, 0x481f, 0x4820, 0x4821, 0x4821, 0x4822, - 0x4823, 0x4824, 0x4824, 0x4825, 0x4826, 0x4826, 0x4827, 0x4828, - 0x4829, 0x4829, 0x482a, 0x482b, 0x482b, 0x482c, 0x482d, 0x482e, - 0x482e, 0x482f, 0x4830, 0x4830, 0x4831, 0x4832, 0x4832, 0x4833, - 0x4834, 0x4835, 0x4835, 0x4836, 0x4837, 0x4837, 0x4838, 0x4839, - 0x4839, 0x483a, 0x483b, 0x483b, 0x483c, 0x483d, 0x483e, 0x483e, - 0x483f, 0x4840, 0x4840, 0x4841, 0x4842, 0x4842, 0x4843, 0x4844, - 0x4844, 0x4845, 0x4846, 0x4847, 0x4847, 0x4848, 0x4849, 0x4849, - 0x484a, 0x484b, 0x484b, 0x484c, 0x484d, 0x484d, 0x484e, 0x484f, - 0x484f, 0x4850, 0x4851, 0x4851, 0x4852, 0x4853, 0x4853, 0x4854, - 0x4855, 0x4856, 0x4856, 0x4857, 0x4858, 0x4858, 0x4859, 0x485a, - 0x485a, 0x485b, 0x485c, 0x485c, 0x485d, 0x485e, 0x485e, 0x485f, - 0x4860, 0x4860, 0x4861, 0x4862, 0x4862, 0x4863, 0x4864, 0x4864, - 0x4865, 0x4866, 0x4866, 0x4867, 0x4868, 0x4868, 0x4869, 0x486a, - 0x486a, 0x486b, 0x486c, 0x486c, 0x486d, 0x486e, 0x486e, 0x486f, - 0x4870, 0x4870, 0x4871, 0x4872, 0x4872, 0x4873, 0x4874, 0x4874, - 0x4875, 0x4876, 0x4876, 0x4877, 0x4877, 0x4878, 0x4879, 0x4879, - 0x487a, 0x487b, 0x487b, 0x487c, 0x487d, 0x487d, 0x487e, 0x487f, - 0x487f, 0x4880, 0x4881, 0x4881, 0x4882, 0x4883, 0x4883, 0x4884, - 0x4884, 0x4885, 0x4886, 0x4886, 0x4887, 0x4888, 0x4888, 0x4889, - 0x488a, 0x488a, 0x488b, 0x488c, 0x488c, 0x488d, 0x488d, 0x488e, - 0x488f, 0x488f, 0x4890, 0x4891, 0x4891, 0x4892, 0x4893, 0x4893, - 0x4894, 0x4895, 0x4895, 0x4896, 0x4896, 0x4897, 0x4898, 0x4898, - 0x4899, 0x489a, 0x489a, 0x489b, 0x489c, 0x489c, 0x489d, 0x489d, - 0x489e, 0x489f, 0x489f, 0x48a0, 0x48a1, 0x48a1, 0x48a2, 0x48a2, - 0x48a3, 0x48a4, 0x48a4, 0x48a5, 0x48a6, 0x48a6, 0x48a7, 0x48a7, - 0x48a8, 0x48a9, 0x48a9, 0x48aa, 0x48ab, 0x48ab, 0x48ac, 0x48ac, - 0x48ad, 0x48ae, 0x48ae, 0x48af, 0x48b0, 0x48b0, 0x48b1, 0x48b1, - 0x48b2, 0x48b3, 0x48b3, 0x48b4, 0x48b4, 0x48b5, 0x48b6, 0x48b6, - 0x48b7, 0x48b8, 0x48b8, 0x48b9, 0x48b9, 0x48ba, 0x48bb, 0x48bb, - 0x48bc, 0x48bc, 0x48bd, 0x48be, 0x48be, 0x48bf, 0x48c0, 0x48c0, - 0x48c1, 0x48c1, 0x48c2, 0x48c3, 0x48c3, 0x48c4, 0x48c4, 0x48c5, - 0x48c6, 0x48c6, 0x48c7, 0x48c7, 0x48c8, 0x48c9, 0x48c9, 0x48ca, - 0x48ca, 0x48cb, 0x48cc, 0x48cc, 0x48cd, 0x48cd, 0x48ce, 0x48cf, - 0x48cf, 0x48d0, 0x48d0, 0x48d1, 0x48d2, 0x48d2, 0x48d3, 0x48d3, - 0x48d4, 0x48d5, 0x48d5, 0x48d6, 0x48d6, 0x48d7, 0x48d8, 0x48d8, - 0x48d9, 0x48d9, 0x48da, 0x48db, 0x48db, 0x48dc, 0x48dc, 0x48dd, - 0x48de, 0x48de, 0x48df, 0x48df, 0x48e0, 0x48e1, 0x48e1, 0x48e2, - 0x48e2, 0x48e3, 0x48e3, 0x48e4, 0x48e5, 0x48e5, 0x48e6, 0x48e6, - 0x48e7, 0x48e8, 0x48e8, 0x48e9, 0x48e9, 0x48ea, 0x48eb, 0x48eb, - 0x48ec, 0x48ec, 0x48ed, 0x48ed, 0x48ee, 0x48ef, 0x48ef, 0x48f0, - 0x48f0, 0x48f1, 0x48f2, 0x48f2, 0x48f3, 0x48f3, 0x48f4, 0x48f4, - 0x48f5, 0x48f6, 0x48f6, 0x48f7, 0x48f7, 0x48f8, 0x48f8, 0x48f9, - 0x48fa, 0x48fa, 0x48fb, 0x48fb, 0x48fc, 0x48fd, 0x48fd, 0x48fe, - 0x48fe, 0x48ff, 0x48ff, 0x4900, 0x4901, 0x4901, 0x4902, 0x4902, - 0x4903, 0x4903, 0x4904, 0x4905, 0x4905, 0x4906, 0x4906, 0x4907, - 0x4907, 0x4908, 0x4909, 0x4909, 0x490a, 0x490a, 0x490b, 0x490b, - 0x490c, 0x490c, 0x490d, 0x490e, 0x490e, 0x490f, 0x490f, 0x4910, - 0x4910, 0x4911, 0x4912, 0x4912, 0x4913, 0x4913, 0x4914, 0x4914, - 0x4915, 0x4916, 0x4916, 0x4917, 0x4917, 0x4918, 0x4918, 0x4919, - 0x4919, 0x491a, 0x491b, 0x491b, 0x491c, 0x491c, 0x491d, 0x491d, - 0x491e, 0x491e, 0x491f, 0x4920, 0x4920, 0x4921, 0x4921, 0x4922, - 0x4922, 0x4923, 0x4923, 0x4924, 0x4925, 0x4925, 0x4926, 0x4926, - 0x4927, 0x4927, 0x4928, 0x4928, 0x4929, 0x492a, 0x492a, 0x492b, - 0x492b, 0x492c, 0x492c, 0x492d, 0x492d, 0x492e, 0x492e, 0x492f, - 0x4930, 0x4930, 0x4931, 0x4931, 0x4932, 0x4932, 0x4933, 0x4933, - 0x4934, 0x4934, 0x4935, 0x4936, 0x4936, 0x4937, 0x4937, 0x4938, - 0x4938, 0x4939, 0x4939, 0x493a, 0x493a, 0x493b, 0x493c, 0x493c, - 0x493d, 0x493d, 0x493e, 0x493e, 0x493f, 0x493f, 0x4940, 0x4940, - 0x4941, 0x4941, 0x4942, 0x4943, 0x4943, 0x4944, 0x4944, 0x4945, - 0x4945, 0x4946, 0x4946, 0x4947, 0x4947, 0x4948, 0x4948, 0x4949, - 0x4949, 0x494a, 0x494b, 0x494b, 0x494c, 0x494c, 0x494d, 0x494d, - 0x494e, 0x494e, 0x494f, 0x494f, 0x4950, 0x4950, 0x4951, 0x4951, - 0x4952, 0x4953, 0x4953, 0x4954, 0x4954, 0x4955, 0x4955, 0x4956, - 0x4956, 0x4957, 0x4957, 0x4958, 0x4958, 0x4959, 0x4959, 0x495a, - 0x495a, 0x495b, 0x495b, 0x495c, 0x495d, 0x495d, 0x495e, 0x495e, - 0x495f, 0x495f, 0x4960, 0x4960, 0x4961, 0x4961, 0x4962, 0x4962, - 0x4963, 0x4963, 0x4964, 0x4964, 0x4965, 0x4965, 0x4966, 0x4966, - 0x4967, 0x4967, 0x4968, 0x4968, 0x4969, 0x496a, 0x496a, 0x496b, - 0x496b, 0x496c, 0x496c, 0x496d, 0x496d, 0x496e, 0x496e, 0x496f, - 0x496f, 0x4970, 0x4970, 0x4971, 0x4971, 0x4972, 0x4972, 0x4973, - 0x4973, 0x4974, 0x4974, 0x4975, 0x4975, 0x4976, 0x4976, 0x4977, - 0x4977, 0x4978, 0x4978, 0x4979, 0x4979, 0x497a, 0x497a, 0x497b, - 0x497b, 0x497c, 0x497c, 0x497d, 0x497d, 0x497e, 0x497e, 0x497f, - 0x497f, 0x4980, 0x4981, 0x4981, 0x4982, 0x4982, 0x4983, 0x4983, - 0x4984, 0x4984, 0x4985, 0x4985, 0x4986, 0x4986, 0x4987, 0x4987, - 0x4988, 0x4988, 0x4989, 0x4989, 0x498a, 0x498a, 0x498b, 0x498b, - 0x498c, 0x498d, 0x498e, 0x498f, 0x4990, 0x4991, 0x4992, 0x4993, - 0x4994, 0x4995, 0x4996, 0x4997, 0x4997, 0x4998, 0x4999, 0x499a, - 0x499b, 0x499c, 0x499d, 0x499e, 0x499f, 0x49a0, 0x49a1, 0x49a2, - 0x49a3, 0x49a4, 0x49a5, 0x49a6, 0x49a7, 0x49a8, 0x49a9, 0x49aa, - 0x49ab, 0x49ac, 0x49ad, 0x49ae, 0x49af, 0x49b0, 0x49b1, 0x49b2, - 0x49b3, 0x49b4, 0x49b5, 0x49b6, 0x49b7, 0x49b8, 0x49b9, 0x49ba, - 0x49ba, 0x49bb, 0x49bc, 0x49bd, 0x49be, 0x49bf, 0x49c0, 0x49c1, - 0x49c2, 0x49c3, 0x49c4, 0x49c5, 0x49c6, 0x49c7, 0x49c8, 0x49c9, - 0x49ca, 0x49cb, 0x49cc, 0x49cc, 0x49cd, 0x49ce, 0x49cf, 0x49d0, - 0x49d1, 0x49d2, 0x49d3, 0x49d4, 0x49d5, 0x49d6, 0x49d7, 0x49d8, - 0x49d9, 0x49da, 0x49da, 0x49db, 0x49dc, 0x49dd, 0x49de, 0x49df, - 0x49e0, 0x49e1, 0x49e2, 0x49e3, 0x49e4, 0x49e5, 0x49e5, 0x49e6, - 0x49e7, 0x49e8, 0x49e9, 0x49ea, 0x49eb, 0x49ec, 0x49ed, 0x49ee, - 0x49ef, 0x49f0, 0x49f0, 0x49f1, 0x49f2, 0x49f3, 0x49f4, 0x49f5, - 0x49f6, 0x49f7, 0x49f8, 0x49f9, 0x49f9, 0x49fa, 0x49fb, 0x49fc, - 0x49fd, 0x49fe, 0x49ff, 0x4a00, 0x4a01, 0x4a02, 0x4a02, 0x4a03, - 0x4a04, 0x4a05, 0x4a06, 0x4a07, 0x4a08, 0x4a09, 0x4a09, 0x4a0a, - 0x4a0b, 0x4a0c, 0x4a0d, 0x4a0e, 0x4a0f, 0x4a10, 0x4a11, 0x4a11, - 0x4a12, 0x4a13, 0x4a14, 0x4a15, 0x4a16, 0x4a17, 0x4a18, 0x4a18, - 0x4a19, 0x4a1a, 0x4a1b, 0x4a1c, 0x4a1d, 0x4a1e, 0x4a1f, 0x4a1f, - 0x4a20, 0x4a21, 0x4a22, 0x4a23, 0x4a24, 0x4a25, 0x4a25, 0x4a26, - 0x4a27, 0x4a28, 0x4a29, 0x4a2a, 0x4a2b, 0x4a2b, 0x4a2c, 0x4a2d, - 0x4a2e, 0x4a2f, 0x4a30, 0x4a31, 0x4a31, 0x4a32, 0x4a33, 0x4a34, - 0x4a35, 0x4a36, 0x4a36, 0x4a37, 0x4a38, 0x4a39, 0x4a3a, 0x4a3b, - 0x4a3c, 0x4a3c, 0x4a3d, 0x4a3e, 0x4a3f, 0x4a40, 0x4a41, 0x4a41, - 0x4a42, 0x4a43, 0x4a44, 0x4a45, 0x4a46, 0x4a46, 0x4a47, 0x4a48, - 0x4a49, 0x4a4a, 0x4a4b, 0x4a4b, 0x4a4c, 0x4a4d, 0x4a4e, 0x4a4f, - 0x4a50, 0x4a50, 0x4a51, 0x4a52, 0x4a53, 0x4a54, 0x4a54, 0x4a55, - 0x4a56, 0x4a57, 0x4a58, 0x4a59, 0x4a59, 0x4a5a, 0x4a5b, 0x4a5c, - 0x4a5d, 0x4a5d, 0x4a5e, 0x4a5f, 0x4a60, 0x4a61, 0x4a62, 0x4a62, - 0x4a63, 0x4a64, 0x4a65, 0x4a66, 0x4a66, 0x4a67, 0x4a68, 0x4a69, - 0x4a6a, 0x4a6a, 0x4a6b, 0x4a6c, 0x4a6d, 0x4a6e, 0x4a6e, 0x4a6f, - 0x4a70, 0x4a71, 0x4a72, 0x4a72, 0x4a73, 0x4a74, 0x4a75, 0x4a76, - 0x4a76, 0x4a77, 0x4a78, 0x4a79, 0x4a7a, 0x4a7a, 0x4a7b, 0x4a7c, - 0x4a7d, 0x4a7e, 0x4a7e, 0x4a7f, 0x4a80, 0x4a81, 0x4a82, 0x4a82, - 0x4a83, 0x4a84, 0x4a85, 0x4a85, 0x4a86, 0x4a87, 0x4a88, 0x4a89, - 0x4a89, 0x4a8a, 0x4a8b, 0x4a8c, 0x4a8c, 0x4a8d, 0x4a8e, 0x4a8f, - 0x4a90, 0x4a90, 0x4a91, 0x4a92, 0x4a93, 0x4a93, 0x4a94, 0x4a95, - 0x4a96, 0x4a97, 0x4a97, 0x4a98, 0x4a99, 0x4a9a, 0x4a9a, 0x4a9b, - 0x4a9c, 0x4a9d, 0x4a9d, 0x4a9e, 0x4a9f, 0x4aa0, 0x4aa1, 0x4aa1, - 0x4aa2, 0x4aa3, 0x4aa4, 0x4aa4, 0x4aa5, 0x4aa6, 0x4aa7, 0x4aa7, - 0x4aa8, 0x4aa9, 0x4aaa, 0x4aaa, 0x4aab, 0x4aac, 0x4aad, 0x4aad, - 0x4aae, 0x4aaf, 0x4ab0, 0x4ab0, 0x4ab1, 0x4ab2, 0x4ab3, 0x4ab3, - 0x4ab4, 0x4ab5, 0x4ab6, 0x4ab6, 0x4ab7, 0x4ab8, 0x4ab9, 0x4ab9, - 0x4aba, 0x4abb, 0x4abc, 0x4abc, 0x4abd, 0x4abe, 0x4abf, 0x4abf, - 0x4ac0, 0x4ac1, 0x4ac2, 0x4ac2, 0x4ac3, 0x4ac4, 0x4ac4, 0x4ac5, - 0x4ac6, 0x4ac7, 0x4ac7, 0x4ac8, 0x4ac9, 0x4aca, 0x4aca, 0x4acb, - 0x4acc, 0x4acd, 0x4acd, 0x4ace, 0x4acf, 0x4acf, 0x4ad0, 0x4ad1, - 0x4ad2, 0x4ad2, 0x4ad3, 0x4ad4, 0x4ad5, 0x4ad5, 0x4ad6, 0x4ad7, - 0x4ad7, 0x4ad8, 0x4ad9, 0x4ada, 0x4ada, 0x4adb, 0x4adc, 0x4add, - 0x4add, 0x4ade, 0x4adf, 0x4adf, 0x4ae0, 0x4ae1, 0x4ae2, 0x4ae2, - 0x4ae3, 0x4ae4, 0x4ae4, 0x4ae5, 0x4ae6, 0x4ae7, 0x4ae7, 0x4ae8, - 0x4ae9, 0x4ae9, 0x4aea, 0x4aeb, 0x4aec, 0x4aec, 0x4aed, 0x4aee, - 0x4aee, 0x4aef, 0x4af0, 0x4af0, 0x4af1, 0x4af2, 0x4af3, 0x4af3, - 0x4af4, 0x4af5, 0x4af5, 0x4af6, 0x4af7, 0x4af7, 0x4af8, 0x4af9, - 0x4afa, 0x4afa, 0x4afb, 0x4afc, 0x4afc, 0x4afd, 0x4afe, 0x4afe, - 0x4aff, 0x4b00, 0x4b01, 0x4b01, 0x4b02, 0x4b03, 0x4b03, 0x4b04, - 0x4b05, 0x4b05, 0x4b06, 0x4b07, 0x4b07, 0x4b08, 0x4b09, 0x4b0a, - 0x4b0a, 0x4b0b, 0x4b0c, 0x4b0c, 0x4b0d, 0x4b0e, 0x4b0e, 0x4b0f, - 0x4b10, 0x4b10, 0x4b11, 0x4b12, 0x4b12, 0x4b13, 0x4b14, 0x4b15, - 0x4b15, 0x4b16, 0x4b17, 0x4b17, 0x4b18, 0x4b19, 0x4b19, 0x4b1a, - 0x4b1b, 0x4b1b, 0x4b1c, 0x4b1d, 0x4b1d, 0x4b1e, 0x4b1f, 0x4b1f, - 0x4b20, 0x4b21, 0x4b21, 0x4b22, 0x4b23, 0x4b23, 0x4b24, 0x4b25, - 0x4b25, 0x4b26, 0x4b27, 0x4b27, 0x4b28, 0x4b29, 0x4b29, 0x4b2a, - 0x4b2b, 0x4b2b, 0x4b2c, 0x4b2d, 0x4b2d, 0x4b2e, 0x4b2f, 0x4b2f, - 0x4b30, 0x4b31, 0x4b31, 0x4b32, 0x4b33, 0x4b33, 0x4b34, 0x4b35, - 0x4b35, 0x4b36, 0x4b37, 0x4b37, 0x4b38, 0x4b39, 0x4b39, 0x4b3a, - 0x4b3b, 0x4b3b, 0x4b3c, 0x4b3d, 0x4b3d, 0x4b3e, 0x4b3f, 0x4b3f, - 0x4b40, 0x4b41, 0x4b41, 0x4b42, 0x4b42, 0x4b43, 0x4b44, 0x4b44, - 0x4b45, 0x4b46, 0x4b46, 0x4b47, 0x4b48, 0x4b48, 0x4b49, 0x4b4a, - 0x4b4a, 0x4b4b, 0x4b4c, 0x4b4c, 0x4b4d, 0x4b4d, 0x4b4e, 0x4b4f, - 0x4b4f, 0x4b50, 0x4b51, 0x4b51, 0x4b52, 0x4b53, 0x4b53, 0x4b54, - 0x4b55, 0x4b55, 0x4b56, 0x4b56, 0x4b57, 0x4b58, 0x4b58, 0x4b59, - 0x4b5a, 0x4b5a, 0x4b5b, 0x4b5c, 0x4b5c, 0x4b5d, 0x4b5d, 0x4b5e, - 0x4b5f, 0x4b5f, 0x4b60, 0x4b61, 0x4b61, 0x4b62, 0x4b63, 0x4b63, - 0x4b64, 0x4b64, 0x4b65, 0x4b66, 0x4b66, 0x4b67, 0x4b68, 0x4b68, - 0x4b69, 0x4b69, 0x4b6a, 0x4b6b, 0x4b6b, 0x4b6c, 0x4b6d, 0x4b6d, - 0x4b6e, 0x4b6e, 0x4b6f, 0x4b70, 0x4b70, 0x4b71, 0x4b72, 0x4b72, - 0x4b73, 0x4b73, 0x4b74, 0x4b75, 0x4b75, 0x4b76, 0x4b77, 0x4b77, - 0x4b78, 0x4b78, 0x4b79, 0x4b7a, 0x4b7a, 0x4b7b, 0x4b7b, 0x4b7c, - 0x4b7d, 0x4b7d, 0x4b7e, 0x4b7f, 0x4b7f, 0x4b80, 0x4b80, 0x4b81, - 0x4b82, 0x4b82, 0x4b83, 0x4b83, 0x4b84, 0x4b85, 0x4b85, 0x4b86, - 0x4b87, 0x4b87, 0x4b88, 0x4b88, 0x4b89, 0x4b8a, 0x4b8a, 0x4b8b, - 0x4b8b, 0x4b8c, 0x4b8d, 0x4b8d, 0x4b8e, 0x4b8e, 0x4b8f, 0x4b90, - 0x4b90, 0x4b91, 0x4b91, 0x4b92, 0x4b93, 0x4b93, 0x4b94, 0x4b94, - 0x4b95, 0x4b96, 0x4b96, 0x4b97, 0x4b97, 0x4b98, 0x4b99, 0x4b99, - 0x4b9a, 0x4b9a, 0x4b9b, 0x4b9c, 0x4b9c, 0x4b9d, 0x4b9d, 0x4b9e, - 0x4b9f, 0x4b9f, 0x4ba0, 0x4ba0, 0x4ba1, 0x4ba2, 0x4ba2, 0x4ba3, - 0x4ba3, 0x4ba4, 0x4ba5, 0x4ba5, 0x4ba6, 0x4ba6, 0x4ba7, 0x4ba8, - 0x4ba8, 0x4ba9, 0x4ba9, 0x4baa, 0x4baa, 0x4bab, 0x4bac, 0x4bac, - 0x4bad, 0x4bad, 0x4bae, 0x4baf, 0x4baf, 0x4bb0, 0x4bb0, 0x4bb1, - 0x4bb1, 0x4bb2, 0x4bb3, 0x4bb3, 0x4bb4, 0x4bb4, 0x4bb5, 0x4bb6, - 0x4bb6, 0x4bb7, 0x4bb7, 0x4bb8, 0x4bb8, 0x4bb9, 0x4bba, 0x4bba, - 0x4bbb, 0x4bbb, 0x4bbc, 0x4bbd, 0x4bbd, 0x4bbe, 0x4bbe, 0x4bbf, - 0x4bbf, 0x4bc0, 0x4bc1, 0x4bc1, 0x4bc2, 0x4bc2, 0x4bc3, 0x4bc3, - 0x4bc4, 0x4bc5, 0x4bc5, 0x4bc6, 0x4bc6, 0x4bc7, 0x4bc7, 0x4bc8, - 0x4bc9, 0x4bc9, 0x4bca, 0x4bca, 0x4bcb, 0x4bcb, 0x4bcc, 0x4bcd, - 0x4bcd, 0x4bce, 0x4bce, 0x4bcf, 0x4bcf, 0x4bd0, 0x4bd1, 0x4bd1, - 0x4bd2, 0x4bd2, 0x4bd3, 0x4bd3, 0x4bd4, 0x4bd5, 0x4bd5, 0x4bd6, - 0x4bd6, 0x4bd7, 0x4bd7, 0x4bd8, 0x4bd8, 0x4bd9, 0x4bda, 0x4bda, - 0x4bdb, 0x4bdb, 0x4bdc, 0x4bdc, 0x4bdd, 0x4bde, 0x4bde, 0x4bdf, - 0x4bdf, 0x4be0, 0x4be0, 0x4be1, 0x4be1, 0x4be2, 0x4be3, 0x4be3, - 0x4be4, 0x4be4, 0x4be5, 0x4be5, 0x4be6, 0x4be6, 0x4be7, 0x4be8, - 0x4be8, 0x4be9, 0x4be9, 0x4bea, 0x4bea, 0x4beb, 0x4beb, 0x4bec, - 0x4bed, 0x4bed, 0x4bee, 0x4bee, 0x4bef, 0x4bef, 0x4bf0, 0x4bf0, - 0x4bf1, 0x4bf1, 0x4bf2, 0x4bf3, 0x4bf3, 0x4bf4, 0x4bf4, 0x4bf5, - 0x4bf5, 0x4bf6, 0x4bf6, 0x4bf7, 0x4bf8, 0x4bf8, 0x4bf9, 0x4bf9, - 0x4bfa, 0x4bfa, 0x4bfb, 0x4bfb, 0x4bfc, 0x4bfc, 0x4bfd, 0x4bfe, - 0x4bfe, 0x4bff, 0x4bff, 0x4c00, 0x4c00, 0x4c00, 0x4c01, 0x4c01, - 0x4c01, 0x4c01, 0x4c02, 0x4c02, 0x4c02, 0x4c03, 0x4c03, 0x4c03, - 0x4c03, 0x4c04, 0x4c04, 0x4c04, 0x4c04, 0x4c05, 0x4c05, 0x4c05, - 0x4c05, 0x4c06, 0x4c06, 0x4c06, 0x4c07, 0x4c07, 0x4c07, 0x4c07, - 0x4c08, 0x4c08, 0x4c08, 0x4c08, 0x4c09, 0x4c09, 0x4c09, 0x4c09, - 0x4c0a, 0x4c0a, 0x4c0a, 0x4c0b, 0x4c0b, 0x4c0b, 0x4c0b, 0x4c0c, - 0x4c0c, 0x4c0c, 0x4c0c, 0x4c0d, 0x4c0d, 0x4c0d, 0x4c0d, 0x4c0e, - 0x4c0e, 0x4c0e, 0x4c0f, 0x4c0f, 0x4c0f, 0x4c0f, 0x4c10, 0x4c10, - 0x4c10, 0x4c10, 0x4c11, 0x4c11, 0x4c11, 0x4c11, 0x4c12, 0x4c12, - 0x4c12, 0x4c12, 0x4c13, 0x4c13, 0x4c13, 0x4c13, 0x4c14, 0x4c14, - 0x4c14, 0x4c15, 0x4c15, 0x4c15, 0x4c15, 0x4c16, 0x4c16, 0x4c16, - 0x4c16, 0x4c17, 0x4c17, 0x4c17, 0x4c17, 0x4c18, 0x4c18, 0x4c18, - 0x4c18, 0x4c19, 0x4c19, 0x4c19, 0x4c19, 0x4c1a, 0x4c1a, 0x4c1a, - 0x4c1a, 0x4c1b, 0x4c1b, 0x4c1b, 0x4c1c, 0x4c1c, 0x4c1c, 0x4c1c, - 0x4c1d, 0x4c1d, 0x4c1d, 0x4c1d, 0x4c1e, 0x4c1e, 0x4c1e, 0x4c1e, - 0x4c1f, 0x4c1f, 0x4c1f, 0x4c1f, 0x4c20, 0x4c20, 0x4c20, 0x4c20, - 0x4c21, 0x4c21, 0x4c21, 0x4c21, 0x4c22, 0x4c22, 0x4c22, 0x4c22, - 0x4c23, 0x4c23, 0x4c23, 0x4c23, 0x4c24, 0x4c24, 0x4c24, 0x4c24, - 0x4c25, 0x4c25, 0x4c25, 0x4c25, 0x4c26, 0x4c26, 0x4c26, 0x4c26, - 0x4c27, 0x4c27, 0x4c27, 0x4c27, 0x4c28, 0x4c28, 0x4c28, 0x4c28, - 0x4c29, 0x4c29, 0x4c2a, 0x4c2a, 0x4c2b, 0x4c2b, 0x4c2c, 0x4c2c, - 0x4c2d, 0x4c2d, 0x4c2e, 0x4c2e, 0x4c2f, 0x4c2f, 0x4c30, 0x4c30, - 0x4c31, 0x4c31, 0x4c32, 0x4c32, 0x4c33, 0x4c33, 0x4c34, 0x4c34, - 0x4c35, 0x4c35, 0x4c36, 0x4c36, 0x4c36, 0x4c37, 0x4c37, 0x4c38, - 0x4c38, 0x4c39, 0x4c39, 0x4c3a, 0x4c3a, 0x4c3b, 0x4c3b, 0x4c3c, - 0x4c3c, 0x4c3d, 0x4c3d, 0x4c3e, 0x4c3e, 0x4c3f, 0x4c3f, 0x4c40, - 0x4c40, 0x4c41, 0x4c41, 0x4c42, 0x4c42, 0x4c43, 0x4c43, 0x4c43, - 0x4c44, 0x4c44, 0x4c45, 0x4c45, 0x4c46, 0x4c46, 0x4c47, 0x4c47, - 0x4c48, 0x4c48, 0x4c49, 0x4c49, 0x4c4a, 0x4c4a, 0x4c4b, 0x4c4b, - 0x4c4b, 0x4c4c, 0x4c4c, 0x4c4d, 0x4c4d, 0x4c4e, 0x4c4e, 0x4c4f, - 0x4c4f, 0x4c50, 0x4c50, 0x4c51, 0x4c51, 0x4c52, 0x4c52, 0x4c52, - 0x4c53, 0x4c53, 0x4c54, 0x4c54, 0x4c55, 0x4c55, 0x4c56, 0x4c56, - 0x4c57, 0x4c57, 0x4c57, 0x4c58, 0x4c58, 0x4c59, 0x4c59, 0x4c5a, - 0x4c5a, 0x4c5b, 0x4c5b, 0x4c5c, 0x4c5c, 0x4c5c, 0x4c5d, 0x4c5d, - 0x4c5e, 0x4c5e, 0x4c5f, 0x4c5f, 0x4c60, 0x4c60, 0x4c61, 0x4c61, - 0x4c61, 0x4c62, 0x4c62, 0x4c63, 0x4c63, 0x4c64, 0x4c64, 0x4c65, - 0x4c65, 0x4c65, 0x4c66, 0x4c66, 0x4c67, 0x4c67, 0x4c68, 0x4c68, - 0x4c69, 0x4c69, 0x4c69, 0x4c6a, 0x4c6a, 0x4c6b, 0x4c6b, 0x4c6c, - 0x4c6c, 0x4c6c, 0x4c6d, 0x4c6d, 0x4c6e, 0x4c6e, 0x4c6f, 0x4c6f, - 0x4c70, 0x4c70, 0x4c70, 0x4c71, 0x4c71, 0x4c72, 0x4c72, 0x4c73, - 0x4c73, 0x4c73, 0x4c74, 0x4c74, 0x4c75, 0x4c75, 0x4c76, 0x4c76, - 0x4c76, 0x4c77, 0x4c77, 0x4c78, 0x4c78, 0x4c79, 0x4c79, 0x4c79, - 0x4c7a, 0x4c7a, 0x4c7b, 0x4c7b, 0x4c7c, 0x4c7c, 0x4c7c, 0x4c7d, - 0x4c7d, 0x4c7e, 0x4c7e, 0x4c7f, 0x4c7f, 0x4c7f, 0x4c80, 0x4c80, - 0x4c81, 0x4c81, 0x4c82, 0x4c82, 0x4c82, 0x4c83, 0x4c83, 0x4c84, - 0x4c84, 0x4c84, 0x4c85, 0x4c85, 0x4c86, 0x4c86, 0x4c87, 0x4c87, - 0x4c87, 0x4c88, 0x4c88, 0x4c89, 0x4c89, 0x4c89, 0x4c8a, 0x4c8a, - 0x4c8b, 0x4c8b, 0x4c8b, 0x4c8c, 0x4c8c, 0x4c8d, 0x4c8d, 0x4c8e, - 0x4c8e, 0x4c8e, 0x4c8f, 0x4c8f, 0x4c90, 0x4c90, 0x4c90, 0x4c91, - 0x4c91, 0x4c92, 0x4c92, 0x4c92, 0x4c93, 0x4c93, 0x4c94, 0x4c94, - 0x4c94, 0x4c95, 0x4c95, 0x4c96, 0x4c96, 0x4c97, 0x4c97, 0x4c97, - 0x4c98, 0x4c98, 0x4c99, 0x4c99, 0x4c99, 0x4c9a, 0x4c9a, 0x4c9b, - 0x4c9b, 0x4c9b, 0x4c9c, 0x4c9c, 0x4c9d, 0x4c9d, 0x4c9d, 0x4c9e, - 0x4c9e, 0x4c9f, 0x4c9f, 0x4c9f, 0x4ca0, 0x4ca0, 0x4ca0, 0x4ca1, - 0x4ca1, 0x4ca2, 0x4ca2, 0x4ca2, 0x4ca3, 0x4ca3, 0x4ca4, 0x4ca4, - 0x4ca4, 0x4ca5, 0x4ca5, 0x4ca6, 0x4ca6, 0x4ca6, 0x4ca7, 0x4ca7, - 0x4ca8, 0x4ca8, 0x4ca8, 0x4ca9, 0x4ca9, 0x4caa, 0x4caa, 0x4caa, - 0x4cab, 0x4cab, 0x4cab, 0x4cac, 0x4cac, 0x4cad, 0x4cad, 0x4cad, - 0x4cae, 0x4cae, 0x4caf, 0x4caf, 0x4caf, 0x4cb0, 0x4cb0, 0x4cb0, - 0x4cb1, 0x4cb1, 0x4cb2, 0x4cb2, 0x4cb2, 0x4cb3, 0x4cb3, 0x4cb4, - 0x4cb4, 0x4cb4, 0x4cb5, 0x4cb5, 0x4cb5, 0x4cb6, 0x4cb6, 0x4cb7, - 0x4cb7, 0x4cb7, 0x4cb8, 0x4cb8, 0x4cb8, 0x4cb9, 0x4cb9, 0x4cba, - 0x4cba, 0x4cba, 0x4cbb, 0x4cbb, 0x4cbb, 0x4cbc, 0x4cbc, 0x4cbd, - 0x4cbd, 0x4cbd, 0x4cbe, 0x4cbe, 0x4cbe, 0x4cbf, 0x4cbf, 0x4cc0, - 0x4cc0, 0x4cc0, 0x4cc1, 0x4cc1, 0x4cc1, 0x4cc2, 0x4cc2, 0x4cc3, - 0x4cc3, 0x4cc3, 0x4cc4, 0x4cc4, 0x4cc4, 0x4cc5, 0x4cc5, 0x4cc6, - 0x4cc6, 0x4cc6, 0x4cc7, 0x4cc7, 0x4cc7, 0x4cc8, 0x4cc8, 0x4cc8, - 0x4cc9, 0x4cc9, 0x4cca, 0x4cca, 0x4cca, 0x4ccb, 0x4ccb, 0x4ccb, - 0x4ccc, 0x4ccc, 0x4ccc, 0x4ccd, 0x4ccd, 0x4cce, 0x4cce, 0x4cce, - 0x4ccf, 0x4ccf, 0x4ccf, 0x4cd0, 0x4cd0, 0x4cd0, 0x4cd1, 0x4cd1, - 0x4cd2, 0x4cd2, 0x4cd2, 0x4cd3, 0x4cd3, 0x4cd3, 0x4cd4, 0x4cd4, - 0x4cd4, 0x4cd5, 0x4cd5, 0x4cd5, 0x4cd6, 0x4cd6, 0x4cd7, 0x4cd7, - 0x4cd7, 0x4cd8, 0x4cd8, 0x4cd8, 0x4cd9, 0x4cd9, 0x4cd9, 0x4cda, - 0x4cda, 0x4cda, 0x4cdb, 0x4cdb, 0x4cdb, 0x4cdc, 0x4cdc, 0x4cdd, - 0x4cdd, 0x4cdd, 0x4cde, 0x4cde, 0x4cde, 0x4cdf, 0x4cdf, 0x4cdf, - 0x4ce0, 0x4ce0, 0x4ce0, 0x4ce1, 0x4ce1, 0x4ce1, 0x4ce2, 0x4ce2, - 0x4ce2, 0x4ce3, 0x4ce3, 0x4ce4, 0x4ce4, 0x4ce4, 0x4ce5, 0x4ce5, - 0x4ce5, 0x4ce6, 0x4ce6, 0x4ce6, 0x4ce7, 0x4ce7, 0x4ce7, 0x4ce8, - 0x4ce8, 0x4ce8, 0x4ce9, 0x4ce9, 0x4ce9, 0x4cea, 0x4cea, 0x4cea, - 0x4ceb, 0x4ceb, 0x4ceb, 0x4cec, 0x4cec, 0x4cec, 0x4ced, 0x4ced, - 0x4ced, 0x4cee, 0x4cee, 0x4cef, 0x4cef, 0x4cef, 0x4cf0, 0x4cf0, - 0x4cf0, 0x4cf1, 0x4cf1, 0x4cf1, 0x4cf2, 0x4cf2, 0x4cf2, 0x4cf3, - 0x4cf3, 0x4cf3, 0x4cf4, 0x4cf4, 0x4cf4, 0x4cf5, 0x4cf5, 0x4cf5, - 0x4cf6, 0x4cf6, 0x4cf6, 0x4cf7, 0x4cf7, 0x4cf7, 0x4cf8, 0x4cf8, - 0x4cf8, 0x4cf9, 0x4cf9, 0x4cf9, 0x4cfa, 0x4cfa, 0x4cfa, 0x4cfb, - 0x4cfb, 0x4cfb, 0x4cfc, 0x4cfc, 0x4cfc, 0x4cfd, 0x4cfd, 0x4cfd, - 0x4cfe, 0x4cfe, 0x4cfe, 0x4cff, 0x4cff, 0x4cff, 0x4d00, 0x4d00, - 0x4d00, 0x4d01, 0x4d01, 0x4d01, 0x4d02, 0x4d02, 0x4d02, 0x4d03, - 0x4d03, 0x4d03, 0x4d03, 0x4d04, 0x4d04, 0x4d04, 0x4d05, 0x4d05, - 0x4d05, 0x4d06, 0x4d06, 0x4d06, 0x4d07, 0x4d07, 0x4d07, 0x4d08, - 0x4d08, 0x4d08, 0x4d09, 0x4d09, 0x4d09, 0x4d0a, 0x4d0a, 0x4d0a, - 0x4d0b, 0x4d0b, 0x4d0b, 0x4d0c, 0x4d0c, 0x4d0c, 0x4d0d, 0x4d0d, - 0x4d0d, 0x4d0d, 0x4d0e, 0x4d0e, 0x4d0e, 0x4d0f, 0x4d0f, 0x4d0f, - 0x4d10, 0x4d10, 0x4d10, 0x4d11, 0x4d11, 0x4d11, 0x4d12, 0x4d12, - 0x4d12, 0x4d13, 0x4d13, 0x4d13, 0x4d14, 0x4d14, 0x4d14, 0x4d14, - 0x4d15, 0x4d15, 0x4d15, 0x4d16, 0x4d16, 0x4d16, 0x4d17, 0x4d17, - 0x4d17, 0x4d18, 0x4d18, 0x4d18, 0x4d19, 0x4d19, 0x4d19, 0x4d1a, - 0x4d1a, 0x4d1a, 0x4d1a, 0x4d1b, 0x4d1b, 0x4d1b, 0x4d1c, 0x4d1c, - 0x4d1c, 0x4d1d, 0x4d1d, 0x4d1d, 0x4d1e, 0x4d1e, 0x4d1e, 0x4d1e, - 0x4d1f, 0x4d1f, 0x4d1f, 0x4d20, 0x4d20, 0x4d20, 0x4d21, 0x4d21, - 0x4d21, 0x4d22, 0x4d22, 0x4d22, 0x4d22, 0x4d23, 0x4d23, 0x4d23, - 0x4d24, 0x4d24, 0x4d24, 0x4d25, 0x4d25, 0x4d25, 0x4d26, 0x4d26, - 0x4d26, 0x4d26, 0x4d27, 0x4d27, 0x4d27, 0x4d28, 0x4d28, 0x4d28, - 0x4d29, 0x4d29, 0x4d29, 0x4d29, 0x4d2a, 0x4d2a, 0x4d2a, 0x4d2b, - 0x4d2b, 0x4d2b, 0x4d2c, 0x4d2c, 0x4d2c, 0x4d2d, 0x4d2d, 0x4d2d, - 0x4d2d, 0x4d2e, 0x4d2e, 0x4d2e, 0x4d2f, 0x4d2f, 0x4d2f, 0x4d30, - 0x4d30, 0x4d30, 0x4d30, 0x4d31, 0x4d31, 0x4d31, 0x4d32, 0x4d32, - 0x4d32, 0x4d32, 0x4d33, 0x4d33, 0x4d33, 0x4d34, 0x4d34, 0x4d34, - 0x4d35, 0x4d35, 0x4d35, 0x4d35, 0x4d36, 0x4d36, 0x4d36, 0x4d37, - 0x4d37, 0x4d37, 0x4d38, 0x4d38, 0x4d38, 0x4d38, 0x4d39, 0x4d39, - 0x4d39, 0x4d3a, 0x4d3a, 0x4d3a, 0x4d3a, 0x4d3b, 0x4d3b, 0x4d3b, - 0x4d3c, 0x4d3c, 0x4d3c, 0x4d3d, 0x4d3d, 0x4d3d, 0x4d3d, 0x4d3e, - 0x4d3e, 0x4d3e, 0x4d3f, 0x4d3f, 0x4d3f, 0x4d3f, 0x4d40, 0x4d40, - 0x4d40, 0x4d41, 0x4d41, 0x4d41, 0x4d41, 0x4d42, 0x4d42, 0x4d42, - 0x4d43, 0x4d43, 0x4d43, 0x4d43, 0x4d44, 0x4d44, 0x4d44, 0x4d45, - 0x4d45, 0x4d45, 0x4d45, 0x4d46, 0x4d46, 0x4d46, 0x4d47, 0x4d47, - 0x4d47, 0x4d47, 0x4d48, 0x4d48, 0x4d48, 0x4d49, 0x4d49, 0x4d49, - 0x4d49, 0x4d4a, 0x4d4a, 0x4d4a, 0x4d4b, 0x4d4b, 0x4d4b, 0x4d4b, - 0x4d4c, 0x4d4c, 0x4d4c, 0x4d4d, 0x4d4d, 0x4d4d, 0x4d4d, 0x4d4e, - 0x4d4e, 0x4d4e, 0x4d4f, 0x4d4f, 0x4d4f, 0x4d4f, 0x4d50, 0x4d50, - 0x4d50, 0x4d51, 0x4d51, 0x4d51, 0x4d51, 0x4d52, 0x4d52, 0x4d52, - 0x4d53, 0x4d53, 0x4d53, 0x4d53, 0x4d54, 0x4d54, 0x4d54, 0x4d54, - 0x4d55, 0x4d55, 0x4d55, 0x4d56, 0x4d56, 0x4d56, 0x4d56, 0x4d57, - 0x4d57, 0x4d57, 0x4d58, 0x4d58, 0x4d58, 0x4d58, 0x4d59, 0x4d59, - 0x4d59, 0x4d59, 0x4d5a, 0x4d5a, 0x4d5a, 0x4d5b, 0x4d5b, 0x4d5b, - 0x4d5b, 0x4d5c, 0x4d5c, 0x4d5c, 0x4d5c, 0x4d5d, 0x4d5d, 0x4d5d, - 0x4d5e, 0x4d5e, 0x4d5e, 0x4d5e, 0x4d5f, 0x4d5f, 0x4d5f, 0x4d5f, - 0x4d60, 0x4d60, 0x4d60, 0x4d61, 0x4d61, 0x4d61, 0x4d61, 0x4d62, - 0x4d62, 0x4d62, 0x4d62, 0x4d63, 0x4d63, 0x4d63, 0x4d64, 0x4d64, - 0x4d64, 0x4d64, 0x4d65, 0x4d65, 0x4d65, 0x4d65, 0x4d66, 0x4d66, - 0x4d66, 0x4d67, 0x4d67, 0x4d67, 0x4d67, 0x4d68, 0x4d68, 0x4d68, - 0x4d68, 0x4d69, 0x4d69, 0x4d69, 0x4d69, 0x4d6a, 0x4d6a, 0x4d6a, - 0x4d6b, 0x4d6b, 0x4d6b, 0x4d6b, 0x4d6c, 0x4d6c, 0x4d6c, 0x4d6c, - 0x4d6d, 0x4d6d, 0x4d6d, 0x4d6d, 0x4d6e, 0x4d6e, 0x4d6e, 0x4d6f, - 0x4d6f, 0x4d6f, 0x4d6f, 0x4d70, 0x4d70, 0x4d70, 0x4d70, 0x4d71, - 0x4d71, 0x4d71, 0x4d71, 0x4d72, 0x4d72, 0x4d72, 0x4d72, 0x4d73, - 0x4d73, 0x4d73, 0x4d74, 0x4d74, 0x4d74, 0x4d74, 0x4d75, 0x4d75, - 0x4d75, 0x4d75, 0x4d76, 0x4d76, 0x4d76, 0x4d76, 0x4d77, 0x4d77, - 0x4d77, 0x4d77, 0x4d78, 0x4d78, 0x4d78, 0x4d78, 0x4d79, 0x4d79, - 0x4d79, 0x4d7a, 0x4d7a, 0x4d7a, 0x4d7a, 0x4d7b, 0x4d7b, 0x4d7b, - 0x4d7b, 0x4d7c, 0x4d7c, 0x4d7c, 0x4d7c, 0x4d7d, 0x4d7d, 0x4d7d, - 0x4d7d, 0x4d7e, 0x4d7e, 0x4d7e, 0x4d7e, 0x4d7f, 0x4d7f, 0x4d7f, - 0x4d7f, 0x4d80, 0x4d80, 0x4d80, 0x4d80, 0x4d81, 0x4d81, 0x4d81, - 0x4d81, 0x4d82, 0x4d82, 0x4d82, 0x4d82, 0x4d83, 0x4d83, 0x4d83, - 0x4d84, 0x4d84, 0x4d84, 0x4d84, 0x4d85, 0x4d85, 0x4d85, 0x4d85, - 0x4d86, 0x4d86, 0x4d86, 0x4d86, 0x4d87, 0x4d87, 0x4d87, 0x4d87, - 0x4d88, 0x4d88, 0x4d88, 0x4d88, 0x4d89, 0x4d89, 0x4d89, 0x4d89, - 0x4d8a, 0x4d8a, 0x4d8a, 0x4d8a, 0x4d8b, 0x4d8b, 0x4d8b, 0x4d8b, - 0x4d8c, 0x4d8c, 0x4d8d, 0x4d8d, 0x4d8e, 0x4d8e, 0x4d8f, 0x4d8f, - 0x4d90, 0x4d90, 0x4d91, 0x4d91, 0x4d92, 0x4d92, 0x4d93, 0x4d93, - 0x4d94, 0x4d94, 0x4d94, 0x4d95, 0x4d95, 0x4d96, 0x4d96, 0x4d97, - 0x4d97, 0x4d98, 0x4d98, 0x4d99, 0x4d99, 0x4d9a, 0x4d9a, 0x4d9b, - 0x4d9b, 0x4d9c, 0x4d9c, 0x4d9d, 0x4d9d, 0x4d9e, 0x4d9e, 0x4d9f, - 0x4d9f, 0x4da0, 0x4da0, 0x4da1, 0x4da1, 0x4da2, 0x4da2, 0x4da3, - 0x4da3, 0x4da3, 0x4da4, 0x4da4, 0x4da5, 0x4da5, 0x4da6, 0x4da6, - 0x4da7, 0x4da7, 0x4da8, 0x4da8, 0x4da9, 0x4da9, 0x4daa, 0x4daa, - 0x4dab, 0x4dab, 0x4dac, 0x4dac, 0x4dac, 0x4dad, 0x4dad, 0x4dae, - 0x4dae, 0x4daf, 0x4daf, 0x4db0, 0x4db0, 0x4db1, 0x4db1, 0x4db2, - 0x4db2, 0x4db3, 0x4db3, 0x4db3, 0x4db4, 0x4db4, 0x4db5, 0x4db5, - 0x4db6, 0x4db6, 0x4db7, 0x4db7, 0x4db8, 0x4db8, 0x4db9, 0x4db9, - 0x4db9, 0x4dba, 0x4dba, 0x4dbb, 0x4dbb, 0x4dbc, 0x4dbc, 0x4dbd, - 0x4dbd, 0x4dbe, 0x4dbe, 0x4dbe, 0x4dbf, 0x4dbf, 0x4dc0, 0x4dc0, - 0x4dc1, 0x4dc1, 0x4dc2, 0x4dc2, 0x4dc3, 0x4dc3, 0x4dc3, 0x4dc4, - 0x4dc4, 0x4dc5, 0x4dc5, 0x4dc6, 0x4dc6, 0x4dc7, 0x4dc7, 0x4dc7, - 0x4dc8, 0x4dc8, 0x4dc9, 0x4dc9, 0x4dca, 0x4dca, 0x4dcb, 0x4dcb, - 0x4dcb, 0x4dcc, 0x4dcc, 0x4dcd, 0x4dcd, 0x4dce, 0x4dce, 0x4dce, - 0x4dcf, 0x4dcf, 0x4dd0, 0x4dd0, 0x4dd1, 0x4dd1, 0x4dd2, 0x4dd2, - 0x4dd2, 0x4dd3, 0x4dd3, 0x4dd4, 0x4dd4, 0x4dd5, 0x4dd5, 0x4dd5, - 0x4dd6, 0x4dd6, 0x4dd7, 0x4dd7, 0x4dd8, 0x4dd8, 0x4dd8, 0x4dd9, - 0x4dd9, 0x4dda, 0x4dda, 0x4ddb, 0x4ddb, 0x4ddb, 0x4ddc, 0x4ddc, - 0x4ddd, 0x4ddd, 0x4dde, 0x4dde, 0x4dde, 0x4ddf, 0x4ddf, 0x4de0, - 0x4de0, 0x4de1, 0x4de1, 0x4de1, 0x4de2, 0x4de2, 0x4de3, 0x4de3, - 0x4de4, 0x4de4, 0x4de4, 0x4de5, 0x4de5, 0x4de6, 0x4de6, 0x4de6, - 0x4de7, 0x4de7, 0x4de8, 0x4de8, 0x4de9, 0x4de9, 0x4de9, 0x4dea, - 0x4dea, 0x4deb, 0x4deb, 0x4deb, 0x4dec, 0x4dec, 0x4ded, 0x4ded, - 0x4dee, 0x4dee, 0x4dee, 0x4def, 0x4def, 0x4df0, 0x4df0, 0x4df0, - 0x4df1, 0x4df1, 0x4df2, 0x4df2, 0x4df2, 0x4df3, 0x4df3, 0x4df4, - 0x4df4, 0x4df5, 0x4df5, 0x4df5, 0x4df6, 0x4df6, 0x4df7, 0x4df7, - 0x4df7, 0x4df8, 0x4df8, 0x4df9, 0x4df9, 0x4df9, 0x4dfa, 0x4dfa, - 0x4dfb, 0x4dfb, 0x4dfb, 0x4dfc, 0x4dfc, 0x4dfd, 0x4dfd, 0x4dfd, - 0x4dfe, 0x4dfe, 0x4dff, 0x4dff, 0x4dff, 0x4e00, 0x4e00, 0x4e01, - 0x4e01, 0x4e01, 0x4e02, 0x4e02, 0x4e03, 0x4e03, 0x4e03, 0x4e04, - 0x4e04, 0x4e05, 0x4e05, 0x4e05, 0x4e06, 0x4e06, 0x4e07, 0x4e07, - 0x4e07, 0x4e08, 0x4e08, 0x4e09, 0x4e09, 0x4e09, 0x4e0a, 0x4e0a, - 0x4e0a, 0x4e0b, 0x4e0b, 0x4e0c, 0x4e0c, 0x4e0c, 0x4e0d, 0x4e0d, - 0x4e0e, 0x4e0e, 0x4e0e, 0x4e0f, 0x4e0f, 0x4e10, 0x4e10, 0x4e10, - 0x4e11, 0x4e11, 0x4e11, 0x4e12, 0x4e12, 0x4e13, 0x4e13, 0x4e13, - 0x4e14, 0x4e14, 0x4e15, 0x4e15, 0x4e15, 0x4e16, 0x4e16, 0x4e16, - 0x4e17, 0x4e17, 0x4e18, 0x4e18, 0x4e18, 0x4e19, 0x4e19, 0x4e19, - 0x4e1a, 0x4e1a, 0x4e1b, 0x4e1b, 0x4e1b, 0x4e1c, 0x4e1c, 0x4e1c, - 0x4e1d, 0x4e1d, 0x4e1e, 0x4e1e, 0x4e1e, 0x4e1f, 0x4e1f, 0x4e1f, - 0x4e20, 0x4e20, 0x4e21, 0x4e21, 0x4e21, 0x4e22, 0x4e22, 0x4e22, - 0x4e23, 0x4e23, 0x4e24, 0x4e24, 0x4e24, 0x4e25, 0x4e25, 0x4e25, - 0x4e26, 0x4e26, 0x4e27, 0x4e27, 0x4e27, 0x4e28, 0x4e28, 0x4e28, - 0x4e29, 0x4e29, 0x4e29, 0x4e2a, 0x4e2a, 0x4e2b, 0x4e2b, 0x4e2b, - 0x4e2c, 0x4e2c, 0x4e2c, 0x4e2d, 0x4e2d, 0x4e2e, 0x4e2e, 0x4e2e, - 0x4e2f, 0x4e2f, 0x4e2f, 0x4e30, 0x4e30, 0x4e30, 0x4e31, 0x4e31, - 0x4e32, 0x4e32, 0x4e32, 0x4e33, 0x4e33, 0x4e33, 0x4e34, 0x4e34, - 0x4e34, 0x4e35, 0x4e35, 0x4e35, 0x4e36, 0x4e36, 0x4e37, 0x4e37, - 0x4e37, 0x4e38, 0x4e38, 0x4e38, 0x4e39, 0x4e39, 0x4e39, 0x4e3a, - 0x4e3a, 0x4e3a, 0x4e3b, 0x4e3b, 0x4e3c, 0x4e3c, 0x4e3c, 0x4e3d, - 0x4e3d, 0x4e3d, 0x4e3e, 0x4e3e, 0x4e3e, 0x4e3f, 0x4e3f, 0x4e3f, - 0x4e40, 0x4e40, 0x4e40, 0x4e41, 0x4e41, 0x4e42, 0x4e42, 0x4e42, - 0x4e43, 0x4e43, 0x4e43, 0x4e44, 0x4e44, 0x4e44, 0x4e45, 0x4e45, - 0x4e45, 0x4e46, 0x4e46, 0x4e46, 0x4e47, 0x4e47, 0x4e47, 0x4e48, - 0x4e48, 0x4e48, 0x4e49, 0x4e49, 0x4e4a, 0x4e4a, 0x4e4a, 0x4e4b, - 0x4e4b, 0x4e4b, 0x4e4c, 0x4e4c, 0x4e4c, 0x4e4d, 0x4e4d, 0x4e4d, - 0x4e4e, 0x4e4e, 0x4e4e, 0x4e4f, 0x4e4f, 0x4e4f, 0x4e50, 0x4e50, - 0x4e50, 0x4e51, 0x4e51, 0x4e51, 0x4e52, 0x4e52, 0x4e52, 0x4e53, - 0x4e53, 0x4e53, 0x4e54, 0x4e54, 0x4e54, 0x4e55, 0x4e55, 0x4e55, - 0x4e56, 0x4e56, 0x4e56, 0x4e57, 0x4e57, 0x4e57, 0x4e58, 0x4e58, - 0x4e58, 0x4e59, 0x4e59, 0x4e59, 0x4e5a, 0x4e5a, 0x4e5a, 0x4e5b, - 0x4e5b, 0x4e5b, 0x4e5c, 0x4e5c, 0x4e5c, 0x4e5d, 0x4e5d, 0x4e5d, - 0x4e5e, 0x4e5e, 0x4e5e, 0x4e5f, 0x4e5f, 0x4e5f, 0x4e60, 0x4e60, - 0x4e60, 0x4e61, 0x4e61, 0x4e61, 0x4e62, 0x4e62, 0x4e62, 0x4e63, - 0x4e63, 0x4e63, 0x4e64, 0x4e64, 0x4e64, 0x4e65, 0x4e65, 0x4e65, - 0x4e66, 0x4e66, 0x4e66, 0x4e67, 0x4e67, 0x4e67, 0x4e68, 0x4e68, - 0x4e68, 0x4e69, 0x4e69, 0x4e69, 0x4e6a, 0x4e6a, 0x4e6a, 0x4e6b, - 0x4e6b, 0x4e6b, 0x4e6c, 0x4e6c, 0x4e6c, 0x4e6d, 0x4e6d, 0x4e6d, - 0x4e6d, 0x4e6e, 0x4e6e, 0x4e6e, 0x4e6f, 0x4e6f, 0x4e6f, 0x4e70, - 0x4e70, 0x4e70, 0x4e71, 0x4e71, 0x4e71, 0x4e72, 0x4e72, 0x4e72, - 0x4e73, 0x4e73, 0x4e73, 0x4e74, 0x4e74, 0x4e74, 0x4e75, 0x4e75, - 0x4e75, 0x4e75, 0x4e76, 0x4e76, 0x4e76, 0x4e77, 0x4e77, 0x4e77, - 0x4e78, 0x4e78, 0x4e78, 0x4e79, 0x4e79, 0x4e79, 0x4e7a, 0x4e7a, - 0x4e7a, 0x4e7b, 0x4e7b, 0x4e7b, 0x4e7b, 0x4e7c, 0x4e7c, 0x4e7c, - 0x4e7d, 0x4e7d, 0x4e7d, 0x4e7e, 0x4e7e, 0x4e7e, 0x4e7f, 0x4e7f, - 0x4e7f, 0x4e80, 0x4e80, 0x4e80, 0x4e80, 0x4e81, 0x4e81, 0x4e81, - 0x4e82, 0x4e82, 0x4e82, 0x4e83, 0x4e83, 0x4e83, 0x4e84, 0x4e84, - 0x4e84, 0x4e84, 0x4e85, 0x4e85, 0x4e85, 0x4e86, 0x4e86, 0x4e86, - 0x4e87, 0x4e87, 0x4e87, 0x4e88, 0x4e88, 0x4e88, 0x4e88, 0x4e89, - 0x4e89, 0x4e89, 0x4e8a, 0x4e8a, 0x4e8a, 0x4e8b, 0x4e8b, 0x4e8b, - 0x4e8b, 0x4e8c, 0x4e8c, 0x4e8c, 0x4e8d, 0x4e8d, 0x4e8d, 0x4e8e, - 0x4e8e, 0x4e8e, 0x4e8f, 0x4e8f, 0x4e8f, 0x4e8f, 0x4e90, 0x4e90, - 0x4e90, 0x4e91, 0x4e91, 0x4e91, 0x4e92, 0x4e92, 0x4e92, 0x4e92, - 0x4e93, 0x4e93, 0x4e93, 0x4e94, 0x4e94, 0x4e94, 0x4e94, 0x4e95, - 0x4e95, 0x4e95, 0x4e96, 0x4e96, 0x4e96, 0x4e97, 0x4e97, 0x4e97, - 0x4e97, 0x4e98, 0x4e98, 0x4e98, 0x4e99, 0x4e99, 0x4e99, 0x4e9a, - 0x4e9a, 0x4e9a, 0x4e9a, 0x4e9b, 0x4e9b, 0x4e9b, 0x4e9c, 0x4e9c, - 0x4e9c, 0x4e9c, 0x4e9d, 0x4e9d, 0x4e9d, 0x4e9e, 0x4e9e, 0x4e9e, - 0x4e9f, 0x4e9f, 0x4e9f, 0x4e9f, 0x4ea0, 0x4ea0, 0x4ea0, 0x4ea1, - 0x4ea1, 0x4ea1, 0x4ea1, 0x4ea2, 0x4ea2, 0x4ea2, 0x4ea3, 0x4ea3, - 0x4ea3, 0x4ea3, 0x4ea4, 0x4ea4, 0x4ea4, 0x4ea5, 0x4ea5, 0x4ea5, - 0x4ea5, 0x4ea6, 0x4ea6, 0x4ea6, 0x4ea7, 0x4ea7, 0x4ea7, 0x4ea8, - 0x4ea8, 0x4ea8, 0x4ea8, 0x4ea9, 0x4ea9, 0x4ea9, 0x4eaa, 0x4eaa, - 0x4eaa, 0x4eaa, 0x4eab, 0x4eab, 0x4eab, 0x4eac, 0x4eac, 0x4eac, - 0x4eac, 0x4ead, 0x4ead, 0x4ead, 0x4eae, 0x4eae, 0x4eae, 0x4eae, - 0x4eaf, 0x4eaf, 0x4eaf, 0x4eaf, 0x4eb0, 0x4eb0, 0x4eb0, 0x4eb1, - 0x4eb1, 0x4eb1, 0x4eb1, 0x4eb2, 0x4eb2, 0x4eb2, 0x4eb3, 0x4eb3, - 0x4eb3, 0x4eb3, 0x4eb4, 0x4eb4, 0x4eb4, 0x4eb5, 0x4eb5, 0x4eb5, - 0x4eb5, 0x4eb6, 0x4eb6, 0x4eb6, 0x4eb7, 0x4eb7, 0x4eb7, 0x4eb7, - 0x4eb8, 0x4eb8, 0x4eb8, 0x4eb8, 0x4eb9, 0x4eb9, 0x4eb9, 0x4eba, - 0x4eba, 0x4eba, 0x4eba, 0x4ebb, 0x4ebb, 0x4ebb, 0x4ebc, 0x4ebc, - 0x4ebc, 0x4ebc, 0x4ebd, 0x4ebd, 0x4ebd, 0x4ebd, 0x4ebe, 0x4ebe, - 0x4ebe, 0x4ebf, 0x4ebf, 0x4ebf, 0x4ebf, 0x4ec0, 0x4ec0, 0x4ec0, - 0x4ec0, 0x4ec1, 0x4ec1, 0x4ec1, 0x4ec2, 0x4ec2, 0x4ec2, 0x4ec2, - 0x4ec3, 0x4ec3, 0x4ec3, 0x4ec3, 0x4ec4, 0x4ec4, 0x4ec4, 0x4ec5, - 0x4ec5, 0x4ec5, 0x4ec5, 0x4ec6, 0x4ec6, 0x4ec6, 0x4ec6, 0x4ec7, - 0x4ec7, 0x4ec7, 0x4ec8, 0x4ec8, 0x4ec8, 0x4ec8, 0x4ec9, 0x4ec9, - 0x4ec9, 0x4ec9, 0x4eca, 0x4eca, 0x4eca, 0x4eca, 0x4ecb, 0x4ecb, - 0x4ecb, 0x4ecc, 0x4ecc, 0x4ecc, 0x4ecc, 0x4ecd, 0x4ecd, 0x4ecd, - 0x4ecd, 0x4ece, 0x4ece, 0x4ece, 0x4ece, 0x4ecf, 0x4ecf, 0x4ecf, - 0x4ed0, 0x4ed0, 0x4ed0, 0x4ed0, 0x4ed1, 0x4ed1, 0x4ed1, 0x4ed1, - 0x4ed2, 0x4ed2, 0x4ed2, 0x4ed2, 0x4ed3, 0x4ed3, 0x4ed3, 0x4ed4, - 0x4ed4, 0x4ed4, 0x4ed4, 0x4ed5, 0x4ed5, 0x4ed5, 0x4ed5, 0x4ed6, - 0x4ed6, 0x4ed6, 0x4ed6, 0x4ed7, 0x4ed7, 0x4ed7, 0x4ed7, 0x4ed8, - 0x4ed8, 0x4ed8, 0x4ed8, 0x4ed9, 0x4ed9, 0x4ed9, 0x4eda, 0x4eda, - 0x4eda, 0x4eda, 0x4edb, 0x4edb, 0x4edb, 0x4edb, 0x4edc, 0x4edc, - 0x4edc, 0x4edc, 0x4edd, 0x4edd, 0x4edd, 0x4edd, 0x4ede, 0x4ede, - 0x4ede, 0x4ede, 0x4edf, 0x4edf, 0x4edf, 0x4edf, 0x4ee0, 0x4ee0, - 0x4ee0, 0x4ee1, 0x4ee1, 0x4ee1, 0x4ee1, 0x4ee2, 0x4ee2, 0x4ee2, - 0x4ee2, 0x4ee3, 0x4ee3, 0x4ee3, 0x4ee3, 0x4ee4, 0x4ee4, 0x4ee4, - 0x4ee4, 0x4ee5, 0x4ee5, 0x4ee5, 0x4ee5, 0x4ee6, 0x4ee6, 0x4ee6, - 0x4ee6, 0x4ee7, 0x4ee7, 0x4ee7, 0x4ee7, 0x4ee8, 0x4ee8, 0x4ee8, - 0x4ee8, 0x4ee9, 0x4ee9, 0x4ee9, 0x4ee9, 0x4eea, 0x4eea, 0x4eea, - 0x4eea, 0x4eeb, 0x4eeb, 0x4eeb, 0x4eeb, 0x4eec, 0x4eec, 0x4eec, - 0x4eec, 0x4eed, 0x4eed, 0x4eed, 0x4eed, 0x4eee, 0x4eee, 0x4eee, - 0x4eee, 0x4eef, 0x4eef, 0x4ef0, 0x4ef0, 0x4ef1, 0x4ef1, 0x4ef2, - 0x4ef2, 0x4ef3, 0x4ef3, 0x4ef4, 0x4ef4, 0x4ef5, 0x4ef5, 0x4ef6, - 0x4ef6, 0x4ef7, 0x4ef7, 0x4ef8, 0x4ef8, 0x4ef9, 0x4ef9, 0x4efa, - 0x4efa, 0x4efb, 0x4efb, 0x4efc, 0x4efc, 0x4efd, 0x4efd, 0x4efe, - 0x4efe, 0x4eff, 0x4eff, 0x4f00, 0x4f00, 0x4f01, 0x4f01, 0x4f02, - 0x4f02, 0x4f03, 0x4f03, 0x4f04, 0x4f04, 0x4f04, 0x4f05, 0x4f05, - 0x4f06, 0x4f06, 0x4f07, 0x4f07, 0x4f08, 0x4f08, 0x4f09, 0x4f09, - 0x4f0a, 0x4f0a, 0x4f0b, 0x4f0b, 0x4f0c, 0x4f0c, 0x4f0d, 0x4f0d, - 0x4f0d, 0x4f0e, 0x4f0e, 0x4f0f, 0x4f0f, 0x4f10, 0x4f10, 0x4f11, - 0x4f11, 0x4f12, 0x4f12, 0x4f13, 0x4f13, 0x4f14, 0x4f14, 0x4f15, - 0x4f15, 0x4f15, 0x4f16, 0x4f16, 0x4f17, 0x4f17, 0x4f18, 0x4f18, - 0x4f19, 0x4f19, 0x4f1a, 0x4f1a, 0x4f1b, 0x4f1b, 0x4f1b, 0x4f1c, - 0x4f1c, 0x4f1d, 0x4f1d, 0x4f1e, 0x4f1e, 0x4f1f, 0x4f1f, 0x4f20, - 0x4f20, 0x4f20, 0x4f21, 0x4f21, 0x4f22, 0x4f22, 0x4f23, 0x4f23, - 0x4f24, 0x4f24, 0x4f25, 0x4f25, 0x4f25, 0x4f26, 0x4f26, 0x4f27, - 0x4f27, 0x4f28, 0x4f28, 0x4f29, 0x4f29, 0x4f29, 0x4f2a, 0x4f2a, - 0x4f2b, 0x4f2b, 0x4f2c, 0x4f2c, 0x4f2d, 0x4f2d, 0x4f2d, 0x4f2e, - 0x4f2e, 0x4f2f, 0x4f2f, 0x4f30, 0x4f30, 0x4f31, 0x4f31, 0x4f31, - 0x4f32, 0x4f32, 0x4f33, 0x4f33, 0x4f34, 0x4f34, 0x4f34, 0x4f35, - 0x4f35, 0x4f36, 0x4f36, 0x4f37, 0x4f37, 0x4f37, 0x4f38, 0x4f38, - 0x4f39, 0x4f39, 0x4f3a, 0x4f3a, 0x4f3b, 0x4f3b, 0x4f3b, 0x4f3c, - 0x4f3c, 0x4f3d, 0x4f3d, 0x4f3e, 0x4f3e, 0x4f3e, 0x4f3f, 0x4f3f, - 0x4f40, 0x4f40, 0x4f41, 0x4f41, 0x4f41, 0x4f42, 0x4f42, 0x4f43, - 0x4f43, 0x4f43, 0x4f44, 0x4f44, 0x4f45, 0x4f45, 0x4f46, 0x4f46, - 0x4f46, 0x4f47, 0x4f47, 0x4f48, 0x4f48, 0x4f49, 0x4f49, 0x4f49, - 0x4f4a, 0x4f4a, 0x4f4b, 0x4f4b, 0x4f4b, 0x4f4c, 0x4f4c, 0x4f4d, - 0x4f4d, 0x4f4e, 0x4f4e, 0x4f4e, 0x4f4f, 0x4f4f, 0x4f50, 0x4f50, - 0x4f50, 0x4f51, 0x4f51, 0x4f52, 0x4f52, 0x4f53, 0x4f53, 0x4f53, - 0x4f54, 0x4f54, 0x4f55, 0x4f55, 0x4f55, 0x4f56, 0x4f56, 0x4f57, - 0x4f57, 0x4f57, 0x4f58, 0x4f58, 0x4f59, 0x4f59, 0x4f59, 0x4f5a, - 0x4f5a, 0x4f5b, 0x4f5b, 0x4f5b, 0x4f5c, 0x4f5c, 0x4f5d, 0x4f5d, - 0x4f5d, 0x4f5e, 0x4f5e, 0x4f5f, 0x4f5f, 0x4f60, 0x4f60, 0x4f60, - 0x4f61, 0x4f61, 0x4f62, 0x4f62, 0x4f62, 0x4f63, 0x4f63, 0x4f63, - 0x4f64, 0x4f64, 0x4f65, 0x4f65, 0x4f65, 0x4f66, 0x4f66, 0x4f67, - 0x4f67, 0x4f67, 0x4f68, 0x4f68, 0x4f69, 0x4f69, 0x4f69, 0x4f6a, - 0x4f6a, 0x4f6b, 0x4f6b, 0x4f6b, 0x4f6c, 0x4f6c, 0x4f6d, 0x4f6d, - 0x4f6d, 0x4f6e, 0x4f6e, 0x4f6f, 0x4f6f, 0x4f6f, 0x4f70, 0x4f70, - 0x4f70, 0x4f71, 0x4f71, 0x4f72, 0x4f72, 0x4f72, 0x4f73, 0x4f73, - 0x4f74, 0x4f74, 0x4f74, 0x4f75, 0x4f75, 0x4f75, 0x4f76, 0x4f76, - 0x4f77, 0x4f77, 0x4f77, 0x4f78, 0x4f78, 0x4f79, 0x4f79, 0x4f79, - 0x4f7a, 0x4f7a, 0x4f7a, 0x4f7b, 0x4f7b, 0x4f7c, 0x4f7c, 0x4f7c, - 0x4f7d, 0x4f7d, 0x4f7d, 0x4f7e, 0x4f7e, 0x4f7f, 0x4f7f, 0x4f7f, - 0x4f80, 0x4f80, 0x4f80, 0x4f81, 0x4f81, 0x4f82, 0x4f82, 0x4f82, - 0x4f83, 0x4f83, 0x4f83, 0x4f84, 0x4f84, 0x4f85, 0x4f85, 0x4f85, - 0x4f86, 0x4f86, 0x4f86, 0x4f87, 0x4f87, 0x4f88, 0x4f88, 0x4f88, - 0x4f89, 0x4f89, 0x4f89, 0x4f8a, 0x4f8a, 0x4f8b, 0x4f8b, 0x4f8b, - 0x4f8c, 0x4f8c, 0x4f8c, 0x4f8d, 0x4f8d, 0x4f8d, 0x4f8e, 0x4f8e, - 0x4f8f, 0x4f8f, 0x4f8f, 0x4f90, 0x4f90, 0x4f90, 0x4f91, 0x4f91, - 0x4f92, 0x4f92, 0x4f92, 0x4f93, 0x4f93, 0x4f93, 0x4f94, 0x4f94, - 0x4f94, 0x4f95, 0x4f95, 0x4f95, 0x4f96, 0x4f96, 0x4f97, 0x4f97, - 0x4f97, 0x4f98, 0x4f98, 0x4f98, 0x4f99, 0x4f99, 0x4f99, 0x4f9a, - 0x4f9a, 0x4f9b, 0x4f9b, 0x4f9b, 0x4f9c, 0x4f9c, 0x4f9c, 0x4f9d, - 0x4f9d, 0x4f9d, 0x4f9e, 0x4f9e, 0x4f9e, 0x4f9f, 0x4f9f, 0x4f9f, - 0x4fa0, 0x4fa0, 0x4fa1, 0x4fa1, 0x4fa1, 0x4fa2, 0x4fa2, 0x4fa2, - 0x4fa3, 0x4fa3, 0x4fa3, 0x4fa4, 0x4fa4, 0x4fa4, 0x4fa5, 0x4fa5, - 0x4fa5, 0x4fa6, 0x4fa6, 0x4fa7, 0x4fa7, 0x4fa7, 0x4fa8, 0x4fa8, - 0x4fa8, 0x4fa9, 0x4fa9, 0x4fa9, 0x4faa, 0x4faa, 0x4faa, 0x4fab, - 0x4fab, 0x4fab, 0x4fac, 0x4fac, 0x4fac, 0x4fad, 0x4fad, 0x4fad, - 0x4fae, 0x4fae, 0x4fae, 0x4faf, 0x4faf, 0x4fb0, 0x4fb0, 0x4fb0, - 0x4fb1, 0x4fb1, 0x4fb1, 0x4fb2, 0x4fb2, 0x4fb2, 0x4fb3, 0x4fb3, - 0x4fb3, 0x4fb4, 0x4fb4, 0x4fb4, 0x4fb5, 0x4fb5, 0x4fb5, 0x4fb6, - 0x4fb6, 0x4fb6, 0x4fb7, 0x4fb7, 0x4fb7, 0x4fb8, 0x4fb8, 0x4fb8, - 0x4fb9, 0x4fb9, 0x4fb9, 0x4fba, 0x4fba, 0x4fba, 0x4fbb, 0x4fbb, - 0x4fbb, 0x4fbc, 0x4fbc, 0x4fbc, 0x4fbd, 0x4fbd, 0x4fbd, 0x4fbe, - 0x4fbe, 0x4fbe, 0x4fbf, 0x4fbf, 0x4fbf, 0x4fc0, 0x4fc0, 0x4fc0, - 0x4fc1, 0x4fc1, 0x4fc1, 0x4fc2, 0x4fc2, 0x4fc2, 0x4fc3, 0x4fc3, - 0x4fc3, 0x4fc4, 0x4fc4, 0x4fc4, 0x4fc5, 0x4fc5, 0x4fc5, 0x4fc6, - 0x4fc6, 0x4fc6, 0x4fc7, 0x4fc7, 0x4fc7, 0x4fc8, 0x4fc8, 0x4fc8, - 0x4fc9, 0x4fc9, 0x4fc9, 0x4fca, 0x4fca, 0x4fca, 0x4fcb, 0x4fcb, - 0x4fcb, 0x4fcc, 0x4fcc, 0x4fcc, 0x4fcd, 0x4fcd, 0x4fcd, 0x4fcd, - 0x4fce, 0x4fce, 0x4fce, 0x4fcf, 0x4fcf, 0x4fcf, 0x4fd0, 0x4fd0, - 0x4fd0, 0x4fd1, 0x4fd1, 0x4fd1, 0x4fd2, 0x4fd2, 0x4fd2, 0x4fd3, - 0x4fd3, 0x4fd3, 0x4fd4, 0x4fd4, 0x4fd4, 0x4fd5, 0x4fd5, 0x4fd5, - 0x4fd6, 0x4fd6, 0x4fd6, 0x4fd6, 0x4fd7, 0x4fd7, 0x4fd7, 0x4fd8, - 0x4fd8, 0x4fd8, 0x4fd9, 0x4fd9, 0x4fd9, 0x4fda, 0x4fda, 0x4fda, - 0x4fdb, 0x4fdb, 0x4fdb, 0x4fdc, 0x4fdc, 0x4fdc, 0x4fdc, 0x4fdd, - 0x4fdd, 0x4fdd, 0x4fde, 0x4fde, 0x4fde, 0x4fdf, 0x4fdf, 0x4fdf, - 0x4fe0, 0x4fe0, 0x4fe0, 0x4fe1, 0x4fe1, 0x4fe1, 0x4fe1, 0x4fe2, - 0x4fe2, 0x4fe2, 0x4fe3, 0x4fe3, 0x4fe3, 0x4fe4, 0x4fe4, 0x4fe4, - 0x4fe5, 0x4fe5, 0x4fe5, 0x4fe5, 0x4fe6, 0x4fe6, 0x4fe6, 0x4fe7, - 0x4fe7, 0x4fe7, 0x4fe8, 0x4fe8, 0x4fe8, 0x4fe9, 0x4fe9, 0x4fe9, - 0x4fe9, 0x4fea, 0x4fea, 0x4fea, 0x4feb, 0x4feb, 0x4feb, 0x4fec, - 0x4fec, 0x4fec, 0x4fed, 0x4fed, 0x4fed, 0x4fed, 0x4fee, 0x4fee, - 0x4fee, 0x4fef, 0x4fef, 0x4fef, 0x4ff0, 0x4ff0, 0x4ff0, 0x4ff0, - 0x4ff1, 0x4ff1, 0x4ff1, 0x4ff2, 0x4ff2, 0x4ff2, 0x4ff3, 0x4ff3, - 0x4ff3, 0x4ff3, 0x4ff4, 0x4ff4, 0x4ff4, 0x4ff5, 0x4ff5, 0x4ff5, - 0x4ff6, 0x4ff6, 0x4ff6, 0x4ff6, 0x4ff7, 0x4ff7, 0x4ff7, 0x4ff8, - 0x4ff8, 0x4ff8, 0x4ff9, 0x4ff9, 0x4ff9, 0x4ff9, 0x4ffa, 0x4ffa, - 0x4ffa, 0x4ffb, 0x4ffb, 0x4ffb, 0x4ffc, 0x4ffc, 0x4ffc, 0x4ffc, - 0x4ffd, 0x4ffd, 0x4ffd, 0x4ffe, 0x4ffe, 0x4ffe, 0x4ffe, 0x4fff, - 0x4fff, 0x4fff, 0x5000, 0x5000, 0x5000, 0x5000, 0x5000, 0x5001, - 0x5001, 0x5001, 0x5001, 0x5001, 0x5001, 0x5001, 0x5002, 0x5002, - 0x5002, 0x5002, 0x5002, 0x5002, 0x5002, 0x5003, 0x5003, 0x5003, - 0x5003, 0x5003, 0x5003, 0x5003, 0x5004, 0x5004, 0x5004, 0x5004, - 0x5004, 0x5004, 0x5004, 0x5005, 0x5005, 0x5005, 0x5005, 0x5005, - 0x5005, 0x5005, 0x5006, 0x5006, 0x5006, 0x5006, 0x5006, 0x5006, - 0x5006, 0x5007, 0x5007, 0x5007, 0x5007, 0x5007, 0x5007, 0x5007, - 0x5008, 0x5008, 0x5008, 0x5008, 0x5008, 0x5008, 0x5008, 0x5009, - 0x5009, 0x5009, 0x5009, 0x5009, 0x5009, 0x5009, 0x500a, 0x500a, - 0x500a, 0x500a, 0x500a, 0x500a, 0x500a, 0x500b, 0x500b, 0x500b, - 0x500b, 0x500b, 0x500b, 0x500b, 0x500c, 0x500c, 0x500c, 0x500c, - 0x500c, 0x500c, 0x500c, 0x500d, 0x500d, 0x500d, 0x500d, 0x500d, - 0x500d, 0x500d, 0x500e, 0x500e, 0x500e, 0x500e, 0x500e, 0x500e, - 0x500e, 0x500f, 0x500f, 0x500f, 0x500f, 0x500f, 0x500f, 0x500f, - 0x500f, 0x5010, 0x5010, 0x5010, 0x5010, 0x5010, 0x5010, 0x5010, - 0x5011, 0x5011, 0x5011, 0x5011, 0x5011, 0x5011, 0x5011, 0x5012, - 0x5012, 0x5012, 0x5012, 0x5012, 0x5012, 0x5012, 0x5012, 0x5013, - 0x5013, 0x5013, 0x5013, 0x5013, 0x5013, 0x5013, 0x5014, 0x5014, - 0x5014, 0x5014, 0x5014, 0x5014, 0x5014, 0x5015, 0x5015, 0x5015, - 0x5015, 0x5015, 0x5015, 0x5015, 0x5015, 0x5016, 0x5016, 0x5016, - 0x5016, 0x5016, 0x5016, 0x5016, 0x5017, 0x5017, 0x5017, 0x5017, - 0x5017, 0x5017, 0x5017, 0x5017, 0x5018, 0x5018, 0x5018, 0x5018, - 0x5018, 0x5018, 0x5018, 0x5019, 0x5019, 0x5019, 0x5019, 0x5019, - 0x5019, 0x5019, 0x5019, 0x501a, 0x501a, 0x501a, 0x501a, 0x501a, - 0x501a, 0x501a, 0x501b, 0x501b, 0x501b, 0x501b, 0x501b, 0x501b, - 0x501b, 0x501b, 0x501c, 0x501c, 0x501c, 0x501c, 0x501c, 0x501c, - 0x501c, 0x501d, 0x501d, 0x501d, 0x501d, 0x501d, 0x501d, 0x501d, - 0x501d, 0x501e, 0x501e, 0x501e, 0x501e, 0x501e, 0x501e, 0x501e, - 0x501e, 0x501f, 0x501f, 0x501f, 0x501f, 0x501f, 0x501f, 0x501f, - 0x5020, 0x5020, 0x5020, 0x5020, 0x5020, 0x5020, 0x5020, 0x5020, - 0x5021, 0x5021, 0x5021, 0x5021, 0x5021, 0x5021, 0x5021, 0x5021, - 0x5022, 0x5022, 0x5022, 0x5022, 0x5022, 0x5022, 0x5022, 0x5022, - 0x5023, 0x5023, 0x5023, 0x5023, 0x5023, 0x5023, 0x5023, 0x5023, - 0x5024, 0x5024, 0x5024, 0x5024, 0x5024, 0x5024, 0x5024, 0x5025, - 0x5025, 0x5025, 0x5025, 0x5025, 0x5025, 0x5025, 0x5025, 0x5026, - 0x5026, 0x5026, 0x5026, 0x5026, 0x5026, 0x5026, 0x5026, 0x5027, - 0x5027, 0x5027, 0x5027, 0x5027, 0x5027, 0x5027, 0x5027, 0x5028, - 0x5028, 0x5028, 0x5028, 0x5028, 0x5028, 0x5028, 0x5028, 0x5029, - 0x5029, 0x5029, 0x5029, 0x5029, 0x502a, 0x502a, 0x502a, 0x502a, - 0x502b, 0x502b, 0x502b, 0x502b, 0x502c, 0x502c, 0x502c, 0x502c, - 0x502d, 0x502d, 0x502d, 0x502d, 0x502e, 0x502e, 0x502e, 0x502e, - 0x502f, 0x502f, 0x502f, 0x502f, 0x5030, 0x5030, 0x5030, 0x5030, - 0x5031, 0x5031, 0x5031, 0x5031, 0x5032, 0x5032, 0x5032, 0x5032, - 0x5032, 0x5033, 0x5033, 0x5033, 0x5033, 0x5034, 0x5034, 0x5034, - 0x5034, 0x5035, 0x5035, 0x5035, 0x5035, 0x5036, 0x5036, 0x5036, - 0x5036, 0x5037, 0x5037, 0x5037, 0x5037, 0x5037, 0x5038, 0x5038, - 0x5038, 0x5038, 0x5039, 0x5039, 0x5039, 0x5039, 0x503a, 0x503a, - 0x503a, 0x503a, 0x503b, 0x503b, 0x503b, 0x503b, 0x503b, 0x503c, - 0x503c, 0x503c, 0x503c, 0x503d, 0x503d, 0x503d, 0x503d, 0x503e, - 0x503e, 0x503e, 0x503e, 0x503e, 0x503f, 0x503f, 0x503f, 0x503f, - 0x5040, 0x5040, 0x5040, 0x5040, 0x5041, 0x5041, 0x5041, 0x5041, - 0x5041, 0x5042, 0x5042, 0x5042, 0x5042, 0x5043, 0x5043, 0x5043, - 0x5043, 0x5043, 0x5044, 0x5044, 0x5044, 0x5044, 0x5045, 0x5045, - 0x5045, 0x5045, 0x5045, 0x5046, 0x5046, 0x5046, 0x5046, 0x5047, - 0x5047, 0x5047, 0x5047, 0x5047, 0x5048, 0x5048, 0x5048, 0x5048, - 0x5049, 0x5049, 0x5049, 0x5049, 0x5049, 0x504a, 0x504a, 0x504a, - 0x504a, 0x504b, 0x504b, 0x504b, 0x504b, 0x504b, 0x504c, 0x504c, - 0x504c, 0x504c, 0x504d, 0x504d, 0x504d, 0x504d, 0x504d, 0x504e, - 0x504e, 0x504e, 0x504e, 0x504e, 0x504f, 0x504f, 0x504f, 0x504f, - 0x5050, 0x5050, 0x5050, 0x5050, 0x5050, 0x5051, 0x5051, 0x5051, - 0x5051, 0x5051, 0x5052, 0x5052, 0x5052, 0x5052, 0x5053, 0x5053, - 0x5053, 0x5053, 0x5053, 0x5054, 0x5054, 0x5054, 0x5054, 0x5054, - 0x5055, 0x5055, 0x5055, 0x5055, 0x5056, 0x5056, 0x5056, 0x5056, - 0x5056, 0x5057, 0x5057, 0x5057, 0x5057, 0x5057, 0x5058, 0x5058, - 0x5058, 0x5058, 0x5058, 0x5059, 0x5059, 0x5059, 0x5059, 0x5059, - 0x505a, 0x505a, 0x505a, 0x505a, 0x505a, 0x505b, 0x505b, 0x505b, - 0x505b, 0x505c, 0x505c, 0x505c, 0x505c, 0x505c, 0x505d, 0x505d, - 0x505d, 0x505d, 0x505d, 0x505e, 0x505e, 0x505e, 0x505e, 0x505e, - 0x505f, 0x505f, 0x505f, 0x505f, 0x505f, 0x5060, 0x5060, 0x5060, - 0x5060, 0x5060, 0x5061, 0x5061, 0x5061, 0x5061, 0x5061, 0x5062, - 0x5062, 0x5062, 0x5062, 0x5062, 0x5063, 0x5063, 0x5063, 0x5063, - 0x5063, 0x5064, 0x5064, 0x5064, 0x5064, 0x5064, 0x5065, 0x5065, - 0x5065, 0x5065, 0x5065, 0x5066, 0x5066, 0x5066, 0x5066, 0x5066, - 0x5067, 0x5067, 0x5067, 0x5067, 0x5067, 0x5068, 0x5068, 0x5068, - 0x5068, 0x5068, 0x5069, 0x5069, 0x5069, 0x5069, 0x5069, 0x5069, - 0x506a, 0x506a, 0x506a, 0x506a, 0x506a, 0x506b, 0x506b, 0x506b, - 0x506b, 0x506b, 0x506c, 0x506c, 0x506c, 0x506c, 0x506c, 0x506d, - 0x506d, 0x506d, 0x506d, 0x506d, 0x506e, 0x506e, 0x506e, 0x506e, - 0x506e, 0x506e, 0x506f, 0x506f, 0x506f, 0x506f, 0x506f, 0x5070, - 0x5070, 0x5070, 0x5070, 0x5070, 0x5071, 0x5071, 0x5071, 0x5071, - 0x5071, 0x5072, 0x5072, 0x5072, 0x5072, 0x5072, 0x5072, 0x5073, - 0x5073, 0x5073, 0x5073, 0x5073, 0x5074, 0x5074, 0x5074, 0x5074, - 0x5074, 0x5074, 0x5075, 0x5075, 0x5075, 0x5075, 0x5075, 0x5076, - 0x5076, 0x5076, 0x5076, 0x5076, 0x5077, 0x5077, 0x5077, 0x5077, - 0x5077, 0x5077, 0x5078, 0x5078, 0x5078, 0x5078, 0x5078, 0x5079, - 0x5079, 0x5079, 0x5079, 0x5079, 0x5079, 0x507a, 0x507a, 0x507a, - 0x507a, 0x507a, 0x507b, 0x507b, 0x507b, 0x507b, 0x507b, 0x507b, - 0x507c, 0x507c, 0x507c, 0x507c, 0x507c, 0x507d, 0x507d, 0x507d, - 0x507d, 0x507d, 0x507d, 0x507e, 0x507e, 0x507e, 0x507e, 0x507e, - 0x507f, 0x507f, 0x507f, 0x507f, 0x507f, 0x507f, 0x5080, 0x5080, - 0x5080, 0x5080, 0x5080, 0x5080, 0x5081, 0x5081, 0x5081, 0x5081, - 0x5081, 0x5082, 0x5082, 0x5082, 0x5082, 0x5082, 0x5082, 0x5083, - 0x5083, 0x5083, 0x5083, 0x5083, 0x5083, 0x5084, 0x5084, 0x5084, - 0x5084, 0x5084, 0x5085, 0x5085, 0x5085, 0x5085, 0x5085, 0x5085, - 0x5086, 0x5086, 0x5086, 0x5086, 0x5086, 0x5086, 0x5087, 0x5087, - 0x5087, 0x5087, 0x5087, 0x5087, 0x5088, 0x5088, 0x5088, 0x5088, - 0x5088, 0x5089, 0x5089, 0x5089, 0x5089, 0x5089, 0x5089, 0x508a, - 0x508a, 0x508a, 0x508a, 0x508a, 0x508a, 0x508b, 0x508b, 0x508b, - 0x508b, 0x508b, 0x508b, 0x508c, 0x508c, 0x508c, 0x508c, 0x508c, - 0x508c, 0x508d, 0x508d, 0x508d, 0x508d, 0x508d, 0x508d, 0x508e, - 0x508e, 0x508e, 0x508e, 0x508e, 0x508e, 0x508f, 0x508f, 0x508f, - 0x508f, 0x508f, 0x508f, 0x5090, 0x5090, 0x5090, 0x5090, 0x5090, - 0x5090, 0x5091, 0x5091, 0x5091, 0x5091, 0x5091, 0x5091, 0x5092, - 0x5092, 0x5092, 0x5092, 0x5092, 0x5092, 0x5093, 0x5093, 0x5093, - 0x5093, 0x5093, 0x5093, 0x5094, 0x5094, 0x5094, 0x5094, 0x5094, - 0x5094, 0x5095, 0x5095, 0x5095, 0x5095, 0x5095, 0x5095, 0x5096, - 0x5096, 0x5096, 0x5096, 0x5096, 0x5096, 0x5097, 0x5097, 0x5097, - 0x5097, 0x5097, 0x5097, 0x5098, 0x5098, 0x5098, 0x5098, 0x5098, - 0x5098, 0x5099, 0x5099, 0x5099, 0x5099, 0x5099, 0x5099, 0x5099, - 0x509a, 0x509a, 0x509a, 0x509a, 0x509a, 0x509a, 0x509b, 0x509b, - 0x509b, 0x509b, 0x509b, 0x509b, 0x509c, 0x509c, 0x509c, 0x509c, - 0x509c, 0x509c, 0x509d, 0x509d, 0x509d, 0x509d, 0x509d, 0x509d, - 0x509d, 0x509e, 0x509e, 0x509e, 0x509e, 0x509e, 0x509e, 0x509f, - 0x509f, 0x509f, 0x509f, 0x509f, 0x509f, 0x50a0, 0x50a0, 0x50a0, - 0x50a0, 0x50a0, 0x50a0, 0x50a0, 0x50a1, 0x50a1, 0x50a1, 0x50a1, - 0x50a1, 0x50a1, 0x50a2, 0x50a2, 0x50a2, 0x50a2, 0x50a2, 0x50a2, - 0x50a2, 0x50a3, 0x50a3, 0x50a3, 0x50a3, 0x50a3, 0x50a3, 0x50a4, - 0x50a4, 0x50a4, 0x50a4, 0x50a4, 0x50a4, 0x50a5, 0x50a5, 0x50a5, - 0x50a5, 0x50a5, 0x50a5, 0x50a5, 0x50a6, 0x50a6, 0x50a6, 0x50a6, - 0x50a6, 0x50a6, 0x50a6, 0x50a7, 0x50a7, 0x50a7, 0x50a7, 0x50a7, - 0x50a7, 0x50a8, 0x50a8, 0x50a8, 0x50a8, 0x50a8, 0x50a8, 0x50a8, - 0x50a9, 0x50a9, 0x50a9, 0x50a9, 0x50a9, 0x50a9, 0x50aa, 0x50aa, - 0x50aa, 0x50aa, 0x50aa, 0x50aa, 0x50aa, 0x50ab, 0x50ab, 0x50ab, - 0x50ab, 0x50ab, 0x50ab, 0x50ab, 0x50ac, 0x50ac, 0x50ac, 0x50ac, - 0x50ac, 0x50ac, 0x50ad, 0x50ad, 0x50ad, 0x50ad, 0x50ad, 0x50ad, - 0x50ad, 0x50ae, 0x50ae, 0x50ae, 0x50ae, 0x50ae, 0x50ae, 0x50ae, - 0x50af, 0x50af, 0x50af, 0x50af, 0x50af, 0x50af, 0x50b0, 0x50b0, - 0x50b0, 0x50b0, 0x50b0, 0x50b0, 0x50b0, 0x50b1, 0x50b1, 0x50b1, - 0x50b1, 0x50b1, 0x50b1, 0x50b1, 0x50b2, 0x50b2, 0x50b2, 0x50b2, - 0x50b2, 0x50b2, 0x50b2, 0x50b3, 0x50b3, 0x50b3, 0x50b3, 0x50b3, - 0x50b3, 0x50b3, 0x50b4, 0x50b4, 0x50b4, 0x50b4, 0x50b4, 0x50b4, - 0x50b4, 0x50b5, 0x50b5, 0x50b5, 0x50b5, 0x50b5, 0x50b5, 0x50b5, - 0x50b6, 0x50b6, 0x50b6, 0x50b6, 0x50b6, 0x50b6, 0x50b7, 0x50b7, - 0x50b7, 0x50b7, 0x50b7, 0x50b7, 0x50b7, 0x50b8, 0x50b8, 0x50b8, - 0x50b8, 0x50b8, 0x50b8, 0x50b8, 0x50b9, 0x50b9, 0x50b9, 0x50b9, - 0x50b9, 0x50b9, 0x50b9, 0x50ba, 0x50ba, 0x50ba, 0x50ba, 0x50ba, - 0x50ba, 0x50ba, 0x50ba, 0x50bb, 0x50bb, 0x50bb, 0x50bb, 0x50bb, - 0x50bb, 0x50bb, 0x50bc, 0x50bc, 0x50bc, 0x50bc, 0x50bc, 0x50bc, - 0x50bc, 0x50bd, 0x50bd, 0x50bd, 0x50bd, 0x50bd, 0x50bd, 0x50bd, - 0x50be, 0x50be, 0x50be, 0x50be, 0x50be, 0x50be, 0x50be, 0x50bf, - 0x50bf, 0x50bf, 0x50bf, 0x50bf, 0x50bf, 0x50bf, 0x50c0, 0x50c0, - 0x50c0, 0x50c0, 0x50c0, 0x50c0, 0x50c0, 0x50c1, 0x50c1, 0x50c1, - 0x50c1, 0x50c1, 0x50c1, 0x50c1, 0x50c1, 0x50c2, 0x50c2, 0x50c2, - 0x50c2, 0x50c2, 0x50c2, 0x50c2, 0x50c3, 0x50c3, 0x50c3, 0x50c3, - 0x50c3, 0x50c3, 0x50c3, 0x50c4, 0x50c4, 0x50c4, 0x50c4, 0x50c4, - 0x50c4, 0x50c4, 0x50c4, 0x50c5, 0x50c5, 0x50c5, 0x50c5, 0x50c5, - 0x50c5, 0x50c5, 0x50c6, 0x50c6, 0x50c6, 0x50c6, 0x50c6, 0x50c6, - 0x50c6, 0x50c7, 0x50c7, 0x50c7, 0x50c7, 0x50c7, 0x50c7, 0x50c7, - 0x50c7, 0x50c8, 0x50c8, 0x50c8, 0x50c8, 0x50c8, 0x50c8, 0x50c8, - 0x50c9, 0x50c9, 0x50c9, 0x50c9, 0x50c9, 0x50c9, 0x50c9, 0x50c9, - 0x50ca, 0x50ca, 0x50ca, 0x50ca, 0x50ca, 0x50ca, 0x50ca, 0x50cb, - 0x50cb, 0x50cb, 0x50cb, 0x50cb, 0x50cb, 0x50cb, 0x50cb, 0x50cc, - 0x50cc, 0x50cc, 0x50cc, 0x50cc, 0x50cc, 0x50cc, 0x50cd, 0x50cd, - 0x50cd, 0x50cd, 0x50cd, 0x50cd, 0x50cd, 0x50cd, 0x50ce, 0x50ce, - 0x50ce, 0x50ce, 0x50ce, 0x50ce, 0x50ce, 0x50ce, 0x50cf, 0x50cf, - 0x50cf, 0x50cf, 0x50cf, 0x50cf, 0x50cf, 0x50d0, 0x50d0, 0x50d0, - 0x50d0, 0x50d0, 0x50d0, 0x50d0, 0x50d0, 0x50d1, 0x50d1, 0x50d1, - 0x50d1, 0x50d1, 0x50d1, 0x50d1, 0x50d1, 0x50d2, 0x50d2, 0x50d2, - 0x50d2, 0x50d2, 0x50d2, 0x50d2, 0x50d3, 0x50d3, 0x50d3, 0x50d3, - 0x50d3, 0x50d3, 0x50d3, 0x50d3, 0x50d4, 0x50d4, 0x50d4, 0x50d4, - 0x50d4, 0x50d4, 0x50d4, 0x50d4, 0x50d5, 0x50d5, 0x50d5, 0x50d5, - 0x50d5, 0x50d5, 0x50d5, 0x50d5, 0x50d6, 0x50d6, 0x50d6, 0x50d6, - 0x50d6, 0x50d6, 0x50d6, 0x50d6, 0x50d7, 0x50d7, 0x50d7, 0x50d7, - 0x50d7, 0x50d7, 0x50d7, 0x50d7, 0x50d8, 0x50d8, 0x50d8, 0x50d8, - 0x50d8, 0x50d8, 0x50d8, 0x50d8, 0x50d9, 0x50d9, 0x50d9, 0x50d9, - 0x50d9, 0x50d9, 0x50d9, 0x50d9, 0x50da, 0x50da, 0x50da, 0x50da, - 0x50da, 0x50da, 0x50db, 0x50db, 0x50db, 0x50db, 0x50dc, 0x50dc, - 0x50dc, 0x50dc, 0x50dd, 0x50dd, 0x50dd, 0x50dd, 0x50de, 0x50de, - 0x50de, 0x50de, 0x50df, 0x50df, 0x50df, 0x50df, 0x50e0, 0x50e0, - 0x50e0, 0x50e0, 0x50e1, 0x50e1, 0x50e1, 0x50e1, 0x50e2, 0x50e2, - 0x50e2, 0x50e2, 0x50e2, 0x50e3, 0x50e3, 0x50e3, 0x50e3, 0x50e4, - 0x50e4, 0x50e4, 0x50e4, 0x50e5, 0x50e5, 0x50e5, 0x50e5, 0x50e6, - 0x50e6, 0x50e6, 0x50e6, 0x50e7, 0x50e7, 0x50e7, 0x50e7, 0x50e8, - 0x50e8, 0x50e8, 0x50e8, 0x50e8, 0x50e9, 0x50e9, 0x50e9, 0x50e9, - 0x50ea, 0x50ea, 0x50ea, 0x50ea, 0x50eb, 0x50eb, 0x50eb, 0x50eb, - 0x50ec, 0x50ec, 0x50ec, 0x50ec, 0x50ec, 0x50ed, 0x50ed, 0x50ed, - 0x50ed, 0x50ee, 0x50ee, 0x50ee, 0x50ee, 0x50ef, 0x50ef, 0x50ef, - 0x50ef, 0x50ef, 0x50f0, 0x50f0, 0x50f0, 0x50f0, 0x50f1, 0x50f1, - 0x50f1, 0x50f1, 0x50f2, 0x50f2, 0x50f2, 0x50f2, 0x50f2, 0x50f3, - 0x50f3, 0x50f3, 0x50f3, 0x50f4, 0x50f4, 0x50f4, 0x50f4, 0x50f4, - 0x50f5, 0x50f5, 0x50f5, 0x50f5, 0x50f6, 0x50f6, 0x50f6, 0x50f6, - 0x50f6, 0x50f7, 0x50f7, 0x50f7, 0x50f7, 0x50f8, 0x50f8, 0x50f8, - 0x50f8, 0x50f8, 0x50f9, 0x50f9, 0x50f9, 0x50f9, 0x50fa, 0x50fa, - 0x50fa, 0x50fa, 0x50fa, 0x50fb, 0x50fb, 0x50fb, 0x50fb, 0x50fc, - 0x50fc, 0x50fc, 0x50fc, 0x50fc, 0x50fd, 0x50fd, 0x50fd, 0x50fd, - 0x50fe, 0x50fe, 0x50fe, 0x50fe, 0x50fe, 0x50ff, 0x50ff, 0x50ff, - 0x50ff, 0x5100, 0x5100, 0x5100, 0x5100, 0x5100, 0x5101, 0x5101, - 0x5101, 0x5101, 0x5101, 0x5102, 0x5102, 0x5102, 0x5102, 0x5103, - 0x5103, 0x5103, 0x5103, 0x5103, 0x5104, 0x5104, 0x5104, 0x5104, - 0x5104, 0x5105, 0x5105, 0x5105, 0x5105, 0x5105, 0x5106, 0x5106, - 0x5106, 0x5106, 0x5107, 0x5107, 0x5107, 0x5107, 0x5107, 0x5108, - 0x5108, 0x5108, 0x5108, 0x5108, 0x5109, 0x5109, 0x5109, 0x5109, - 0x5109, 0x510a, 0x510a, 0x510a, 0x510a, 0x510a, 0x510b, 0x510b, - 0x510b, 0x510b, 0x510c, 0x510c, 0x510c, 0x510c, 0x510c, 0x510d, - 0x510d, 0x510d, 0x510d, 0x510d, 0x510e, 0x510e, 0x510e, 0x510e, - 0x510e, 0x510f, 0x510f, 0x510f, 0x510f, 0x510f, 0x5110, 0x5110, - 0x5110, 0x5110, 0x5110, 0x5111, 0x5111, 0x5111, 0x5111, 0x5111, - 0x5112, 0x5112, 0x5112, 0x5112, 0x5112, 0x5113, 0x5113, 0x5113, - 0x5113, 0x5113, 0x5114, 0x5114, 0x5114, 0x5114, 0x5114, 0x5115, - 0x5115, 0x5115, 0x5115, 0x5115, 0x5116, 0x5116, 0x5116, 0x5116, - 0x5116, 0x5117, 0x5117, 0x5117, 0x5117, 0x5117, 0x5118, 0x5118, - 0x5118, 0x5118, 0x5118, 0x5119, 0x5119, 0x5119, 0x5119, 0x5119, - 0x511a, 0x511a, 0x511a, 0x511a, 0x511a, 0x511b, 0x511b, 0x511b, - 0x511b, 0x511b, 0x511c, 0x511c, 0x511c, 0x511c, 0x511c, 0x511c, - 0x511d, 0x511d, 0x511d, 0x511d, 0x511d, 0x511e, 0x511e, 0x511e, - 0x511e, 0x511e, 0x511f, 0x511f, 0x511f, 0x511f, 0x511f, 0x5120, - 0x5120, 0x5120, 0x5120, 0x5120, 0x5120, 0x5121, 0x5121, 0x5121, - 0x5121, 0x5121, 0x5122, 0x5122, 0x5122, 0x5122, 0x5122, 0x5123, - 0x5123, 0x5123, 0x5123, 0x5123, 0x5124, 0x5124, 0x5124, 0x5124, - 0x5124, 0x5124, 0x5125, 0x5125, 0x5125, 0x5125, 0x5125, 0x5126, - 0x5126, 0x5126, 0x5126, 0x5126, 0x5127, 0x5127, 0x5127, 0x5127, - 0x5127, 0x5127, 0x5128, 0x5128, 0x5128, 0x5128, 0x5128, 0x5129, - 0x5129, 0x5129, 0x5129, 0x5129, 0x5129, 0x512a, 0x512a, 0x512a, - 0x512a, 0x512a, 0x512b, 0x512b, 0x512b, 0x512b, 0x512b, 0x512b, - 0x512c, 0x512c, 0x512c, 0x512c, 0x512c, 0x512d, 0x512d, 0x512d, - 0x512d, 0x512d, 0x512d, 0x512e, 0x512e, 0x512e, 0x512e, 0x512e, - 0x512f, 0x512f, 0x512f, 0x512f, 0x512f, 0x512f, 0x5130, 0x5130, - 0x5130, 0x5130, 0x5130, 0x5131, 0x5131, 0x5131, 0x5131, 0x5131, - 0x5131, 0x5132, 0x5132, 0x5132, 0x5132, 0x5132, 0x5132, 0x5133, - 0x5133, 0x5133, 0x5133, 0x5133, 0x5134, 0x5134, 0x5134, 0x5134, - 0x5134, 0x5134, 0x5135, 0x5135, 0x5135, 0x5135, 0x5135, 0x5135, - 0x5136, 0x5136, 0x5136, 0x5136, 0x5136, 0x5137, 0x5137, 0x5137, - 0x5137, 0x5137, 0x5137, 0x5138, 0x5138, 0x5138, 0x5138, 0x5138, - 0x5138, 0x5139, 0x5139, 0x5139, 0x5139, 0x5139, 0x5139, 0x513a, - 0x513a, 0x513a, 0x513a, 0x513a, 0x513a, 0x513b, 0x513b, 0x513b, - 0x513b, 0x513b, 0x513c, 0x513c, 0x513c, 0x513c, 0x513c, 0x513c, - 0x513d, 0x513d, 0x513d, 0x513d, 0x513d, 0x513d, 0x513e, 0x513e, - 0x513e, 0x513e, 0x513e, 0x513e, 0x513f, 0x513f, 0x513f, 0x513f, - 0x513f, 0x513f, 0x5140, 0x5140, 0x5140, 0x5140, 0x5140, 0x5140, - 0x5141, 0x5141, 0x5141, 0x5141, 0x5141, 0x5141, 0x5142, 0x5142, - 0x5142, 0x5142, 0x5142, 0x5142, 0x5143, 0x5143, 0x5143, 0x5143, - 0x5143, 0x5143, 0x5144, 0x5144, 0x5144, 0x5144, 0x5144, 0x5144, - 0x5145, 0x5145, 0x5145, 0x5145, 0x5145, 0x5145, 0x5146, 0x5146, - 0x5146, 0x5146, 0x5146, 0x5146, 0x5147, 0x5147, 0x5147, 0x5147, - 0x5147, 0x5147, 0x5148, 0x5148, 0x5148, 0x5148, 0x5148, 0x5148, - 0x5149, 0x5149, 0x5149, 0x5149, 0x5149, 0x5149, 0x5149, 0x514a, - 0x514a, 0x514a, 0x514a, 0x514a, 0x514a, 0x514b, 0x514b, 0x514b, - 0x514b, 0x514b, 0x514b, 0x514c, 0x514c, 0x514c, 0x514c, 0x514c, - 0x514c, 0x514d, 0x514d, 0x514d, 0x514d, 0x514d, 0x514d, 0x514d, - 0x514e, 0x514e, 0x514e, 0x514e, 0x514e, 0x514e, 0x514f, 0x514f, - 0x514f, 0x514f, 0x514f, 0x514f, 0x5150, 0x5150, 0x5150, 0x5150, - 0x5150, 0x5150, 0x5150, 0x5151, 0x5151, 0x5151, 0x5151, 0x5151, - 0x5151, 0x5152, 0x5152, 0x5152, 0x5152, 0x5152, 0x5152, 0x5153, - 0x5153, 0x5153, 0x5153, 0x5153, 0x5153, 0x5153, 0x5154, 0x5154, - 0x5154, 0x5154, 0x5154, 0x5154, 0x5155, 0x5155, 0x5155, 0x5155, - 0x5155, 0x5155, 0x5155, 0x5156, 0x5156, 0x5156, 0x5156, 0x5156, - 0x5156, 0x5157, 0x5157, 0x5157, 0x5157, 0x5157, 0x5157, 0x5157, - 0x5158, 0x5158, 0x5158, 0x5158, 0x5158, 0x5158, 0x5159, 0x5159, - 0x5159, 0x5159, 0x5159, 0x5159, 0x5159, 0x515a, 0x515a, 0x515a, - 0x515a, 0x515a, 0x515a, 0x515b, 0x515b, 0x515b, 0x515b, 0x515b, - 0x515b, 0x515b, 0x515c, 0x515c, 0x515c, 0x515c, 0x515c, 0x515c, - 0x515c, 0x515d, 0x515d, 0x515d, 0x515d, 0x515d, 0x515d, 0x515e, - 0x515e, 0x515e, 0x515e, 0x515e, 0x515e, 0x515e, 0x515f, 0x515f, - 0x515f, 0x515f, 0x515f, 0x515f, 0x515f, 0x5160, 0x5160, 0x5160, - 0x5160, 0x5160, 0x5160, 0x5161, 0x5161, 0x5161, 0x5161, 0x5161, - 0x5161, 0x5161, 0x5162, 0x5162, 0x5162, 0x5162, 0x5162, 0x5162, - 0x5162, 0x5163, 0x5163, 0x5163, 0x5163, 0x5163, 0x5163, 0x5163, - 0x5164, 0x5164, 0x5164, 0x5164, 0x5164, 0x5164, 0x5164, 0x5165, - 0x5165, 0x5165, 0x5165, 0x5165, 0x5165, 0x5165, 0x5166, 0x5166, - 0x5166, 0x5166, 0x5166, 0x5166, 0x5167, 0x5167, 0x5167, 0x5167, - 0x5167, 0x5167, 0x5167, 0x5168, 0x5168, 0x5168, 0x5168, 0x5168, - 0x5168, 0x5168, 0x5169, 0x5169, 0x5169, 0x5169, 0x5169, 0x5169, - 0x5169, 0x516a, 0x516a, 0x516a, 0x516a, 0x516a, 0x516a, 0x516a, - 0x516b, 0x516b, 0x516b, 0x516b, 0x516b, 0x516b, 0x516b, 0x516c, - 0x516c, 0x516c, 0x516c, 0x516c, 0x516c, 0x516c, 0x516d, 0x516d, - 0x516d, 0x516d, 0x516d, 0x516d, 0x516d, 0x516d, 0x516e, 0x516e, - 0x516e, 0x516e, 0x516e, 0x516e, 0x516e, 0x516f, 0x516f, 0x516f, - 0x516f, 0x516f, 0x516f, 0x516f, 0x5170, 0x5170, 0x5170, 0x5170, - 0x5170, 0x5170, 0x5170, 0x5171, 0x5171, 0x5171, 0x5171, 0x5171, - 0x5171, 0x5171, 0x5172, 0x5172, 0x5172, 0x5172, 0x5172, 0x5172, - 0x5172, 0x5173, 0x5173, 0x5173, 0x5173, 0x5173, 0x5173, 0x5173, - 0x5173, 0x5174, 0x5174, 0x5174, 0x5174, 0x5174, 0x5174, 0x5174, - 0x5175, 0x5175, 0x5175, 0x5175, 0x5175, 0x5175, 0x5175, 0x5176, - 0x5176, 0x5176, 0x5176, 0x5176, 0x5176, 0x5176, 0x5176, 0x5177, - 0x5177, 0x5177, 0x5177, 0x5177, 0x5177, 0x5177, 0x5178, 0x5178, - 0x5178, 0x5178, 0x5178, 0x5178, 0x5178, 0x5178, 0x5179, 0x5179, - 0x5179, 0x5179, 0x5179, 0x5179, 0x5179, 0x517a, 0x517a, 0x517a, - 0x517a, 0x517a, 0x517a, 0x517a, 0x517b, 0x517b, 0x517b, 0x517b, - 0x517b, 0x517b, 0x517b, 0x517b, 0x517c, 0x517c, 0x517c, 0x517c, - 0x517c, 0x517c, 0x517c, 0x517d, 0x517d, 0x517d, 0x517d, 0x517d, - 0x517d, 0x517d, 0x517d, 0x517e, 0x517e, 0x517e, 0x517e, 0x517e, - 0x517e, 0x517e, 0x517e, 0x517f, 0x517f, 0x517f, 0x517f, 0x517f, - 0x517f, 0x517f, 0x5180, 0x5180, 0x5180, 0x5180, 0x5180, 0x5180, - 0x5180, 0x5180, 0x5181, 0x5181, 0x5181, 0x5181, 0x5181, 0x5181, - 0x5181, 0x5181, 0x5182, 0x5182, 0x5182, 0x5182, 0x5182, 0x5182, - 0x5182, 0x5183, 0x5183, 0x5183, 0x5183, 0x5183, 0x5183, 0x5183, - 0x5183, 0x5184, 0x5184, 0x5184, 0x5184, 0x5184, 0x5184, 0x5184, - 0x5184, 0x5185, 0x5185, 0x5185, 0x5185, 0x5185, 0x5185, 0x5185, - 0x5185, 0x5186, 0x5186, 0x5186, 0x5186, 0x5186, 0x5186, 0x5186, - 0x5187, 0x5187, 0x5187, 0x5187, 0x5187, 0x5187, 0x5187, 0x5187, - 0x5188, 0x5188, 0x5188, 0x5188, 0x5188, 0x5188, 0x5188, 0x5188, - 0x5189, 0x5189, 0x5189, 0x5189, 0x5189, 0x5189, 0x5189, 0x5189, - 0x518a, 0x518a, 0x518a, 0x518a, 0x518a, 0x518a, 0x518a, 0x518a, - 0x518b, 0x518b, 0x518b, 0x518b, 0x518b, 0x518b, 0x518b, 0x518b, - 0x518c, 0x518c, 0x518c, 0x518c, 0x518d, 0x518d, 0x518d, 0x518d, - 0x518e, 0x518e, 0x518e, 0x518e, 0x518f, 0x518f, 0x518f, 0x518f, - 0x5190, 0x5190, 0x5190, 0x5190, 0x5191, 0x5191, 0x5191, 0x5191, - 0x5191, 0x5192, 0x5192, 0x5192, 0x5192, 0x5193, 0x5193, 0x5193, - 0x5193, 0x5194, 0x5194, 0x5194, 0x5194, 0x5195, 0x5195, 0x5195, - 0x5195, 0x5196, 0x5196, 0x5196, 0x5196, 0x5197, 0x5197, 0x5197, - 0x5197, 0x5198, 0x5198, 0x5198, 0x5198, 0x5198, 0x5199, 0x5199, - 0x5199, 0x5199, 0x519a, 0x519a, 0x519a, 0x519a, 0x519b, 0x519b, - 0x519b, 0x519b, 0x519c, 0x519c, 0x519c, 0x519c, 0x519c, 0x519d, - 0x519d, 0x519d, 0x519d, 0x519e, 0x519e, 0x519e, 0x519e, 0x519f, - 0x519f, 0x519f, 0x519f, 0x51a0, 0x51a0, 0x51a0, 0x51a0, 0x51a0, - 0x51a1, 0x51a1, 0x51a1, 0x51a1, 0x51a2, 0x51a2, 0x51a2, 0x51a2, - 0x51a3, 0x51a3, 0x51a3, 0x51a3, 0x51a3, 0x51a4, 0x51a4, 0x51a4, - 0x51a4, 0x51a5, 0x51a5, 0x51a5, 0x51a5, 0x51a5, 0x51a6, 0x51a6, - 0x51a6, 0x51a6, 0x51a7, 0x51a7, 0x51a7, 0x51a7, 0x51a7, 0x51a8, - 0x51a8, 0x51a8, 0x51a8, 0x51a9, 0x51a9, 0x51a9, 0x51a9, 0x51a9, - 0x51aa, 0x51aa, 0x51aa, 0x51aa, 0x51ab, 0x51ab, 0x51ab, 0x51ab, - 0x51ab, 0x51ac, 0x51ac, 0x51ac, 0x51ac, 0x51ad, 0x51ad, 0x51ad, - 0x51ad, 0x51ad, 0x51ae, 0x51ae, 0x51ae, 0x51ae, 0x51af, 0x51af, - 0x51af, 0x51af, 0x51af, 0x51b0, 0x51b0, 0x51b0, 0x51b0, 0x51b1, - 0x51b1, 0x51b1, 0x51b1, 0x51b1, 0x51b2, 0x51b2, 0x51b2, 0x51b2, - 0x51b2, 0x51b3, 0x51b3, 0x51b3, 0x51b3, 0x51b4, 0x51b4, 0x51b4, - 0x51b4, 0x51b4, 0x51b5, 0x51b5, 0x51b5, 0x51b5, 0x51b5, 0x51b6, - 0x51b6, 0x51b6, 0x51b6, 0x51b7, 0x51b7, 0x51b7, 0x51b7, 0x51b7, - 0x51b8, 0x51b8, 0x51b8, 0x51b8, 0x51b8, 0x51b9, 0x51b9, 0x51b9, - 0x51b9, 0x51b9, 0x51ba, 0x51ba, 0x51ba, 0x51ba, 0x51ba, 0x51bb, - 0x51bb, 0x51bb, 0x51bb, 0x51bc, 0x51bc, 0x51bc, 0x51bc, 0x51bc, - 0x51bd, 0x51bd, 0x51bd, 0x51bd, 0x51bd, 0x51be, 0x51be, 0x51be, - 0x51be, 0x51be, 0x51bf, 0x51bf, 0x51bf, 0x51bf, 0x51bf, 0x51c0, - 0x51c0, 0x51c0, 0x51c0, 0x51c0, 0x51c1, 0x51c1, 0x51c1, 0x51c1, - 0x51c1, 0x51c2, 0x51c2, 0x51c2, 0x51c2, 0x51c2, 0x51c3, 0x51c3, - 0x51c3, 0x51c3, 0x51c3, 0x51c4, 0x51c4, 0x51c4, 0x51c4, 0x51c4, - 0x51c5, 0x51c5, 0x51c5, 0x51c5, 0x51c5, 0x51c6, 0x51c6, 0x51c6, - 0x51c6, 0x51c6, 0x51c7, 0x51c7, 0x51c7, 0x51c7, 0x51c7, 0x51c8, - 0x51c8, 0x51c8, 0x51c8, 0x51c8, 0x51c9, 0x51c9, 0x51c9, 0x51c9, - 0x51c9, 0x51ca, 0x51ca, 0x51ca, 0x51ca, 0x51ca, 0x51cb, 0x51cb, - 0x51cb, 0x51cb, 0x51cb, 0x51cc, 0x51cc, 0x51cc, 0x51cc, 0x51cc, - 0x51cd, 0x51cd, 0x51cd, 0x51cd, 0x51cd, 0x51ce, 0x51ce, 0x51ce, - 0x51ce, 0x51ce, 0x51ce, 0x51cf, 0x51cf, 0x51cf, 0x51cf, 0x51cf, - 0x51d0, 0x51d0, 0x51d0, 0x51d0, 0x51d0, 0x51d1, 0x51d1, 0x51d1, - 0x51d1, 0x51d1, 0x51d2, 0x51d2, 0x51d2, 0x51d2, 0x51d2, 0x51d3, - 0x51d3, 0x51d3, 0x51d3, 0x51d3, 0x51d3, 0x51d4, 0x51d4, 0x51d4, - 0x51d4, 0x51d4, 0x51d5, 0x51d5, 0x51d5, 0x51d5, 0x51d5, 0x51d6, - 0x51d6, 0x51d6, 0x51d6, 0x51d6, 0x51d6, 0x51d7, 0x51d7, 0x51d7, - 0x51d7, 0x51d7, 0x51d8, 0x51d8, 0x51d8, 0x51d8, 0x51d8, 0x51d9, - 0x51d9, 0x51d9, 0x51d9, 0x51d9, 0x51d9, 0x51da, 0x51da, 0x51da, - 0x51da, 0x51da, 0x51db, 0x51db, 0x51db, 0x51db, 0x51db, 0x51db, - 0x51dc, 0x51dc, 0x51dc, 0x51dc, 0x51dc, 0x51dd, 0x51dd, 0x51dd, - 0x51dd, 0x51dd, 0x51dd, 0x51de, 0x51de, 0x51de, 0x51de, 0x51de, - 0x51df, 0x51df, 0x51df, 0x51df, 0x51df, 0x51df, 0x51e0, 0x51e0, - 0x51e0, 0x51e0, 0x51e0, 0x51e1, 0x51e1, 0x51e1, 0x51e1, 0x51e1, - 0x51e1, 0x51e2, 0x51e2, 0x51e2, 0x51e2, 0x51e2, 0x51e2, 0x51e3, - 0x51e3, 0x51e3, 0x51e3, 0x51e3, 0x51e4, 0x51e4, 0x51e4, 0x51e4, - 0x51e4, 0x51e4, 0x51e5, 0x51e5, 0x51e5, 0x51e5, 0x51e5, 0x51e5, - 0x51e6, 0x51e6, 0x51e6, 0x51e6, 0x51e6, 0x51e7, 0x51e7, 0x51e7, - 0x51e7, 0x51e7, 0x51e7, 0x51e8, 0x51e8, 0x51e8, 0x51e8, 0x51e8, - 0x51e8, 0x51e9, 0x51e9, 0x51e9, 0x51e9, 0x51e9, 0x51ea, 0x51ea, - 0x51ea, 0x51ea, 0x51ea, 0x51ea, 0x51eb, 0x51eb, 0x51eb, 0x51eb, - 0x51eb, 0x51eb, 0x51ec, 0x51ec, 0x51ec, 0x51ec, 0x51ec, 0x51ec, - 0x51ed, 0x51ed, 0x51ed, 0x51ed, 0x51ed, 0x51ed, 0x51ee, 0x51ee, - 0x51ee, 0x51ee, 0x51ee, 0x51ee, 0x51ef, 0x51ef, 0x51ef, 0x51ef, - 0x51ef, 0x51f0, 0x51f0, 0x51f0, 0x51f0, 0x51f0, 0x51f0, 0x51f1, - 0x51f1, 0x51f1, 0x51f1, 0x51f1, 0x51f1, 0x51f2, 0x51f2, 0x51f2, - 0x51f2, 0x51f2, 0x51f2, 0x51f3, 0x51f3, 0x51f3, 0x51f3, 0x51f3, - 0x51f3, 0x51f4, 0x51f4, 0x51f4, 0x51f4, 0x51f4, 0x51f4, 0x51f5, - 0x51f5, 0x51f5, 0x51f5, 0x51f5, 0x51f5, 0x51f6, 0x51f6, 0x51f6, - 0x51f6, 0x51f6, 0x51f6, 0x51f7, 0x51f7, 0x51f7, 0x51f7, 0x51f7, - 0x51f7, 0x51f7, 0x51f8, 0x51f8, 0x51f8, 0x51f8, 0x51f8, 0x51f8, - 0x51f9, 0x51f9, 0x51f9, 0x51f9, 0x51f9, 0x51f9, 0x51fa, 0x51fa, - 0x51fa, 0x51fa, 0x51fa, 0x51fa, 0x51fb, 0x51fb, 0x51fb, 0x51fb, - 0x51fb, 0x51fb, 0x51fc, 0x51fc, 0x51fc, 0x51fc, 0x51fc, 0x51fc, - 0x51fd, 0x51fd, 0x51fd, 0x51fd, 0x51fd, 0x51fd, 0x51fd, 0x51fe, - 0x51fe, 0x51fe, 0x51fe, 0x51fe, 0x51fe, 0x51ff, 0x51ff, 0x51ff, - 0x51ff, 0x51ff, 0x51ff, 0x5200, 0x5200, 0x5200, 0x5200, 0x5200, - 0x5200, 0x5201, 0x5201, 0x5201, 0x5201, 0x5201, 0x5201, 0x5201, - 0x5202, 0x5202, 0x5202, 0x5202, 0x5202, 0x5202, 0x5203, 0x5203, - 0x5203, 0x5203, 0x5203, 0x5203, 0x5204, 0x5204, 0x5204, 0x5204, - 0x5204, 0x5204, 0x5204, 0x5205, 0x5205, 0x5205, 0x5205, 0x5205, - 0x5205, 0x5206, 0x5206, 0x5206, 0x5206, 0x5206, 0x5206, 0x5206, - 0x5207, 0x5207, 0x5207, 0x5207, 0x5207, 0x5207, 0x5208, 0x5208, - 0x5208, 0x5208, 0x5208, 0x5208, 0x5208, 0x5209, 0x5209, 0x5209, - 0x5209, 0x5209, 0x5209, 0x520a, 0x520a, 0x520a, 0x520a, 0x520a, - 0x520a, 0x520a, 0x520b, 0x520b, 0x520b, 0x520b, 0x520b, 0x520b, - 0x520c, 0x520c, 0x520c, 0x520c, 0x520c, 0x520c, 0x520c, 0x520d, - 0x520d, 0x520d, 0x520d, 0x520d, 0x520d, 0x520d, 0x520e, 0x520e, - 0x520e, 0x520e, 0x520e, 0x520e, 0x520f, 0x520f, 0x520f, 0x520f, - 0x520f, 0x520f, 0x520f, 0x5210, 0x5210, 0x5210, 0x5210, 0x5210, - 0x5210, 0x5210, 0x5211, 0x5211, 0x5211, 0x5211, 0x5211, 0x5211, - 0x5212, 0x5212, 0x5212, 0x5212, 0x5212, 0x5212, 0x5212, 0x5213, - 0x5213, 0x5213, 0x5213, 0x5213, 0x5213, 0x5213, 0x5214, 0x5214, - 0x5214, 0x5214, 0x5214, 0x5214, 0x5214, 0x5215, 0x5215, 0x5215, - 0x5215, 0x5215, 0x5215, 0x5215, 0x5216, 0x5216, 0x5216, 0x5216, - 0x5216, 0x5216, 0x5217, 0x5217, 0x5217, 0x5217, 0x5217, 0x5217, - 0x5217, 0x5218, 0x5218, 0x5218, 0x5218, 0x5218, 0x5218, 0x5218, - 0x5219, 0x5219, 0x5219, 0x5219, 0x5219, 0x5219, 0x5219, 0x521a, - 0x521a, 0x521a, 0x521a, 0x521a, 0x521a, 0x521a, 0x521b, 0x521b, - 0x521b, 0x521b, 0x521b, 0x521b, 0x521b, 0x521c, 0x521c, 0x521c, - 0x521c, 0x521c, 0x521c, 0x521c, 0x521d, 0x521d, 0x521d, 0x521d, - 0x521d, 0x521d, 0x521d, 0x521e, 0x521e, 0x521e, 0x521e, 0x521e, - 0x521e, 0x521e, 0x521f, 0x521f, 0x521f, 0x521f, 0x521f, 0x521f, - 0x521f, 0x521f, 0x5220, 0x5220, 0x5220, 0x5220, 0x5220, 0x5220, - 0x5220, 0x5221, 0x5221, 0x5221, 0x5221, 0x5221, 0x5221, 0x5221, - 0x5222, 0x5222, 0x5222, 0x5222, 0x5222, 0x5222, 0x5222, 0x5223, - 0x5223, 0x5223, 0x5223, 0x5223, 0x5223, 0x5223, 0x5224, 0x5224, - 0x5224, 0x5224, 0x5224, 0x5224, 0x5224, 0x5224, 0x5225, 0x5225, - 0x5225, 0x5225, 0x5225, 0x5225, 0x5225, 0x5226, 0x5226, 0x5226, - 0x5226, 0x5226, 0x5226, 0x5226, 0x5227, 0x5227, 0x5227, 0x5227, - 0x5227, 0x5227, 0x5227, 0x5228, 0x5228, 0x5228, 0x5228, 0x5228, - 0x5228, 0x5228, 0x5228, 0x5229, 0x5229, 0x5229, 0x5229, 0x5229, - 0x5229, 0x5229, 0x522a, 0x522a, 0x522a, 0x522a, 0x522a, 0x522a, - 0x522a, 0x522a, 0x522b, 0x522b, 0x522b, 0x522b, 0x522b, 0x522b, - 0x522b, 0x522c, 0x522c, 0x522c, 0x522c, 0x522c, 0x522c, 0x522c, - 0x522c, 0x522d, 0x522d, 0x522d, 0x522d, 0x522d, 0x522d, 0x522d, - 0x522e, 0x522e, 0x522e, 0x522e, 0x522e, 0x522e, 0x522e, 0x522e, - 0x522f, 0x522f, 0x522f, 0x522f, 0x522f, 0x522f, 0x522f, 0x5230, - 0x5230, 0x5230, 0x5230, 0x5230, 0x5230, 0x5230, 0x5230, 0x5231, - 0x5231, 0x5231, 0x5231, 0x5231, 0x5231, 0x5231, 0x5232, 0x5232, - 0x5232, 0x5232, 0x5232, 0x5232, 0x5232, 0x5232, 0x5233, 0x5233, - 0x5233, 0x5233, 0x5233, 0x5233, 0x5233, 0x5233, 0x5234, 0x5234, - 0x5234, 0x5234, 0x5234, 0x5234, 0x5234, 0x5234, 0x5235, 0x5235, - 0x5235, 0x5235, 0x5235, 0x5235, 0x5235, 0x5236, 0x5236, 0x5236, - 0x5236, 0x5236, 0x5236, 0x5236, 0x5236, 0x5237, 0x5237, 0x5237, - 0x5237, 0x5237, 0x5237, 0x5237, 0x5237, 0x5238, 0x5238, 0x5238, - 0x5238, 0x5238, 0x5238, 0x5238, 0x5238, 0x5239, 0x5239, 0x5239, - 0x5239, 0x5239, 0x5239, 0x5239, 0x5239, 0x523a, 0x523a, 0x523a, - 0x523a, 0x523a, 0x523a, 0x523a, 0x523a, 0x523b, 0x523b, 0x523b, - 0x523b, 0x523b, 0x523b, 0x523b, 0x523c, 0x523c, 0x523c, 0x523c, - 0x523c, 0x523c, 0x523c, 0x523c, 0x523d, 0x523d, 0x523d, 0x523d, - 0x523d, 0x523d, 0x523e, 0x523e, 0x523e, 0x523e, 0x523f, 0x523f, - 0x523f, 0x523f, 0x523f, 0x5240, 0x5240, 0x5240, 0x5240, 0x5241, - 0x5241, 0x5241, 0x5241, 0x5242, 0x5242, 0x5242, 0x5242, 0x5243, - 0x5243, 0x5243, 0x5243, 0x5244, 0x5244, 0x5244, 0x5244, 0x5245, - 0x5245, 0x5245, 0x5245, 0x5246, 0x5246, 0x5246, 0x5246, 0x5247, - 0x5247, 0x5247, 0x5247, 0x5248, 0x5248, 0x5248, 0x5248, 0x5248, - 0x5249, 0x5249, 0x5249, 0x5249, 0x524a, 0x524a, 0x524a, 0x524a, - 0x524b, 0x524b, 0x524b, 0x524b, 0x524c, 0x524c, 0x524c, 0x524c, - 0x524d, 0x524d, 0x524d, 0x524d, 0x524d, 0x524e, 0x524e, 0x524e, - 0x524e, 0x524f, 0x524f, 0x524f, 0x524f, 0x5250, 0x5250, 0x5250, - 0x5250, 0x5251, 0x5251, 0x5251, 0x5251, 0x5251, 0x5252, 0x5252, - 0x5252, 0x5252, 0x5253, 0x5253, 0x5253, 0x5253, 0x5253, 0x5254, - 0x5254, 0x5254, 0x5254, 0x5255, 0x5255, 0x5255, 0x5255, 0x5256, - 0x5256, 0x5256, 0x5256, 0x5256, 0x5257, 0x5257, 0x5257, 0x5257, - 0x5258, 0x5258, 0x5258, 0x5258, 0x5258, 0x5259, 0x5259, 0x5259, - 0x5259, 0x525a, 0x525a, 0x525a, 0x525a, 0x525a, 0x525b, 0x525b, - 0x525b, 0x525b, 0x525c, 0x525c, 0x525c, 0x525c, 0x525c, 0x525d, - 0x525d, 0x525d, 0x525d, 0x525e, 0x525e, 0x525e, 0x525e, 0x525e, - 0x525f, 0x525f, 0x525f, 0x525f, 0x5260, 0x5260, 0x5260, 0x5260, - 0x5260, 0x5261, 0x5261, 0x5261, 0x5261, 0x5262, 0x5262, 0x5262, - 0x5262, 0x5262, 0x5263, 0x5263, 0x5263, 0x5263, 0x5263, 0x5264, - 0x5264, 0x5264, 0x5264, 0x5265, 0x5265, 0x5265, 0x5265, 0x5265, - 0x5266, 0x5266, 0x5266, 0x5266, 0x5266, 0x5267, 0x5267, 0x5267, - 0x5267, 0x5268, 0x5268, 0x5268, 0x5268, 0x5268, 0x5269, 0x5269, - 0x5269, 0x5269, 0x5269, 0x526a, 0x526a, 0x526a, 0x526a, 0x526a, - 0x526b, 0x526b, 0x526b, 0x526b, 0x526c, 0x526c, 0x526c, 0x526c, - 0x526c, 0x526d, 0x526d, 0x526d, 0x526d, 0x526d, 0x526e, 0x526e, - 0x526e, 0x526e, 0x526e, 0x526f, 0x526f, 0x526f, 0x526f, 0x526f, - 0x5270, 0x5270, 0x5270, 0x5270, 0x5270, 0x5271, 0x5271, 0x5271, - 0x5271, 0x5271, 0x5272, 0x5272, 0x5272, 0x5272, 0x5273, 0x5273, - 0x5273, 0x5273, 0x5273, 0x5274, 0x5274, 0x5274, 0x5274, 0x5274, - 0x5275, 0x5275, 0x5275, 0x5275, 0x5275, 0x5276, 0x5276, 0x5276, - 0x5276, 0x5276, 0x5277, 0x5277, 0x5277, 0x5277, 0x5277, 0x5278, - 0x5278, 0x5278, 0x5278, 0x5278, 0x5279, 0x5279, 0x5279, 0x5279, - 0x5279, 0x527a, 0x527a, 0x527a, 0x527a, 0x527a, 0x527a, 0x527b, - 0x527b, 0x527b, 0x527b, 0x527b, 0x527c, 0x527c, 0x527c, 0x527c, - 0x527c, 0x527d, 0x527d, 0x527d, 0x527d, 0x527d, 0x527e, 0x527e, - 0x527e, 0x527e, 0x527e, 0x527f, 0x527f, 0x527f, 0x527f, 0x527f, - 0x5280, 0x5280, 0x5280, 0x5280, 0x5280, 0x5281, 0x5281, 0x5281, - 0x5281, 0x5281, 0x5281, 0x5282, 0x5282, 0x5282, 0x5282, 0x5282, - 0x5283, 0x5283, 0x5283, 0x5283, 0x5283, 0x5284, 0x5284, 0x5284, - 0x5284, 0x5284, 0x5285, 0x5285, 0x5285, 0x5285, 0x5285, 0x5285, - 0x5286, 0x5286, 0x5286, 0x5286, 0x5286, 0x5287, 0x5287, 0x5287, - 0x5287, 0x5287, 0x5288, 0x5288, 0x5288, 0x5288, 0x5288, 0x5288, - 0x5289, 0x5289, 0x5289, 0x5289, 0x5289, 0x528a, 0x528a, 0x528a, - 0x528a, 0x528a, 0x528b, 0x528b, 0x528b, 0x528b, 0x528b, 0x528b, - 0x528c, 0x528c, 0x528c, 0x528c, 0x528c, 0x528d, 0x528d, 0x528d, - 0x528d, 0x528d, 0x528d, 0x528e, 0x528e, 0x528e, 0x528e, 0x528e, - 0x528f, 0x528f, 0x528f, 0x528f, 0x528f, 0x528f, 0x5290, 0x5290, - 0x5290, 0x5290, 0x5290, 0x5291, 0x5291, 0x5291, 0x5291, 0x5291, - 0x5291, 0x5292, 0x5292, 0x5292, 0x5292, 0x5292, 0x5293, 0x5293, - 0x5293, 0x5293, 0x5293, 0x5293, 0x5294, 0x5294, 0x5294, 0x5294, - 0x5294, 0x5294, 0x5295, 0x5295, 0x5295, 0x5295, 0x5295, 0x5296, - 0x5296, 0x5296, 0x5296, 0x5296, 0x5296, 0x5297, 0x5297, 0x5297, - 0x5297, 0x5297, 0x5297, 0x5298, 0x5298, 0x5298, 0x5298, 0x5298, - 0x5299, 0x5299, 0x5299, 0x5299, 0x5299, 0x5299, 0x529a, 0x529a, - 0x529a, 0x529a, 0x529a, 0x529a, 0x529b, 0x529b, 0x529b, 0x529b, - 0x529b, 0x529b, 0x529c, 0x529c, 0x529c, 0x529c, 0x529c, 0x529d, - 0x529d, 0x529d, 0x529d, 0x529d, 0x529d, 0x529e, 0x529e, 0x529e, - 0x529e, 0x529e, 0x529e, 0x529f, 0x529f, 0x529f, 0x529f, 0x529f, - 0x529f, 0x52a0, 0x52a0, 0x52a0, 0x52a0, 0x52a0, 0x52a0, 0x52a1, - 0x52a1, 0x52a1, 0x52a1, 0x52a1, 0x52a1, 0x52a2, 0x52a2, 0x52a2, - 0x52a2, 0x52a2, 0x52a2, 0x52a3, 0x52a3, 0x52a3, 0x52a3, 0x52a3, - 0x52a3, 0x52a4, 0x52a4, 0x52a4, 0x52a4, 0x52a4, 0x52a4, 0x52a5, - 0x52a5, 0x52a5, 0x52a5, 0x52a5, 0x52a5, 0x52a6, 0x52a6, 0x52a6, - 0x52a6, 0x52a6, 0x52a6, 0x52a7, 0x52a7, 0x52a7, 0x52a7, 0x52a7, - 0x52a7, 0x52a8, 0x52a8, 0x52a8, 0x52a8, 0x52a8, 0x52a8, 0x52a9, - 0x52a9, 0x52a9, 0x52a9, 0x52a9, 0x52a9, 0x52aa, 0x52aa, 0x52aa, - 0x52aa, 0x52aa, 0x52aa, 0x52ab, 0x52ab, 0x52ab, 0x52ab, 0x52ab, - 0x52ab, 0x52ac, 0x52ac, 0x52ac, 0x52ac, 0x52ac, 0x52ac, 0x52ad, - 0x52ad, 0x52ad, 0x52ad, 0x52ad, 0x52ad, 0x52ad, 0x52ae, 0x52ae, - 0x52ae, 0x52ae, 0x52ae, 0x52ae, 0x52af, 0x52af, 0x52af, 0x52af, - 0x52af, 0x52af, 0x52b0, 0x52b0, 0x52b0, 0x52b0, 0x52b0, 0x52b0, - 0x52b1, 0x52b1, 0x52b1, 0x52b1, 0x52b1, 0x52b1, 0x52b1, 0x52b2, - 0x52b2, 0x52b2, 0x52b2, 0x52b2, 0x52b2, 0x52b3, 0x52b3, 0x52b3, - 0x52b3, 0x52b3, 0x52b3, 0x52b4, 0x52b4, 0x52b4, 0x52b4, 0x52b4, - 0x52b4, 0x52b4, 0x52b5, 0x52b5, 0x52b5, 0x52b5, 0x52b5, 0x52b5, - 0x52b6, 0x52b6, 0x52b6, 0x52b6, 0x52b6, 0x52b6, 0x52b7, 0x52b7, - 0x52b7, 0x52b7, 0x52b7, 0x52b7, 0x52b7, 0x52b8, 0x52b8, 0x52b8, - 0x52b8, 0x52b8, 0x52b8, 0x52b9, 0x52b9, 0x52b9, 0x52b9, 0x52b9, - 0x52b9, 0x52b9, 0x52ba, 0x52ba, 0x52ba, 0x52ba, 0x52ba, 0x52ba, - 0x52bb, 0x52bb, 0x52bb, 0x52bb, 0x52bb, 0x52bb, 0x52bb, 0x52bc, - 0x52bc, 0x52bc, 0x52bc, 0x52bc, 0x52bc, 0x52bd, 0x52bd, 0x52bd, - 0x52bd, 0x52bd, 0x52bd, 0x52bd, 0x52be, 0x52be, 0x52be, 0x52be, - 0x52be, 0x52be, 0x52be, 0x52bf, 0x52bf, 0x52bf, 0x52bf, 0x52bf, - 0x52bf, 0x52c0, 0x52c0, 0x52c0, 0x52c0, 0x52c0, 0x52c0, 0x52c0, - 0x52c1, 0x52c1, 0x52c1, 0x52c1, 0x52c1, 0x52c1, 0x52c1, 0x52c2, - 0x52c2, 0x52c2, 0x52c2, 0x52c2, 0x52c2, 0x52c3, 0x52c3, 0x52c3, - 0x52c3, 0x52c3, 0x52c3, 0x52c3, 0x52c4, 0x52c4, 0x52c4, 0x52c4, - 0x52c4, 0x52c4, 0x52c4, 0x52c5, 0x52c5, 0x52c5, 0x52c5, 0x52c5, - 0x52c5, 0x52c5, 0x52c6, 0x52c6, 0x52c6, 0x52c6, 0x52c6, 0x52c6, - 0x52c6, 0x52c7, 0x52c7, 0x52c7, 0x52c7, 0x52c7, 0x52c7, 0x52c8, - 0x52c8, 0x52c8, 0x52c8, 0x52c8, 0x52c8, 0x52c8, 0x52c9, 0x52c9, - 0x52c9, 0x52c9, 0x52c9, 0x52c9, 0x52c9, 0x52ca, 0x52ca, 0x52ca, - 0x52ca, 0x52ca, 0x52ca, 0x52ca, 0x52cb, 0x52cb, 0x52cb, 0x52cb, - 0x52cb, 0x52cb, 0x52cb, 0x52cc, 0x52cc, 0x52cc, 0x52cc, 0x52cc, - 0x52cc, 0x52cc, 0x52cd, 0x52cd, 0x52cd, 0x52cd, 0x52cd, 0x52cd, - 0x52cd, 0x52ce, 0x52ce, 0x52ce, 0x52ce, 0x52ce, 0x52ce, 0x52ce, - 0x52cf, 0x52cf, 0x52cf, 0x52cf, 0x52cf, 0x52cf, 0x52cf, 0x52d0, - 0x52d0, 0x52d0, 0x52d0, 0x52d0, 0x52d0, 0x52d0, 0x52d1, 0x52d1, - 0x52d1, 0x52d1, 0x52d1, 0x52d1, 0x52d1, 0x52d2, 0x52d2, 0x52d2, - 0x52d2, 0x52d2, 0x52d2, 0x52d2, 0x52d2, 0x52d3, 0x52d3, 0x52d3, - 0x52d3, 0x52d3, 0x52d3, 0x52d3, 0x52d4, 0x52d4, 0x52d4, 0x52d4, - 0x52d4, 0x52d4, 0x52d4, 0x52d5, 0x52d5, 0x52d5, 0x52d5, 0x52d5, - 0x52d5, 0x52d5, 0x52d6, 0x52d6, 0x52d6, 0x52d6, 0x52d6, 0x52d6, - 0x52d6, 0x52d6, 0x52d7, 0x52d7, 0x52d7, 0x52d7, 0x52d7, 0x52d7, - 0x52d7, 0x52d8, 0x52d8, 0x52d8, 0x52d8, 0x52d8, 0x52d8, 0x52d8, - 0x52d9, 0x52d9, 0x52d9, 0x52d9, 0x52d9, 0x52d9, 0x52d9, 0x52d9, - 0x52da, 0x52da, 0x52da, 0x52da, 0x52da, 0x52da, 0x52da, 0x52db, - 0x52db, 0x52db, 0x52db, 0x52db, 0x52db, 0x52db, 0x52dc, 0x52dc, - 0x52dc, 0x52dc, 0x52dc, 0x52dc, 0x52dc, 0x52dc, 0x52dd, 0x52dd, - 0x52dd, 0x52dd, 0x52dd, 0x52dd, 0x52dd, 0x52de, 0x52de, 0x52de, - 0x52de, 0x52de, 0x52de, 0x52de, 0x52de, 0x52df, 0x52df, 0x52df, - 0x52df, 0x52df, 0x52df, 0x52df, 0x52e0, 0x52e0, 0x52e0, 0x52e0, - 0x52e0, 0x52e0, 0x52e0, 0x52e0, 0x52e1, 0x52e1, 0x52e1, 0x52e1, - 0x52e1, 0x52e1, 0x52e1, 0x52e2, 0x52e2, 0x52e2, 0x52e2, 0x52e2, - 0x52e2, 0x52e2, 0x52e2, 0x52e3, 0x52e3, 0x52e3, 0x52e3, 0x52e3, - 0x52e3, 0x52e3, 0x52e3, 0x52e4, 0x52e4, 0x52e4, 0x52e4, 0x52e4, - 0x52e4, 0x52e4, 0x52e5, 0x52e5, 0x52e5, 0x52e5, 0x52e5, 0x52e5, - 0x52e5, 0x52e5, 0x52e6, 0x52e6, 0x52e6, 0x52e6, 0x52e6, 0x52e6, - 0x52e6, 0x52e6, 0x52e7, 0x52e7, 0x52e7, 0x52e7, 0x52e7, 0x52e7, - 0x52e7, 0x52e7, 0x52e8, 0x52e8, 0x52e8, 0x52e8, 0x52e8, 0x52e8, - 0x52e8, 0x52e9, 0x52e9, 0x52e9, 0x52e9, 0x52e9, 0x52e9, 0x52e9, - 0x52e9, 0x52ea, 0x52ea, 0x52ea, 0x52ea, 0x52ea, 0x52ea, 0x52ea, - 0x52ea, 0x52eb, 0x52eb, 0x52eb, 0x52eb, 0x52eb, 0x52eb, 0x52eb, - 0x52eb, 0x52ec, 0x52ec, 0x52ec, 0x52ec, 0x52ec, 0x52ec, 0x52ec, - 0x52ec, 0x52ed, 0x52ed, 0x52ed, 0x52ed, 0x52ed, 0x52ed, 0x52ed, - 0x52ed, 0x52ee, 0x52ee, 0x52ee, 0x52ee, 0x52ee, 0x52ee, 0x52ee, - 0x52ee, 0x52ef, 0x52ef, 0x52ef, 0x52ef, 0x52f0, 0x52f0, 0x52f0, - 0x52f0, 0x52f1, 0x52f1, 0x52f1, 0x52f1, 0x52f2, 0x52f2, 0x52f2, - 0x52f2, 0x52f3, 0x52f3, 0x52f3, 0x52f3, 0x52f4, 0x52f4, 0x52f4, - 0x52f4, 0x52f5, 0x52f5, 0x52f5, 0x52f5, 0x52f6, 0x52f6, 0x52f6, - 0x52f6, 0x52f7, 0x52f7, 0x52f7, 0x52f7, 0x52f8, 0x52f8, 0x52f8, - 0x52f8, 0x52f9, 0x52f9, 0x52f9, 0x52f9, 0x52f9, 0x52fa, 0x52fa, - 0x52fa, 0x52fa, 0x52fb, 0x52fb, 0x52fb, 0x52fb, 0x52fc, 0x52fc, - 0x52fc, 0x52fc, 0x52fd, 0x52fd, 0x52fd, 0x52fd, 0x52fe, 0x52fe, - 0x52fe, 0x52fe, 0x52fe, 0x52ff, 0x52ff, 0x52ff, 0x52ff, 0x5300, - 0x5300, 0x5300, 0x5300, 0x5301, 0x5301, 0x5301, 0x5301, 0x5301, - 0x5302, 0x5302, 0x5302, 0x5302, 0x5303, 0x5303, 0x5303, 0x5303, - 0x5304, 0x5304, 0x5304, 0x5304, 0x5304, 0x5305, 0x5305, 0x5305, - 0x5305, 0x5306, 0x5306, 0x5306, 0x5306, 0x5307, 0x5307, 0x5307, - 0x5307, 0x5307, 0x5308, 0x5308, 0x5308, 0x5308, 0x5309, 0x5309, - 0x5309, 0x5309, 0x5309, 0x530a, 0x530a, 0x530a, 0x530a, 0x530b, - 0x530b, 0x530b, 0x530b, 0x530b, 0x530c, 0x530c, 0x530c, 0x530c, - 0x530d, 0x530d, 0x530d, 0x530d, 0x530d, 0x530e, 0x530e, 0x530e, - 0x530e, 0x530f, 0x530f, 0x530f, 0x530f, 0x530f, 0x5310, 0x5310, - 0x5310, 0x5310, 0x5311, 0x5311, 0x5311, 0x5311, 0x5311, 0x5312, - 0x5312, 0x5312, 0x5312, 0x5313, 0x5313, 0x5313, 0x5313, 0x5313, - 0x5314, 0x5314, 0x5314, 0x5314, 0x5314, 0x5315, 0x5315, 0x5315, - 0x5315, 0x5316, 0x5316, 0x5316, 0x5316, 0x5316, 0x5317, 0x5317, - 0x5317, 0x5317, 0x5317, 0x5318, 0x5318, 0x5318, 0x5318, 0x5319, - 0x5319, 0x5319, 0x5319, 0x5319, 0x531a, 0x531a, 0x531a, 0x531a, - 0x531a, 0x531b, 0x531b, 0x531b, 0x531b, 0x531c, 0x531c, 0x531c, - 0x531c, 0x531c, 0x531d, 0x531d, 0x531d, 0x531d, 0x531d, 0x531e, - 0x531e, 0x531e, 0x531e, 0x531e, 0x531f, 0x531f, 0x531f, 0x531f, - 0x531f, 0x5320, 0x5320, 0x5320, 0x5320, 0x5320, 0x5321, 0x5321, - 0x5321, 0x5321, 0x5322, 0x5322, 0x5322, 0x5322, 0x5322, 0x5323, - 0x5323, 0x5323, 0x5323, 0x5323, 0x5324, 0x5324, 0x5324, 0x5324, - 0x5324, 0x5325, 0x5325, 0x5325, 0x5325, 0x5325, 0x5326, 0x5326, - 0x5326, 0x5326, 0x5326, 0x5327, 0x5327, 0x5327, 0x5327, 0x5327, - 0x5328, 0x5328, 0x5328, 0x5328, 0x5328, 0x5329, 0x5329, 0x5329, - 0x5329, 0x5329, 0x532a, 0x532a, 0x532a, 0x532a, 0x532a, 0x532b, - 0x532b, 0x532b, 0x532b, 0x532b, 0x532c, 0x532c, 0x532c, 0x532c, - 0x532c, 0x532d, 0x532d, 0x532d, 0x532d, 0x532d, 0x532e, 0x532e, - 0x532e, 0x532e, 0x532e, 0x532e, 0x532f, 0x532f, 0x532f, 0x532f, - 0x532f, 0x5330, 0x5330, 0x5330, 0x5330, 0x5330, 0x5331, 0x5331, - 0x5331, 0x5331, 0x5331, 0x5332, 0x5332, 0x5332, 0x5332, 0x5332, - 0x5333, 0x5333, 0x5333, 0x5333, 0x5333, 0x5333, 0x5334, 0x5334, - 0x5334, 0x5334, 0x5334, 0x5335, 0x5335, 0x5335, 0x5335, 0x5335, - 0x5336, 0x5336, 0x5336, 0x5336, 0x5336, 0x5337, 0x5337, 0x5337, - 0x5337, 0x5337, 0x5337, 0x5338, 0x5338, 0x5338, 0x5338, 0x5338, - 0x5339, 0x5339, 0x5339, 0x5339, 0x5339, 0x533a, 0x533a, 0x533a, - 0x533a, 0x533a, 0x533a, 0x533b, 0x533b, 0x533b, 0x533b, 0x533b, - 0x533c, 0x533c, 0x533c, 0x533c, 0x533c, 0x533d, 0x533d, 0x533d, - 0x533d, 0x533d, 0x533d, 0x533e, 0x533e, 0x533e, 0x533e, 0x533e, - 0x533f, 0x533f, 0x533f, 0x533f, 0x533f, 0x533f, 0x5340, 0x5340, - 0x5340, 0x5340, 0x5340, 0x5341, 0x5341, 0x5341, 0x5341, 0x5341, - 0x5341, 0x5342, 0x5342, 0x5342, 0x5342, 0x5342, 0x5343, 0x5343, - 0x5343, 0x5343, 0x5343, 0x5343, 0x5344, 0x5344, 0x5344, 0x5344, - 0x5344, 0x5344, 0x5345, 0x5345, 0x5345, 0x5345, 0x5345, 0x5346, - 0x5346, 0x5346, 0x5346, 0x5346, 0x5346, 0x5347, 0x5347, 0x5347, - 0x5347, 0x5347, 0x5348, 0x5348, 0x5348, 0x5348, 0x5348, 0x5348, - 0x5349, 0x5349, 0x5349, 0x5349, 0x5349, 0x5349, 0x534a, 0x534a, - 0x534a, 0x534a, 0x534a, 0x534a, 0x534b, 0x534b, 0x534b, 0x534b, - 0x534b, 0x534c, 0x534c, 0x534c, 0x534c, 0x534c, 0x534c, 0x534d, - 0x534d, 0x534d, 0x534d, 0x534d, 0x534d, 0x534e, 0x534e, 0x534e, - 0x534e, 0x534e, 0x534e, 0x534f, 0x534f, 0x534f, 0x534f, 0x534f, - 0x5350, 0x5350, 0x5350, 0x5350, 0x5350, 0x5350, 0x5351, 0x5351, - 0x5351, 0x5351, 0x5351, 0x5351, 0x5352, 0x5352, 0x5352, 0x5352, - 0x5352, 0x5352, 0x5353, 0x5353, 0x5353, 0x5353, 0x5353, 0x5353, - 0x5354, 0x5354, 0x5354, 0x5354, 0x5354, 0x5354, 0x5355, 0x5355, - 0x5355, 0x5355, 0x5355, 0x5355, 0x5356, 0x5356, 0x5356, 0x5356, - 0x5356, 0x5356, 0x5357, 0x5357, 0x5357, 0x5357, 0x5357, 0x5357, - 0x5358, 0x5358, 0x5358, 0x5358, 0x5358, 0x5358, 0x5359, 0x5359, - 0x5359, 0x5359, 0x5359, 0x5359, 0x535a, 0x535a, 0x535a, 0x535a, - 0x535a, 0x535a, 0x535b, 0x535b, 0x535b, 0x535b, 0x535b, 0x535b, - 0x535c, 0x535c, 0x535c, 0x535c, 0x535c, 0x535c, 0x535d, 0x535d, - 0x535d, 0x535d, 0x535d, 0x535d, 0x535d, 0x535e, 0x535e, 0x535e, - 0x535e, 0x535e, 0x535e, 0x535f, 0x535f, 0x535f, 0x535f, 0x535f, - 0x535f, 0x5360, 0x5360, 0x5360, 0x5360, 0x5360, 0x5360, 0x5361, - 0x5361, 0x5361, 0x5361, 0x5361, 0x5361, 0x5362, 0x5362, 0x5362, - 0x5362, 0x5362, 0x5362, 0x5362, 0x5363, 0x5363, 0x5363, 0x5363, - 0x5363, 0x5363, 0x5364, 0x5364, 0x5364, 0x5364, 0x5364, 0x5364, - 0x5365, 0x5365, 0x5365, 0x5365, 0x5365, 0x5365, 0x5365, 0x5366, - 0x5366, 0x5366, 0x5366, 0x5366, 0x5366, 0x5367, 0x5367, 0x5367, - 0x5367, 0x5367, 0x5367, 0x5367, 0x5368, 0x5368, 0x5368, 0x5368, - 0x5368, 0x5368, 0x5369, 0x5369, 0x5369, 0x5369, 0x5369, 0x5369, - 0x536a, 0x536a, 0x536a, 0x536a, 0x536a, 0x536a, 0x536a, 0x536b, - 0x536b, 0x536b, 0x536b, 0x536b, 0x536b, 0x536c, 0x536c, 0x536c, - 0x536c, 0x536c, 0x536c, 0x536c, 0x536d, 0x536d, 0x536d, 0x536d, - 0x536d, 0x536d, 0x536e, 0x536e, 0x536e, 0x536e, 0x536e, 0x536e, - 0x536e, 0x536f, 0x536f, 0x536f, 0x536f, 0x536f, 0x536f, 0x536f, - 0x5370, 0x5370, 0x5370, 0x5370, 0x5370, 0x5370, 0x5371, 0x5371, - 0x5371, 0x5371, 0x5371, 0x5371, 0x5371, 0x5372, 0x5372, 0x5372, - 0x5372, 0x5372, 0x5372, 0x5372, 0x5373, 0x5373, 0x5373, 0x5373, - 0x5373, 0x5373, 0x5374, 0x5374, 0x5374, 0x5374, 0x5374, 0x5374, - 0x5374, 0x5375, 0x5375, 0x5375, 0x5375, 0x5375, 0x5375, 0x5375, - 0x5376, 0x5376, 0x5376, 0x5376, 0x5376, 0x5376, 0x5376, 0x5377, - 0x5377, 0x5377, 0x5377, 0x5377, 0x5377, 0x5378, 0x5378, 0x5378, - 0x5378, 0x5378, 0x5378, 0x5378, 0x5379, 0x5379, 0x5379, 0x5379, - 0x5379, 0x5379, 0x5379, 0x537a, 0x537a, 0x537a, 0x537a, 0x537a, - 0x537a, 0x537a, 0x537b, 0x537b, 0x537b, 0x537b, 0x537b, 0x537b, - 0x537b, 0x537c, 0x537c, 0x537c, 0x537c, 0x537c, 0x537c, 0x537c, - 0x537d, 0x537d, 0x537d, 0x537d, 0x537d, 0x537d, 0x537d, 0x537e, - 0x537e, 0x537e, 0x537e, 0x537e, 0x537e, 0x537e, 0x537f, 0x537f, - 0x537f, 0x537f, 0x537f, 0x537f, 0x537f, 0x5380, 0x5380, 0x5380, - 0x5380, 0x5380, 0x5380, 0x5380, 0x5381, 0x5381, 0x5381, 0x5381, - 0x5381, 0x5381, 0x5381, 0x5382, 0x5382, 0x5382, 0x5382, 0x5382, - 0x5382, 0x5382, 0x5383, 0x5383, 0x5383, 0x5383, 0x5383, 0x5383, - 0x5383, 0x5384, 0x5384, 0x5384, 0x5384, 0x5384, 0x5384, 0x5384, - 0x5384, 0x5385, 0x5385, 0x5385, 0x5385, 0x5385, 0x5385, 0x5385, - 0x5386, 0x5386, 0x5386, 0x5386, 0x5386, 0x5386, 0x5386, 0x5387, - 0x5387, 0x5387, 0x5387, 0x5387, 0x5387, 0x5387, 0x5388, 0x5388, - 0x5388, 0x5388, 0x5388, 0x5388, 0x5388, 0x5388, 0x5389, 0x5389, - 0x5389, 0x5389, 0x5389, 0x5389, 0x5389, 0x538a, 0x538a, 0x538a, - 0x538a, 0x538a, 0x538a, 0x538a, 0x538b, 0x538b, 0x538b, 0x538b, - 0x538b, 0x538b, 0x538b, 0x538b, 0x538c, 0x538c, 0x538c, 0x538c, - 0x538c, 0x538c, 0x538c, 0x538d, 0x538d, 0x538d, 0x538d, 0x538d, - 0x538d, 0x538d, 0x538e, 0x538e, 0x538e, 0x538e, 0x538e, 0x538e, - 0x538e, 0x538e, 0x538f, 0x538f, 0x538f, 0x538f, 0x538f, 0x538f, - 0x538f, 0x5390, 0x5390, 0x5390, 0x5390, 0x5390, 0x5390, 0x5390, - 0x5390, 0x5391, 0x5391, 0x5391, 0x5391, 0x5391, 0x5391, 0x5391, - 0x5392, 0x5392, 0x5392, 0x5392, 0x5392, 0x5392, 0x5392, 0x5392, - 0x5393, 0x5393, 0x5393, 0x5393, 0x5393, 0x5393, 0x5393, 0x5393, - 0x5394, 0x5394, 0x5394, 0x5394, 0x5394, 0x5394, 0x5394, 0x5395, - 0x5395, 0x5395, 0x5395, 0x5395, 0x5395, 0x5395, 0x5395, 0x5396, - 0x5396, 0x5396, 0x5396, 0x5396, 0x5396, 0x5396, 0x5396, 0x5397, - 0x5397, 0x5397, 0x5397, 0x5397, 0x5397, 0x5397, 0x5398, 0x5398, - 0x5398, 0x5398, 0x5398, 0x5398, 0x5398, 0x5398, 0x5399, 0x5399, - 0x5399, 0x5399, 0x5399, 0x5399, 0x5399, 0x5399, 0x539a, 0x539a, - 0x539a, 0x539a, 0x539a, 0x539a, 0x539a, 0x539a, 0x539b, 0x539b, - 0x539b, 0x539b, 0x539b, 0x539b, 0x539b, 0x539b, 0x539c, 0x539c, - 0x539c, 0x539c, 0x539c, 0x539c, 0x539c, 0x539d, 0x539d, 0x539d, - 0x539d, 0x539d, 0x539d, 0x539d, 0x539d, 0x539e, 0x539e, 0x539e, - 0x539e, 0x539e, 0x539e, 0x539e, 0x539e, 0x539f, 0x539f, 0x539f, - 0x539f, 0x539f, 0x539f, 0x539f, 0x539f, 0x53a0, 0x53a0, 0x53a0, - 0x53a0, 0x53a0, 0x53a0, 0x53a1, 0x53a1, 0x53a1, 0x53a1, 0x53a2, - 0x53a2, 0x53a2, 0x53a2, 0x53a3, 0x53a3, 0x53a3, 0x53a3, 0x53a4, - 0x53a4, 0x53a4, 0x53a4, 0x53a5, 0x53a5, 0x53a5, 0x53a5, 0x53a6, - 0x53a6, 0x53a6, 0x53a6, 0x53a7, 0x53a7, 0x53a7, 0x53a7, 0x53a8, - 0x53a8, 0x53a8, 0x53a8, 0x53a9, 0x53a9, 0x53a9, 0x53a9, 0x53a9, - 0x53aa, 0x53aa, 0x53aa, 0x53aa, 0x53ab, 0x53ab, 0x53ab, 0x53ab, - 0x53ac, 0x53ac, 0x53ac, 0x53ac, 0x53ad, 0x53ad, 0x53ad, 0x53ad, - 0x53ae, 0x53ae, 0x53ae, 0x53ae, 0x53ae, 0x53af, 0x53af, 0x53af, - 0x53af, 0x53b0, 0x53b0, 0x53b0, 0x53b0, 0x53b1, 0x53b1, 0x53b1, - 0x53b1, 0x53b2, 0x53b2, 0x53b2, 0x53b2, 0x53b2, 0x53b3, 0x53b3, - 0x53b3, 0x53b3, 0x53b4, 0x53b4, 0x53b4, 0x53b4, 0x53b5, 0x53b5, - 0x53b5, 0x53b5, 0x53b5, 0x53b6, 0x53b6, 0x53b6, 0x53b6, 0x53b7, - 0x53b7, 0x53b7, 0x53b7, 0x53b8, 0x53b8, 0x53b8, 0x53b8, 0x53b8, - 0x53b9, 0x53b9, 0x53b9, 0x53b9, 0x53ba, 0x53ba, 0x53ba, 0x53ba, - 0x53ba, 0x53bb, 0x53bb, 0x53bb, 0x53bb, 0x53bc, 0x53bc, 0x53bc, - 0x53bc, 0x53bc, 0x53bd, 0x53bd, 0x53bd, 0x53bd, 0x53be, 0x53be, - 0x53be, 0x53be, 0x53be, 0x53bf, 0x53bf, 0x53bf, 0x53bf, 0x53c0, - 0x53c0, 0x53c0, 0x53c0, 0x53c0, 0x53c1, 0x53c1, 0x53c1, 0x53c1, - 0x53c2, 0x53c2, 0x53c2, 0x53c2, 0x53c2, 0x53c3, 0x53c3, 0x53c3, - 0x53c3, 0x53c4, 0x53c4, 0x53c4, 0x53c4, 0x53c4, 0x53c5, 0x53c5, - 0x53c5, 0x53c5, 0x53c6, 0x53c6, 0x53c6, 0x53c6, 0x53c6, 0x53c7, - 0x53c7, 0x53c7, 0x53c7, 0x53c7, 0x53c8, 0x53c8, 0x53c8, 0x53c8, - 0x53c9, 0x53c9, 0x53c9, 0x53c9, 0x53c9, 0x53ca, 0x53ca, 0x53ca, - 0x53ca, 0x53ca, 0x53cb, 0x53cb, 0x53cb, 0x53cb, 0x53cb, 0x53cc, - 0x53cc, 0x53cc, 0x53cc, 0x53cd, 0x53cd, 0x53cd, 0x53cd, 0x53cd, - 0x53ce, 0x53ce, 0x53ce, 0x53ce, 0x53ce, 0x53cf, 0x53cf, 0x53cf, - 0x53cf, 0x53cf, 0x53d0, 0x53d0, 0x53d0, 0x53d0, 0x53d0, 0x53d1, - 0x53d1, 0x53d1, 0x53d1, 0x53d2, 0x53d2, 0x53d2, 0x53d2, 0x53d2, - 0x53d3, 0x53d3, 0x53d3, 0x53d3, 0x53d3, 0x53d4, 0x53d4, 0x53d4, - 0x53d4, 0x53d4, 0x53d5, 0x53d5, 0x53d5, 0x53d5, 0x53d5, 0x53d6, - 0x53d6, 0x53d6, 0x53d6, 0x53d6, 0x53d7, 0x53d7, 0x53d7, 0x53d7, - 0x53d7, 0x53d8, 0x53d8, 0x53d8, 0x53d8, 0x53d8, 0x53d9, 0x53d9, - 0x53d9, 0x53d9, 0x53d9, 0x53da, 0x53da, 0x53da, 0x53da, 0x53da, - 0x53db, 0x53db, 0x53db, 0x53db, 0x53db, 0x53dc, 0x53dc, 0x53dc, - 0x53dc, 0x53dc, 0x53dd, 0x53dd, 0x53dd, 0x53dd, 0x53dd, 0x53de, - 0x53de, 0x53de, 0x53de, 0x53de, 0x53df, 0x53df, 0x53df, 0x53df, - 0x53df, 0x53e0, 0x53e0, 0x53e0, 0x53e0, 0x53e0, 0x53e1, 0x53e1, - 0x53e1, 0x53e1, 0x53e1, 0x53e1, 0x53e2, 0x53e2, 0x53e2, 0x53e2, - 0x53e2, 0x53e3, 0x53e3, 0x53e3, 0x53e3, 0x53e3, 0x53e4, 0x53e4, - 0x53e4, 0x53e4, 0x53e4, 0x53e5, 0x53e5, 0x53e5, 0x53e5, 0x53e5, - 0x53e6, 0x53e6, 0x53e6, 0x53e6, 0x53e6, 0x53e6, 0x53e7, 0x53e7, - 0x53e7, 0x53e7, 0x53e7, 0x53e8, 0x53e8, 0x53e8, 0x53e8, 0x53e8, - 0x53e9, 0x53e9, 0x53e9, 0x53e9, 0x53e9, 0x53e9, 0x53ea, 0x53ea, - 0x53ea, 0x53ea, 0x53ea, 0x53eb, 0x53eb, 0x53eb, 0x53eb, 0x53eb, - 0x53ec, 0x53ec, 0x53ec, 0x53ec, 0x53ec, 0x53ec, 0x53ed, 0x53ed, - 0x53ed, 0x53ed, 0x53ed, 0x53ee, 0x53ee, 0x53ee, 0x53ee, 0x53ee, - 0x53ef, 0x53ef, 0x53ef, 0x53ef, 0x53ef, 0x53ef, 0x53f0, 0x53f0, - 0x53f0, 0x53f0, 0x53f0, 0x53f1, 0x53f1, 0x53f1, 0x53f1, 0x53f1, - 0x53f1, 0x53f2, 0x53f2, 0x53f2, 0x53f2, 0x53f2, 0x53f3, 0x53f3, - 0x53f3, 0x53f3, 0x53f3, 0x53f3, 0x53f4, 0x53f4, 0x53f4, 0x53f4, - 0x53f4, 0x53f4, 0x53f5, 0x53f5, 0x53f5, 0x53f5, 0x53f5, 0x53f6, - 0x53f6, 0x53f6, 0x53f6, 0x53f6, 0x53f6, 0x53f7, 0x53f7, 0x53f7, - 0x53f7, 0x53f7, 0x53f8, 0x53f8, 0x53f8, 0x53f8, 0x53f8, 0x53f8, - 0x53f9, 0x53f9, 0x53f9, 0x53f9, 0x53f9, 0x53f9, 0x53fa, 0x53fa, - 0x53fa, 0x53fa, 0x53fa, 0x53fb, 0x53fb, 0x53fb, 0x53fb, 0x53fb, - 0x53fb, 0x53fc, 0x53fc, 0x53fc, 0x53fc, 0x53fc, 0x53fc, 0x53fd, - 0x53fd, 0x53fd, 0x53fd, 0x53fd, 0x53fe, 0x53fe, 0x53fe, 0x53fe, - 0x53fe, 0x53fe, 0x53ff, 0x53ff, 0x53ff, 0x53ff, 0x53ff, 0x53ff, - 0x5400, 0x5400, 0x5400, 0x5400, 0x5400, 0x5400, 0x5400, 0x5400, - 0x5400, 0x5401, 0x5401, 0x5401, 0x5401, 0x5401, 0x5401, 0x5401, - 0x5401, 0x5401, 0x5401, 0x5401, 0x5401, 0x5402, 0x5402, 0x5402, - 0x5402, 0x5402, 0x5402, 0x5402, 0x5402, 0x5402, 0x5402, 0x5402, - 0x5403, 0x5403, 0x5403, 0x5403, 0x5403, 0x5403, 0x5403, 0x5403, - 0x5403, 0x5403, 0x5403, 0x5403, 0x5404, 0x5404, 0x5404, 0x5404, - 0x5404, 0x5404, 0x5404, 0x5404, 0x5404, 0x5404, 0x5404, 0x5404, - 0x5405, 0x5405, 0x5405, 0x5405, 0x5405, 0x5405, 0x5405, 0x5405, - 0x5405, 0x5405, 0x5405, 0x5405, 0x5406, 0x5406, 0x5406, 0x5406, - 0x5406, 0x5406, 0x5406, 0x5406, 0x5406, 0x5406, 0x5406, 0x5406, - 0x5406, 0x5407, 0x5407, 0x5407, 0x5407, 0x5407, 0x5407, 0x5407, - 0x5407, 0x5407, 0x5407, 0x5407, 0x5407, 0x5408, 0x5408, 0x5408, - 0x5408, 0x5408, 0x5408, 0x5408, 0x5408, 0x5408, 0x5408, 0x5408, - 0x5408, 0x5409, 0x5409, 0x5409, 0x5409, 0x5409, 0x5409, 0x5409, - 0x5409, 0x5409, 0x5409, 0x5409, 0x5409, 0x5409, 0x540a, 0x540a, - 0x540a, 0x540a, 0x540a, 0x540a, 0x540a, 0x540a, 0x540a, 0x540a, - 0x540a, 0x540a, 0x540b, 0x540b, 0x540b, 0x540b, 0x540b, 0x540b, - 0x540b, 0x540b, 0x540b, 0x540b, 0x540b, 0x540b, 0x540b, 0x540c, - 0x540c, 0x540c, 0x540c, 0x540c, 0x540c, 0x540c, 0x540c, 0x540c, - 0x540c, 0x540c, 0x540c, 0x540c, 0x540d, 0x540d, 0x540d, 0x540d, - 0x540d, 0x540d, 0x540d, 0x540d, 0x540d, 0x540d, 0x540d, 0x540d, - 0x540d, 0x540e, 0x540e, 0x540e, 0x540e, 0x540e, 0x540e, 0x540e, - 0x540e, 0x540e, 0x540e, 0x540e, 0x540e, 0x540e, 0x540f, 0x540f, - 0x540f, 0x540f, 0x540f, 0x540f, 0x540f, 0x540f, 0x540f, 0x540f, - 0x540f, 0x540f, 0x540f, 0x5410, 0x5410, 0x5410, 0x5410, 0x5410, - 0x5410, 0x5410, 0x5410, 0x5410, 0x5410, 0x5410, 0x5410, 0x5410, - 0x5411, 0x5411, 0x5411, 0x5411, 0x5411, 0x5411, 0x5411, 0x5411, - 0x5411, 0x5411, 0x5411, 0x5411, 0x5411, 0x5412, 0x5412, 0x5412, - 0x5412, 0x5412, 0x5412, 0x5412, 0x5412, 0x5412, 0x5412, 0x5412, - 0x5412, 0x5412, 0x5412, 0x5413, 0x5413, 0x5413, 0x5413, 0x5413, - 0x5413, 0x5413, 0x5413, 0x5413, 0x5413, 0x5413, 0x5413, 0x5413, - 0x5414, 0x5414, 0x5414, 0x5414, 0x5414, 0x5414, 0x5414, 0x5414, - 0x5414, 0x5414, 0x5414, 0x5414, 0x5414, 0x5414, 0x5415, 0x5415, - 0x5415, 0x5415, 0x5415, 0x5415, 0x5415, 0x5415, 0x5415, 0x5415, - 0x5415, 0x5415, 0x5415, 0x5415, 0x5416, 0x5416, 0x5416, 0x5416, - 0x5416, 0x5416, 0x5416, 0x5416, 0x5416, 0x5416, 0x5416, 0x5416, - 0x5416, 0x5417, 0x5417, 0x5417, 0x5417, 0x5417, 0x5417, 0x5417, - 0x5417, 0x5417, 0x5417, 0x5417, 0x5417, 0x5417, 0x5417, 0x5418, - 0x5418, 0x5418, 0x5418, 0x5418, 0x5418, 0x5418, 0x5418, 0x5418, - 0x5418, 0x5418, 0x5418, 0x5418, 0x5418, 0x5419, 0x5419, 0x5419, - 0x5419, 0x5419, 0x5419, 0x5419, 0x5419, 0x5419, 0x5419, 0x5419, - 0x5419, 0x5419, 0x5419, 0x5419, 0x541a, 0x541a, 0x541a, 0x541a, - 0x541a, 0x541a, 0x541a, 0x541a, 0x541a, 0x541a, 0x541a, 0x541a, - 0x541a, 0x541a, 0x541b, 0x541b, 0x541b, 0x541b, 0x541b, 0x541b, - 0x541b, 0x541b, 0x541b, 0x541b, 0x541b, 0x541b, 0x541b, 0x541b, - 0x541c, 0x541c, 0x541c, 0x541c, 0x541c, 0x541c, 0x541c, 0x541c, - 0x541c, 0x541c, 0x541c, 0x541c, 0x541c, 0x541c, 0x541c, 0x541d, - 0x541d, 0x541d, 0x541d, 0x541d, 0x541d, 0x541d, 0x541d, 0x541d, - 0x541d, 0x541d, 0x541d, 0x541d, 0x541d, 0x541e, 0x541e, 0x541e, - 0x541e, 0x541e, 0x541e, 0x541e, 0x541e, 0x541e, 0x541e, 0x541e, - 0x541e, 0x541e, 0x541e, 0x541e, 0x541f, 0x541f, 0x541f, 0x541f, - 0x541f, 0x541f, 0x541f, 0x541f, 0x541f, 0x541f, 0x541f, 0x541f, - 0x541f, 0x541f, 0x541f, 0x5420, 0x5420, 0x5420, 0x5420, 0x5420, - 0x5420, 0x5420, 0x5420, 0x5420, 0x5420, 0x5420, 0x5420, 0x5420, - 0x5420, 0x5420, 0x5421, 0x5421, 0x5421, 0x5421, 0x5421, 0x5421, - 0x5421, 0x5421, 0x5421, 0x5421, 0x5421, 0x5421, 0x5421, 0x5421, - 0x5421, 0x5422, 0x5422, 0x5422, 0x5422, 0x5422, 0x5422, 0x5422, - 0x5422, 0x5422, 0x5422, 0x5422, 0x5422, 0x5422, 0x5422, 0x5422, - 0x5423, 0x5423, 0x5423, 0x5423, 0x5423, 0x5423, 0x5423, 0x5423, - 0x5423, 0x5423, 0x5423, 0x5423, 0x5423, 0x5423, 0x5423, 0x5424, - 0x5424, 0x5424, 0x5424, 0x5424, 0x5424, 0x5424, 0x5424, 0x5424, - 0x5424, 0x5424, 0x5424, 0x5424, 0x5424, 0x5424, 0x5424, 0x5425, - 0x5425, 0x5425, 0x5425, 0x5425, 0x5425, 0x5425, 0x5425, 0x5425, - 0x5425, 0x5425, 0x5425, 0x5425, 0x5425, 0x5425, 0x5426, 0x5426, - 0x5426, 0x5426, 0x5426, 0x5426, 0x5426, 0x5426, 0x5426, 0x5426, - 0x5426, 0x5426, 0x5426, 0x5426, 0x5426, 0x5426, 0x5427, 0x5427, - 0x5427, 0x5427, 0x5427, 0x5427, 0x5427, 0x5427, 0x5427, 0x5427, - 0x5427, 0x5427, 0x5427, 0x5427, 0x5427, 0x5427, 0x5428, 0x5428, - 0x5428, 0x5428, 0x5428, 0x5428, 0x5428, 0x5428, 0x5428, 0x5428, - 0x5428, 0x5428, 0x5428, 0x5428, 0x5428, 0x5428, 0x5429, 0x5429, - 0x5429, 0x5429, 0x5429, 0x5429, 0x5429, 0x5429, 0x5429, 0x542a, - 0x542a, 0x542a, 0x542a, 0x542a, 0x542a, 0x542a, 0x542a, 0x542b, - 0x542b, 0x542b, 0x542b, 0x542b, 0x542b, 0x542b, 0x542b, 0x542c, - 0x542c, 0x542c, 0x542c, 0x542c, 0x542c, 0x542c, 0x542c, 0x542c, - 0x542d, 0x542d, 0x542d, 0x542d, 0x542d, 0x542d, 0x542d, 0x542d, - 0x542e, 0x542e, 0x542e, 0x542e, 0x542e, 0x542e, 0x542e, 0x542e, - 0x542f, 0x542f, 0x542f, 0x542f, 0x542f, 0x542f, 0x542f, 0x542f, - 0x542f, 0x5430, 0x5430, 0x5430, 0x5430, 0x5430, 0x5430, 0x5430, - 0x5430, 0x5431, 0x5431, 0x5431, 0x5431, 0x5431, 0x5431, 0x5431, - 0x5431, 0x5431, 0x5432, 0x5432, 0x5432, 0x5432, 0x5432, 0x5432, - 0x5432, 0x5432, 0x5433, 0x5433, 0x5433, 0x5433, 0x5433, 0x5433, - 0x5433, 0x5433, 0x5433, 0x5434, 0x5434, 0x5434, 0x5434, 0x5434, - 0x5434, 0x5434, 0x5434, 0x5434, 0x5435, 0x5435, 0x5435, 0x5435, - 0x5435, 0x5435, 0x5435, 0x5435, 0x5436, 0x5436, 0x5436, 0x5436, - 0x5436, 0x5436, 0x5436, 0x5436, 0x5436, 0x5437, 0x5437, 0x5437, - 0x5437, 0x5437, 0x5437, 0x5437, 0x5437, 0x5437, 0x5438, 0x5438, - 0x5438, 0x5438, 0x5438, 0x5438, 0x5438, 0x5438, 0x5438, 0x5439, - 0x5439, 0x5439, 0x5439, 0x5439, 0x5439, 0x5439, 0x5439, 0x5439, - 0x543a, 0x543a, 0x543a, 0x543a, 0x543a, 0x543a, 0x543a, 0x543a, - 0x543a, 0x543a, 0x543b, 0x543b, 0x543b, 0x543b, 0x543b, 0x543b, - 0x543b, 0x543b, 0x543b, 0x543c, 0x543c, 0x543c, 0x543c, 0x543c, - 0x543c, 0x543c, 0x543c, 0x543c, 0x543d, 0x543d, 0x543d, 0x543d, - 0x543d, 0x543d, 0x543d, 0x543d, 0x543d, 0x543e, 0x543e, 0x543e, - 0x543e, 0x543e, 0x543e, 0x543e, 0x543e, 0x543e, 0x543e, 0x543f, - 0x543f, 0x543f, 0x543f, 0x543f, 0x543f, 0x543f, 0x543f, 0x543f, - 0x5440, 0x5440, 0x5440, 0x5440, 0x5440, 0x5440, 0x5440, 0x5440, - 0x5440, 0x5440, 0x5441, 0x5441, 0x5441, 0x5441, 0x5441, 0x5441, - 0x5441, 0x5441, 0x5441, 0x5441, 0x5442, 0x5442, 0x5442, 0x5442, - 0x5442, 0x5442, 0x5442, 0x5442, 0x5442, 0x5443, 0x5443, 0x5443, - 0x5443, 0x5443, 0x5443, 0x5443, 0x5443, 0x5443, 0x5443, 0x5444, - 0x5444, 0x5444, 0x5444, 0x5444, 0x5444, 0x5444, 0x5444, 0x5444, - 0x5444, 0x5445, 0x5445, 0x5445, 0x5445, 0x5445, 0x5445, 0x5445, - 0x5445, 0x5445, 0x5445, 0x5446, 0x5446, 0x5446, 0x5446, 0x5446, - 0x5446, 0x5446, 0x5446, 0x5446, 0x5446, 0x5447, 0x5447, 0x5447, - 0x5447, 0x5447, 0x5447, 0x5447, 0x5447, 0x5447, 0x5447, 0x5448, - 0x5448, 0x5448, 0x5448, 0x5448, 0x5448, 0x5448, 0x5448, 0x5448, - 0x5448, 0x5448, 0x5449, 0x5449, 0x5449, 0x5449, 0x5449, 0x5449, - 0x5449, 0x5449, 0x5449, 0x5449, 0x544a, 0x544a, 0x544a, 0x544a, - 0x544a, 0x544a, 0x544a, 0x544a, 0x544a, 0x544a, 0x544b, 0x544b, - 0x544b, 0x544b, 0x544b, 0x544b, 0x544b, 0x544b, 0x544b, 0x544b, - 0x544b, 0x544c, 0x544c, 0x544c, 0x544c, 0x544c, 0x544c, 0x544c, - 0x544c, 0x544c, 0x544c, 0x544d, 0x544d, 0x544d, 0x544d, 0x544d, - 0x544d, 0x544d, 0x544d, 0x544d, 0x544d, 0x544d, 0x544e, 0x544e, - 0x544e, 0x544e, 0x544e, 0x544e, 0x544e, 0x544e, 0x544e, 0x544e, - 0x544e, 0x544f, 0x544f, 0x544f, 0x544f, 0x544f, 0x544f, 0x544f, - 0x544f, 0x544f, 0x544f, 0x5450, 0x5450, 0x5450, 0x5450, 0x5450, - 0x5450, 0x5450, 0x5450, 0x5450, 0x5450, 0x5450, 0x5451, 0x5451, - 0x5451, 0x5451, 0x5451, 0x5451, 0x5451, 0x5451, 0x5451, 0x5451, - 0x5451, 0x5452, 0x5452, 0x5452, 0x5452, 0x5452, 0x5452, 0x5452, - 0x5452, 0x5452, 0x5452, 0x5452, 0x5453, 0x5453, 0x5453, 0x5453, - 0x5453, 0x5453, 0x5453, 0x5453, 0x5453, 0x5453, 0x5453, 0x5454, - 0x5454, 0x5454, 0x5454, 0x5454, 0x5454, 0x5454, 0x5454, 0x5454, - 0x5454, 0x5454, 0x5454, 0x5455, 0x5455, 0x5455, 0x5455, 0x5455, - 0x5455, 0x5455, 0x5455, 0x5455, 0x5455, 0x5455, 0x5456, 0x5456, - 0x5456, 0x5456, 0x5456, 0x5456, 0x5456, 0x5456, 0x5456, 0x5456, - 0x5456, 0x5457, 0x5457, 0x5457, 0x5457, 0x5457, 0x5457, 0x5457, - 0x5457, 0x5457, 0x5457, 0x5457, 0x5457, 0x5458, 0x5458, 0x5458, - 0x5458, 0x5458, 0x5458, 0x5458, 0x5458, 0x5458, 0x5458, 0x5458, - 0x5459, 0x5459, 0x5459, 0x5459, 0x5459, 0x5459, 0x5459, 0x5459, - 0x5459, 0x5459, 0x5459, 0x5459, 0x545a, 0x545a, 0x545a, 0x545a, - 0x545a, 0x545a, 0x545a, 0x545a, 0x545a, 0x545a, 0x545a, 0x545a, - 0x545b, 0x545b, 0x545b, 0x545b, 0x545b, 0x545b, 0x545b, 0x545b, - 0x545b, 0x545b, 0x545b, 0x545b, 0x545c, 0x545c, 0x545c, 0x545c, - 0x545c, 0x545c, 0x545c, 0x545c, 0x545c, 0x545c, 0x545c, 0x545c, - 0x545d, 0x545d, 0x545d, 0x545d, 0x545d, 0x545d, 0x545d, 0x545d, - 0x545d, 0x545d, 0x545d, 0x545d, 0x545e, 0x545e, 0x545e, 0x545e, - 0x545e, 0x545e, 0x545e, 0x545e, 0x545e, 0x545e, 0x545e, 0x545e, - 0x545f, 0x545f, 0x545f, 0x545f, 0x545f, 0x545f, 0x545f, 0x545f, - 0x545f, 0x545f, 0x545f, 0x545f, 0x5460, 0x5460, 0x5460, 0x5460, - 0x5460, 0x5460, 0x5460, 0x5460, 0x5460, 0x5460, 0x5460, 0x5460, - 0x5461, 0x5461, 0x5461, 0x5461, 0x5461, 0x5461, 0x5461, 0x5461, - 0x5461, 0x5461, 0x5461, 0x5461, 0x5461, 0x5462, 0x5462, 0x5462, - 0x5462, 0x5462, 0x5462, 0x5462, 0x5462, 0x5462, 0x5462, 0x5462, - 0x5462, 0x5463, 0x5463, 0x5463, 0x5463, 0x5463, 0x5463, 0x5463, - 0x5463, 0x5463, 0x5463, 0x5463, 0x5463, 0x5463, 0x5464, 0x5464, - 0x5464, 0x5464, 0x5464, 0x5464, 0x5464, 0x5464, 0x5464, 0x5464, - 0x5464, 0x5464, 0x5464, 0x5465, 0x5465, 0x5465, 0x5465, 0x5465, - 0x5465, 0x5465, 0x5465, 0x5465, 0x5465, 0x5465, 0x5465, 0x5466, - 0x5466, 0x5466, 0x5466, 0x5466, 0x5466, 0x5466, 0x5466, 0x5466, - 0x5466, 0x5466, 0x5466, 0x5466, 0x5467, 0x5467, 0x5467, 0x5467, - 0x5467, 0x5467, 0x5467, 0x5467, 0x5467, 0x5467, 0x5467, 0x5467, - 0x5467, 0x5468, 0x5468, 0x5468, 0x5468, 0x5468, 0x5468, 0x5468, - 0x5468, 0x5468, 0x5468, 0x5468, 0x5468, 0x5468, 0x5469, 0x5469, - 0x5469, 0x5469, 0x5469, 0x5469, 0x5469, 0x5469, 0x5469, 0x5469, - 0x5469, 0x5469, 0x5469, 0x5469, 0x546a, 0x546a, 0x546a, 0x546a, - 0x546a, 0x546a, 0x546a, 0x546a, 0x546a, 0x546a, 0x546a, 0x546a, - 0x546a, 0x546b, 0x546b, 0x546b, 0x546b, 0x546b, 0x546b, 0x546b, - 0x546b, 0x546b, 0x546b, 0x546b, 0x546b, 0x546b, 0x546c, 0x546c, - 0x546c, 0x546c, 0x546c, 0x546c, 0x546c, 0x546c, 0x546c, 0x546c, - 0x546c, 0x546c, 0x546c, 0x546c, 0x546d, 0x546d, 0x546d, 0x546d, - 0x546d, 0x546d, 0x546d, 0x546d, 0x546d, 0x546d, 0x546d, 0x546d, - 0x546d, 0x546d, 0x546e, 0x546e, 0x546e, 0x546e, 0x546e, 0x546e, - 0x546e, 0x546e, 0x546e, 0x546e, 0x546e, 0x546e, 0x546e, 0x546f, - 0x546f, 0x546f, 0x546f, 0x546f, 0x546f, 0x546f, 0x546f, 0x546f, - 0x546f, 0x546f, 0x546f, 0x546f, 0x546f, 0x5470, 0x5470, 0x5470, - 0x5470, 0x5470, 0x5470, 0x5470, 0x5470, 0x5470, 0x5470, 0x5470, - 0x5470, 0x5470, 0x5470, 0x5471, 0x5471, 0x5471, 0x5471, 0x5471, - 0x5471, 0x5471, 0x5471, 0x5471, 0x5471, 0x5471, 0x5471, 0x5471, - 0x5471, 0x5472, 0x5472, 0x5472, 0x5472, 0x5472, 0x5472, 0x5472, - 0x5472, 0x5472, 0x5472, 0x5472, 0x5472, 0x5472, 0x5472, 0x5473, - 0x5473, 0x5473, 0x5473, 0x5473, 0x5473, 0x5473, 0x5473, 0x5473, - 0x5473, 0x5473, 0x5473, 0x5473, 0x5473, 0x5473, 0x5474, 0x5474, - 0x5474, 0x5474, 0x5474, 0x5474, 0x5474, 0x5474, 0x5474, 0x5474, - 0x5474, 0x5474, 0x5474, 0x5474, 0x5475, 0x5475, 0x5475, 0x5475, - 0x5475, 0x5475, 0x5475, 0x5475, 0x5475, 0x5475, 0x5475, 0x5475, - 0x5475, 0x5475, 0x5475, 0x5476, 0x5476, 0x5476, 0x5476, 0x5476, - 0x5476, 0x5476, 0x5476, 0x5476, 0x5476, 0x5476, 0x5476, 0x5476, - 0x5476, 0x5477, 0x5477, 0x5477, 0x5477, 0x5477, 0x5477, 0x5477, - 0x5477, 0x5477, 0x5477, 0x5477, 0x5477, 0x5477, 0x5477, 0x5477, - 0x5478, 0x5478, 0x5478, 0x5478, 0x5478, 0x5478, 0x5478, 0x5478, - 0x5478, 0x5478, 0x5478, 0x5478, 0x5478, 0x5478, 0x5478, 0x5479, - 0x5479, 0x5479, 0x5479, 0x5479, 0x5479, 0x5479, 0x5479, 0x5479, - 0x5479, 0x5479, 0x5479, 0x5479, 0x5479, 0x5479, 0x547a, 0x547a, - 0x547a, 0x547a, 0x547a, 0x547a, 0x547a, 0x547a, 0x547a, 0x547a, - 0x547a, 0x547a, 0x547a, 0x547a, 0x547a, 0x547b, 0x547b, 0x547b, - 0x547b, 0x547b, 0x547b, 0x547b, 0x547b, 0x547b, 0x547b, 0x547b, - 0x547b, 0x547b, 0x547b, 0x547b, 0x547c, 0x547c, 0x547c, 0x547c, - 0x547c, 0x547c, 0x547c, 0x547c, 0x547c, 0x547c, 0x547c, 0x547c, - 0x547c, 0x547c, 0x547c, 0x547c, 0x547d, 0x547d, 0x547d, 0x547d, - 0x547d, 0x547d, 0x547d, 0x547d, 0x547d, 0x547d, 0x547d, 0x547d, - 0x547d, 0x547d, 0x547d, 0x547e, 0x547e, 0x547e, 0x547e, 0x547e, - 0x547e, 0x547e, 0x547e, 0x547e, 0x547e, 0x547e, 0x547e, 0x547e, - 0x547e, 0x547e, 0x547e, 0x547f, 0x547f, 0x547f, 0x547f, 0x547f, - 0x547f, 0x547f, 0x547f, 0x547f, 0x547f, 0x547f, 0x547f, 0x547f, - 0x547f, 0x547f, 0x5480, 0x5480, 0x5480, 0x5480, 0x5480, 0x5480, - 0x5480, 0x5480, 0x5480, 0x5480, 0x5480, 0x5480, 0x5480, 0x5480, - 0x5480, 0x5480, 0x5481, 0x5481, 0x5481, 0x5481, 0x5481, 0x5481, - 0x5481, 0x5481, 0x5481, 0x5481, 0x5481, 0x5481, 0x5481, 0x5481, - 0x5481, 0x5482, 0x5482, 0x5482, 0x5482, 0x5482, 0x5482, 0x5482, - 0x5482, 0x5483, 0x5483, 0x5483, 0x5483, 0x5483, 0x5483, 0x5483, - 0x5483, 0x5484, 0x5484, 0x5484, 0x5484, 0x5484, 0x5484, 0x5484, - 0x5484, 0x5484, 0x5485, 0x5485, 0x5485, 0x5485, 0x5485, 0x5485, - 0x5485, 0x5485, 0x5486, 0x5486, 0x5486, 0x5486, 0x5486, 0x5486, - 0x5486, 0x5486, 0x5487, 0x5487, 0x5487, 0x5487, 0x5487, 0x5487, - 0x5487, 0x5487, 0x5487, 0x5488, 0x5488, 0x5488, 0x5488, 0x5488, - 0x5488, 0x5488, 0x5488, 0x5489, 0x5489, 0x5489, 0x5489, 0x5489, - 0x5489, 0x5489, 0x5489, 0x548a, 0x548a, 0x548a, 0x548a, 0x548a, - 0x548a, 0x548a, 0x548a, 0x548a, 0x548b, 0x548b, 0x548b, 0x548b, - 0x548b, 0x548b, 0x548b, 0x548b, 0x548b, 0x548c, 0x548c, 0x548c, - 0x548c, 0x548c, 0x548c, 0x548c, 0x548c, 0x548d, 0x548d, 0x548d, - 0x548d, 0x548d, 0x548d, 0x548d, 0x548d, 0x548d, 0x548e, 0x548e, - 0x548e, 0x548e, 0x548e, 0x548e, 0x548e, 0x548e, 0x548e, 0x548f, - 0x548f, 0x548f, 0x548f, 0x548f, 0x548f, 0x548f, 0x548f, 0x548f, - 0x5490, 0x5490, 0x5490, 0x5490, 0x5490, 0x5490, 0x5490, 0x5490, - 0x5490, 0x5491, 0x5491, 0x5491, 0x5491, 0x5491, 0x5491, 0x5491, - 0x5491, 0x5491, 0x5492, 0x5492, 0x5492, 0x5492, 0x5492, 0x5492, - 0x5492, 0x5492, 0x5492, 0x5493, 0x5493, 0x5493, 0x5493, 0x5493, - 0x5493, 0x5493, 0x5493, 0x5493, 0x5494, 0x5494, 0x5494, 0x5494, - 0x5494, 0x5494, 0x5494, 0x5494, 0x5494, 0x5495, 0x5495, 0x5495, - 0x5495, 0x5495, 0x5495, 0x5495, 0x5495, 0x5495, 0x5495, 0x5496, - 0x5496, 0x5496, 0x5496, 0x5496, 0x5496, 0x5496, 0x5496, 0x5496, - 0x5497, 0x5497, 0x5497, 0x5497, 0x5497, 0x5497, 0x5497, 0x5497, - 0x5497, 0x5497, 0x5498, 0x5498, 0x5498, 0x5498, 0x5498, 0x5498, - 0x5498, 0x5498, 0x5498, 0x5499, 0x5499, 0x5499, 0x5499, 0x5499, - 0x5499, 0x5499, 0x5499, 0x5499, 0x5499, 0x549a, 0x549a, 0x549a, - 0x549a, 0x549a, 0x549a, 0x549a, 0x549a, 0x549a, 0x549b, 0x549b, - 0x549b, 0x549b, 0x549b, 0x549b, 0x549b, 0x549b, 0x549b, 0x549b, - 0x549c, 0x549c, 0x549c, 0x549c, 0x549c, 0x549c, 0x549c, 0x549c, - 0x549c, 0x549c, 0x549d, 0x549d, 0x549d, 0x549d, 0x549d, 0x549d, - 0x549d, 0x549d, 0x549d, 0x549d, 0x549e, 0x549e, 0x549e, 0x549e, - 0x549e, 0x549e, 0x549e, 0x549e, 0x549e, 0x549e, 0x549f, 0x549f, - 0x549f, 0x549f, 0x549f, 0x549f, 0x549f, 0x549f, 0x549f, 0x549f, - 0x54a0, 0x54a0, 0x54a0, 0x54a0, 0x54a0, 0x54a0, 0x54a0, 0x54a0, - 0x54a0, 0x54a0, 0x54a1, 0x54a1, 0x54a1, 0x54a1, 0x54a1, 0x54a1, - 0x54a1, 0x54a1, 0x54a1, 0x54a1, 0x54a2, 0x54a2, 0x54a2, 0x54a2, - 0x54a2, 0x54a2, 0x54a2, 0x54a2, 0x54a2, 0x54a2, 0x54a2, 0x54a3, - 0x54a3, 0x54a3, 0x54a3, 0x54a3, 0x54a3, 0x54a3, 0x54a3, 0x54a3, - 0x54a3, 0x54a4, 0x54a4, 0x54a4, 0x54a4, 0x54a4, 0x54a4, 0x54a4, - 0x54a4, 0x54a4, 0x54a4, 0x54a4, 0x54a5, 0x54a5, 0x54a5, 0x54a5, - 0x54a5, 0x54a5, 0x54a5, 0x54a5, 0x54a5, 0x54a5, 0x54a6, 0x54a6, - 0x54a6, 0x54a6, 0x54a6, 0x54a6, 0x54a6, 0x54a6, 0x54a6, 0x54a6, - 0x54a6, 0x54a7, 0x54a7, 0x54a7, 0x54a7, 0x54a7, 0x54a7, 0x54a7, - 0x54a7, 0x54a7, 0x54a7, 0x54a7, 0x54a8, 0x54a8, 0x54a8, 0x54a8, - 0x54a8, 0x54a8, 0x54a8, 0x54a8, 0x54a8, 0x54a8, 0x54a9, 0x54a9, - 0x54a9, 0x54a9, 0x54a9, 0x54a9, 0x54a9, 0x54a9, 0x54a9, 0x54a9, - 0x54a9, 0x54aa, 0x54aa, 0x54aa, 0x54aa, 0x54aa, 0x54aa, 0x54aa, - 0x54aa, 0x54aa, 0x54aa, 0x54aa, 0x54ab, 0x54ab, 0x54ab, 0x54ab, - 0x54ab, 0x54ab, 0x54ab, 0x54ab, 0x54ab, 0x54ab, 0x54ab, 0x54ac, - 0x54ac, 0x54ac, 0x54ac, 0x54ac, 0x54ac, 0x54ac, 0x54ac, 0x54ac, - 0x54ac, 0x54ac, 0x54ad, 0x54ad, 0x54ad, 0x54ad, 0x54ad, 0x54ad, - 0x54ad, 0x54ad, 0x54ad, 0x54ad, 0x54ad, 0x54ad, 0x54ae, 0x54ae, - 0x54ae, 0x54ae, 0x54ae, 0x54ae, 0x54ae, 0x54ae, 0x54ae, 0x54ae, - 0x54ae, 0x54af, 0x54af, 0x54af, 0x54af, 0x54af, 0x54af, 0x54af, - 0x54af, 0x54af, 0x54af, 0x54af, 0x54b0, 0x54b0, 0x54b0, 0x54b0, - 0x54b0, 0x54b0, 0x54b0, 0x54b0, 0x54b0, 0x54b0, 0x54b0, 0x54b0, - 0x54b1, 0x54b1, 0x54b1, 0x54b1, 0x54b1, 0x54b1, 0x54b1, 0x54b1, - 0x54b1, 0x54b1, 0x54b1, 0x54b1, 0x54b2, 0x54b2, 0x54b2, 0x54b2, - 0x54b2, 0x54b2, 0x54b2, 0x54b2, 0x54b2, 0x54b2, 0x54b2, 0x54b3, - 0x54b3, 0x54b3, 0x54b3, 0x54b3, 0x54b3, 0x54b3, 0x54b3, 0x54b3, - 0x54b3, 0x54b3, 0x54b3, 0x54b4, 0x54b4, 0x54b4, 0x54b4, 0x54b4, - 0x54b4, 0x54b4, 0x54b4, 0x54b4, 0x54b4, 0x54b4, 0x54b4, 0x54b5, - 0x54b5, 0x54b5, 0x54b5, 0x54b5, 0x54b5, 0x54b5, 0x54b5, 0x54b5, - 0x54b5, 0x54b5, 0x54b5, 0x54b6, 0x54b6, 0x54b6, 0x54b6, 0x54b6, - 0x54b6, 0x54b6, 0x54b6, 0x54b6, 0x54b6, 0x54b6, 0x54b6, 0x54b7, - 0x54b7, 0x54b7, 0x54b7, 0x54b7, 0x54b7, 0x54b7, 0x54b7, 0x54b7, - 0x54b7, 0x54b7, 0x54b7, 0x54b8, 0x54b8, 0x54b8, 0x54b8, 0x54b8, - 0x54b8, 0x54b8, 0x54b8, 0x54b8, 0x54b8, 0x54b8, 0x54b8, 0x54b9, - 0x54b9, 0x54b9, 0x54b9, 0x54b9, 0x54b9, 0x54b9, 0x54b9, 0x54b9, - 0x54b9, 0x54b9, 0x54b9, 0x54b9, 0x54ba, 0x54ba, 0x54ba, 0x54ba, - 0x54ba, 0x54ba, 0x54ba, 0x54ba, 0x54ba, 0x54ba, 0x54ba, 0x54ba, - 0x54bb, 0x54bb, 0x54bb, 0x54bb, 0x54bb, 0x54bb, 0x54bb, 0x54bb, - 0x54bb, 0x54bb, 0x54bb, 0x54bb, 0x54bb, 0x54bc, 0x54bc, 0x54bc, - 0x54bc, 0x54bc, 0x54bc, 0x54bc, 0x54bc, 0x54bc, 0x54bc, 0x54bc, - 0x54bc, 0x54bd, 0x54bd, 0x54bd, 0x54bd, 0x54bd, 0x54bd, 0x54bd, - 0x54bd, 0x54bd, 0x54bd, 0x54bd, 0x54bd, 0x54bd, 0x54be, 0x54be, - 0x54be, 0x54be, 0x54be, 0x54be, 0x54be, 0x54be, 0x54be, 0x54be, - 0x54be, 0x54be, 0x54be, 0x54bf, 0x54bf, 0x54bf, 0x54bf, 0x54bf, - 0x54bf, 0x54bf, 0x54bf, 0x54bf, 0x54bf, 0x54bf, 0x54bf, 0x54bf, - 0x54c0, 0x54c0, 0x54c0, 0x54c0, 0x54c0, 0x54c0, 0x54c0, 0x54c0, - 0x54c0, 0x54c0, 0x54c0, 0x54c0, 0x54c0, 0x54c1, 0x54c1, 0x54c1, - 0x54c1, 0x54c1, 0x54c1, 0x54c1, 0x54c1, 0x54c1, 0x54c1, 0x54c1, - 0x54c1, 0x54c1, 0x54c2, 0x54c2, 0x54c2, 0x54c2, 0x54c2, 0x54c2, - 0x54c2, 0x54c2, 0x54c2, 0x54c2, 0x54c2, 0x54c2, 0x54c2, 0x54c3, - 0x54c3, 0x54c3, 0x54c3, 0x54c3, 0x54c3, 0x54c3, 0x54c3, 0x54c3, - 0x54c3, 0x54c3, 0x54c3, 0x54c3, 0x54c3, 0x54c4, 0x54c4, 0x54c4, - 0x54c4, 0x54c4, 0x54c4, 0x54c4, 0x54c4, 0x54c4, 0x54c4, 0x54c4, - 0x54c4, 0x54c4, 0x54c5, 0x54c5, 0x54c5, 0x54c5, 0x54c5, 0x54c5, - 0x54c5, 0x54c5, 0x54c5, 0x54c5, 0x54c5, 0x54c5, 0x54c5, 0x54c5, - 0x54c6, 0x54c6, 0x54c6, 0x54c6, 0x54c6, 0x54c6, 0x54c6, 0x54c6, - 0x54c6, 0x54c6, 0x54c6, 0x54c6, 0x54c6, 0x54c7, 0x54c7, 0x54c7, - 0x54c7, 0x54c7, 0x54c7, 0x54c7, 0x54c7, 0x54c7, 0x54c7, 0x54c7, - 0x54c7, 0x54c7, 0x54c7, 0x54c8, 0x54c8, 0x54c8, 0x54c8, 0x54c8, - 0x54c8, 0x54c8, 0x54c8, 0x54c8, 0x54c8, 0x54c8, 0x54c8, 0x54c8, - 0x54c8, 0x54c9, 0x54c9, 0x54c9, 0x54c9, 0x54c9, 0x54c9, 0x54c9, - 0x54c9, 0x54c9, 0x54c9, 0x54c9, 0x54c9, 0x54c9, 0x54c9, 0x54ca, - 0x54ca, 0x54ca, 0x54ca, 0x54ca, 0x54ca, 0x54ca, 0x54ca, 0x54ca, - 0x54ca, 0x54ca, 0x54ca, 0x54ca, 0x54ca, 0x54cb, 0x54cb, 0x54cb, - 0x54cb, 0x54cb, 0x54cb, 0x54cb, 0x54cb, 0x54cb, 0x54cb, 0x54cb, - 0x54cb, 0x54cb, 0x54cb, 0x54cc, 0x54cc, 0x54cc, 0x54cc, 0x54cc, - 0x54cc, 0x54cc, 0x54cc, 0x54cc, 0x54cc, 0x54cc, 0x54cc, 0x54cc, - 0x54cc, 0x54cc, 0x54cd, 0x54cd, 0x54cd, 0x54cd, 0x54cd, 0x54cd, - 0x54cd, 0x54cd, 0x54cd, 0x54cd, 0x54cd, 0x54cd, 0x54cd, 0x54cd, - 0x54ce, 0x54ce, 0x54ce, 0x54ce, 0x54ce, 0x54ce, 0x54ce, 0x54ce, - 0x54ce, 0x54ce, 0x54ce, 0x54ce, 0x54ce, 0x54ce, 0x54ce, 0x54cf, - 0x54cf, 0x54cf, 0x54cf, 0x54cf, 0x54cf, 0x54cf, 0x54cf, 0x54cf, - 0x54cf, 0x54cf, 0x54cf, 0x54cf, 0x54cf, 0x54d0, 0x54d0, 0x54d0, - 0x54d0, 0x54d0, 0x54d0, 0x54d0, 0x54d0, 0x54d0, 0x54d0, 0x54d0, - 0x54d0, 0x54d0, 0x54d0, 0x54d0, 0x54d1, 0x54d1, 0x54d1, 0x54d1, - 0x54d1, 0x54d1, 0x54d1, 0x54d1, 0x54d1, 0x54d1, 0x54d1, 0x54d1, - 0x54d1, 0x54d1, 0x54d1, 0x54d2, 0x54d2, 0x54d2, 0x54d2, 0x54d2, - 0x54d2, 0x54d2, 0x54d2, 0x54d2, 0x54d2, 0x54d2, 0x54d2, 0x54d2, - 0x54d2, 0x54d2, 0x54d3, 0x54d3, 0x54d3, 0x54d3, 0x54d3, 0x54d3, - 0x54d3, 0x54d3, 0x54d3, 0x54d3, 0x54d3, 0x54d3, 0x54d3, 0x54d3, - 0x54d3, 0x54d4, 0x54d4, 0x54d4, 0x54d4, 0x54d4, 0x54d4, 0x54d4, - 0x54d4, 0x54d4, 0x54d4, 0x54d4, 0x54d4, 0x54d4, 0x54d4, 0x54d4, - 0x54d4, 0x54d5, 0x54d5, 0x54d5, 0x54d5, 0x54d5, 0x54d5, 0x54d5, - 0x54d5, 0x54d5, 0x54d5, 0x54d5, 0x54d5, 0x54d5, 0x54d5, 0x54d5, - 0x54d6, 0x54d6, 0x54d6, 0x54d6, 0x54d6, 0x54d6, 0x54d6, 0x54d6, - 0x54d6, 0x54d6, 0x54d6, 0x54d6, 0x54d6, 0x54d6, 0x54d6, 0x54d7, - 0x54d7, 0x54d7, 0x54d7, 0x54d7, 0x54d7, 0x54d7, 0x54d7, 0x54d7, - 0x54d7, 0x54d7, 0x54d7, 0x54d7, 0x54d7, 0x54d7, 0x54d7, 0x54d8, - 0x54d8, 0x54d8, 0x54d8, 0x54d8, 0x54d8, 0x54d8, 0x54d8, 0x54d8, - 0x54d8, 0x54d8, 0x54d8, 0x54d8, 0x54d8, 0x54d8, 0x54d8, 0x54d9, - 0x54d9, 0x54d9, 0x54d9, 0x54d9, 0x54d9, 0x54d9, 0x54d9, 0x54d9, - 0x54d9, 0x54d9, 0x54d9, 0x54d9, 0x54d9, 0x54d9, 0x54d9, 0x54da, - 0x54da, 0x54da, 0x54da, 0x54da, 0x54da, 0x54da, 0x54da, 0x54da, - 0x54da, 0x54da, 0x54da, 0x54da, 0x54db, 0x54db, 0x54db, 0x54db, - 0x54db, 0x54db, 0x54db, 0x54db, 0x54dc, 0x54dc, 0x54dc, 0x54dc, - 0x54dc, 0x54dc, 0x54dc, 0x54dc, 0x54dd, 0x54dd, 0x54dd, 0x54dd, - 0x54dd, 0x54dd, 0x54dd, 0x54dd, 0x54de, 0x54de, 0x54de, 0x54de, - 0x54de, 0x54de, 0x54de, 0x54de, 0x54df, 0x54df, 0x54df, 0x54df, - 0x54df, 0x54df, 0x54df, 0x54df, 0x54e0, 0x54e0, 0x54e0, 0x54e0, - 0x54e0, 0x54e0, 0x54e0, 0x54e0, 0x54e0, 0x54e1, 0x54e1, 0x54e1, - 0x54e1, 0x54e1, 0x54e1, 0x54e1, 0x54e1, 0x54e2, 0x54e2, 0x54e2, - 0x54e2, 0x54e2, 0x54e2, 0x54e2, 0x54e2, 0x54e2, 0x54e3, 0x54e3, - 0x54e3, 0x54e3, 0x54e3, 0x54e3, 0x54e3, 0x54e3, 0x54e4, 0x54e4, - 0x54e4, 0x54e4, 0x54e4, 0x54e4, 0x54e4, 0x54e4, 0x54e4, 0x54e5, - 0x54e5, 0x54e5, 0x54e5, 0x54e5, 0x54e5, 0x54e5, 0x54e5, 0x54e5, - 0x54e6, 0x54e6, 0x54e6, 0x54e6, 0x54e6, 0x54e6, 0x54e6, 0x54e6, - 0x54e7, 0x54e7, 0x54e7, 0x54e7, 0x54e7, 0x54e7, 0x54e7, 0x54e7, - 0x54e7, 0x54e8, 0x54e8, 0x54e8, 0x54e8, 0x54e8, 0x54e8, 0x54e8, - 0x54e8, 0x54e8, 0x54e9, 0x54e9, 0x54e9, 0x54e9, 0x54e9, 0x54e9, - 0x54e9, 0x54e9, 0x54e9, 0x54ea, 0x54ea, 0x54ea, 0x54ea, 0x54ea, - 0x54ea, 0x54ea, 0x54ea, 0x54ea, 0x54eb, 0x54eb, 0x54eb, 0x54eb, - 0x54eb, 0x54eb, 0x54eb, 0x54eb, 0x54eb, 0x54ec, 0x54ec, 0x54ec, - 0x54ec, 0x54ec, 0x54ec, 0x54ec, 0x54ec, 0x54ec, 0x54ec, 0x54ed, - 0x54ed, 0x54ed, 0x54ed, 0x54ed, 0x54ed, 0x54ed, 0x54ed, 0x54ed, - 0x54ee, 0x54ee, 0x54ee, 0x54ee, 0x54ee, 0x54ee, 0x54ee, 0x54ee, - 0x54ee, 0x54ef, 0x54ef, 0x54ef, 0x54ef, 0x54ef, 0x54ef, 0x54ef, - 0x54ef, 0x54ef, 0x54ef, 0x54f0, 0x54f0, 0x54f0, 0x54f0, 0x54f0, - 0x54f0, 0x54f0, 0x54f0, 0x54f0, 0x54f1, 0x54f1, 0x54f1, 0x54f1, - 0x54f1, 0x54f1, 0x54f1, 0x54f1, 0x54f1, 0x54f1, 0x54f2, 0x54f2, - 0x54f2, 0x54f2, 0x54f2, 0x54f2, 0x54f2, 0x54f2, 0x54f2, 0x54f3, - 0x54f3, 0x54f3, 0x54f3, 0x54f3, 0x54f3, 0x54f3, 0x54f3, 0x54f3, - 0x54f3, 0x54f4, 0x54f4, 0x54f4, 0x54f4, 0x54f4, 0x54f4, 0x54f4, - 0x54f4, 0x54f4, 0x54f4, 0x54f5, 0x54f5, 0x54f5, 0x54f5, 0x54f5, - 0x54f5, 0x54f5, 0x54f5, 0x54f5, 0x54f5, 0x54f6, 0x54f6, 0x54f6, - 0x54f6, 0x54f6, 0x54f6, 0x54f6, 0x54f6, 0x54f6, 0x54f6, 0x54f7, - 0x54f7, 0x54f7, 0x54f7, 0x54f7, 0x54f7, 0x54f7, 0x54f7, 0x54f7, - 0x54f7, 0x54f8, 0x54f8, 0x54f8, 0x54f8, 0x54f8, 0x54f8, 0x54f8, - 0x54f8, 0x54f8, 0x54f8, 0x54f9, 0x54f9, 0x54f9, 0x54f9, 0x54f9, - 0x54f9, 0x54f9, 0x54f9, 0x54f9, 0x54f9, 0x54fa, 0x54fa, 0x54fa, - 0x54fa, 0x54fa, 0x54fa, 0x54fa, 0x54fa, 0x54fa, 0x54fa, 0x54fb, - 0x54fb, 0x54fb, 0x54fb, 0x54fb, 0x54fb, 0x54fb, 0x54fb, 0x54fb, - 0x54fb, 0x54fb, 0x54fc, 0x54fc, 0x54fc, 0x54fc, 0x54fc, 0x54fc, - 0x54fc, 0x54fc, 0x54fc, 0x54fc, 0x54fd, 0x54fd, 0x54fd, 0x54fd, - 0x54fd, 0x54fd, 0x54fd, 0x54fd, 0x54fd, 0x54fd, 0x54fd, 0x54fe, - 0x54fe, 0x54fe, 0x54fe, 0x54fe, 0x54fe, 0x54fe, 0x54fe, 0x54fe, - 0x54fe, 0x54ff, 0x54ff, 0x54ff, 0x54ff, 0x54ff, 0x54ff, 0x54ff, - 0x54ff, 0x54ff, 0x54ff, 0x54ff, 0x5500, 0x5500, 0x5500, 0x5500, - 0x5500, 0x5500, 0x5500, 0x5500, 0x5500, 0x5500, 0x5500, 0x5501, - 0x5501, 0x5501, 0x5501, 0x5501, 0x5501, 0x5501, 0x5501, 0x5501, - 0x5501, 0x5502, 0x5502, 0x5502, 0x5502, 0x5502, 0x5502, 0x5502, - 0x5502, 0x5502, 0x5502, 0x5502, 0x5503, 0x5503, 0x5503, 0x5503, - 0x5503, 0x5503, 0x5503, 0x5503, 0x5503, 0x5503, 0x5503, 0x5504, - 0x5504, 0x5504, 0x5504, 0x5504, 0x5504, 0x5504, 0x5504, 0x5504, - 0x5504, 0x5504, 0x5505, 0x5505, 0x5505, 0x5505, 0x5505, 0x5505, - 0x5505, 0x5505, 0x5505, 0x5505, 0x5505, 0x5505, 0x5506, 0x5506, - 0x5506, 0x5506, 0x5506, 0x5506, 0x5506, 0x5506, 0x5506, 0x5506, - 0x5506, 0x5507, 0x5507, 0x5507, 0x5507, 0x5507, 0x5507, 0x5507, - 0x5507, 0x5507, 0x5507, 0x5507, 0x5508, 0x5508, 0x5508, 0x5508, - 0x5508, 0x5508, 0x5508, 0x5508, 0x5508, 0x5508, 0x5508, 0x5508, - 0x5509, 0x5509, 0x5509, 0x5509, 0x5509, 0x5509, 0x5509, 0x5509, - 0x5509, 0x5509, 0x5509, 0x550a, 0x550a, 0x550a, 0x550a, 0x550a, - 0x550a, 0x550a, 0x550a, 0x550a, 0x550a, 0x550a, 0x550a, 0x550b, - 0x550b, 0x550b, 0x550b, 0x550b, 0x550b, 0x550b, 0x550b, 0x550b, - 0x550b, 0x550b, 0x550b, 0x550c, 0x550c, 0x550c, 0x550c, 0x550c, - 0x550c, 0x550c, 0x550c, 0x550c, 0x550c, 0x550c, 0x550d, 0x550d, - 0x550d, 0x550d, 0x550d, 0x550d, 0x550d, 0x550d, 0x550d, 0x550d, - 0x550d, 0x550d, 0x550e, 0x550e, 0x550e, 0x550e, 0x550e, 0x550e, - 0x550e, 0x550e, 0x550e, 0x550e, 0x550e, 0x550e, 0x550f, 0x550f, - 0x550f, 0x550f, 0x550f, 0x550f, 0x550f, 0x550f, 0x550f, 0x550f, - 0x550f, 0x550f, 0x5510, 0x5510, 0x5510, 0x5510, 0x5510, 0x5510, - 0x5510, 0x5510, 0x5510, 0x5510, 0x5510, 0x5510, 0x5510, 0x5511, - 0x5511, 0x5511, 0x5511, 0x5511, 0x5511, 0x5511, 0x5511, 0x5511, - 0x5511, 0x5511, 0x5511, 0x5512, 0x5512, 0x5512, 0x5512, 0x5512, - 0x5512, 0x5512, 0x5512, 0x5512, 0x5512, 0x5512, 0x5512, 0x5513, - 0x5513, 0x5513, 0x5513, 0x5513, 0x5513, 0x5513, 0x5513, 0x5513, - 0x5513, 0x5513, 0x5513, 0x5513, 0x5514, 0x5514, 0x5514, 0x5514, - 0x5514, 0x5514, 0x5514, 0x5514, 0x5514, 0x5514, 0x5514, 0x5514, - 0x5515, 0x5515, 0x5515, 0x5515, 0x5515, 0x5515, 0x5515, 0x5515, - 0x5515, 0x5515, 0x5515, 0x5515, 0x5515, 0x5516, 0x5516, 0x5516, - 0x5516, 0x5516, 0x5516, 0x5516, 0x5516, 0x5516, 0x5516, 0x5516, - 0x5516, 0x5516, 0x5517, 0x5517, 0x5517, 0x5517, 0x5517, 0x5517, - 0x5517, 0x5517, 0x5517, 0x5517, 0x5517, 0x5517, 0x5517, 0x5518, - 0x5518, 0x5518, 0x5518, 0x5518, 0x5518, 0x5518, 0x5518, 0x5518, - 0x5518, 0x5518, 0x5518, 0x5518, 0x5519, 0x5519, 0x5519, 0x5519, - 0x5519, 0x5519, 0x5519, 0x5519, 0x5519, 0x5519, 0x5519, 0x5519, - 0x5519, 0x551a, 0x551a, 0x551a, 0x551a, 0x551a, 0x551a, 0x551a, - 0x551a, 0x551a, 0x551a, 0x551a, 0x551a, 0x551a, 0x551b, 0x551b, - 0x551b, 0x551b, 0x551b, 0x551b, 0x551b, 0x551b, 0x551b, 0x551b, - 0x551b, 0x551b, 0x551b, 0x551c, 0x551c, 0x551c, 0x551c, 0x551c, - 0x551c, 0x551c, 0x551c, 0x551c, 0x551c, 0x551c, 0x551c, 0x551c, - 0x551d, 0x551d, 0x551d, 0x551d, 0x551d, 0x551d, 0x551d, 0x551d, - 0x551d, 0x551d, 0x551d, 0x551d, 0x551d, 0x551d, 0x551e, 0x551e, - 0x551e, 0x551e, 0x551e, 0x551e, 0x551e, 0x551e, 0x551e, 0x551e, - 0x551e, 0x551e, 0x551e, 0x551e, 0x551f, 0x551f, 0x551f, 0x551f, - 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, 0x551f, - 0x551f, 0x5520, 0x5520, 0x5520, 0x5520, 0x5520, 0x5520, 0x5520, - 0x5520, 0x5520, 0x5520, 0x5520, 0x5520, 0x5520, 0x5520, 0x5521, - 0x5521, 0x5521, 0x5521, 0x5521, 0x5521, 0x5521, 0x5521, 0x5521, - 0x5521, 0x5521, 0x5521, 0x5521, 0x5521, 0x5522, 0x5522, 0x5522, - 0x5522, 0x5522, 0x5522, 0x5522, 0x5522, 0x5522, 0x5522, 0x5522, - 0x5522, 0x5522, 0x5522, 0x5523, 0x5523, 0x5523, 0x5523, 0x5523, - 0x5523, 0x5523, 0x5523, 0x5523, 0x5523, 0x5523, 0x5523, 0x5523, - 0x5523, 0x5524, 0x5524, 0x5524, 0x5524, 0x5524, 0x5524, 0x5524, - 0x5524, 0x5524, 0x5524, 0x5524, 0x5524, 0x5524, 0x5524, 0x5525, - 0x5525, 0x5525, 0x5525, 0x5525, 0x5525, 0x5525, 0x5525, 0x5525, - 0x5525, 0x5525, 0x5525, 0x5525, 0x5525, 0x5525, 0x5526, 0x5526, - 0x5526, 0x5526, 0x5526, 0x5526, 0x5526, 0x5526, 0x5526, 0x5526, - 0x5526, 0x5526, 0x5526, 0x5526, 0x5527, 0x5527, 0x5527, 0x5527, - 0x5527, 0x5527, 0x5527, 0x5527, 0x5527, 0x5527, 0x5527, 0x5527, - 0x5527, 0x5527, 0x5527, 0x5528, 0x5528, 0x5528, 0x5528, 0x5528, - 0x5528, 0x5528, 0x5528, 0x5528, 0x5528, 0x5528, 0x5528, 0x5528, - 0x5528, 0x5528, 0x5529, 0x5529, 0x5529, 0x5529, 0x5529, 0x5529, - 0x5529, 0x5529, 0x5529, 0x5529, 0x5529, 0x5529, 0x5529, 0x5529, - 0x552a, 0x552a, 0x552a, 0x552a, 0x552a, 0x552a, 0x552a, 0x552a, - 0x552a, 0x552a, 0x552a, 0x552a, 0x552a, 0x552a, 0x552a, 0x552b, - 0x552b, 0x552b, 0x552b, 0x552b, 0x552b, 0x552b, 0x552b, 0x552b, - 0x552b, 0x552b, 0x552b, 0x552b, 0x552b, 0x552b, 0x552c, 0x552c, - 0x552c, 0x552c, 0x552c, 0x552c, 0x552c, 0x552c, 0x552c, 0x552c, - 0x552c, 0x552c, 0x552c, 0x552c, 0x552c, 0x552d, 0x552d, 0x552d, - 0x552d, 0x552d, 0x552d, 0x552d, 0x552d, 0x552d, 0x552d, 0x552d, - 0x552d, 0x552d, 0x552d, 0x552d, 0x552d, 0x552e, 0x552e, 0x552e, - 0x552e, 0x552e, 0x552e, 0x552e, 0x552e, 0x552e, 0x552e, 0x552e, - 0x552e, 0x552e, 0x552e, 0x552e, 0x552f, 0x552f, 0x552f, 0x552f, - 0x552f, 0x552f, 0x552f, 0x552f, 0x552f, 0x552f, 0x552f, 0x552f, - 0x552f, 0x552f, 0x552f, 0x552f, 0x5530, 0x5530, 0x5530, 0x5530, - 0x5530, 0x5530, 0x5530, 0x5530, 0x5530, 0x5530, 0x5530, 0x5530, - 0x5530, 0x5530, 0x5530, 0x5531, 0x5531, 0x5531, 0x5531, 0x5531, - 0x5531, 0x5531, 0x5531, 0x5531, 0x5531, 0x5531, 0x5531, 0x5531, - 0x5531, 0x5531, 0x5531, 0x5532, 0x5532, 0x5532, 0x5532, 0x5532, - 0x5532, 0x5532, 0x5532, 0x5532, 0x5532, 0x5532, 0x5532, 0x5532, - 0x5532, 0x5532, 0x5532, 0x5533, 0x5533, 0x5533, 0x5533, 0x5533, - 0x5533, 0x5533, 0x5533, 0x5533, 0x5533, 0x5533, 0x5534, 0x5534, - 0x5534, 0x5534, 0x5534, 0x5534, 0x5534, 0x5534, 0x5535, 0x5535, - 0x5535, 0x5535, 0x5535, 0x5535, 0x5535, 0x5535, 0x5536, 0x5536, - 0x5536, 0x5536, 0x5536, 0x5536, 0x5536, 0x5536, 0x5537, 0x5537, - 0x5537, 0x5537, 0x5537, 0x5537, 0x5537, 0x5537, 0x5538, 0x5538, - 0x5538, 0x5538, 0x5538, 0x5538, 0x5538, 0x5538, 0x5538, 0x5539, - 0x5539, 0x5539, 0x5539, 0x5539, 0x5539, 0x5539, 0x5539, 0x553a, - 0x553a, 0x553a, 0x553a, 0x553a, 0x553a, 0x553a, 0x553a, 0x553a, - 0x553b, 0x553b, 0x553b, 0x553b, 0x553b, 0x553b, 0x553b, 0x553b, - 0x553c, 0x553c, 0x553c, 0x553c, 0x553c, 0x553c, 0x553c, 0x553c, - 0x553c, 0x553d, 0x553d, 0x553d, 0x553d, 0x553d, 0x553d, 0x553d, - 0x553d, 0x553e, 0x553e, 0x553e, 0x553e, 0x553e, 0x553e, 0x553e, - 0x553e, 0x553e, 0x553f, 0x553f, 0x553f, 0x553f, 0x553f, 0x553f, - 0x553f, 0x553f, 0x553f, 0x5540, 0x5540, 0x5540, 0x5540, 0x5540, - 0x5540, 0x5540, 0x5540, 0x5540, 0x5541, 0x5541, 0x5541, 0x5541, - 0x5541, 0x5541, 0x5541, 0x5541, 0x5541, 0x5542, 0x5542, 0x5542, - 0x5542, 0x5542, 0x5542, 0x5542, 0x5542, 0x5542, 0x5543, 0x5543, - 0x5543, 0x5543, 0x5543, 0x5543, 0x5543, 0x5543, 0x5543, 0x5544, - 0x5544, 0x5544, 0x5544, 0x5544, 0x5544, 0x5544, 0x5544, 0x5544, - 0x5545, 0x5545, 0x5545, 0x5545, 0x5545, 0x5545, 0x5545, 0x5545, - 0x5545, 0x5546, 0x5546, 0x5546, 0x5546, 0x5546, 0x5546, 0x5546, - 0x5546, 0x5546, 0x5547, 0x5547, 0x5547, 0x5547, 0x5547, 0x5547, - 0x5547, 0x5547, 0x5547, 0x5547, 0x5548, 0x5548, 0x5548, 0x5548, - 0x5548, 0x5548, 0x5548, 0x5548, 0x5548, 0x5549, 0x5549, 0x5549, - 0x5549, 0x5549, 0x5549, 0x5549, 0x5549, 0x5549, 0x5549, 0x554a, - 0x554a, 0x554a, 0x554a, 0x554a, 0x554a, 0x554a, 0x554a, 0x554a, - 0x554b, 0x554b, 0x554b, 0x554b, 0x554b, 0x554b, 0x554b, 0x554b, - 0x554b, 0x554b, 0x554c, 0x554c, 0x554c, 0x554c, 0x554c, 0x554c, - 0x554c, 0x554c, 0x554c, 0x554c, 0x554d, 0x554d, 0x554d, 0x554d, - 0x554d, 0x554d, 0x554d, 0x554d, 0x554d, 0x554d, 0x554e, 0x554e, - 0x554e, 0x554e, 0x554e, 0x554e, 0x554e, 0x554e, 0x554e, 0x554f, - 0x554f, 0x554f, 0x554f, 0x554f, 0x554f, 0x554f, 0x554f, 0x554f, - 0x554f, 0x5550, 0x5550, 0x5550, 0x5550, 0x5550, 0x5550, 0x5550, - 0x5550, 0x5550, 0x5550, 0x5551, 0x5551, 0x5551, 0x5551, 0x5551, - 0x5551, 0x5551, 0x5551, 0x5551, 0x5551, 0x5551, 0x5552, 0x5552, - 0x5552, 0x5552, 0x5552, 0x5552, 0x5552, 0x5552, 0x5552, 0x5552, - 0x5553, 0x5553, 0x5553, 0x5553, 0x5553, 0x5553, 0x5553, 0x5553, - 0x5553, 0x5553, 0x5554, 0x5554, 0x5554, 0x5554, 0x5554, 0x5554, - 0x5554, 0x5554, 0x5554, 0x5554, 0x5555, 0x5555, 0x5555, 0x5555, - 0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 0x5556, - 0x5556, 0x5556, 0x5556, 0x5556, 0x5556, 0x5556, 0x5556, 0x5556, - 0x5556, 0x5557, 0x5557, 0x5557, 0x5557, 0x5557, 0x5557, 0x5557, - 0x5557, 0x5557, 0x5557, 0x5557, 0x5558, 0x5558, 0x5558, 0x5558, - 0x5558, 0x5558, 0x5558, 0x5558, 0x5558, 0x5558, 0x5558, 0x5559, - 0x5559, 0x5559, 0x5559, 0x5559, 0x5559, 0x5559, 0x5559, 0x5559, - 0x5559, 0x5559, 0x555a, 0x555a, 0x555a, 0x555a, 0x555a, 0x555a, - 0x555a, 0x555a, 0x555a, 0x555a, 0x555b, 0x555b, 0x555b, 0x555b, - 0x555b, 0x555b, 0x555b, 0x555b, 0x555b, 0x555b, 0x555b, 0x555c, - 0x555c, 0x555c, 0x555c, 0x555c, 0x555c, 0x555c, 0x555c, 0x555c, - 0x555c, 0x555c, 0x555d, 0x555d, 0x555d, 0x555d, 0x555d, 0x555d, - 0x555d, 0x555d, 0x555d, 0x555d, 0x555d, 0x555d, 0x555e, 0x555e, - 0x555e, 0x555e, 0x555e, 0x555e, 0x555e, 0x555e, 0x555e, 0x555e, - 0x555e, 0x555f, 0x555f, 0x555f, 0x555f, 0x555f, 0x555f, 0x555f, - 0x555f, 0x555f, 0x555f, 0x555f, 0x5560, 0x5560, 0x5560, 0x5560, - 0x5560, 0x5560, 0x5560, 0x5560, 0x5560, 0x5560, 0x5560, 0x5561, - 0x5561, 0x5561, 0x5561, 0x5561, 0x5561, 0x5561, 0x5561, 0x5561, - 0x5561, 0x5561, 0x5561, 0x5562, 0x5562, 0x5562, 0x5562, 0x5562, - 0x5562, 0x5562, 0x5562, 0x5562, 0x5562, 0x5562, 0x5563, 0x5563, - 0x5563, 0x5563, 0x5563, 0x5563, 0x5563, 0x5563, 0x5563, 0x5563, - 0x5563, 0x5563, 0x5564, 0x5564, 0x5564, 0x5564, 0x5564, 0x5564, - 0x5564, 0x5564, 0x5564, 0x5564, 0x5564, 0x5564, 0x5565, 0x5565, - 0x5565, 0x5565, 0x5565, 0x5565, 0x5565, 0x5565, 0x5565, 0x5565, - 0x5565, 0x5565, 0x5566, 0x5566, 0x5566, 0x5566, 0x5566, 0x5566, - 0x5566, 0x5566, 0x5566, 0x5566, 0x5566, 0x5566, 0x5567, 0x5567, - 0x5567, 0x5567, 0x5567, 0x5567, 0x5567, 0x5567, 0x5567, 0x5567, - 0x5567, 0x5567, 0x5568, 0x5568, 0x5568, 0x5568, 0x5568, 0x5568, - 0x5568, 0x5568, 0x5568, 0x5568, 0x5568, 0x5568, 0x5569, 0x5569, - 0x5569, 0x5569, 0x5569, 0x5569, 0x5569, 0x5569, 0x5569, 0x5569, - 0x5569, 0x5569, 0x556a, 0x556a, 0x556a, 0x556a, 0x556a, 0x556a, - 0x556a, 0x556a, 0x556a, 0x556a, 0x556a, 0x556a, 0x556b, 0x556b, - 0x556b, 0x556b, 0x556b, 0x556b, 0x556b, 0x556b, 0x556b, 0x556b, - 0x556b, 0x556b, 0x556b, 0x556c, 0x556c, 0x556c, 0x556c, 0x556c, - 0x556c, 0x556c, 0x556c, 0x556c, 0x556c, 0x556c, 0x556c, 0x556d, - 0x556d, 0x556d, 0x556d, 0x556d, 0x556d, 0x556d, 0x556d, 0x556d, - 0x556d, 0x556d, 0x556d, 0x556d, 0x556e, 0x556e, 0x556e, 0x556e, - 0x556e, 0x556e, 0x556e, 0x556e, 0x556e, 0x556e, 0x556e, 0x556e, - 0x556f, 0x556f, 0x556f, 0x556f, 0x556f, 0x556f, 0x556f, 0x556f, - 0x556f, 0x556f, 0x556f, 0x556f, 0x556f, 0x5570, 0x5570, 0x5570, - 0x5570, 0x5570, 0x5570, 0x5570, 0x5570, 0x5570, 0x5570, 0x5570, - 0x5570, 0x5570, 0x5571, 0x5571, 0x5571, 0x5571, 0x5571, 0x5571, - 0x5571, 0x5571, 0x5571, 0x5571, 0x5571, 0x5571, 0x5571, 0x5572, - 0x5572, 0x5572, 0x5572, 0x5572, 0x5572, 0x5572, 0x5572, 0x5572, - 0x5572, 0x5572, 0x5572, 0x5572, 0x5573, 0x5573, 0x5573, 0x5573, - 0x5573, 0x5573, 0x5573, 0x5573, 0x5573, 0x5573, 0x5573, 0x5573, - 0x5573, 0x5574, 0x5574, 0x5574, 0x5574, 0x5574, 0x5574, 0x5574, - 0x5574, 0x5574, 0x5574, 0x5574, 0x5574, 0x5574, 0x5574, 0x5575, - 0x5575, 0x5575, 0x5575, 0x5575, 0x5575, 0x5575, 0x5575, 0x5575, - 0x5575, 0x5575, 0x5575, 0x5575, 0x5576, 0x5576, 0x5576, 0x5576, - 0x5576, 0x5576, 0x5576, 0x5576, 0x5576, 0x5576, 0x5576, 0x5576, - 0x5576, 0x5576, 0x5577, 0x5577, 0x5577, 0x5577, 0x5577, 0x5577, - 0x5577, 0x5577, 0x5577, 0x5577, 0x5577, 0x5577, 0x5577, 0x5578, - 0x5578, 0x5578, 0x5578, 0x5578, 0x5578, 0x5578, 0x5578, 0x5578, - 0x5578, 0x5578, 0x5578, 0x5578, 0x5578, 0x5579, 0x5579, 0x5579, - 0x5579, 0x5579, 0x5579, 0x5579, 0x5579, 0x5579, 0x5579, 0x5579, - 0x5579, 0x5579, 0x5579, 0x557a, 0x557a, 0x557a, 0x557a, 0x557a, - 0x557a, 0x557a, 0x557a, 0x557a, 0x557a, 0x557a, 0x557a, 0x557a, - 0x557a, 0x557b, 0x557b, 0x557b, 0x557b, 0x557b, 0x557b, 0x557b, - 0x557b, 0x557b, 0x557b, 0x557b, 0x557b, 0x557b, 0x557b, 0x557c, - 0x557c, 0x557c, 0x557c, 0x557c, 0x557c, 0x557c, 0x557c, 0x557c, - 0x557c, 0x557c, 0x557c, 0x557c, 0x557c, 0x557d, 0x557d, 0x557d, - 0x557d, 0x557d, 0x557d, 0x557d, 0x557d, 0x557d, 0x557d, 0x557d, - 0x557d, 0x557d, 0x557d, 0x557e, 0x557e, 0x557e, 0x557e, 0x557e, - 0x557e, 0x557e, 0x557e, 0x557e, 0x557e, 0x557e, 0x557e, 0x557e, - 0x557e, 0x557e, 0x557f, 0x557f, 0x557f, 0x557f, 0x557f, 0x557f, - 0x557f, 0x557f, 0x557f, 0x557f, 0x557f, 0x557f, 0x557f, 0x557f, - 0x5580, 0x5580, 0x5580, 0x5580, 0x5580, 0x5580, 0x5580, 0x5580, - 0x5580, 0x5580, 0x5580, 0x5580, 0x5580, 0x5580, 0x5580, 0x5581, - 0x5581, 0x5581, 0x5581, 0x5581, 0x5581, 0x5581, 0x5581, 0x5581, - 0x5581, 0x5581, 0x5581, 0x5581, 0x5581, 0x5581, 0x5582, 0x5582, - 0x5582, 0x5582, 0x5582, 0x5582, 0x5582, 0x5582, 0x5582, 0x5582, - 0x5582, 0x5582, 0x5582, 0x5582, 0x5583, 0x5583, 0x5583, 0x5583, - 0x5583, 0x5583, 0x5583, 0x5583, 0x5583, 0x5583, 0x5583, 0x5583, - 0x5583, 0x5583, 0x5583, 0x5584, 0x5584, 0x5584, 0x5584, 0x5584, - 0x5584, 0x5584, 0x5584, 0x5584, 0x5584, 0x5584, 0x5584, 0x5584, - 0x5584, 0x5584, 0x5584, 0x5585, 0x5585, 0x5585, 0x5585, 0x5585, - 0x5585, 0x5585, 0x5585, 0x5585, 0x5585, 0x5585, 0x5585, 0x5585, - 0x5585, 0x5585, 0x5586, 0x5586, 0x5586, 0x5586, 0x5586, 0x5586, - 0x5586, 0x5586, 0x5586, 0x5586, 0x5586, 0x5586, 0x5586, 0x5586, - 0x5586, 0x5587, 0x5587, 0x5587, 0x5587, 0x5587, 0x5587, 0x5587, - 0x5587, 0x5587, 0x5587, 0x5587, 0x5587, 0x5587, 0x5587, 0x5587, - 0x5588, 0x5588, 0x5588, 0x5588, 0x5588, 0x5588, 0x5588, 0x5588, - 0x5588, 0x5588, 0x5588, 0x5588, 0x5588, 0x5588, 0x5588, 0x5588, - 0x5589, 0x5589, 0x5589, 0x5589, 0x5589, 0x5589, 0x5589, 0x5589, - 0x5589, 0x5589, 0x5589, 0x5589, 0x5589, 0x5589, 0x5589, 0x5589, - 0x558a, 0x558a, 0x558a, 0x558a, 0x558a, 0x558a, 0x558a, 0x558a, - 0x558a, 0x558a, 0x558a, 0x558a, 0x558a, 0x558a, 0x558a, 0x558a, - 0x558b, 0x558b, 0x558b, 0x558b, 0x558b, 0x558b, 0x558b, 0x558b, - 0x558b, 0x558b, 0x558b, 0x558b, 0x558b, 0x558b, 0x558b, 0x558c, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0xfc00, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, -}; diff --git a/3rdparty/openexr/IlmImf/dwaLookups.cpp b/3rdparty/openexr/IlmImf/dwaLookups.cpp deleted file mode 100644 index ac5ac099bc..0000000000 --- a/3rdparty/openexr/IlmImf/dwaLookups.cpp +++ /dev/null @@ -1,650 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2009-2014 DreamWorks Animation LLC. -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of DreamWorks Animation nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - -#define OPENEXR_BUILTIN_TABLES - -// -// A program to generate various acceleration lookup tables -// for Imf::DwaCompressor -// - -#include -#include -#include -#include -#include - -#include - -#ifndef OPENEXR_BUILTIN_TABLES -#ifdef OPENEXR_IMF_HAVE_SYSCONF_NPROCESSORS_ONLN -#include -#endif -#endif // OPENEXR_BUILTIN_TABLES - -#include -#include -#include -#include -#include -#include "ImfNamespace.h" - -using namespace OPENEXR_IMF_NAMESPACE; - -namespace { - -#ifdef OPENEXR_BUILTIN_TABLES -static unsigned short dwaCompressorNoOp[0x10000] = {}; -static unsigned short dwaCompressorToLinear[0x10000] = {}; -static unsigned short dwaCompressorToNonlinear[0x10000] = {}; - -//static unsigned int closestDataOffset[0x10000] = {}; -//static unsigned short closestData[0x80000] = {}; -#else - - class LutHeaderWorker - { - public: - class Runner : public ILMTHREAD_NAMESPACE::Thread - { - public: - Runner(LutHeaderWorker &worker, bool output): - ILMTHREAD_NAMESPACE::Thread(), - _worker(worker), - _output(output) - { - start(); - } - - virtual ~Runner() - { - _semaphore.wait(); - } - - virtual void run() - { - _semaphore.post(); - _worker.run(_output); - } - - private: - LutHeaderWorker &_worker; - bool _output; - ILMTHREAD_NAMESPACE::Semaphore _semaphore; - - }; // class LutHeaderWorker::Runner - - - LutHeaderWorker(size_t startValue, - size_t endValue): - _lastCandidateCount(0), - _startValue(startValue), - _endValue(endValue), - _numElements(0), - _offset(new size_t[numValues()]), - _elements(new unsigned short[1024*1024*2]) - { - } - - ~LutHeaderWorker() - { - delete[] _offset; - delete[] _elements; - } - - size_t lastCandidateCount() const - { - return _lastCandidateCount; - } - - size_t numValues() const - { - return _endValue - _startValue; - } - - size_t numElements() const - { - return _numElements; - } - - const size_t* offset() const - { - return _offset; - } - - const unsigned short* elements() const - { - return _elements; - } - - void run(bool outputProgress) - { - half candidate[16]; - int candidateCount = 0; - - for (size_t input=_startValue; input<_endValue; ++input) { - - if (outputProgress) { -#ifdef __GNUC__ - if (input % 100 == 0) { - fprintf(stderr, - " Building acceleration for DwaCompressor, %.2f %% %c", - 100.*(float)input/(float)numValues(), 13); - } -#else - if (input % 1000 == 0) { - fprintf(stderr, - " Building acceleration for DwaCompressor, %.2f %%\n", - 100.*(float)input/(float)numValues()); - } -#endif - } - - - int numSetBits = countSetBits(input); - half inputHalf, closestHalf; - - inputHalf.setBits(input); - - _offset[input - _startValue] = _numElements; - - // Gather candidates - candidateCount = 0; - for (int targetNumSetBits=numSetBits-1; targetNumSetBits>=0; - --targetNumSetBits) { - bool valueFound = false; - - for (int i=0; i<65536; ++i) { - if (countSetBits(i) != targetNumSetBits) continue; - - if (!valueFound) { - closestHalf.setBits(i); - valueFound = true; - } else { - half tmpHalf; - - tmpHalf.setBits(i); - - if (fabs((float)inputHalf - (float)tmpHalf) < - fabs((float)inputHalf - (float)closestHalf)) { - closestHalf = tmpHalf; - } - } - } - - if (valueFound == false) { - fprintf(stderr, "bork bork bork!\n"); - } - - candidate[candidateCount] = closestHalf; - candidateCount++; - } - - // Sort candidates by increasing number of bits set - for (int i=0; i> 8]; - } - - }; // class LutHeaderWorker - -#endif // OPENEXR_BUILTIN_TABLES - -} // namespace - - -// -// Generate a no-op LUT, to cut down in conditional branches -// -static void -generateNoop() -{ -#ifndef OPENEXR_BUILTIN_TABLES - printf("const unsigned short dwaCompressorNoOp[] = \n"); - printf("{"); -#endif // OPENEXR_BUILTIN_TABLES - for (int i=0; i<65536; ++i) { -#ifndef OPENEXR_BUILTIN_TABLES - if (i % 8 == 0) { - printf("\n "); - } -#endif // OPENEXR_BUILTIN_TABLES - unsigned short dst; - char *tmp = (char *)(&dst); - - unsigned short src = (unsigned short)i; - Xdr::write (tmp, src); -#ifndef OPENEXR_BUILTIN_TABLES - printf("0x%04x, ", dst); -#else - dwaCompressorNoOp[i] = dst; -#endif // OPENEXR_BUILTIN_TABLES - } -#ifndef OPENEXR_BUILTIN_TABLES - printf("\n};\n"); -#endif // OPENEXR_BUILTIN_TABLES -} - -// -// Nonlinearly encode luminance. For values below 1.0, we want -// to use a gamma 2.2 function to match what is fairly common -// for storing output referred. However, > 1, gamma functions blow up, -// and log functions are much better behaved. We could use a log -// function everywhere, but it tends to over-sample dark -// regions and undersample the brighter regions, when -// compared to the way real devices reproduce values. -// -// So, above 1, use a log function which is a smooth blend -// into the gamma function. -// -// Nonlinear(linear) = -// -// linear^(1./2.2) / linear <= 1.0 -// | -// ln(linear)/ln(e^2.2) + 1 \ otherwise -// -// -// toNonlinear[] needs to take in XDR format half float values, -// and output NATIVE format float. -// -// toLinear[] does the opposite - takes in NATIVE half and -// outputs XDR half values. -// - -static void -generateToLinear() -{ -#ifndef OPENEXR_BUILTIN_TABLES - unsigned short toLinear[65536]; -#else - unsigned short* toLinear = dwaCompressorToLinear; -#endif // OPENEXR_BUILTIN_TABLES - - toLinear[0] = 0; - - for (int i=1; i<65536; ++i) { - half h; - float sign = 1; - float logBase = pow(2.7182818, 2.2); - - // map NaN and inf to 0 - if ((i & 0x7c00) == 0x7c00) { - toLinear[i] = 0; - continue; - } - - // - // _toLinear - assume i is NATIVE, but our output needs - // to get flipped to XDR - // - h.setBits(i); - sign = 1; - if ((float)h < 0) { - sign = -1; - } - - if ( fabs( (float)h) <= 1.0 ) { - h = (half)(sign * pow((float)fabs((float)h), 2.2f)); - } else { - h = (half)(sign * pow(logBase, (float)(fabs((float)h) - 1.0))); - } - - { - char *tmp = (char *)(&toLinear[i]); - - Xdr::write ( tmp, h.bits()); - } - } -#ifndef OPENEXR_BUILTIN_TABLES - printf("const unsigned short dwaCompressorToLinear[] = \n"); - printf("{"); - for (int i=0; i<65536; ++i) { - if (i % 8 == 0) { - printf("\n "); - } - printf("0x%04x, ", toLinear[i]); - } - printf("\n};\n"); -#endif // OPENEXR_BUILTIN_TABLES -} - - -static void -generateToNonlinear() -{ -#ifndef OPENEXR_BUILTIN_TABLES - unsigned short toNonlinear[65536]; -#else - unsigned short* toNonlinear = dwaCompressorToNonlinear; -#endif // OPENEXR_BUILTIN_TABLES - - toNonlinear[0] = 0; - - for (int i=1; i<65536; ++i) { - unsigned short usNative, usXdr; - half h; - float sign = 1; - float logBase = pow(2.7182818, 2.2); - - usXdr = i; - - { - const char *tmp = (char *)(&usXdr); - - Xdr::read(tmp, usNative); - } - - // map NaN and inf to 0 - if ((usNative & 0x7c00) == 0x7c00) { - toNonlinear[i] = 0; - continue; - } - - // - // toNonlinear - assume i is XDR - // - h.setBits(usNative); - sign = 1; - if ((float)h < 0) { - sign = -1; - } - - if ( fabs( (float)h ) <= 1.0) { - h = (half)(sign * pow(fabs((float)h), 1.f/2.2f)); - } else { - h = (half)(sign * ( log(fabs((float)h)) / log(logBase) + 1.0) ); - } - toNonlinear[i] = h.bits(); - } -#ifndef OPENEXR_BUILTIN_TABLES - printf("const unsigned short dwaCompressorToNonlinear[] = \n"); - printf("{"); - for (int i=0; i<65536; ++i) { - if (i % 8 == 0) { - printf("\n "); - } - printf("0x%04x, ", toNonlinear[i]); - } - printf("\n};\n"); -#endif // OPENEXR_BUILTIN_TABLES -} - - -#ifndef OPENEXR_BUILTIN_TABLES -// -// Attempt to get available CPUs in a somewhat portable way. -// - -int -cpuCount() -{ - if (!ILMTHREAD_NAMESPACE::supportsThreads()) return 1; - - int cpuCount = 1; - -#if defined (OPENEXR_IMF_HAVE_SYSCONF_NPROCESSORS_ONLN) - - cpuCount = sysconf(_SC_NPROCESSORS_ONLN); - -#elif defined (_WIN32) - - SYSTEM_INFO sysinfo; - GetSystemInfo( &sysinfo ); - cpuCount = sysinfo.dwNumberOfProcessors; - -#endif - - if (cpuCount < 1) cpuCount = 1; - return cpuCount; -} - -// -// Generate acceleration luts for the quantization. -// -// For each possible input value, we want to find the closest numbers -// which have one fewer bits set than before. -// -// This gives us num_bits(input)-1 values per input. If we alloc -// space for everything, that's like a 2MB table. We can do better -// by compressing all the values to be contigious and using offset -// pointers. -// -// After we've found the candidates with fewer bits set, sort them -// based on increasing numbers of bits set. This way, on quantize(), -// we can scan through the list and halt once we find the first -// candidate within the error range. For small values that can -// be quantized to 0, 0 is the first value tested and the search -// can exit fairly quickly. -// - -void -generateLutHeader() -{ - std::vector workers; - - size_t numWorkers = cpuCount(); - size_t workerInterval = 65536 / numWorkers; - - for (size_t i=0; i runners; - for (size_t i=0; irun(i == 0); - } - } - - printf("static unsigned int closestDataOffset[] = {\n"); - int offsetIdx = 0; - int offsetPrev = 0; - for (size_t i=0; inumValues(); ++value) { - if (offsetIdx % 8 == 0) { - printf(" "); - } - printf("%6lu, ", workers[i]->offset()[value] + offsetPrev); - if (offsetIdx % 8 == 7) { - printf("\n"); - } - offsetIdx++; - } - offsetPrev += workers[i]->offset()[workers[i]->numValues()-1] + - workers[i]->lastCandidateCount(); - } - printf("};\n\n\n"); - - - printf("static unsigned short closestData[] = {\n"); - int elementIdx = 0; - for (size_t i=0; inumElements(); ++element) { - if (elementIdx % 8 == 0) { - printf(" "); - } - printf("%5d, ", workers[i]->elements()[element]); - if (elementIdx % 8 == 7) { - printf("\n"); - } - elementIdx++; - } - } - printf("};\n\n\n"); - - for (size_t i=0; i\n"); - printf("\n\n\n"); - - generateNoop(); - - printf("\n\n\n"); - - generateToLinear(); - - printf("\n\n\n"); - - generateToNonlinear(); - - printf("\n\n\n"); - - generateLutHeader(); - - return 0; -} -#else // OPENEXR_BUILTIN_TABLES - -#include "dwaLookups.h" - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_ENTER - -static void init_dwa_() -{ - generateNoop(); - generateToLinear(); - generateToNonlinear(); - // N/A: generateLutHeader(); -} - -static inline void init_dwa() -{ - static bool initialized = false; - if (!initialized) - { - init_dwa_(); - initialized = true; - } -} - -const unsigned short* get_dwaCompressorNoOp() -{ - init_dwa(); - return dwaCompressorNoOp; -} -const unsigned short* get_dwaCompressorToLinear() -{ - init_dwa(); - return dwaCompressorToLinear; -} -const unsigned short* get_dwaCompressorToNonlinear() -{ - init_dwa(); - return dwaCompressorToNonlinear; -} - -OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_EXIT - -#endif // OPENEXR_BUILTIN_TABLES diff --git a/3rdparty/openexr/IlmImf/dwaLookups.h b/3rdparty/openexr/IlmImf/dwaLookups.h deleted file mode 100644 index 8f0da83704..0000000000 --- a/3rdparty/openexr/IlmImf/dwaLookups.h +++ /dev/null @@ -1,22 +0,0 @@ -#include "ImfHeader.h" -#include "ImfNamespace.h" -#include "ImfExport.h" - -#include - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER - - -const unsigned short* get_dwaCompressorNoOp(); -const unsigned short* get_dwaCompressorToLinear(); -const unsigned short* get_dwaCompressorToNonlinear(); - -//const unsigned int* get_closestDataOffset(); -//const unsigned short* get_closestData(); -static inline -const unsigned short* get_dwaClosest(int idx) -{ - throw std::runtime_error("OpenEXR: DW* compression tables are not available"); -} - -OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT diff --git a/3rdparty/openexr/IlmThread/IlmThread.cpp b/3rdparty/openexr/IlmThread/IlmThread.cpp deleted file mode 100644 index 45c958c28c..0000000000 --- a/3rdparty/openexr/IlmThread/IlmThread.cpp +++ /dev/null @@ -1,116 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2005-2012, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - -//----------------------------------------------------------------------------- -// -// class Thread -- this file contains two implementations of thread: -// - dummy implementation for platforms that do not support threading -// when OPENEXR_FORCE_CXX03 is on -// - c++11 and newer version -// -//----------------------------------------------------------------------------- - -#include "IlmBaseConfig.h" -#include "IlmThread.h" -#include "Iex.h" - -ILMTHREAD_INTERNAL_NAMESPACE_SOURCE_ENTER - -#ifndef ILMBASE_FORCE_CXX03 -//----------------------------------------------------------------------------- -// C++11 and newer implementation -//----------------------------------------------------------------------------- -bool -supportsThreads () -{ - return true; -} - -Thread::Thread () -{ - // empty -} - - -Thread::~Thread () -{ - // hopefully the thread has basically exited and we are just - // cleaning up, because run is a virtual function, so the v-table - // has already been partly destroyed... - if ( _thread.joinable () ) - _thread.join (); -} - - -void -Thread::start () -{ - _thread = std::thread (&Thread::run, this); -} - -#else -# if !defined (_WIN32) &&!(_WIN64) && !(HAVE_PTHREAD) -//----------------------------------------------------------------------------- -// OPENEXR_FORCE_CXX03 with no windows / pthread support -//----------------------------------------------------------------------------- -bool -supportsThreads () -{ - return false; -} - - -Thread::Thread () -{ - throw IEX_NAMESPACE::NoImplExc ("Threads not supported on this platform."); -} - - -Thread::~Thread () -{ - throw IEX_NAMESPACE::NoImplExc ("Threads not supported on this platform."); -} - - -void -Thread::start () -{ - throw IEX_NAMESPACE::NoImplExc ("Threads not supported on this platform."); -} -# endif -#endif - - -ILMTHREAD_INTERNAL_NAMESPACE_SOURCE_EXIT - diff --git a/3rdparty/openexr/IlmThread/IlmThread.h b/3rdparty/openexr/IlmThread/IlmThread.h deleted file mode 100644 index 26925aa0c5..0000000000 --- a/3rdparty/openexr/IlmThread/IlmThread.h +++ /dev/null @@ -1,153 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2005-2012, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - -#ifndef INCLUDED_ILM_THREAD_H -#define INCLUDED_ILM_THREAD_H - -//----------------------------------------------------------------------------- -// -// class Thread -// -// Class Thread is a portable interface to a system-dependent thread -// primitive. In order to make a thread actually do something useful, -// you must derive a subclass from class Thread and implement the -// run() function. If the operating system supports threading then -// the run() function will be executed int a new thread. -// -// The actual creation of the thread is done by the start() routine -// which then calls the run() function. In general the start() -// routine should be called from the constructor of the derived class. -// -// The base-class thread destructor will join/destroy the thread. -// -// IMPORTANT: Due to the mechanisms that encapsulate the low-level -// threading primitives in a C++ class there is a race condition -// with code resembling the following: -// -// { -// WorkerThread myThread; -// } // myThread goes out of scope, is destroyed -// // and the thread is joined -// -// The race is between the parent thread joining the child thread -// in the destructor of myThread, and the run() function in the -// child thread. If the destructor gets executed first then run() -// will be called with an invalid "this" pointer. -// -// This issue can be fixed by using a Semaphore to keep track of -// whether the run() function has already been called. You can -// include a Semaphore member variable within your derived class -// which you post() on in the run() function, and wait() on in the -// destructor before the thread is joined. Alternatively you could -// do something like this: -// -// Semaphore runStarted; -// -// void WorkerThread::run () -// { -// runStarted.post() -// // do some work -// ... -// } -// -// { -// WorkerThread myThread; -// runStarted.wait (); // ensure that we have started -// // the run function -// } // myThread goes out of scope, is destroyed -// // and the thread is joined -// -//----------------------------------------------------------------------------- - -#include "IlmBaseConfig.h" -#include "IlmThreadExport.h" -#include "IlmThreadNamespace.h" - -#ifdef ILMBASE_FORCE_CXX03 -# if defined _WIN32 || defined _WIN64 -# ifdef NOMINMAX -# undef NOMINMAX -# endif -# define NOMINMAX -# include -# include -# elif HAVE_PTHREAD -# include -# endif -#else -# include -#endif - -ILMTHREAD_INTERNAL_NAMESPACE_HEADER_ENTER - -// -// Query function to determine if the current platform supports -// threads AND this library was compiled with threading enabled. -// - -ILMTHREAD_EXPORT bool supportsThreads (); - - -class Thread -{ - public: - - ILMTHREAD_EXPORT Thread (); - ILMTHREAD_EXPORT virtual ~Thread (); - - ILMTHREAD_EXPORT void start (); - ILMTHREAD_EXPORT virtual void run () = 0; - - private: - -#ifdef ILMBASE_FORCE_CXX03 -# if defined _WIN32 || defined _WIN64 - HANDLE _thread; -# elif HAVE_PTHREAD - pthread_t _thread; -# endif - void operator = (const Thread& t); // not implemented - Thread (const Thread& t); // not implemented -#else - std::thread _thread; - - Thread &operator= (const Thread& t) = delete; - Thread (const Thread& t) = delete; -#endif -}; - - -ILMTHREAD_INTERNAL_NAMESPACE_HEADER_EXIT - -#endif // INCLUDED_ILM_THREAD_H diff --git a/3rdparty/openexr/IlmThread/IlmThreadExport.h b/3rdparty/openexr/IlmThread/IlmThreadExport.h deleted file mode 100644 index 96d2200fe7..0000000000 --- a/3rdparty/openexr/IlmThread/IlmThreadExport.h +++ /dev/null @@ -1,46 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2012, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - -#if defined(OPENEXR_DLL) - #if defined(ILMTHREAD_EXPORTS) - #define ILMTHREAD_EXPORT __declspec(dllexport) - #define ILMTHREAD_EXPORT_CONST extern __declspec(dllexport) - #else - #define ILMTHREAD_EXPORT __declspec(dllimport) - #define ILMTHREAD_EXPORT_CONST extern __declspec(dllimport) - #endif -#else - #define ILMTHREAD_EXPORT - #define ILMTHREAD_EXPORT_CONST extern const -#endif diff --git a/3rdparty/openexr/IlmThread/IlmThreadForward.h b/3rdparty/openexr/IlmThread/IlmThreadForward.h deleted file mode 100644 index e57d5968b0..0000000000 --- a/3rdparty/openexr/IlmThread/IlmThreadForward.h +++ /dev/null @@ -1,60 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2012, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - -#ifndef INCLUDED_ILMTHREADFORWARD_H -#define INCLUDED_ILMTHREADFORWARD_H - -#include "IlmThreadNamespace.h" - -#ifndef ILMBASE_FORCE_CXX03 -namespace std { class mutex; } -#endif - -ILMTHREAD_INTERNAL_NAMESPACE_HEADER_ENTER - -class Thread; -#ifdef ILMBASE_FORCE_CXX03 -class Mutex; -#else -using Mutex = std::mutex; -#endif -class Lock; -class ThreadPool; -class Task; -class TaskGroup; -class Semaphore; - -ILMTHREAD_INTERNAL_NAMESPACE_HEADER_EXIT - -#endif // INCLUDED_ILMTHREADFORWARD_H diff --git a/3rdparty/openexr/IlmThread/IlmThreadMutex.cpp b/3rdparty/openexr/IlmThread/IlmThreadMutex.cpp deleted file mode 100644 index f056f7396e..0000000000 --- a/3rdparty/openexr/IlmThread/IlmThreadMutex.cpp +++ /dev/null @@ -1,60 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2005-2012, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - -//----------------------------------------------------------------------------- -// -// class Mutex, class Lock -- dummy implementation -// for platforms that do not support threading -// -//----------------------------------------------------------------------------- - -#include "IlmBaseConfig.h" - -#ifdef ILMBASE_FORCE_CXX03 -# if !defined (_WIN32) && !(_WIN64) && !(HAVE_PTHREAD) -# include "IlmThreadMutex.h" - -ILMTHREAD_INTERNAL_NAMESPACE_SOURCE_ENTER - - -Mutex::Mutex () {} -Mutex::~Mutex () {} -void Mutex::lock () const {} -void Mutex::unlock () const {} - - -ILMTHREAD_INTERNAL_NAMESPACE_SOURCE_EXIT - -# endif -#endif diff --git a/3rdparty/openexr/IlmThread/IlmThreadMutex.h b/3rdparty/openexr/IlmThread/IlmThreadMutex.h deleted file mode 100644 index 97c43bce34..0000000000 --- a/3rdparty/openexr/IlmThread/IlmThreadMutex.h +++ /dev/null @@ -1,180 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2005-2012, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - -#ifndef INCLUDED_ILM_THREAD_MUTEX_H -#define INCLUDED_ILM_THREAD_MUTEX_H - -//----------------------------------------------------------------------------- -// -// class Mutex, class Lock -// -// Class Mutex is a wrapper for a system-dependent mutual exclusion -// mechanism. Actual locking and unlocking of a Mutex object must -// be performed using an instance of a Lock (defined below). -// -// Class lock provides safe locking and unlocking of mutexes even in -// the presence of C++ exceptions. Constructing a Lock object locks -// the mutex; destroying the Lock unlocks the mutex. -// -// Lock objects are not themselves thread-safe. You should never -// share a Lock object among multiple threads. -// -// Typical usage: -// -// Mutex mtx; // Create a Mutex object that is visible -// //to multiple threads -// -// ... // create some threads -// -// // Then, within each thread, construct a critical section like so: -// -// { -// Lock lock (mtx); // Lock constructor locks the mutex -// ... // do some computation on shared data -// } // leaving the block unlocks the mutex -// -//----------------------------------------------------------------------------- - -#include "IlmThreadExport.h" -#include "IlmBaseConfig.h" -#include "IlmThreadNamespace.h" - -#ifdef ILMBASE_FORCE_CXX03 -# if defined _WIN32 || defined _WIN64 -# ifdef NOMINMAX -# undef NOMINMAX -# endif -# define NOMINMAX -# include -# elif HAVE_PTHREAD -# include -# endif -#else -# include -#endif - -ILMTHREAD_INTERNAL_NAMESPACE_HEADER_ENTER - - -// in c++11, this can just be -// -// using Mutex = std::mutex; -// unfortunately we can't use std::unique_lock as a replacement for Lock since -// they have different API. -// -// if we decide to break the API, we can just -// -// using Lock = std::lock_guard; -// or -// using Lock = std::unique_lock; -// -// (or eliminate the type completely and have people use the std library) -#ifdef ILMBASE_FORCE_CXX03 - -class Lock; - -class ILMTHREAD_EXPORT Mutex -{ - public: - - Mutex (); - virtual ~Mutex (); - - private: - - void lock () const; - void unlock () const; - - #if defined _WIN32 || defined _WIN64 - mutable CRITICAL_SECTION _mutex; - #elif HAVE_PTHREAD - mutable pthread_mutex_t _mutex; - #endif - - void operator = (const Mutex& M); // not implemented - Mutex (const Mutex& M); // not implemented - - friend class Lock; -}; -#else -using Mutex = std::mutex; -#endif - -class ILMTHREAD_EXPORT Lock -{ - public: - - Lock (const Mutex& m, bool autoLock = true): - _mutex (const_cast(m)), _locked (false) - { - if (autoLock) - { - _mutex.lock(); - _locked = true; - } - } - - ~Lock () - { - if (_locked) - _mutex.unlock(); - } - - void acquire () - { - _mutex.lock(); - _locked = true; - } - - void release () - { - _mutex.unlock(); - _locked = false; - } - - bool locked () - { - return _locked; - } - - private: - - Mutex & _mutex; - bool _locked; -}; - - -ILMTHREAD_INTERNAL_NAMESPACE_HEADER_EXIT - -#endif // INCLUDED_ILM_THREAD_MUTEX_H diff --git a/3rdparty/openexr/IlmThread/IlmThreadMutexPosix.cpp b/3rdparty/openexr/IlmThread/IlmThreadMutexPosix.cpp deleted file mode 100644 index 29a265a136..0000000000 --- a/3rdparty/openexr/IlmThread/IlmThreadMutexPosix.cpp +++ /dev/null @@ -1,87 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2005-2012, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - -//----------------------------------------------------------------------------- -// -// class Mutex -- implementation for -// platforms that support Posix threads -// -//----------------------------------------------------------------------------- - -#include "IlmBaseConfig.h" - -#ifdef ILMBASE_FORCE_CXX03 -# if HAVE_PTHREAD - -# include "IlmThreadMutex.h" -# include "Iex.h" -# include - -ILMTHREAD_INTERNAL_NAMESPACE_SOURCE_ENTER - - -Mutex::Mutex () -{ - if (int error = ::pthread_mutex_init (&_mutex, 0)) - IEX_INTERNAL_NAMESPACE::throwErrnoExc ("Cannot initialize mutex (%T).", error); -} - - -Mutex::~Mutex () -{ - int error = ::pthread_mutex_destroy (&_mutex); - assert (error == 0); -} - - -void -Mutex::lock () const -{ - if (int error = ::pthread_mutex_lock (&_mutex)) - IEX_INTERNAL_NAMESPACE::throwErrnoExc ("Cannot lock mutex (%T).", error); -} - - -void -Mutex::unlock () const -{ - if (int error = ::pthread_mutex_unlock (&_mutex)) - IEX_INTERNAL_NAMESPACE::throwErrnoExc ("Cannot unlock mutex (%T).", error); -} - - -ILMTHREAD_INTERNAL_NAMESPACE_SOURCE_EXIT - -# endif -#endif diff --git a/3rdparty/openexr/IlmThread/IlmThreadMutexWin32.cpp b/3rdparty/openexr/IlmThread/IlmThreadMutexWin32.cpp deleted file mode 100644 index 2f7bc302e1..0000000000 --- a/3rdparty/openexr/IlmThread/IlmThreadMutexWin32.cpp +++ /dev/null @@ -1,78 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2005-2012, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - -//----------------------------------------------------------------------------- -// -// class Mutex -- implementation for Windows -// -//----------------------------------------------------------------------------- - -#include "IlmBaseConfig.h" - -#ifdef ILMBASE_FORCE_CXX03 -# include "IlmThreadMutex.h" -# include "Iex.h" - -ILMTHREAD_INTERNAL_NAMESPACE_SOURCE_ENTER - - -Mutex::Mutex () -{ - ::InitializeCriticalSection (&_mutex); -} - - -Mutex::~Mutex () -{ - ::DeleteCriticalSection (&_mutex); -} - - -void -Mutex::lock () const -{ - ::EnterCriticalSection (&_mutex); -} - - -void -Mutex::unlock () const -{ - ::LeaveCriticalSection (&_mutex); -} - - -ILMTHREAD_INTERNAL_NAMESPACE_SOURCE_EXIT - -#endif diff --git a/3rdparty/openexr/IlmThread/IlmThreadNamespace.h b/3rdparty/openexr/IlmThread/IlmThreadNamespace.h deleted file mode 100644 index a4129971a7..0000000000 --- a/3rdparty/openexr/IlmThread/IlmThreadNamespace.h +++ /dev/null @@ -1,114 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2012, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - -#ifndef INCLUDED_ILMTHREADNAMESPACE_H -#define INCLUDED_ILMTHREADNAMESPACE_H - -// -// The purpose of this file is to make it possible to specify an -// ILMTHREAD_INTERNAL_NAMESPACE as a preprocessor definition and have all of -// the IlmThread symbols defined within that namespace rather than the -// standard IlmThread namespace. Those symbols are made available to client -// code through the ILMTHREAD_NAMESPACE in addition to the -// ILMTHREAD_INTERNAL_NAMESPACE. -// -// To ensure source code compatibility, the ILMTHREAD_NAMESPACE defaults to -// IlmThread and then "using namespace ILMTHREAD_INTERNAL_NAMESPACE;" brings -// all of the declarations from the ILMTHREAD_INTERNAL_NAMESPACE into the -// ILMTHREAD_NAMESPACE. This means that client code can continue to use -// syntax like IlmThread::Thread, but at link time it will resolve to a -// mangled symbol based on the ILMTHREAD_INTERNAL_NAMESPACE. -// -// As an example, if one needed to build against a newer version of IlmThread -// and have it run alongside an older version in the same application, it is -// now possible to use an internal namespace to prevent collisions between -// the older versions of IlmThread symbols and the newer ones. To do this, -// the following could be defined at build time: -// -// ILMTHREAD_INTERNAL_NAMESPACE = IlmThread_v2 -// -// This means that declarations inside IlmThread headers look like this -// (after the preprocessor has done its work): -// -// namespace IlmThread_v2 { -// ... -// class declarations -// ... -// } -// -// namespace IlmThread { -// using namespace IlmThread_v2; -// } -// - -// -// Open Source version of this file pulls in the IlmBaseConfig.h file -// for the configure time options. -// -#include "IlmBaseConfig.h" - -#ifndef ILMTHREAD_NAMESPACE -#define ILMTHREAD_NAMESPACE IlmThread -#endif - -#ifndef ILMTHREAD_INTERNAL_NAMESPACE -#define ILMTHREAD_INTERNAL_NAMESPACE ILMTHREAD_NAMESPACE -#endif - -// -// We need to be sure that we import the internal namespace into the public one. -// To do this, we use the small bit of code below which initially defines -// ILMTHREAD_INTERNAL_NAMESPACE (so it can be referenced) and then defines -// ILMTHREAD_NAMESPACE and pulls the internal symbols into the public -// namespace. -// - -namespace ILMTHREAD_INTERNAL_NAMESPACE {} -namespace ILMTHREAD_NAMESPACE { - using namespace ILMTHREAD_INTERNAL_NAMESPACE; -} - -// -// There are identical pairs of HEADER/SOURCE ENTER/EXIT macros so that -// future extension to the namespace mechanism is possible without changing -// project source code. -// - -#define ILMTHREAD_INTERNAL_NAMESPACE_HEADER_ENTER namespace ILMTHREAD_INTERNAL_NAMESPACE { -#define ILMTHREAD_INTERNAL_NAMESPACE_HEADER_EXIT } - -#define ILMTHREAD_INTERNAL_NAMESPACE_SOURCE_ENTER namespace ILMTHREAD_INTERNAL_NAMESPACE { -#define ILMTHREAD_INTERNAL_NAMESPACE_SOURCE_EXIT } - -#endif // INCLUDED_ILMTHREADNAMESPACE_H diff --git a/3rdparty/openexr/IlmThread/IlmThreadPool.cpp b/3rdparty/openexr/IlmThread/IlmThreadPool.cpp deleted file mode 100644 index 174ab98c46..0000000000 --- a/3rdparty/openexr/IlmThread/IlmThreadPool.cpp +++ /dev/null @@ -1,851 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2005-2012, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - -//----------------------------------------------------------------------------- -// -// class Task, class ThreadPool, class TaskGroup -// -//----------------------------------------------------------------------------- - -#include "IlmThread.h" -#include "IlmThreadMutex.h" -#include "IlmThreadSemaphore.h" -#include "IlmThreadPool.h" -#include "Iex.h" -#include -#ifndef ILMBASE_FORCE_CXX03 -# include -# include -# include -#endif - -using namespace std; - -ILMTHREAD_INTERNAL_NAMESPACE_SOURCE_ENTER - -#if defined(__GNU_LIBRARY__) && ( __GLIBC__ < 2 || ( __GLIBC__ == 2 && __GLIBC_MINOR__ < 21 ) ) -# define ENABLE_SEM_DTOR_WORKAROUND -#endif - -struct TaskGroup::Data -{ - Data (); - ~Data (); - - void addTask () ; - void removeTask (); -#ifndef ILMBASE_FORCE_CXX03 - std::atomic numPending; -#else - int numPending; // number of pending tasks to still execute -#endif - Semaphore isEmpty; // used to signal that the taskgroup is empty -#if defined(ENABLE_SEM_DTOR_WORKAROUND) || defined(ILMBASE_FORCE_CXX03) - // this mutex is also used to lock numPending in the legacy c++ mode... - Mutex dtorMutex; // used to work around the glibc bug: - // http://sources.redhat.com/bugzilla/show_bug.cgi?id=12674 -#endif -}; - - -struct ThreadPool::Data -{ - typedef ThreadPoolProvider *TPPointer; - - Data (); - ~Data(); - - struct SafeProvider - { - SafeProvider (Data *d, ThreadPoolProvider *p) : _data( d ), _ptr( p ) - { - } - - ~SafeProvider() - { - if ( _data ) - _data->coalesceProviderUse(); - } - SafeProvider (const SafeProvider &o) - : _data( o._data ), _ptr( o._ptr ) - { - if ( _data ) - _data->bumpProviderUse(); - } - SafeProvider &operator= (const SafeProvider &o) - { - if ( this != &o ) - { - if ( o._data ) - o._data->bumpProviderUse(); - if ( _data ) - _data->coalesceProviderUse(); - _data = o._data; - _ptr = o._ptr; - } - return *this; - } -#ifndef ILMBASE_FORCE_CXX03 - SafeProvider( SafeProvider &&o ) - : _data( o._data ), _ptr( o._ptr ) - { - o._data = nullptr; - } - SafeProvider &operator=( SafeProvider &&o ) - { - std::swap( _data, o._data ); - std::swap( _ptr, o._ptr ); - return *this; - } -#endif - inline ThreadPoolProvider *get () const - { - return _ptr; - } - ThreadPoolProvider *operator-> () const - { - return get(); - } - - Data *_data; - ThreadPoolProvider *_ptr; - }; - - // NB: In C++20, there is full support for atomic shared_ptr, but that is not - // yet in use or finalized. Once stabilized, add appropriate usage here - inline SafeProvider getProvider (); - inline void coalesceProviderUse (); - inline void bumpProviderUse (); - inline void setProvider (ThreadPoolProvider *p); - -#ifdef ILMBASE_FORCE_CXX03 - Semaphore provSem; - Mutex provMutex; - int provUsers; - ThreadPoolProvider *provider; - ThreadPoolProvider *oldprovider; -#else - std::atomic provider; - std::atomic provUsers; -#endif -}; - - - -namespace { - -class DefaultWorkerThread; - -struct DefaultWorkData -{ - Semaphore taskSemaphore; // threads wait on this for ready tasks - mutable Mutex taskMutex; // mutual exclusion for the tasks list - vector tasks; // the list of tasks to execute - - Semaphore threadSemaphore; // signaled when a thread starts executing - mutable Mutex threadMutex; // mutual exclusion for threads list - vector threads; // the list of all threads - -#ifdef ILMBASE_FORCE_CXX03 - bool stopping; // flag indicating whether to stop threads - mutable Mutex stopMutex; // mutual exclusion for stopping flag -#else - std::atomic hasThreads; - std::atomic stopping; -#endif - - inline bool stopped () const - { -#ifdef ILMBASE_FORCE_CXX03 - Lock lock (stopMutex); - return stopping; -#else - return stopping.load( std::memory_order_relaxed ); -#endif - } - - inline void stop () - { -#ifdef ILMBASE_FORCE_CXX03 - Lock lock (stopMutex); -#endif - stopping = true; - } -}; - -// -// class WorkerThread -// -class DefaultWorkerThread: public Thread -{ - public: - - DefaultWorkerThread (DefaultWorkData* data); - - virtual void run (); - - private: - - DefaultWorkData * _data; -}; - - -DefaultWorkerThread::DefaultWorkerThread (DefaultWorkData* data): - _data (data) -{ - start(); -} - - -void -DefaultWorkerThread::run () -{ - // - // Signal that the thread has started executing - // - - _data->threadSemaphore.post(); - - while (true) - { - // - // Wait for a task to become available - // - - _data->taskSemaphore.wait(); - - { - Lock taskLock (_data->taskMutex); - - // - // If there is a task pending, pop off the next task in the FIFO - // - - if (!_data->tasks.empty()) - { - Task* task = _data->tasks.back(); - _data->tasks.pop_back(); - taskLock.release(); - - TaskGroup* taskGroup = task->group(); - task->execute(); - - delete task; - - taskGroup->_data->removeTask (); - } - else if (_data->stopped()) - { - break; - } - } - } -} - - -// -// class DefaultThreadPoolProvider -// -class DefaultThreadPoolProvider : public ThreadPoolProvider -{ - public: - DefaultThreadPoolProvider(int count); - virtual ~DefaultThreadPoolProvider(); - - virtual int numThreads() const; - virtual void setNumThreads(int count); - virtual void addTask(Task *task); - - virtual void finish(); - - private: - DefaultWorkData _data; -}; - -DefaultThreadPoolProvider::DefaultThreadPoolProvider (int count) -{ - setNumThreads(count); -} - -DefaultThreadPoolProvider::~DefaultThreadPoolProvider () -{ - finish(); -} - -int -DefaultThreadPoolProvider::numThreads () const -{ - Lock lock (_data.threadMutex); - return static_cast (_data.threads.size()); -} - -void -DefaultThreadPoolProvider::setNumThreads (int count) -{ - // - // Lock access to thread list and size - // - - Lock lock (_data.threadMutex); - - size_t desired = static_cast(count); - if (desired > _data.threads.size()) - { - // - // Add more threads - // - - while (_data.threads.size() < desired) - _data.threads.push_back (new DefaultWorkerThread (&_data)); - } - else if ((size_t)count < _data.threads.size()) - { - // - // Wait until all existing threads are finished processing, - // then delete all threads. - // - finish (); - - // - // Add in new threads - // - - while (_data.threads.size() < desired) - _data.threads.push_back (new DefaultWorkerThread (&_data)); - } -#ifndef ILMBASE_FORCE_CXX03 - _data.hasThreads = !(_data.threads.empty()); -#endif -} - -void -DefaultThreadPoolProvider::addTask (Task *task) -{ - // - // Lock the threads, needed to access numThreads - // -#ifdef ILMBASE_FORCE_CXX03 - bool doPush; - { - Lock lock (_data.threadMutex); - doPush = !_data.threads.empty(); - } -#else - bool doPush = _data.hasThreads.load( std::memory_order_relaxed ); -#endif - - if ( doPush ) - { - // - // Get exclusive access to the tasks queue - // - - { - Lock taskLock (_data.taskMutex); - - // - // Push the new task into the FIFO - // - _data.tasks.push_back (task); - } - - // - // Signal that we have a new task to process - // - _data.taskSemaphore.post (); - } - else - { - // this path shouldn't normally happen since we have the - // NullThreadPoolProvider, but just in case... - task->execute (); - task->group()->_data->removeTask (); - delete task; - } -} - -void -DefaultThreadPoolProvider::finish () -{ - _data.stop(); - - // - // Signal enough times to allow all threads to stop. - // - // Wait until all threads have started their run functions. - // If we do not wait before we destroy the threads then it's - // possible that the threads have not yet called their run - // functions. - // If this happens then the run function will be called off - // of an invalid object and we will crash, most likely with - // an error like: "pure virtual method called" - // - - size_t curT = _data.threads.size(); - for (size_t i = 0; i != curT; ++i) - { - _data.taskSemaphore.post(); - _data.threadSemaphore.wait(); - } - - // - // Join all the threads - // - for (size_t i = 0; i != curT; ++i) - delete _data.threads[i]; - - Lock lock1 (_data.taskMutex); -#ifdef ILMBASE_FORCE_CXX03 - Lock lock2 (_data.stopMutex); -#endif - _data.threads.clear(); - _data.tasks.clear(); - - _data.stopping = false; -} - - -class NullThreadPoolProvider : public ThreadPoolProvider -{ - virtual ~NullThreadPoolProvider() {} - virtual int numThreads () const { return 0; } - virtual void setNumThreads (int count) - { - } - virtual void addTask (Task *t) - { - t->execute (); - t->group()->_data->removeTask (); - delete t; - } - virtual void finish () {} -}; - -} //namespace - - -// -// struct TaskGroup::Data -// - -TaskGroup::Data::Data (): isEmpty (1), numPending (0) -{ - // empty -} - - -TaskGroup::Data::~Data () -{ - // - // A TaskGroup acts like an "inverted" semaphore: if the count - // is above 0 then waiting on the taskgroup will block. This - // destructor waits until the taskgroup is empty before returning. - // - - isEmpty.wait (); - -#ifdef ENABLE_SEM_DTOR_WORKAROUND - // Update: this was fixed in v. 2.2.21, so this ifdef checks for that - // - // Alas, given the current bug in glibc we need a secondary - // syncronisation primitive here to account for the fact that - // destructing the isEmpty Semaphore in this thread can cause - // an error for a separate thread that is issuing the post() call. - // We are entitled to destruct the semaphore at this point, however, - // that post() call attempts to access data out of the associated - // memory *after* it has woken the waiting threads, including this one, - // potentially leading to invalid memory reads. - // http://sources.redhat.com/bugzilla/show_bug.cgi?id=12674 - - Lock lock (dtorMutex); -#endif -} - - -void -TaskGroup::Data::addTask () -{ - // - // in c++11, we use an atomic to protect numPending to avoid the - // extra lock but for c++98, to add the ability for custom thread - // pool we add the lock here - // -#if ILMBASE_FORCE_CXX03 - Lock lock (dtorMutex); -#endif - if (numPending++ == 0) - isEmpty.wait (); -} - - -void -TaskGroup::Data::removeTask () -{ - // Alas, given the current bug in glibc we need a secondary - // syncronisation primitive here to account for the fact that - // destructing the isEmpty Semaphore in a separate thread can - // cause an error. Issuing the post call here the current libc - // implementation attempts to access memory *after* it has woken - // waiting threads. - // Since other threads are entitled to delete the semaphore the - // access to the memory location can be invalid. - // http://sources.redhat.com/bugzilla/show_bug.cgi?id=12674 - // Update: this bug has been fixed, but how do we know which - // glibc version we're in? - - // Further update: - // - // we could remove this if it is a new enough glibc, however - // we've changed the API to enable a custom override of a - // thread pool. In order to provide safe access to the numPending, - // we need the lock anyway, except for c++11 or newer -#ifdef ILMBASE_FORCE_CXX03 - Lock lock (dtorMutex); - - if (--numPending == 0) - isEmpty.post (); -#else - if (--numPending == 0) - { -#ifdef ENABLE_SEM_DTOR_WORKAROUND - Lock lock (dtorMutex); -#endif - isEmpty.post (); - } -#endif -} - - -// -// struct ThreadPool::Data -// - -ThreadPool::Data::Data (): - provUsers (0), provider (NULL) -#ifdef ILMBASE_FORCE_CXX03 - , oldprovider (NULL) -#else -#endif -{ - // empty -} - - -ThreadPool::Data::~Data() -{ -#ifdef ILMBASE_FORCE_CXX03 - provider->finish(); -#else - ThreadPoolProvider *p = provider.load( std::memory_order_relaxed ); - p->finish(); -#endif -} - -inline ThreadPool::Data::SafeProvider -ThreadPool::Data::getProvider () -{ -#ifdef ILMBASE_FORCE_CXX03 - Lock provLock( provMutex ); - ++provUsers; - return SafeProvider( this, provider ); -#else - provUsers.fetch_add( 1, std::memory_order_relaxed ); - return SafeProvider( this, provider.load( std::memory_order_relaxed ) ); -#endif -} - - -inline void -ThreadPool::Data::coalesceProviderUse () -{ -#ifdef ILMBASE_FORCE_CXX03 - Lock provLock( provMutex ); - --provUsers; - if ( provUsers == 0 ) - { - if ( oldprovider ) - provSem.post(); - } -#else - int ov = provUsers.fetch_sub( 1, std::memory_order_relaxed ); - // ov is the previous value, so one means that now it might be 0 - if ( ov == 1 ) - { - - } -#endif -} - - -inline void -ThreadPool::Data::bumpProviderUse () -{ -#ifdef ILMBASE_FORCE_CXX03 - Lock lock (provMutex); - ++provUsers; -#else - provUsers.fetch_add( 1, std::memory_order_relaxed ); -#endif -} - - -inline void -ThreadPool::Data::setProvider (ThreadPoolProvider *p) -{ -#ifdef ILMBASE_FORCE_CXX03 - Lock provLock( provMutex ); - - if ( oldprovider ) - throw IEX_INTERNAL_NAMESPACE::ArgExc ("Attempt to set the thread pool provider while" - " another thread is currently setting the provider."); - - oldprovider = provider; - provider = p; - - while ( provUsers > 0 ) - { - provLock.release(); - provSem.wait(); - provLock.acquire(); - } - if ( oldprovider ) - { - oldprovider->finish(); - delete oldprovider; - oldprovider = NULL; - } -#else - ThreadPoolProvider *old = provider.load( std::memory_order_relaxed ); - do - { - if ( ! provider.compare_exchange_weak( old, p, std::memory_order_release, std::memory_order_relaxed ) ) - continue; - } while ( false ); - - // wait for any other users to finish prior to deleting, given - // that these are just mostly to query the thread count or push a - // task to the queue (so fast), just spin... - // - // (well, and normally, people don't do this mid stream anyway, so - // this will be 0 99.999% of the time, but just to be safe) - // - while ( provUsers.load( std::memory_order_relaxed ) > 0 ) - std::this_thread::yield(); - - if ( old ) - { - old->finish(); - delete old; - } - - // NB: the shared_ptr mechanism is safer and means we don't have - // to have the provUsers counter since the shared_ptr keeps that - // for us. However, gcc 4.8/9 compilers which many people are - // still using even though it is 2018 forgot to add the shared_ptr - // functions... once that compiler is fully deprecated, switch to - // using the below, change provider to a std::shared_ptr and remove - // provUsers... - // -// std::shared_ptr newp( p ); -// std::shared_ptr curp = std::atomic_load_explicit( &provider, std::memory_order_relaxed ); -// do -// { -// if ( ! std::atomic_compare_exchange_weak_explicit( &provider, &curp, newp, std::memory_order_release, std::memory_order_relaxed ) ) -// continue; -// } while ( false ); -// if ( curp ) -// curp->finish(); -#endif -} - -// -// class Task -// - -Task::Task (TaskGroup* g): _group(g) -{ - if ( g ) - g->_data->addTask (); -} - - -Task::~Task() -{ - // empty -} - - -TaskGroup* -Task::group () -{ - return _group; -} - - -TaskGroup::TaskGroup (): - _data (new Data()) -{ - // empty -} - - -TaskGroup::~TaskGroup () -{ - delete _data; -} - - -void -TaskGroup::finishOneTask () -{ - _data->removeTask (); -} - -// -// class ThreadPoolProvider -// - - -ThreadPoolProvider::ThreadPoolProvider() -{ -} - - -ThreadPoolProvider::~ThreadPoolProvider() -{ -} - - -// -// class ThreadPool -// - -ThreadPool::ThreadPool (unsigned nthreads): - _data (new Data) -{ - if ( nthreads == 0 ) - _data->setProvider( new NullThreadPoolProvider ); - else - _data->setProvider( new DefaultThreadPoolProvider( int(nthreads) ) ); -} - - -ThreadPool::~ThreadPool () -{ - delete _data; -} - - -int -ThreadPool::numThreads () const -{ - return _data->getProvider ()->numThreads (); -} - - -void -ThreadPool::setNumThreads (int count) -{ - if (count < 0) - throw IEX_INTERNAL_NAMESPACE::ArgExc ("Attempt to set the number of threads " - "in a thread pool to a negative value."); - - bool doReset = false; - { - Data::SafeProvider sp = _data->getProvider (); - int curT = sp->numThreads (); - if ( curT == count ) - return; - - if ( curT == 0 ) - { - NullThreadPoolProvider *npp = dynamic_cast( sp.get() ); - if ( npp ) - doReset = true; - } - else if ( count == 0 ) - { - DefaultThreadPoolProvider *dpp = dynamic_cast( sp.get() ); - if ( dpp ) - doReset = true; - } - if ( ! doReset ) - sp->setNumThreads( count ); - } - - if ( doReset ) - { - if ( count == 0 ) - _data->setProvider( new NullThreadPoolProvider ); - else - _data->setProvider( new DefaultThreadPoolProvider( count ) ); - } -} - - -void -ThreadPool::setThreadProvider (ThreadPoolProvider *provider) -{ - _data->setProvider (provider); -} - - -void -ThreadPool::addTask (Task* task) -{ - _data->getProvider ()->addTask (task); -} - - -ThreadPool& -ThreadPool::globalThreadPool () -{ - // - // The global thread pool - // - - static ThreadPool gThreadPool (0); - - return gThreadPool; -} - - -void -ThreadPool::addGlobalTask (Task* task) -{ - globalThreadPool().addTask (task); -} - - -ILMTHREAD_INTERNAL_NAMESPACE_SOURCE_EXIT diff --git a/3rdparty/openexr/IlmThread/IlmThreadPool.h b/3rdparty/openexr/IlmThread/IlmThreadPool.h deleted file mode 100644 index 85b3de2f29..0000000000 --- a/3rdparty/openexr/IlmThread/IlmThreadPool.h +++ /dev/null @@ -1,214 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2005-2012, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - -#ifndef INCLUDED_ILM_THREAD_POOL_H -#define INCLUDED_ILM_THREAD_POOL_H - - -//----------------------------------------------------------------------------- -// -// class Task, class ThreadPool, class TaskGroup -// -// Class ThreadPool manages a set of worker threads and accepts -// tasks for processing. Tasks added to the thread pool are -// executed concurrently by the worker threads. -// -// Class Task provides an abstract interface for a task which -// a ThreadPool works on. Derived classes need to implement the -// execute() function which performs the actual task. -// -// Class TaskGroup allows synchronization on the completion of a set -// of tasks. Every task that is added to a ThreadPool belongs to a -// single TaskGroup. The destructor of the TaskGroup waits for all -// tasks in the group to finish. -// -// Note: if you plan to use the ThreadPool interface in your own -// applications note that the implementation of the ThreadPool calls -// operator delete on tasks as they complete. If you define a custom -// operator new for your tasks, for instance to use a custom heap, -// then you must also write an appropriate operator delete. -// -//----------------------------------------------------------------------------- - -#include "IlmThreadNamespace.h" -#include "IlmThreadExport.h" - -ILMTHREAD_INTERNAL_NAMESPACE_HEADER_ENTER - -class TaskGroup; -class Task; - -//------------------------------------------------------- -// ThreadPoolProvider -- this is a pure virtual interface -// enabling custom overloading of the threads used and how -// the implementation of the processing of tasks -// is implemented -//------------------------------------------------------- -class ILMTHREAD_EXPORT ThreadPoolProvider -{ - public: - ThreadPoolProvider(); - virtual ~ThreadPoolProvider(); - - // as in ThreadPool below - virtual int numThreads () const = 0; - // as in ThreadPool below - virtual void setNumThreads (int count) = 0; - // as in ThreadPool below - virtual void addTask (Task* task) = 0; - - // Ensure that all tasks in this set are finished - // and threads shutdown - virtual void finish () = 0; - - // Make the provider non-copyable -#if __cplusplus >= 201103L - ThreadPoolProvider (const ThreadPoolProvider &) = delete; - ThreadPoolProvider &operator= (const ThreadPoolProvider &) = delete; - ThreadPoolProvider (ThreadPoolProvider &&) = delete; - ThreadPoolProvider &operator= (ThreadPoolProvider &&) = delete; -#else - private: - ThreadPoolProvider (const ThreadPoolProvider &); - ThreadPoolProvider &operator= (const ThreadPoolProvider &); -#endif -}; - -class ILMTHREAD_EXPORT ThreadPool -{ - public: - - - //------------------------------------------------------- - // Constructor -- creates numThreads worker threads which - // wait until a task is available, - // using a default ThreadPoolProvider - //------------------------------------------------------- - - ThreadPool (unsigned numThreads = 0); - - - //----------------------------------------------------------- - // Destructor -- waits for all tasks to complete, joins all - // the threads to the calling thread, and then destroys them. - //----------------------------------------------------------- - - virtual ~ThreadPool (); - - - //-------------------------------------------------------- - // Query and set the number of worker threads in the pool. - // - // Warning: never call setNumThreads from within a worker - // thread as this will almost certainly cause a deadlock - // or crash. - //-------------------------------------------------------- - - int numThreads () const; - void setNumThreads (int count); - - //-------------------------------------------------------- - // Set the thread provider for the pool. - // - // The ThreadPool takes ownership of the ThreadPoolProvider - // and will call delete on it when it is finished or when - // it is changed - // - // Warning: never call setThreadProvider from within a worker - // thread as this will almost certainly cause a deadlock - // or crash. - //-------------------------------------------------------- - void setThreadProvider (ThreadPoolProvider *provider); - - //------------------------------------------------------------ - // Add a task for processing. The ThreadPool can handle any - // number of tasks regardless of the number of worker threads. - // The tasks are first added onto a queue, and are executed - // by threads as they become available, in FIFO order. - //------------------------------------------------------------ - - void addTask (Task* task); - - - //------------------------------------------- - // Access functions for the global threadpool - //------------------------------------------- - - static ThreadPool& globalThreadPool (); - static void addGlobalTask (Task* task); - - struct Data; - - protected: - - Data * _data; -}; - - -class ILMTHREAD_EXPORT Task -{ - public: - - Task (TaskGroup* g); - virtual ~Task (); - - virtual void execute () = 0; - TaskGroup * group(); - - protected: - - TaskGroup * _group; -}; - - -class ILMTHREAD_EXPORT TaskGroup -{ - public: - - TaskGroup(); - ~TaskGroup(); - - // marks one task as finished - // should be used by the thread pool provider to notify - // as it finishes tasks - void finishOneTask (); - - struct Data; - Data* const _data; -}; - - -ILMTHREAD_INTERNAL_NAMESPACE_HEADER_EXIT - -#endif // INCLUDED_ILM_THREAD_POOL_H diff --git a/3rdparty/openexr/IlmThread/IlmThreadPosix.cpp b/3rdparty/openexr/IlmThread/IlmThreadPosix.cpp deleted file mode 100644 index 4aee3f3ca2..0000000000 --- a/3rdparty/openexr/IlmThread/IlmThreadPosix.cpp +++ /dev/null @@ -1,100 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2005-2012, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - -//----------------------------------------------------------------------------- -// -// class Thread -- implementation for -// platforms that support Posix threads -// -//----------------------------------------------------------------------------- - -#include "IlmBaseConfig.h" - -#if HAVE_PTHREAD -#ifdef ILMBASE_FORCE_CXX03 - -#include "IlmThread.h" -#include "Iex.h" -#include - -extern "C" -{ - typedef void * (* Start) (void *); -} - -ILMTHREAD_INTERNAL_NAMESPACE_SOURCE_ENTER - - -bool -supportsThreads () -{ - return true; -} - -namespace { - -void -threadLoop (void * t) -{ - return (reinterpret_cast(t))->run(); -} - -} // namespace - - -Thread::Thread () -{ - // empty -} - - -Thread::~Thread () -{ - int error = ::pthread_join (_thread, 0); - assert (error == 0); -} - - -void -Thread::start () -{ - if (int error = ::pthread_create (&_thread, 0, Start (threadLoop), this)) - IEX_NAMESPACE::throwErrnoExc ("Cannot create new thread (%T).", error); -} - - -ILMTHREAD_INTERNAL_NAMESPACE_SOURCE_EXIT - -#endif -#endif diff --git a/3rdparty/openexr/IlmThread/IlmThreadSemaphore.cpp b/3rdparty/openexr/IlmThread/IlmThreadSemaphore.cpp deleted file mode 100644 index 26ae76368a..0000000000 --- a/3rdparty/openexr/IlmThread/IlmThreadSemaphore.cpp +++ /dev/null @@ -1,60 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2005-2012, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - -//----------------------------------------------------------------------------- -// -// class Semaphore -- dummy implementation for -// for platforms that do not support threading -// -//----------------------------------------------------------------------------- - -#include "IlmBaseConfig.h" - -#if !defined (_WIN32) && !(_WIN64) && !(HAVE_PTHREAD) -#include "IlmThreadSemaphore.h" - -ILMTHREAD_INTERNAL_NAMESPACE_SOURCE_ENTER - - -Semaphore::Semaphore (unsigned int value) {} -Semaphore::~Semaphore () {} -void Semaphore::wait () {} -bool Semaphore::tryWait () {return true;} -void Semaphore::post () {} -int Semaphore::value () const {return 0;} - - -ILMTHREAD_INTERNAL_NAMESPACE_SOURCE_EXIT - -#endif diff --git a/3rdparty/openexr/IlmThread/IlmThreadSemaphore.h b/3rdparty/openexr/IlmThread/IlmThreadSemaphore.h deleted file mode 100644 index adc52cd44e..0000000000 --- a/3rdparty/openexr/IlmThread/IlmThreadSemaphore.h +++ /dev/null @@ -1,127 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2005-2012, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - -#ifndef INCLUDED_ILM_THREAD_SEMAPHORE_H -#define INCLUDED_ILM_THREAD_SEMAPHORE_H - -//----------------------------------------------------------------------------- -// -// class Semaphore -- a wrapper class for -// system-dependent counting semaphores -// -//----------------------------------------------------------------------------- - -#include "IlmBaseConfig.h" -#include "IlmThreadExport.h" -#include "IlmThreadNamespace.h" - -#if defined _WIN32 || defined _WIN64 -# ifdef NOMINMAX -# undef NOMINMAX -# endif -# define NOMINMAX -# include -#elif HAVE_POSIX_SEMAPHORES -# include -#else -# ifdef ILMBASE_FORCE_CXX03 -# if HAVE_PTHREAD -# include -# endif -# else -# include -# include -# endif -#endif - -ILMTHREAD_INTERNAL_NAMESPACE_HEADER_ENTER - - -class ILMTHREAD_EXPORT Semaphore -{ - public: - - Semaphore (unsigned int value = 0); - virtual ~Semaphore(); - - void wait(); - bool tryWait(); - void post(); - int value() const; - - private: - -#if defined _WIN32 || defined _WIN64 - - mutable HANDLE _semaphore; - -#elif HAVE_POSIX_SEMAPHORES - - mutable sem_t _semaphore; - -#else - // - // If the platform has Posix threads but no semapohores, - // then we implement them ourselves using condition variables - // - - struct sema_t - { - unsigned int count; - unsigned long numWaiting; -# if ILMBASE_FORCE_CXX03 -# if HAVE_PTHREAD - pthread_mutex_t mutex; - pthread_cond_t nonZero; -# else -# error unhandled legacy setup -# endif -# else - std::mutex mutex; - std::condition_variable nonZero; -# endif - }; - - mutable sema_t _semaphore; - -#endif - - void operator = (const Semaphore& s); // not implemented - Semaphore (const Semaphore& s); // not implemented -}; - - -ILMTHREAD_INTERNAL_NAMESPACE_HEADER_EXIT - -#endif // INCLUDED_ILM_THREAD_SEMAPHORE_H diff --git a/3rdparty/openexr/IlmThread/IlmThreadSemaphorePosix.cpp b/3rdparty/openexr/IlmThread/IlmThreadSemaphorePosix.cpp deleted file mode 100644 index 400d90effc..0000000000 --- a/3rdparty/openexr/IlmThread/IlmThreadSemaphorePosix.cpp +++ /dev/null @@ -1,106 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2005-2012, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - -//----------------------------------------------------------------------------- -// -// class Semaphore -- implementation for platforms -// that support Posix threads and Posix semaphores -// -//----------------------------------------------------------------------------- - -#include "IlmBaseConfig.h" - -#if HAVE_PTHREAD && HAVE_POSIX_SEMAPHORES - -#include "IlmThreadSemaphore.h" -#include "Iex.h" -#include -#include - -ILMTHREAD_INTERNAL_NAMESPACE_SOURCE_ENTER - - -Semaphore::Semaphore (unsigned int value) -{ - if (::sem_init (&_semaphore, 0, value)) - IEX_NAMESPACE::throwErrnoExc ("Cannot initialize semaphore (%T)."); -} - - -Semaphore::~Semaphore () -{ - int error = ::sem_destroy (&_semaphore); - assert (error == 0); -} - - -void -Semaphore::wait () -{ - while( ::sem_wait( &_semaphore ) == -1 && errno == EINTR ) - { - } -} - - -bool -Semaphore::tryWait () -{ - return sem_trywait (&_semaphore) == 0; -} - - -void -Semaphore::post () -{ - if (::sem_post (&_semaphore)) - IEX_NAMESPACE::throwErrnoExc ("Post operation on semaphore failed (%T)."); -} - - -int -Semaphore::value () const -{ - int value; - - if (::sem_getvalue (&_semaphore, &value)) - IEX_NAMESPACE::throwErrnoExc ("Cannot read semaphore value (%T)."); - - return value; -} - - -ILMTHREAD_INTERNAL_NAMESPACE_SOURCE_EXIT - -#endif diff --git a/3rdparty/openexr/IlmThread/IlmThreadSemaphorePosixCompat.cpp b/3rdparty/openexr/IlmThread/IlmThreadSemaphorePosixCompat.cpp deleted file mode 100644 index fa41bb6d4f..0000000000 --- a/3rdparty/openexr/IlmThread/IlmThreadSemaphorePosixCompat.cpp +++ /dev/null @@ -1,227 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2005-2012, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - -//----------------------------------------------------------------------------- -// -// class Semaphore -- implementation for for platforms that do -// support Posix threads but do not support Posix semaphores, -// for example, OS X -// -//----------------------------------------------------------------------------- - -#include "IlmBaseConfig.h" - -#if (!HAVE_POSIX_SEMAPHORES) && !defined (_WIN32) && ! defined (_WIN64) - -#include "IlmThreadSemaphore.h" -#include "Iex.h" -#include - -ILMTHREAD_INTERNAL_NAMESPACE_SOURCE_ENTER - -#if ILMBASE_FORCE_CXX03 && HAVE_PTHREAD -Semaphore::Semaphore (unsigned int value) -{ - if (int error = ::pthread_mutex_init (&_semaphore.mutex, 0)) - IEX_NAMESPACE::throwErrnoExc ("Cannot initialize mutex (%T).", error); - - if (int error = ::pthread_cond_init (&_semaphore.nonZero, 0)) - IEX_NAMESPACE::throwErrnoExc ("Cannot initialize condition variable (%T).", - error); - - _semaphore.count = value; - _semaphore.numWaiting = 0; -} - - -Semaphore::~Semaphore () -{ - int error = ::pthread_cond_destroy (&_semaphore.nonZero); - assert (error == 0); - error = ::pthread_mutex_destroy (&_semaphore.mutex); - assert (error == 0); -} - - -void -Semaphore::wait () -{ - ::pthread_mutex_lock (&_semaphore.mutex); - - _semaphore.numWaiting++; - - while (_semaphore.count == 0) - { - if (int error = ::pthread_cond_wait (&_semaphore.nonZero, - &_semaphore.mutex)) - { - ::pthread_mutex_unlock (&_semaphore.mutex); - - IEX_NAMESPACE::throwErrnoExc ("Cannot wait on condition variable (%T).", - error); - } - } - - _semaphore.numWaiting--; - _semaphore.count--; - - ::pthread_mutex_unlock (&_semaphore.mutex); -} - - -bool -Semaphore::tryWait () -{ - ::pthread_mutex_lock (&_semaphore.mutex); - - if (_semaphore.count == 0) - { - ::pthread_mutex_unlock (&_semaphore.mutex); - return false; - } - else - { - _semaphore.count--; - ::pthread_mutex_unlock (&_semaphore.mutex); - return true; - } -} - - -void -Semaphore::post () -{ - ::pthread_mutex_lock (&_semaphore.mutex); - - if (_semaphore.numWaiting > 0) - { - int error; - if (_semaphore.numWaiting > 1 && _semaphore.count > 1) - { - error = ::pthread_cond_broadcast (&_semaphore.nonZero); - } - else - { - error = ::pthread_cond_signal (&_semaphore.nonZero); - } - if (error) - { - ::pthread_mutex_unlock (&_semaphore.mutex); - - IEX_NAMESPACE::throwErrnoExc ("Cannot signal condition variable (%T).", - error); - } - } - - _semaphore.count++; - ::pthread_mutex_unlock (&_semaphore.mutex); -} - - -int -Semaphore::value () const -{ - ::pthread_mutex_lock (&_semaphore.mutex); - int value = _semaphore.count; - ::pthread_mutex_unlock (&_semaphore.mutex); - return value; -} -#else -Semaphore::Semaphore (unsigned int value) -{ - _semaphore.count = value; - _semaphore.numWaiting = 0; -} - - -Semaphore::~Semaphore () -{ -} - - -void -Semaphore::wait () -{ - std::unique_lock lk(_semaphore.mutex); - - _semaphore.numWaiting++; - - while (_semaphore.count == 0) - _semaphore.nonZero.wait (lk); - - _semaphore.numWaiting--; - _semaphore.count--; -} - - -bool -Semaphore::tryWait () -{ - std::lock_guard lk(_semaphore.mutex); - - if (_semaphore.count == 0) - return false; - - _semaphore.count--; - return true; -} - - -void -Semaphore::post () -{ - std::lock_guard lk(_semaphore.mutex); - - _semaphore.count++; - if (_semaphore.numWaiting > 0) - { - if (_semaphore.count > 1) - _semaphore.nonZero.notify_all(); - else - _semaphore.nonZero.notify_one(); - } -} - - -int -Semaphore::value () const -{ - std::lock_guard lk(_semaphore.mutex); - return _semaphore.count; -} -#endif - -ILMTHREAD_INTERNAL_NAMESPACE_SOURCE_EXIT - -#endif diff --git a/3rdparty/openexr/IlmThread/IlmThreadSemaphoreWin32.cpp b/3rdparty/openexr/IlmThread/IlmThreadSemaphoreWin32.cpp deleted file mode 100644 index 3e5c372306..0000000000 --- a/3rdparty/openexr/IlmThread/IlmThreadSemaphoreWin32.cpp +++ /dev/null @@ -1,147 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2005-2012, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - -//----------------------------------------------------------------------------- -// -// class Semaphore -- implementation for Windows -// -//----------------------------------------------------------------------------- - -#include "IlmThreadSemaphore.h" -#include "Iex.h" -#include -#include -#include - -ILMTHREAD_INTERNAL_NAMESPACE_SOURCE_ENTER - -using namespace IEX_NAMESPACE; - -namespace { - -std::string -errorString () -{ - LPSTR messageBuffer; - DWORD bufferLength; - std::string message; - - // - // Call FormatMessage() to allow for message - // text to be acquired from the system. - // - - if (bufferLength = FormatMessageA (FORMAT_MESSAGE_ALLOCATE_BUFFER | - FORMAT_MESSAGE_IGNORE_INSERTS | - FORMAT_MESSAGE_FROM_SYSTEM, - 0, - GetLastError (), - MAKELANGID (LANG_NEUTRAL, - SUBLANG_DEFAULT), - (LPSTR) &messageBuffer, - 0, - NULL)) - { - message = messageBuffer; - LocalFree (messageBuffer); - } - - return message; -} - -} // namespace - - -Semaphore::Semaphore (unsigned int value) -{ - if ((_semaphore = ::CreateSemaphore (0, value, 0x7fffffff, 0)) == 0) - { - THROW (LogicExc, "Could not create semaphore " - "(" << errorString() << ")."); - } -} - - -Semaphore::~Semaphore() -{ - bool ok = ::CloseHandle (_semaphore) != FALSE; - assert (ok); -} - - -void -Semaphore::wait() -{ - if (::WaitForSingleObject (_semaphore, INFINITE) != WAIT_OBJECT_0) - { - THROW (LogicExc, "Could not wait on semaphore " - "(" << errorString() << ")."); - } -} - - -bool -Semaphore::tryWait() -{ - return ::WaitForSingleObject (_semaphore, 0) == WAIT_OBJECT_0; -} - - -void -Semaphore::post() -{ - if (!::ReleaseSemaphore (_semaphore, 1, 0)) - { - THROW (LogicExc, "Could not post on semaphore " - "(" << errorString() << ")."); - } -} - - -int -Semaphore::value() const -{ - LONG v = -1; - - if (!::ReleaseSemaphore (_semaphore, 0, &v) || v < 0) - { - THROW (LogicExc, "Could not get value of semaphore " - "(" << errorString () << ")."); - } - - return v; -} - - -ILMTHREAD_INTERNAL_NAMESPACE_SOURCE_EXIT diff --git a/3rdparty/openexr/IlmThread/IlmThreadWin32.cpp b/3rdparty/openexr/IlmThread/IlmThreadWin32.cpp deleted file mode 100644 index 43ec23f6e6..0000000000 --- a/3rdparty/openexr/IlmThread/IlmThreadWin32.cpp +++ /dev/null @@ -1,101 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2005-2012, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - -//----------------------------------------------------------------------------- -// -// class Thread -- implementation for Windows -// -//----------------------------------------------------------------------------- - - -#include "IlmBaseConfig.h" - -#ifdef ILMBASE_FORCE_CXX03 - -#include "IlmThread.h" -#include "Iex.h" -#include -#include - -ILMTHREAD_INTERNAL_NAMESPACE_SOURCE_ENTER - - -bool -supportsThreads () -{ - return true; -} - -namespace { - -unsigned __stdcall -threadLoop (void * t) -{ - reinterpret_cast(t)->run(); - _endthreadex (0); - return 0; -} - -} // namespace - - -Thread::Thread () -{ - // empty -} - - -Thread::~Thread () -{ - DWORD status = ::WaitForSingleObject (_thread, INFINITE); - assert (status == WAIT_OBJECT_0); - bool ok = ::CloseHandle (_thread) != FALSE; - assert (ok); -} - - -void -Thread::start () -{ - unsigned id; - _thread = (HANDLE)::_beginthreadex (0, 0, &threadLoop, this, 0, &id); - - if (_thread == 0) - IEX_NAMESPACE::throwErrnoExc ("Cannot create new thread (%T)."); -} - - -ILMTHREAD_INTERNAL_NAMESPACE_SOURCE_EXIT - -#endif diff --git a/3rdparty/openexr/Imath/ImathBox.cpp b/3rdparty/openexr/Imath/ImathBox.cpp deleted file mode 100644 index 07bddfd3bd..0000000000 --- a/3rdparty/openexr/Imath/ImathBox.cpp +++ /dev/null @@ -1,37 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - -#include "ImathBox.h" - -// this file is necessary for template instantiation on windows diff --git a/3rdparty/openexr/Imath/ImathBox.h b/3rdparty/openexr/Imath/ImathBox.h deleted file mode 100644 index 45165ff761..0000000000 --- a/3rdparty/openexr/Imath/ImathBox.h +++ /dev/null @@ -1,849 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2004-2012, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - -#ifndef INCLUDED_IMATHBOX_H -#define INCLUDED_IMATHBOX_H - -//------------------------------------------------------------------- -// -// class Imath::Box -// -------------------------------- -// -// This class imposes the following requirements on its -// parameter class: -// -// 1) The class T must implement these operators: -// + - < > <= >= = -// with the signature (T,T) and the expected -// return values for a numeric type. -// -// 2) The class T must implement operator= -// with the signature (T,float and/or double) -// -// 3) The class T must have a constructor which takes -// a float (and/or double) for use in initializing the box. -// -// 4) The class T must have a function T::dimensions() -// which returns the number of dimensions in the class -// (since its assumed its a vector) -- preferably, this -// returns a constant expression. -// -//------------------------------------------------------------------- - -#include "ImathVec.h" -#include "ImathNamespace.h" - -IMATH_INTERNAL_NAMESPACE_HEADER_ENTER - - -template -class Box -{ - public: - - //------------------------- - // Data Members are public - //------------------------- - - T min; - T max; - - //----------------------------------------------------- - // Constructors - an "empty" box is created by default - //----------------------------------------------------- - - Box (); - Box (const T &point); - Box (const T &minT, const T &maxT); - - //-------------------- - // Operators: ==, != - //-------------------- - - bool operator == (const Box &src) const; - bool operator != (const Box &src) const; - - //------------------ - // Box manipulation - //------------------ - - void makeEmpty (); - void extendBy (const T &point); - void extendBy (const Box &box); - void makeInfinite (); - - //--------------------------------------------------- - // Query functions - these compute results each time - //--------------------------------------------------- - - T size () const; - T center () const; - bool intersects (const T &point) const; - bool intersects (const Box &box) const; - - unsigned int majorAxis () const; - - //---------------- - // Classification - //---------------- - - bool isEmpty () const; - bool hasVolume () const; - bool isInfinite () const; -}; - - -//-------------------- -// Convenient typedefs -//-------------------- - -typedef Box Box2s; -typedef Box Box2i; -typedef Box Box2f; -typedef Box Box2d; -typedef Box Box3s; -typedef Box Box3i; -typedef Box Box3f; -typedef Box Box3d; - - -//---------------- -// Implementation - - -template -inline Box::Box() -{ - makeEmpty(); -} - - -template -inline Box::Box (const T &point) -{ - min = point; - max = point; -} - - -template -inline Box::Box (const T &minT, const T &maxT) -{ - min = minT; - max = maxT; -} - - -template -inline bool -Box::operator == (const Box &src) const -{ - return (min == src.min && max == src.max); -} - - -template -inline bool -Box::operator != (const Box &src) const -{ - return (min != src.min || max != src.max); -} - - -template -inline void Box::makeEmpty() -{ - min = T(T::baseTypeMax()); - max = T(T::baseTypeMin()); -} - -template -inline void Box::makeInfinite() -{ - min = T(T::baseTypeMin()); - max = T(T::baseTypeMax()); -} - - -template -inline void -Box::extendBy(const T &point) -{ - for (unsigned int i = 0; i < min.dimensions(); i++) - { - if (point[i] < min[i]) - min[i] = point[i]; - - if (point[i] > max[i]) - max[i] = point[i]; - } -} - - -template -inline void -Box::extendBy(const Box &box) -{ - for (unsigned int i = 0; i < min.dimensions(); i++) - { - if (box.min[i] < min[i]) - min[i] = box.min[i]; - - if (box.max[i] > max[i]) - max[i] = box.max[i]; - } -} - - -template -inline bool -Box::intersects(const T &point) const -{ - for (unsigned int i = 0; i < min.dimensions(); i++) - { - if (point[i] < min[i] || point[i] > max[i]) - return false; - } - - return true; -} - - -template -inline bool -Box::intersects(const Box &box) const -{ - for (unsigned int i = 0; i < min.dimensions(); i++) - { - if (box.max[i] < min[i] || box.min[i] > max[i]) - return false; - } - - return true; -} - - -template -inline T -Box::size() const -{ - if (isEmpty()) - return T (0); - - return max - min; -} - - -template -inline T -Box::center() const -{ - return (max + min) / 2; -} - - -template -inline bool -Box::isEmpty() const -{ - for (unsigned int i = 0; i < min.dimensions(); i++) - { - if (max[i] < min[i]) - return true; - } - - return false; -} - -template -inline bool -Box::isInfinite() const -{ - for (unsigned int i = 0; i < min.dimensions(); i++) - { - if (min[i] != T::baseTypeMin() || max[i] != T::baseTypeMax()) - return false; - } - - return true; -} - - -template -inline bool -Box::hasVolume() const -{ - for (unsigned int i = 0; i < min.dimensions(); i++) - { - if (max[i] <= min[i]) - return false; - } - - return true; -} - - -template -inline unsigned int -Box::majorAxis() const -{ - unsigned int major = 0; - T s = size(); - - for (unsigned int i = 1; i < min.dimensions(); i++) - { - if (s[i] > s[major]) - major = i; - } - - return major; -} - -//------------------------------------------------------------------- -// -// Partial class specializations for Imath::Vec2 and Imath::Vec3 -// -//------------------------------------------------------------------- - -template class Box; - -template -class Box > -{ - public: - - //------------------------- - // Data Members are public - //------------------------- - - Vec2 min; - Vec2 max; - - //----------------------------------------------------- - // Constructors - an "empty" box is created by default - //----------------------------------------------------- - - Box(); - Box (const Vec2 &point); - Box (const Vec2 &minT, const Vec2 &maxT); - - //-------------------- - // Operators: ==, != - //-------------------- - - bool operator == (const Box > &src) const; - bool operator != (const Box > &src) const; - - //------------------ - // Box manipulation - //------------------ - - void makeEmpty(); - void extendBy (const Vec2 &point); - void extendBy (const Box > &box); - void makeInfinite(); - - //--------------------------------------------------- - // Query functions - these compute results each time - //--------------------------------------------------- - - Vec2 size() const; - Vec2 center() const; - bool intersects (const Vec2 &point) const; - bool intersects (const Box > &box) const; - - unsigned int majorAxis() const; - - //---------------- - // Classification - //---------------- - - bool isEmpty() const; - bool hasVolume() const; - bool isInfinite() const; -}; - - -//---------------- -// Implementation - -template -inline Box >::Box() -{ - makeEmpty(); -} - - -template -inline Box >::Box (const Vec2 &point) -{ - min = point; - max = point; -} - - -template -inline Box >::Box (const Vec2 &minT, const Vec2 &maxT) -{ - min = minT; - max = maxT; -} - - -template -inline bool -Box >::operator == (const Box > &src) const -{ - return (min == src.min && max == src.max); -} - - -template -inline bool -Box >::operator != (const Box > &src) const -{ - return (min != src.min || max != src.max); -} - - -template -inline void Box >::makeEmpty() -{ - min = Vec2(Vec2::baseTypeMax()); - max = Vec2(Vec2::baseTypeMin()); -} - -template -inline void Box >::makeInfinite() -{ - min = Vec2(Vec2::baseTypeMin()); - max = Vec2(Vec2::baseTypeMax()); -} - - -template -inline void -Box >::extendBy (const Vec2 &point) -{ - if (point[0] < min[0]) - min[0] = point[0]; - - if (point[0] > max[0]) - max[0] = point[0]; - - if (point[1] < min[1]) - min[1] = point[1]; - - if (point[1] > max[1]) - max[1] = point[1]; -} - - -template -inline void -Box >::extendBy (const Box > &box) -{ - if (box.min[0] < min[0]) - min[0] = box.min[0]; - - if (box.max[0] > max[0]) - max[0] = box.max[0]; - - if (box.min[1] < min[1]) - min[1] = box.min[1]; - - if (box.max[1] > max[1]) - max[1] = box.max[1]; -} - - -template -inline bool -Box >::intersects (const Vec2 &point) const -{ - if (point[0] < min[0] || point[0] > max[0] || - point[1] < min[1] || point[1] > max[1]) - return false; - - return true; -} - - -template -inline bool -Box >::intersects (const Box > &box) const -{ - if (box.max[0] < min[0] || box.min[0] > max[0] || - box.max[1] < min[1] || box.min[1] > max[1]) - return false; - - return true; -} - - -template -inline Vec2 -Box >::size() const -{ - if (isEmpty()) - return Vec2 (0); - - return max - min; -} - - -template -inline Vec2 -Box >::center() const -{ - return (max + min) / 2; -} - - -template -inline bool -Box >::isEmpty() const -{ - if (max[0] < min[0] || - max[1] < min[1]) - return true; - - return false; -} - -template -inline bool -Box > ::isInfinite() const -{ - if (min[0] != limits::min() || max[0] != limits::max() || - min[1] != limits::min() || max[1] != limits::max()) - return false; - - return true; -} - - -template -inline bool -Box >::hasVolume() const -{ - if (max[0] <= min[0] || - max[1] <= min[1]) - return false; - - return true; -} - - -template -inline unsigned int -Box >::majorAxis() const -{ - unsigned int major = 0; - Vec2 s = size(); - - if (s[1] > s[major]) - major = 1; - - return major; -} - - -template -class Box > -{ - public: - - //------------------------- - // Data Members are public - //------------------------- - - Vec3 min; - Vec3 max; - - //----------------------------------------------------- - // Constructors - an "empty" box is created by default - //----------------------------------------------------- - - Box(); - Box (const Vec3 &point); - Box (const Vec3 &minT, const Vec3 &maxT); - - //-------------------- - // Operators: ==, != - //-------------------- - - bool operator == (const Box > &src) const; - bool operator != (const Box > &src) const; - - //------------------ - // Box manipulation - //------------------ - - void makeEmpty(); - void extendBy (const Vec3 &point); - void extendBy (const Box > &box); - void makeInfinite (); - - //--------------------------------------------------- - // Query functions - these compute results each time - //--------------------------------------------------- - - Vec3 size() const; - Vec3 center() const; - bool intersects (const Vec3 &point) const; - bool intersects (const Box > &box) const; - - unsigned int majorAxis() const; - - //---------------- - // Classification - //---------------- - - bool isEmpty() const; - bool hasVolume() const; - bool isInfinite() const; -}; - - -//---------------- -// Implementation - - -template -inline Box >::Box() -{ - makeEmpty(); -} - - -template -inline Box >::Box (const Vec3 &point) -{ - min = point; - max = point; -} - - -template -inline Box >::Box (const Vec3 &minT, const Vec3 &maxT) -{ - min = minT; - max = maxT; -} - - -template -inline bool -Box >::operator == (const Box > &src) const -{ - return (min == src.min && max == src.max); -} - - -template -inline bool -Box >::operator != (const Box > &src) const -{ - return (min != src.min || max != src.max); -} - - -template -inline void Box >::makeEmpty() -{ - min = Vec3(Vec3::baseTypeMax()); - max = Vec3(Vec3::baseTypeMin()); -} - -template -inline void Box >::makeInfinite() -{ - min = Vec3(Vec3::baseTypeMin()); - max = Vec3(Vec3::baseTypeMax()); -} - - -template -inline void -Box >::extendBy (const Vec3 &point) -{ - if (point[0] < min[0]) - min[0] = point[0]; - - if (point[0] > max[0]) - max[0] = point[0]; - - if (point[1] < min[1]) - min[1] = point[1]; - - if (point[1] > max[1]) - max[1] = point[1]; - - if (point[2] < min[2]) - min[2] = point[2]; - - if (point[2] > max[2]) - max[2] = point[2]; -} - - -template -inline void -Box >::extendBy (const Box > &box) -{ - if (box.min[0] < min[0]) - min[0] = box.min[0]; - - if (box.max[0] > max[0]) - max[0] = box.max[0]; - - if (box.min[1] < min[1]) - min[1] = box.min[1]; - - if (box.max[1] > max[1]) - max[1] = box.max[1]; - - if (box.min[2] < min[2]) - min[2] = box.min[2]; - - if (box.max[2] > max[2]) - max[2] = box.max[2]; -} - - -template -inline bool -Box >::intersects (const Vec3 &point) const -{ - if (point[0] < min[0] || point[0] > max[0] || - point[1] < min[1] || point[1] > max[1] || - point[2] < min[2] || point[2] > max[2]) - return false; - - return true; -} - - -template -inline bool -Box >::intersects (const Box > &box) const -{ - if (box.max[0] < min[0] || box.min[0] > max[0] || - box.max[1] < min[1] || box.min[1] > max[1] || - box.max[2] < min[2] || box.min[2] > max[2]) - return false; - - return true; -} - - -template -inline Vec3 -Box >::size() const -{ - if (isEmpty()) - return Vec3 (0); - - return max - min; -} - - -template -inline Vec3 -Box >::center() const -{ - return (max + min) / 2; -} - - -template -inline bool -Box >::isEmpty() const -{ - if (max[0] < min[0] || - max[1] < min[1] || - max[2] < min[2]) - return true; - - return false; -} - -template -inline bool -Box >::isInfinite() const -{ - if (min[0] != limits::min() || max[0] != limits::max() || - min[1] != limits::min() || max[1] != limits::max() || - min[2] != limits::min() || max[2] != limits::max()) - return false; - - return true; -} - - -template -inline bool -Box >::hasVolume() const -{ - if (max[0] <= min[0] || - max[1] <= min[1] || - max[2] <= min[2]) - return false; - - return true; -} - - -template -inline unsigned int -Box >::majorAxis() const -{ - unsigned int major = 0; - Vec3 s = size(); - - if (s[1] > s[major]) - major = 1; - - if (s[2] > s[major]) - major = 2; - - return major; -} - - -IMATH_INTERNAL_NAMESPACE_HEADER_EXIT - -#endif // INCLUDED_IMATHBOX_H diff --git a/3rdparty/openexr/Imath/ImathBoxAlgo.h b/3rdparty/openexr/Imath/ImathBoxAlgo.h deleted file mode 100644 index 63bd2f635b..0000000000 --- a/3rdparty/openexr/Imath/ImathBoxAlgo.h +++ /dev/null @@ -1,1016 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2002-2012, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - - -#ifndef INCLUDED_IMATHBOXALGO_H -#define INCLUDED_IMATHBOXALGO_H - - -//--------------------------------------------------------------------------- -// -// This file contains algorithms applied to or in conjunction -// with bounding boxes (Imath::Box). These algorithms require -// more headers to compile. The assumption made is that these -// functions are called much less often than the basic box -// functions or these functions require more support classes. -// -// Contains: -// -// T clip(const T& in, const Box& box) -// -// Vec3 closestPointOnBox(const Vec3&, const Box>& ) -// -// Vec3 closestPointInBox(const Vec3&, const Box>& ) -// -// Box< Vec3 > transform(const Box>&, const Matrix44&) -// Box< Vec3 > affineTransform(const Box>&, const Matrix44&) -// -// void transform(const Box>&, const Matrix44&, Box>&) -// void affineTransform(const Box>&, -// const Matrix44&, -// Box>&) -// -// bool findEntryAndExitPoints(const Line &line, -// const Box< Vec3 > &box, -// Vec3 &enterPoint, -// Vec3 &exitPoint) -// -// bool intersects(const Box> &box, -// const Line3 &ray, -// Vec3 intersectionPoint) -// -// bool intersects(const Box> &box, const Line3 &ray) -// -//--------------------------------------------------------------------------- - -#include "ImathBox.h" -#include "ImathMatrix.h" -#include "ImathLineAlgo.h" -#include "ImathPlane.h" -#include "ImathNamespace.h" - -IMATH_INTERNAL_NAMESPACE_HEADER_ENTER - - -template -inline T -clip (const T &p, const Box &box) -{ - // - // Clip the coordinates of a point, p, against a box. - // The result, q, is the closest point to p that is inside the box. - // - - T q; - - for (int i = 0; i < int (box.min.dimensions()); i++) - { - if (p[i] < box.min[i]) - q[i] = box.min[i]; - else if (p[i] > box.max[i]) - q[i] = box.max[i]; - else - q[i] = p[i]; - } - - return q; -} - - -template -inline T -closestPointInBox (const T &p, const Box &box) -{ - return clip (p, box); -} - - -template -Vec3 -closestPointOnBox (const Vec3 &p, const Box< Vec3 > &box) -{ - // - // Find the point, q, on the surface of - // the box, that is closest to point p. - // - // If the box is empty, return p. - // - - if (box.isEmpty()) - return p; - - Vec3 q = closestPointInBox (p, box); - - if (q == p) - { - Vec3 d1 = p - box.min; - Vec3 d2 = box.max - p; - - Vec3 d ((d1.x < d2.x)? d1.x: d2.x, - (d1.y < d2.y)? d1.y: d2.y, - (d1.z < d2.z)? d1.z: d2.z); - - if (d.x < d.y && d.x < d.z) - { - q.x = (d1.x < d2.x)? box.min.x: box.max.x; - } - else if (d.y < d.z) - { - q.y = (d1.y < d2.y)? box.min.y: box.max.y; - } - else - { - q.z = (d1.z < d2.z)? box.min.z: box.max.z; - } - } - - return q; -} - - -template -Box< Vec3 > -transform (const Box< Vec3 > &box, const Matrix44 &m) -{ - // - // Transform a 3D box by a matrix, and compute a new box that - // tightly encloses the transformed box. - // - // If m is an affine transform, then we use James Arvo's fast - // method as described in "Graphics Gems", Academic Press, 1990, - // pp. 548-550. - // - - // - // A transformed empty box is still empty, and a transformed infinite box - // is still infinite - // - - if (box.isEmpty() || box.isInfinite()) - return box; - - // - // If the last column of m is (0 0 0 1) then m is an affine - // transform, and we use the fast Graphics Gems trick. - // - - if (m[0][3] == 0 && m[1][3] == 0 && m[2][3] == 0 && m[3][3] == 1) - { - Box< Vec3 > newBox; - - for (int i = 0; i < 3; i++) - { - newBox.min[i] = newBox.max[i] = (S) m[3][i]; - - for (int j = 0; j < 3; j++) - { - S a, b; - - a = (S) m[j][i] * box.min[j]; - b = (S) m[j][i] * box.max[j]; - - if (a < b) - { - newBox.min[i] += a; - newBox.max[i] += b; - } - else - { - newBox.min[i] += b; - newBox.max[i] += a; - } - } - } - - return newBox; - } - - // - // M is a projection matrix. Do things the naive way: - // Transform the eight corners of the box, and find an - // axis-parallel box that encloses the transformed corners. - // - - Vec3 points[8]; - - points[0][0] = points[1][0] = points[2][0] = points[3][0] = box.min[0]; - points[4][0] = points[5][0] = points[6][0] = points[7][0] = box.max[0]; - - points[0][1] = points[1][1] = points[4][1] = points[5][1] = box.min[1]; - points[2][1] = points[3][1] = points[6][1] = points[7][1] = box.max[1]; - - points[0][2] = points[2][2] = points[4][2] = points[6][2] = box.min[2]; - points[1][2] = points[3][2] = points[5][2] = points[7][2] = box.max[2]; - - Box< Vec3 > newBox; - - for (int i = 0; i < 8; i++) - newBox.extendBy (points[i] * m); - - return newBox; -} - -template -void -transform (const Box< Vec3 > &box, - const Matrix44 &m, - Box< Vec3 > &result) -{ - // - // Transform a 3D box by a matrix, and compute a new box that - // tightly encloses the transformed box. - // - // If m is an affine transform, then we use James Arvo's fast - // method as described in "Graphics Gems", Academic Press, 1990, - // pp. 548-550. - // - - // - // A transformed empty box is still empty, and a transformed infinite - // box is still infinite - // - - if (box.isEmpty() || box.isInfinite()) - { - return; - } - - // - // If the last column of m is (0 0 0 1) then m is an affine - // transform, and we use the fast Graphics Gems trick. - // - - if (m[0][3] == 0 && m[1][3] == 0 && m[2][3] == 0 && m[3][3] == 1) - { - for (int i = 0; i < 3; i++) - { - result.min[i] = result.max[i] = (S) m[3][i]; - - for (int j = 0; j < 3; j++) - { - S a, b; - - a = (S) m[j][i] * box.min[j]; - b = (S) m[j][i] * box.max[j]; - - if (a < b) - { - result.min[i] += a; - result.max[i] += b; - } - else - { - result.min[i] += b; - result.max[i] += a; - } - } - } - - return; - } - - // - // M is a projection matrix. Do things the naive way: - // Transform the eight corners of the box, and find an - // axis-parallel box that encloses the transformed corners. - // - - Vec3 points[8]; - - points[0][0] = points[1][0] = points[2][0] = points[3][0] = box.min[0]; - points[4][0] = points[5][0] = points[6][0] = points[7][0] = box.max[0]; - - points[0][1] = points[1][1] = points[4][1] = points[5][1] = box.min[1]; - points[2][1] = points[3][1] = points[6][1] = points[7][1] = box.max[1]; - - points[0][2] = points[2][2] = points[4][2] = points[6][2] = box.min[2]; - points[1][2] = points[3][2] = points[5][2] = points[7][2] = box.max[2]; - - for (int i = 0; i < 8; i++) - result.extendBy (points[i] * m); -} - - -template -Box< Vec3 > -affineTransform (const Box< Vec3 > &box, const Matrix44 &m) -{ - // - // Transform a 3D box by a matrix whose rightmost column - // is (0 0 0 1), and compute a new box that tightly encloses - // the transformed box. - // - // As in the transform() function, above, we use James Arvo's - // fast method. - // - - if (box.isEmpty() || box.isInfinite()) - { - // - // A transformed empty or infinite box is still empty or infinite - // - - return box; - } - - Box< Vec3 > newBox; - - for (int i = 0; i < 3; i++) - { - newBox.min[i] = newBox.max[i] = (S) m[3][i]; - - for (int j = 0; j < 3; j++) - { - S a, b; - - a = (S) m[j][i] * box.min[j]; - b = (S) m[j][i] * box.max[j]; - - if (a < b) - { - newBox.min[i] += a; - newBox.max[i] += b; - } - else - { - newBox.min[i] += b; - newBox.max[i] += a; - } - } - } - - return newBox; -} - -template -void -affineTransform (const Box< Vec3 > &box, - const Matrix44 &m, - Box > &result) -{ - // - // Transform a 3D box by a matrix whose rightmost column - // is (0 0 0 1), and compute a new box that tightly encloses - // the transformed box. - // - // As in the transform() function, above, we use James Arvo's - // fast method. - // - - if (box.isEmpty()) - { - // - // A transformed empty box is still empty - // - result.makeEmpty(); - return; - } - - if (box.isInfinite()) - { - // - // A transformed infinite box is still infinite - // - result.makeInfinite(); - return; - } - - for (int i = 0; i < 3; i++) - { - result.min[i] = result.max[i] = (S) m[3][i]; - - for (int j = 0; j < 3; j++) - { - S a, b; - - a = (S) m[j][i] * box.min[j]; - b = (S) m[j][i] * box.max[j]; - - if (a < b) - { - result.min[i] += a; - result.max[i] += b; - } - else - { - result.min[i] += b; - result.max[i] += a; - } - } - } -} - - -template -bool -findEntryAndExitPoints (const Line3 &r, - const Box > &b, - Vec3 &entry, - Vec3 &exit) -{ - // - // Compute the points where a ray, r, enters and exits a box, b: - // - // findEntryAndExitPoints() returns - // - // - true if the ray starts inside the box or if the - // ray starts outside and intersects the box - // - // - false otherwise (that is, if the ray does not - // intersect the box) - // - // The entry and exit points are - // - // - points on two of the faces of the box when - // findEntryAndExitPoints() returns true - // (The entry end exit points may be on either - // side of the ray's origin) - // - // - undefined when findEntryAndExitPoints() - // returns false - // - - if (b.isEmpty()) - { - // - // No ray intersects an empty box - // - - return false; - } - - // - // The following description assumes that the ray's origin is outside - // the box, but the code below works even if the origin is inside the - // box: - // - // Between one and three "frontfacing" sides of the box are oriented - // towards the ray's origin, and between one and three "backfacing" - // sides are oriented away from the ray's origin. - // We intersect the ray with the planes that contain the sides of the - // box, and compare the distances between the ray's origin and the - // ray-plane intersections. The ray intersects the box if the most - // distant frontfacing intersection is nearer than the nearest - // backfacing intersection. If the ray does intersect the box, then - // the most distant frontfacing ray-plane intersection is the entry - // point and the nearest backfacing ray-plane intersection is the - // exit point. - // - - const T TMAX = limits::max(); - - T tFrontMax = -TMAX; - T tBackMin = TMAX; - - // - // Minimum and maximum X sides. - // - - if (r.dir.x >= 0) - { - T d1 = b.max.x - r.pos.x; - T d2 = b.min.x - r.pos.x; - - if (r.dir.x > 1 || - (abs (d1) < TMAX * r.dir.x && - abs (d2) < TMAX * r.dir.x)) - { - T t1 = d1 / r.dir.x; - T t2 = d2 / r.dir.x; - - if (tBackMin > t1) - { - tBackMin = t1; - - exit.x = b.max.x; - exit.y = clamp (r.pos.y + t1 * r.dir.y, b.min.y, b.max.y); - exit.z = clamp (r.pos.z + t1 * r.dir.z, b.min.z, b.max.z); - } - - if (tFrontMax < t2) - { - tFrontMax = t2; - - entry.x = b.min.x; - entry.y = clamp (r.pos.y + t2 * r.dir.y, b.min.y, b.max.y); - entry.z = clamp (r.pos.z + t2 * r.dir.z, b.min.z, b.max.z); - } - } - else if (r.pos.x < b.min.x || r.pos.x > b.max.x) - { - return false; - } - } - else // r.dir.x < 0 - { - T d1 = b.min.x - r.pos.x; - T d2 = b.max.x - r.pos.x; - - if (r.dir.x < -1 || - (abs (d1) < -TMAX * r.dir.x && - abs (d2) < -TMAX * r.dir.x)) - { - T t1 = d1 / r.dir.x; - T t2 = d2 / r.dir.x; - - if (tBackMin > t1) - { - tBackMin = t1; - - exit.x = b.min.x; - exit.y = clamp (r.pos.y + t1 * r.dir.y, b.min.y, b.max.y); - exit.z = clamp (r.pos.z + t1 * r.dir.z, b.min.z, b.max.z); - } - - if (tFrontMax < t2) - { - tFrontMax = t2; - - entry.x = b.max.x; - entry.y = clamp (r.pos.y + t2 * r.dir.y, b.min.y, b.max.y); - entry.z = clamp (r.pos.z + t2 * r.dir.z, b.min.z, b.max.z); - } - } - else if (r.pos.x < b.min.x || r.pos.x > b.max.x) - { - return false; - } - } - - // - // Minimum and maximum Y sides. - // - - if (r.dir.y >= 0) - { - T d1 = b.max.y - r.pos.y; - T d2 = b.min.y - r.pos.y; - - if (r.dir.y > 1 || - (abs (d1) < TMAX * r.dir.y && - abs (d2) < TMAX * r.dir.y)) - { - T t1 = d1 / r.dir.y; - T t2 = d2 / r.dir.y; - - if (tBackMin > t1) - { - tBackMin = t1; - - exit.x = clamp (r.pos.x + t1 * r.dir.x, b.min.x, b.max.x); - exit.y = b.max.y; - exit.z = clamp (r.pos.z + t1 * r.dir.z, b.min.z, b.max.z); - } - - if (tFrontMax < t2) - { - tFrontMax = t2; - - entry.x = clamp (r.pos.x + t2 * r.dir.x, b.min.x, b.max.x); - entry.y = b.min.y; - entry.z = clamp (r.pos.z + t2 * r.dir.z, b.min.z, b.max.z); - } - } - else if (r.pos.y < b.min.y || r.pos.y > b.max.y) - { - return false; - } - } - else // r.dir.y < 0 - { - T d1 = b.min.y - r.pos.y; - T d2 = b.max.y - r.pos.y; - - if (r.dir.y < -1 || - (abs (d1) < -TMAX * r.dir.y && - abs (d2) < -TMAX * r.dir.y)) - { - T t1 = d1 / r.dir.y; - T t2 = d2 / r.dir.y; - - if (tBackMin > t1) - { - tBackMin = t1; - - exit.x = clamp (r.pos.x + t1 * r.dir.x, b.min.x, b.max.x); - exit.y = b.min.y; - exit.z = clamp (r.pos.z + t1 * r.dir.z, b.min.z, b.max.z); - } - - if (tFrontMax < t2) - { - tFrontMax = t2; - - entry.x = clamp (r.pos.x + t2 * r.dir.x, b.min.x, b.max.x); - entry.y = b.max.y; - entry.z = clamp (r.pos.z + t2 * r.dir.z, b.min.z, b.max.z); - } - } - else if (r.pos.y < b.min.y || r.pos.y > b.max.y) - { - return false; - } - } - - // - // Minimum and maximum Z sides. - // - - if (r.dir.z >= 0) - { - T d1 = b.max.z - r.pos.z; - T d2 = b.min.z - r.pos.z; - - if (r.dir.z > 1 || - (abs (d1) < TMAX * r.dir.z && - abs (d2) < TMAX * r.dir.z)) - { - T t1 = d1 / r.dir.z; - T t2 = d2 / r.dir.z; - - if (tBackMin > t1) - { - tBackMin = t1; - - exit.x = clamp (r.pos.x + t1 * r.dir.x, b.min.x, b.max.x); - exit.y = clamp (r.pos.y + t1 * r.dir.y, b.min.y, b.max.y); - exit.z = b.max.z; - } - - if (tFrontMax < t2) - { - tFrontMax = t2; - - entry.x = clamp (r.pos.x + t2 * r.dir.x, b.min.x, b.max.x); - entry.y = clamp (r.pos.y + t2 * r.dir.y, b.min.y, b.max.y); - entry.z = b.min.z; - } - } - else if (r.pos.z < b.min.z || r.pos.z > b.max.z) - { - return false; - } - } - else // r.dir.z < 0 - { - T d1 = b.min.z - r.pos.z; - T d2 = b.max.z - r.pos.z; - - if (r.dir.z < -1 || - (abs (d1) < -TMAX * r.dir.z && - abs (d2) < -TMAX * r.dir.z)) - { - T t1 = d1 / r.dir.z; - T t2 = d2 / r.dir.z; - - if (tBackMin > t1) - { - tBackMin = t1; - - exit.x = clamp (r.pos.x + t1 * r.dir.x, b.min.x, b.max.x); - exit.y = clamp (r.pos.y + t1 * r.dir.y, b.min.y, b.max.y); - exit.z = b.min.z; - } - - if (tFrontMax < t2) - { - tFrontMax = t2; - - entry.x = clamp (r.pos.x + t2 * r.dir.x, b.min.x, b.max.x); - entry.y = clamp (r.pos.y + t2 * r.dir.y, b.min.y, b.max.y); - entry.z = b.max.z; - } - } - else if (r.pos.z < b.min.z || r.pos.z > b.max.z) - { - return false; - } - } - - return tFrontMax <= tBackMin; -} - - -template -bool -intersects (const Box< Vec3 > &b, const Line3 &r, Vec3 &ip) -{ - // - // Intersect a ray, r, with a box, b, and compute the intersection - // point, ip: - // - // intersect() returns - // - // - true if the ray starts inside the box or if the - // ray starts outside and intersects the box - // - // - false if the ray starts outside the box and intersects it, - // but the intersection is behind the ray's origin. - // - // - false if the ray starts outside and does not intersect it - // - // The intersection point is - // - // - the ray's origin if the ray starts inside the box - // - // - a point on one of the faces of the box if the ray - // starts outside the box - // - // - undefined when intersect() returns false - // - - if (b.isEmpty()) - { - // - // No ray intersects an empty box - // - - return false; - } - - if (b.intersects (r.pos)) - { - // - // The ray starts inside the box - // - - ip = r.pos; - return true; - } - - // - // The ray starts outside the box. Between one and three "frontfacing" - // sides of the box are oriented towards the ray, and between one and - // three "backfacing" sides are oriented away from the ray. - // We intersect the ray with the planes that contain the sides of the - // box, and compare the distances between ray's origin and the ray-plane - // intersections. - // The ray intersects the box if the most distant frontfacing intersection - // is nearer than the nearest backfacing intersection. If the ray does - // intersect the box, then the most distant frontfacing ray-plane - // intersection is the ray-box intersection. - // - - const T TMAX = limits::max(); - - T tFrontMax = -1; - T tBackMin = TMAX; - - // - // Minimum and maximum X sides. - // - - if (r.dir.x > 0) - { - if (r.pos.x > b.max.x) - return false; - - T d = b.max.x - r.pos.x; - - if (r.dir.x > 1 || d < TMAX * r.dir.x) - { - T t = d / r.dir.x; - - if (tBackMin > t) - tBackMin = t; - } - - if (r.pos.x <= b.min.x) - { - T d = b.min.x - r.pos.x; - T t = (r.dir.x > 1 || d < TMAX * r.dir.x)? d / r.dir.x: TMAX; - - if (tFrontMax < t) - { - tFrontMax = t; - - ip.x = b.min.x; - ip.y = clamp (r.pos.y + t * r.dir.y, b.min.y, b.max.y); - ip.z = clamp (r.pos.z + t * r.dir.z, b.min.z, b.max.z); - } - } - } - else if (r.dir.x < 0) - { - if (r.pos.x < b.min.x) - return false; - - T d = b.min.x - r.pos.x; - - if (r.dir.x < -1 || d > TMAX * r.dir.x) - { - T t = d / r.dir.x; - - if (tBackMin > t) - tBackMin = t; - } - - if (r.pos.x >= b.max.x) - { - T d = b.max.x - r.pos.x; - T t = (r.dir.x < -1 || d > TMAX * r.dir.x)? d / r.dir.x: TMAX; - - if (tFrontMax < t) - { - tFrontMax = t; - - ip.x = b.max.x; - ip.y = clamp (r.pos.y + t * r.dir.y, b.min.y, b.max.y); - ip.z = clamp (r.pos.z + t * r.dir.z, b.min.z, b.max.z); - } - } - } - else // r.dir.x == 0 - { - if (r.pos.x < b.min.x || r.pos.x > b.max.x) - return false; - } - - // - // Minimum and maximum Y sides. - // - - if (r.dir.y > 0) - { - if (r.pos.y > b.max.y) - return false; - - T d = b.max.y - r.pos.y; - - if (r.dir.y > 1 || d < TMAX * r.dir.y) - { - T t = d / r.dir.y; - - if (tBackMin > t) - tBackMin = t; - } - - if (r.pos.y <= b.min.y) - { - T d = b.min.y - r.pos.y; - T t = (r.dir.y > 1 || d < TMAX * r.dir.y)? d / r.dir.y: TMAX; - - if (tFrontMax < t) - { - tFrontMax = t; - - ip.x = clamp (r.pos.x + t * r.dir.x, b.min.x, b.max.x); - ip.y = b.min.y; - ip.z = clamp (r.pos.z + t * r.dir.z, b.min.z, b.max.z); - } - } - } - else if (r.dir.y < 0) - { - if (r.pos.y < b.min.y) - return false; - - T d = b.min.y - r.pos.y; - - if (r.dir.y < -1 || d > TMAX * r.dir.y) - { - T t = d / r.dir.y; - - if (tBackMin > t) - tBackMin = t; - } - - if (r.pos.y >= b.max.y) - { - T d = b.max.y - r.pos.y; - T t = (r.dir.y < -1 || d > TMAX * r.dir.y)? d / r.dir.y: TMAX; - - if (tFrontMax < t) - { - tFrontMax = t; - - ip.x = clamp (r.pos.x + t * r.dir.x, b.min.x, b.max.x); - ip.y = b.max.y; - ip.z = clamp (r.pos.z + t * r.dir.z, b.min.z, b.max.z); - } - } - } - else // r.dir.y == 0 - { - if (r.pos.y < b.min.y || r.pos.y > b.max.y) - return false; - } - - // - // Minimum and maximum Z sides. - // - - if (r.dir.z > 0) - { - if (r.pos.z > b.max.z) - return false; - - T d = b.max.z - r.pos.z; - - if (r.dir.z > 1 || d < TMAX * r.dir.z) - { - T t = d / r.dir.z; - - if (tBackMin > t) - tBackMin = t; - } - - if (r.pos.z <= b.min.z) - { - T d = b.min.z - r.pos.z; - T t = (r.dir.z > 1 || d < TMAX * r.dir.z)? d / r.dir.z: TMAX; - - if (tFrontMax < t) - { - tFrontMax = t; - - ip.x = clamp (r.pos.x + t * r.dir.x, b.min.x, b.max.x); - ip.y = clamp (r.pos.y + t * r.dir.y, b.min.y, b.max.y); - ip.z = b.min.z; - } - } - } - else if (r.dir.z < 0) - { - if (r.pos.z < b.min.z) - return false; - - T d = b.min.z - r.pos.z; - - if (r.dir.z < -1 || d > TMAX * r.dir.z) - { - T t = d / r.dir.z; - - if (tBackMin > t) - tBackMin = t; - } - - if (r.pos.z >= b.max.z) - { - T d = b.max.z - r.pos.z; - T t = (r.dir.z < -1 || d > TMAX * r.dir.z)? d / r.dir.z: TMAX; - - if (tFrontMax < t) - { - tFrontMax = t; - - ip.x = clamp (r.pos.x + t * r.dir.x, b.min.x, b.max.x); - ip.y = clamp (r.pos.y + t * r.dir.y, b.min.y, b.max.y); - ip.z = b.max.z; - } - } - } - else // r.dir.z == 0 - { - if (r.pos.z < b.min.z || r.pos.z > b.max.z) - return false; - } - - return tFrontMax <= tBackMin; -} - - -template -bool -intersects (const Box< Vec3 > &box, const Line3 &ray) -{ - Vec3 ignored; - return intersects (box, ray, ignored); -} - - -IMATH_INTERNAL_NAMESPACE_HEADER_EXIT - -#endif // INCLUDED_IMATHBOXALGO_H diff --git a/3rdparty/openexr/Imath/ImathColor.h b/3rdparty/openexr/Imath/ImathColor.h deleted file mode 100644 index 743c72d143..0000000000 --- a/3rdparty/openexr/Imath/ImathColor.h +++ /dev/null @@ -1,736 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2004-2012, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - - -#ifndef INCLUDED_IMATHCOLOR_H -#define INCLUDED_IMATHCOLOR_H - -//---------------------------------------------------- -// -// A three and four component color class template. -// -//---------------------------------------------------- - -#include "ImathVec.h" -#include "ImathNamespace.h" -#include "half.h" - -IMATH_INTERNAL_NAMESPACE_HEADER_ENTER - - -template -class Color3: public Vec3 -{ - public: - - //------------- - // Constructors - //------------- - - Color3 (); // no initialization - explicit Color3 (T a); // (a a a) - Color3 (T a, T b, T c); // (a b c) - - - //--------------------------------- - // Copy constructors and assignment - //--------------------------------- - - Color3 (const Color3 &c); - template Color3 (const Vec3 &v); - - const Color3 & operator = (const Color3 &c); - - - //------------------------ - // Component-wise addition - //------------------------ - - const Color3 & operator += (const Color3 &c); - Color3 operator + (const Color3 &c) const; - - - //--------------------------- - // Component-wise subtraction - //--------------------------- - - const Color3 & operator -= (const Color3 &c); - Color3 operator - (const Color3 &c) const; - - - //------------------------------------ - // Component-wise multiplication by -1 - //------------------------------------ - - Color3 operator - () const; - const Color3 & negate (); - - - //------------------------------ - // Component-wise multiplication - //------------------------------ - - const Color3 & operator *= (const Color3 &c); - const Color3 & operator *= (T a); - Color3 operator * (const Color3 &c) const; - Color3 operator * (T a) const; - - - //------------------------ - // Component-wise division - //------------------------ - - const Color3 & operator /= (const Color3 &c); - const Color3 & operator /= (T a); - Color3 operator / (const Color3 &c) const; - Color3 operator / (T a) const; -}; - -template class Color4 -{ - public: - - //------------------- - // Access to elements - //------------------- - - T r, g, b, a; - - T & operator [] (int i); - const T & operator [] (int i) const; - - - //------------- - // Constructors - //------------- - - Color4 (); // no initialization - explicit Color4 (T a); // (a a a a) - Color4 (T a, T b, T c, T d); // (a b c d) - - - //--------------------------------- - // Copy constructors and assignment - //--------------------------------- - - Color4 (const Color4 &v); - template Color4 (const Color4 &v); - - const Color4 & operator = (const Color4 &v); - - - //---------------------- - // Compatibility with Sb - //---------------------- - - template - void setValue (S a, S b, S c, S d); - - template - void setValue (const Color4 &v); - - template - void getValue (S &a, S &b, S &c, S &d) const; - - template - void getValue (Color4 &v) const; - - T * getValue(); - const T * getValue() const; - - - //--------- - // Equality - //--------- - - template - bool operator == (const Color4 &v) const; - - template - bool operator != (const Color4 &v) const; - - - //------------------------ - // Component-wise addition - //------------------------ - - const Color4 & operator += (const Color4 &v); - Color4 operator + (const Color4 &v) const; - - - //--------------------------- - // Component-wise subtraction - //--------------------------- - - const Color4 & operator -= (const Color4 &v); - Color4 operator - (const Color4 &v) const; - - - //------------------------------------ - // Component-wise multiplication by -1 - //------------------------------------ - - Color4 operator - () const; - const Color4 & negate (); - - - //------------------------------ - // Component-wise multiplication - //------------------------------ - - const Color4 & operator *= (const Color4 &v); - const Color4 & operator *= (T a); - Color4 operator * (const Color4 &v) const; - Color4 operator * (T a) const; - - - //------------------------ - // Component-wise division - //------------------------ - - const Color4 & operator /= (const Color4 &v); - const Color4 & operator /= (T a); - Color4 operator / (const Color4 &v) const; - Color4 operator / (T a) const; - - - //---------------------------------------------------------- - // Number of dimensions, i.e. number of elements in a Color4 - //---------------------------------------------------------- - - static unsigned int dimensions() {return 4;} - - - //------------------------------------------------- - // Limitations of type T (see also class limits) - //------------------------------------------------- - - static T baseTypeMin() {return limits::min();} - static T baseTypeMax() {return limits::max();} - static T baseTypeSmallest() {return limits::smallest();} - static T baseTypeEpsilon() {return limits::epsilon();} - - - //-------------------------------------------------------------- - // Base type -- in templates, which accept a parameter, V, which - // could be a Color4, you can refer to T as - // V::BaseType - //-------------------------------------------------------------- - - typedef T BaseType; -}; - -//-------------- -// Stream output -//-------------- - -template -std::ostream & operator << (std::ostream &s, const Color4 &v); - -//---------------------------------------------------- -// Reverse multiplication: S * Color4 -//---------------------------------------------------- - -template Color4 operator * (S a, const Color4 &v); - -//------------------------- -// Typedefs for convenience -//------------------------- - -typedef Color3 Color3f; -typedef Color3 Color3h; -typedef Color3 Color3c; -typedef Color3 C3h; -typedef Color3 C3f; -typedef Color3 C3c; -typedef Color4 Color4f; -typedef Color4 Color4h; -typedef Color4 Color4c; -typedef Color4 C4f; -typedef Color4 C4h; -typedef Color4 C4c; -typedef unsigned int PackedColor; - - -//------------------------- -// Implementation of Color3 -//------------------------- - -template -inline -Color3::Color3 (): Vec3 () -{ - // empty -} - -template -inline -Color3::Color3 (T a): Vec3 (a) -{ - // empty -} - -template -inline -Color3::Color3 (T a, T b, T c): Vec3 (a, b, c) -{ - // empty -} - -template -inline -Color3::Color3 (const Color3 &c): Vec3 (c) -{ - // empty -} - -template -template -inline -Color3::Color3 (const Vec3 &v): Vec3 (v) -{ - //empty -} - -template -inline const Color3 & -Color3::operator = (const Color3 &c) -{ - *((Vec3 *) this) = c; - return *this; -} - -template -inline const Color3 & -Color3::operator += (const Color3 &c) -{ - *((Vec3 *) this) += c; - return *this; -} - -template -inline Color3 -Color3::operator + (const Color3 &c) const -{ - return Color3 (*(Vec3 *)this + (const Vec3 &)c); -} - -template -inline const Color3 & -Color3::operator -= (const Color3 &c) -{ - *((Vec3 *) this) -= c; - return *this; -} - -template -inline Color3 -Color3::operator - (const Color3 &c) const -{ - return Color3 (*(Vec3 *)this - (const Vec3 &)c); -} - -template -inline Color3 -Color3::operator - () const -{ - return Color3 (-(*(Vec3 *)this)); -} - -template -inline const Color3 & -Color3::negate () -{ - ((Vec3 *) this)->negate(); - return *this; -} - -template -inline const Color3 & -Color3::operator *= (const Color3 &c) -{ - *((Vec3 *) this) *= c; - return *this; -} - -template -inline const Color3 & -Color3::operator *= (T a) -{ - *((Vec3 *) this) *= a; - return *this; -} - -template -inline Color3 -Color3::operator * (const Color3 &c) const -{ - return Color3 (*(Vec3 *)this * (const Vec3 &)c); -} - -template -inline Color3 -Color3::operator * (T a) const -{ - return Color3 (*(Vec3 *)this * a); -} - -template -inline const Color3 & -Color3::operator /= (const Color3 &c) -{ - *((Vec3 *) this) /= c; - return *this; -} - -template -inline const Color3 & -Color3::operator /= (T a) -{ - *((Vec3 *) this) /= a; - return *this; -} - -template -inline Color3 -Color3::operator / (const Color3 &c) const -{ - return Color3 (*(Vec3 *)this / (const Vec3 &)c); -} - -template -inline Color3 -Color3::operator / (T a) const -{ - return Color3 (*(Vec3 *)this / a); -} - -//----------------------- -// Implementation of Color4 -//----------------------- - -template -inline T & -Color4::operator [] (int i) -{ - return (&r)[i]; -} - -template -inline const T & -Color4::operator [] (int i) const -{ - return (&r)[i]; -} - -template -inline -Color4::Color4 () -{ - // empty -} - -template -inline -Color4::Color4 (T x) -{ - r = g = b = a = x; -} - -template -inline -Color4::Color4 (T x, T y, T z, T w) -{ - r = x; - g = y; - b = z; - a = w; -} - -template -inline -Color4::Color4 (const Color4 &v) -{ - r = v.r; - g = v.g; - b = v.b; - a = v.a; -} - -template -template -inline -Color4::Color4 (const Color4 &v) -{ - r = T (v.r); - g = T (v.g); - b = T (v.b); - a = T (v.a); -} - -template -inline const Color4 & -Color4::operator = (const Color4 &v) -{ - r = v.r; - g = v.g; - b = v.b; - a = v.a; - return *this; -} - -template -template -inline void -Color4::setValue (S x, S y, S z, S w) -{ - r = T (x); - g = T (y); - b = T (z); - a = T (w); -} - -template -template -inline void -Color4::setValue (const Color4 &v) -{ - r = T (v.r); - g = T (v.g); - b = T (v.b); - a = T (v.a); -} - -template -template -inline void -Color4::getValue (S &x, S &y, S &z, S &w) const -{ - x = S (r); - y = S (g); - z = S (b); - w = S (a); -} - -template -template -inline void -Color4::getValue (Color4 &v) const -{ - v.r = S (r); - v.g = S (g); - v.b = S (b); - v.a = S (a); -} - -template -inline T * -Color4::getValue() -{ - return (T *) &r; -} - -template -inline const T * -Color4::getValue() const -{ - return (const T *) &r; -} - -template -template -inline bool -Color4::operator == (const Color4 &v) const -{ - return r == v.r && g == v.g && b == v.b && a == v.a; -} - -template -template -inline bool -Color4::operator != (const Color4 &v) const -{ - return r != v.r || g != v.g || b != v.b || a != v.a; -} - -template -inline const Color4 & -Color4::operator += (const Color4 &v) -{ - r += v.r; - g += v.g; - b += v.b; - a += v.a; - return *this; -} - -template -inline Color4 -Color4::operator + (const Color4 &v) const -{ - return Color4 (r + v.r, g + v.g, b + v.b, a + v.a); -} - -template -inline const Color4 & -Color4::operator -= (const Color4 &v) -{ - r -= v.r; - g -= v.g; - b -= v.b; - a -= v.a; - return *this; -} - -template -inline Color4 -Color4::operator - (const Color4 &v) const -{ - return Color4 (r - v.r, g - v.g, b - v.b, a - v.a); -} - -template -inline Color4 -Color4::operator - () const -{ - return Color4 (-r, -g, -b, -a); -} - -template -inline const Color4 & -Color4::negate () -{ - r = -r; - g = -g; - b = -b; - a = -a; - return *this; -} - -template -inline const Color4 & -Color4::operator *= (const Color4 &v) -{ - r *= v.r; - g *= v.g; - b *= v.b; - a *= v.a; - return *this; -} - -template -inline const Color4 & -Color4::operator *= (T x) -{ - r *= x; - g *= x; - b *= x; - a *= x; - return *this; -} - -template -inline Color4 -Color4::operator * (const Color4 &v) const -{ - return Color4 (r * v.r, g * v.g, b * v.b, a * v.a); -} - -template -inline Color4 -Color4::operator * (T x) const -{ - return Color4 (r * x, g * x, b * x, a * x); -} - -template -inline const Color4 & -Color4::operator /= (const Color4 &v) -{ - r /= v.r; - g /= v.g; - b /= v.b; - a /= v.a; - return *this; -} - -template -inline const Color4 & -Color4::operator /= (T x) -{ - r /= x; - g /= x; - b /= x; - a /= x; - return *this; -} - -template -inline Color4 -Color4::operator / (const Color4 &v) const -{ - return Color4 (r / v.r, g / v.g, b / v.b, a / v.a); -} - -template -inline Color4 -Color4::operator / (T x) const -{ - return Color4 (r / x, g / x, b / x, a / x); -} - - -template -std::ostream & -operator << (std::ostream &s, const Color4 &v) -{ - return s << '(' << v.r << ' ' << v.g << ' ' << v.b << ' ' << v.a << ')'; -} - -//----------------------------------------- -// Implementation of reverse multiplication -//----------------------------------------- - -template -inline Color4 -operator * (S x, const Color4 &v) -{ - return Color4 (x * v.r, x * v.g, x * v.b, x * v.a); -} - - -IMATH_INTERNAL_NAMESPACE_HEADER_EXIT - -#endif // INCLUDED_IMATHCOLOR_H diff --git a/3rdparty/openexr/Imath/ImathColorAlgo.cpp b/3rdparty/openexr/Imath/ImathColorAlgo.cpp deleted file mode 100644 index a351c40e21..0000000000 --- a/3rdparty/openexr/Imath/ImathColorAlgo.cpp +++ /dev/null @@ -1,178 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2002-2012, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - -//---------------------------------------------------------------------------- -// -// Implementation of non-template items declared in ImathColorAlgo.h -// -//---------------------------------------------------------------------------- - -#include "ImathColorAlgo.h" - -IMATH_INTERNAL_NAMESPACE_SOURCE_ENTER - - -Vec3 -hsv2rgb_d(const Vec3 &hsv) -{ - double hue = hsv.x; - double sat = hsv.y; - double val = hsv.z; - - double x = 0.0, y = 0.0, z = 0.0; - - if (hue == 1) hue = 0; - else hue *= 6; - - int i = int(Math::floor(hue)); - double f = hue-i; - double p = val*(1-sat); - double q = val*(1-(sat*f)); - double t = val*(1-(sat*(1-f))); - - switch (i) - { - case 0: x = val; y = t; z = p; break; - case 1: x = q; y = val; z = p; break; - case 2: x = p; y = val; z = t; break; - case 3: x = p; y = q; z = val; break; - case 4: x = t; y = p; z = val; break; - case 5: x = val; y = p; z = q; break; - } - - return Vec3(x,y,z); -} - - -Color4 -hsv2rgb_d(const Color4 &hsv) -{ - double hue = hsv.r; - double sat = hsv.g; - double val = hsv.b; - - double r = 0.0, g = 0.0, b = 0.0; - - if (hue == 1) hue = 0; - else hue *= 6; - - int i = int(Math::floor(hue)); - double f = hue-i; - double p = val*(1-sat); - double q = val*(1-(sat*f)); - double t = val*(1-(sat*(1-f))); - - switch (i) - { - case 0: r = val; g = t; b = p; break; - case 1: r = q; g = val; b = p; break; - case 2: r = p; g = val; b = t; break; - case 3: r = p; g = q; b = val; break; - case 4: r = t; g = p; b = val; break; - case 5: r = val; g = p; b = q; break; - } - - return Color4(r,g,b,hsv.a); -} - - - -Vec3 -rgb2hsv_d(const Vec3 &c) -{ - const double &x = c.x; - const double &y = c.y; - const double &z = c.z; - - double max = (x > y) ? ((x > z) ? x : z) : ((y > z) ? y : z); - double min = (x < y) ? ((x < z) ? x : z) : ((y < z) ? y : z); - double range = max - min; - double val = max; - double sat = 0; - double hue = 0; - - if (max != 0) sat = range/max; - - if (sat != 0) - { - double h; - - if (x == max) h = (y - z) / range; - else if (y == max) h = 2 + (z - x) / range; - else h = 4 + (x - y) / range; - - hue = h/6.; - - if (hue < 0.) - hue += 1.0; - } - return Vec3(hue,sat,val); -} - - -Color4 -rgb2hsv_d(const Color4 &c) -{ - const double &r = c.r; - const double &g = c.g; - const double &b = c.b; - - double max = (r > g) ? ((r > b) ? r : b) : ((g > b) ? g : b); - double min = (r < g) ? ((r < b) ? r : b) : ((g < b) ? g : b); - double range = max - min; - double val = max; - double sat = 0; - double hue = 0; - - if (max != 0) sat = range/max; - - if (sat != 0) - { - double h; - - if (r == max) h = (g - b) / range; - else if (g == max) h = 2 + (b - r) / range; - else h = 4 + (r - g) / range; - - hue = h/6.; - - if (hue < 0.) - hue += 1.0; - } - return Color4(hue,sat,val,c.a); -} - - -IMATH_INTERNAL_NAMESPACE_SOURCE_EXIT diff --git a/3rdparty/openexr/Imath/ImathColorAlgo.h b/3rdparty/openexr/Imath/ImathColorAlgo.h deleted file mode 100644 index cbc3be4550..0000000000 --- a/3rdparty/openexr/Imath/ImathColorAlgo.h +++ /dev/null @@ -1,257 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2002-2012, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - - -#ifndef INCLUDED_IMATHCOLORALGO_H -#define INCLUDED_IMATHCOLORALGO_H - - -#include "ImathColor.h" -#include "ImathExport.h" -#include "ImathMath.h" -#include "ImathLimits.h" -#include "ImathNamespace.h" - -IMATH_INTERNAL_NAMESPACE_HEADER_ENTER - - -// -// Non-templated helper routines for color conversion. -// These routines eliminate type warnings under g++. -// - -IMATH_EXPORT Vec3 hsv2rgb_d(const Vec3 &hsv); - -IMATH_EXPORT Color4 hsv2rgb_d(const Color4 &hsv); - -IMATH_EXPORT Vec3 rgb2hsv_d(const Vec3 &rgb); - -IMATH_EXPORT Color4 rgb2hsv_d(const Color4 &rgb); - - -// -// Color conversion functions and general color algorithms -// -// hsv2rgb(), rgb2hsv(), rgb2packed(), packed2rgb() -// see each funtion definition for details. -// - -template -Vec3 -hsv2rgb(const Vec3 &hsv) -{ - if ( limits::isIntegral() ) - { - Vec3 v = Vec3(hsv.x / double(limits::max()), - hsv.y / double(limits::max()), - hsv.z / double(limits::max())); - Vec3 c = hsv2rgb_d(v); - return Vec3((T) (c.x * limits::max()), - (T) (c.y * limits::max()), - (T) (c.z * limits::max())); - } - else - { - Vec3 v = Vec3(hsv.x, hsv.y, hsv.z); - Vec3 c = hsv2rgb_d(v); - return Vec3((T) c.x, (T) c.y, (T) c.z); - } -} - - -template -Color4 -hsv2rgb(const Color4 &hsv) -{ - if ( limits::isIntegral() ) - { - Color4 v = Color4(hsv.r / float(limits::max()), - hsv.g / float(limits::max()), - hsv.b / float(limits::max()), - hsv.a / float(limits::max())); - Color4 c = hsv2rgb_d(v); - return Color4((T) (c.r * limits::max()), - (T) (c.g * limits::max()), - (T) (c.b * limits::max()), - (T) (c.a * limits::max())); - } - else - { - Color4 v = Color4(hsv.r, hsv.g, hsv.b, hsv.a); - Color4 c = hsv2rgb_d(v); - return Color4((T) c.r, (T) c.g, (T) c.b, (T) c.a); - } -} - - -template -Vec3 -rgb2hsv(const Vec3 &rgb) -{ - if ( limits::isIntegral() ) - { - Vec3 v = Vec3(rgb.x / double(limits::max()), - rgb.y / double(limits::max()), - rgb.z / double(limits::max())); - Vec3 c = rgb2hsv_d(v); - return Vec3((T) (c.x * limits::max()), - (T) (c.y * limits::max()), - (T) (c.z * limits::max())); - } - else - { - Vec3 v = Vec3(rgb.x, rgb.y, rgb.z); - Vec3 c = rgb2hsv_d(v); - return Vec3((T) c.x, (T) c.y, (T) c.z); - } -} - - -template -Color4 -rgb2hsv(const Color4 &rgb) -{ - if ( limits::isIntegral() ) - { - Color4 v = Color4(rgb.r / float(limits::max()), - rgb.g / float(limits::max()), - rgb.b / float(limits::max()), - rgb.a / float(limits::max())); - Color4 c = rgb2hsv_d(v); - return Color4((T) (c.r * limits::max()), - (T) (c.g * limits::max()), - (T) (c.b * limits::max()), - (T) (c.a * limits::max())); - } - else - { - Color4 v = Color4(rgb.r, rgb.g, rgb.b, rgb.a); - Color4 c = rgb2hsv_d(v); - return Color4((T) c.r, (T) c.g, (T) c.b, (T) c.a); - } -} - -template -PackedColor -rgb2packed(const Vec3 &c) -{ - if ( limits::isIntegral() ) - { - float x = c.x / float(limits::max()); - float y = c.y / float(limits::max()); - float z = c.z / float(limits::max()); - return rgb2packed( V3f(x,y,z) ); - } - else - { - return ( (PackedColor) (c.x * 255) | - (((PackedColor) (c.y * 255)) << 8) | - (((PackedColor) (c.z * 255)) << 16) | 0xFF000000 ); - } -} - -template -PackedColor -rgb2packed(const Color4 &c) -{ - if ( limits::isIntegral() ) - { - float r = c.r / float(limits::max()); - float g = c.g / float(limits::max()); - float b = c.b / float(limits::max()); - float a = c.a / float(limits::max()); - return rgb2packed( C4f(r,g,b,a) ); - } - else - { - return ( (PackedColor) (c.r * 255) | - (((PackedColor) (c.g * 255)) << 8) | - (((PackedColor) (c.b * 255)) << 16) | - (((PackedColor) (c.a * 255)) << 24)); - } -} - -// -// This guy can't return the result because the template -// parameter would not be in the function signiture. So instead, -// its passed in as an argument. -// - -template -void -packed2rgb(PackedColor packed, Vec3 &out) -{ - if ( limits::isIntegral() ) - { - T f = limits::max() / ((PackedColor)0xFF); - out.x = (packed & 0xFF) * f; - out.y = ((packed & 0xFF00) >> 8) * f; - out.z = ((packed & 0xFF0000) >> 16) * f; - } - else - { - T f = T(1) / T(255); - out.x = (packed & 0xFF) * f; - out.y = ((packed & 0xFF00) >> 8) * f; - out.z = ((packed & 0xFF0000) >> 16) * f; - } -} - -template -void -packed2rgb(PackedColor packed, Color4 &out) -{ - if ( limits::isIntegral() ) - { - T f = limits::max() / ((PackedColor)0xFF); - out.r = (packed & 0xFF) * f; - out.g = ((packed & 0xFF00) >> 8) * f; - out.b = ((packed & 0xFF0000) >> 16) * f; - out.a = ((packed & 0xFF000000) >> 24) * f; - } - else - { - T f = T(1) / T(255); - out.r = (packed & 0xFF) * f; - out.g = ((packed & 0xFF00) >> 8) * f; - out.b = ((packed & 0xFF0000) >> 16) * f; - out.a = ((packed & 0xFF000000) >> 24) * f; - } -} - - -IMATH_INTERNAL_NAMESPACE_HEADER_EXIT - -#endif // INCLUDED_IMATHCOLORALGO_H diff --git a/3rdparty/openexr/Imath/ImathEuler.h b/3rdparty/openexr/Imath/ImathEuler.h deleted file mode 100644 index 6b2b39e692..0000000000 --- a/3rdparty/openexr/Imath/ImathEuler.h +++ /dev/null @@ -1,927 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2002-2012, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - - -#ifndef INCLUDED_IMATHEULER_H -#define INCLUDED_IMATHEULER_H - -//---------------------------------------------------------------------- -// -// template class Euler -// -// This class represents euler angle orientations. The class -// inherits from Vec3 to it can be freely cast. The additional -// information is the euler priorities rep. This class is -// essentially a rip off of Ken Shoemake's GemsIV code. It has -// been modified minimally to make it more understandable, but -// hardly enough to make it easy to grok completely. -// -// There are 24 possible combonations of Euler angle -// representations of which 12 are common in CG and you will -// probably only use 6 of these which in this scheme are the -// non-relative-non-repeating types. -// -// The representations can be partitioned according to two -// criteria: -// -// 1) Are the angles measured relative to a set of fixed axis -// or relative to each other (the latter being what happens -// when rotation matrices are multiplied together and is -// almost ubiquitous in the cg community) -// -// 2) Is one of the rotations repeated (ala XYX rotation) -// -// When you construct a given representation from scratch you -// must order the angles according to their priorities. So, the -// easiest is a softimage or aerospace (yaw/pitch/roll) ordering -// of ZYX. -// -// float x_rot = 1; -// float y_rot = 2; -// float z_rot = 3; -// -// Eulerf angles(z_rot, y_rot, x_rot, Eulerf::ZYX); -// -or- -// Eulerf angles( V3f(z_rot,y_rot,z_rot), Eulerf::ZYX ); -// -// If instead, the order was YXZ for instance you would have to -// do this: -// -// float x_rot = 1; -// float y_rot = 2; -// float z_rot = 3; -// -// Eulerf angles(y_rot, x_rot, z_rot, Eulerf::YXZ); -// -or- -// Eulerf angles( V3f(y_rot,x_rot,z_rot), Eulerf::YXZ ); -// -// Notice how the order you put the angles into the three slots -// should correspond to the enum (YXZ) ordering. The input angle -// vector is called the "ijk" vector -- not an "xyz" vector. The -// ijk vector order is the same as the enum. If you treat the -// Euler<> as a Vec<> (which it inherts from) you will find the -// angles are ordered in the same way, i.e.: -// -// V3f v = angles; -// // v.x == y_rot, v.y == x_rot, v.z == z_rot -// -// If you just want the x, y, and z angles stored in a vector in -// that order, you can do this: -// -// V3f v = angles.toXYZVector() -// // v.x == x_rot, v.y == y_rot, v.z == z_rot -// -// If you want to set the Euler with an XYZVector use the -// optional layout argument: -// -// Eulerf angles(x_rot, y_rot, z_rot, -// Eulerf::YXZ, -// Eulerf::XYZLayout); -// -// This is the same as: -// -// Eulerf angles(y_rot, x_rot, z_rot, Eulerf::YXZ); -// -// Note that this won't do anything intelligent if you have a -// repeated axis in the euler angles (e.g. XYX) -// -// If you need to use the "relative" versions of these, you will -// need to use the "r" enums. -// -// The units of the rotation angles are assumed to be radians. -// -//---------------------------------------------------------------------- - - -#include "ImathMath.h" -#include "ImathVec.h" -#include "ImathQuat.h" -#include "ImathMatrix.h" -#include "ImathLimits.h" -#include "ImathNamespace.h" - -#include - -IMATH_INTERNAL_NAMESPACE_HEADER_ENTER - -#if (defined _WIN32 || defined _WIN64) && defined _MSC_VER -// Disable MS VC++ warnings about conversion from double to float -#pragma warning(disable:4244) -#endif - -template -class Euler : public Vec3 -{ - public: - - using Vec3::x; - using Vec3::y; - using Vec3::z; - - enum Order - { - // - // All 24 possible orderings - // - - XYZ = 0x0101, // "usual" orderings - XZY = 0x0001, - YZX = 0x1101, - YXZ = 0x1001, - ZXY = 0x2101, - ZYX = 0x2001, - - XZX = 0x0011, // first axis repeated - XYX = 0x0111, - YXY = 0x1011, - YZY = 0x1111, - ZYZ = 0x2011, - ZXZ = 0x2111, - - XYZr = 0x2000, // relative orderings -- not common - XZYr = 0x2100, - YZXr = 0x1000, - YXZr = 0x1100, - ZXYr = 0x0000, - ZYXr = 0x0100, - - XZXr = 0x2110, // relative first axis repeated - XYXr = 0x2010, - YXYr = 0x1110, - YZYr = 0x1010, - ZYZr = 0x0110, - ZXZr = 0x0010, - // |||| - // VVVV - // Legend: ABCD - // A -> Initial Axis (0==x, 1==y, 2==z) - // B -> Parity Even (1==true) - // C -> Initial Repeated (1==true) - // D -> Frame Static (1==true) - // - - Legal = XYZ | XZY | YZX | YXZ | ZXY | ZYX | - XZX | XYX | YXY | YZY | ZYZ | ZXZ | - XYZr| XZYr| YZXr| YXZr| ZXYr| ZYXr| - XZXr| XYXr| YXYr| YZYr| ZYZr| ZXZr, - - Min = 0x0000, - Max = 0x2111, - Default = XYZ - }; - - enum Axis { X = 0, Y = 1, Z = 2 }; - - enum InputLayout { XYZLayout, IJKLayout }; - - //-------------------------------------------------------------------- - // Constructors -- all default to ZYX non-relative ala softimage - // (where there is no argument to specify it) - // - // The Euler-from-matrix constructors assume that the matrix does - // not include shear or non-uniform scaling, but the constructors - // do not examine the matrix to verify this assumption. If necessary, - // you can adjust the matrix by calling the removeScalingAndShear() - // function, defined in ImathMatrixAlgo.h. - //-------------------------------------------------------------------- - - Euler(); - Euler(const Euler&); - Euler(Order p); - Euler(const Vec3 &v, Order o = Default, InputLayout l = IJKLayout); - Euler(T i, T j, T k, Order o = Default, InputLayout l = IJKLayout); - Euler(const Euler &euler, Order newp); - Euler(const Matrix33 &, Order o = Default); - Euler(const Matrix44 &, Order o = Default); - - //--------------------------------- - // Algebraic functions/ Operators - //--------------------------------- - - const Euler& operator= (const Euler&); - const Euler& operator= (const Vec3&); - - //-------------------------------------------------------- - // Set the euler value - // This does NOT convert the angles, but setXYZVector() - // does reorder the input vector. - //-------------------------------------------------------- - - static bool legal(Order); - - void setXYZVector(const Vec3 &); - - Order order() const; - void setOrder(Order); - - void set(Axis initial, - bool relative, - bool parityEven, - bool firstRepeats); - - //------------------------------------------------------------ - // Conversions, toXYZVector() reorders the angles so that - // the X rotation comes first, followed by the Y and Z - // in cases like XYX ordering, the repeated angle will be - // in the "z" component - // - // The Euler-from-matrix extract() functions assume that the - // matrix does not include shear or non-uniform scaling, but - // the extract() functions do not examine the matrix to verify - // this assumption. If necessary, you can adjust the matrix - // by calling the removeScalingAndShear() function, defined - // in ImathMatrixAlgo.h. - //------------------------------------------------------------ - - void extract(const Matrix33&); - void extract(const Matrix44&); - void extract(const Quat&); - - Matrix33 toMatrix33() const; - Matrix44 toMatrix44() const; - Quat toQuat() const; - Vec3 toXYZVector() const; - - //--------------------------------------------------- - // Use this function to unpack angles from ijk form - //--------------------------------------------------- - - void angleOrder(int &i, int &j, int &k) const; - - //--------------------------------------------------- - // Use this function to determine mapping from xyz to ijk - // - reshuffles the xyz to match the order - //--------------------------------------------------- - - void angleMapping(int &i, int &j, int &k) const; - - //---------------------------------------------------------------------- - // - // Utility methods for getting continuous rotations. None of these - // methods change the orientation given by its inputs (or at least - // that is the intent). - // - // angleMod() converts an angle to its equivalent in [-PI, PI] - // - // simpleXYZRotation() adjusts xyzRot so that its components differ - // from targetXyzRot by no more than +-PI - // - // nearestRotation() adjusts xyzRot so that its components differ - // from targetXyzRot by as little as possible. - // Note that xyz here really means ijk, because - // the order must be provided. - // - // makeNear() adjusts "this" Euler so that its components differ - // from target by as little as possible. This method - // might not make sense for Eulers with different order - // and it probably doesn't work for repeated axis and - // relative orderings (TODO). - // - //----------------------------------------------------------------------- - - static float angleMod (T angle); - static void simpleXYZRotation (Vec3 &xyzRot, - const Vec3 &targetXyzRot); - static void nearestRotation (Vec3 &xyzRot, - const Vec3 &targetXyzRot, - Order order = XYZ); - - void makeNear (const Euler &target); - - bool frameStatic() const { return _frameStatic; } - bool initialRepeated() const { return _initialRepeated; } - bool parityEven() const { return _parityEven; } - Axis initialAxis() const { return _initialAxis; } - - protected: - - bool _frameStatic : 1; // relative or static rotations - bool _initialRepeated : 1; // init axis repeated as last - bool _parityEven : 1; // "parity of axis permutation" -#if defined _WIN32 || defined _WIN64 - Axis _initialAxis ; // First axis of rotation -#else - Axis _initialAxis : 2; // First axis of rotation -#endif -}; - - -//-------------------- -// Convenient typedefs -//-------------------- - -typedef Euler Eulerf; -typedef Euler Eulerd; - - -//--------------- -// Implementation -//--------------- - -template -inline void - Euler::angleOrder(int &i, int &j, int &k) const -{ - i = _initialAxis; - j = _parityEven ? (i+1)%3 : (i > 0 ? i-1 : 2); - k = _parityEven ? (i > 0 ? i-1 : 2) : (i+1)%3; -} - -template -inline void - Euler::angleMapping(int &i, int &j, int &k) const -{ - int m[3]; - - m[_initialAxis] = 0; - m[(_initialAxis+1) % 3] = _parityEven ? 1 : 2; - m[(_initialAxis+2) % 3] = _parityEven ? 2 : 1; - i = m[0]; - j = m[1]; - k = m[2]; -} - -template -inline void -Euler::setXYZVector(const Vec3 &v) -{ - int i,j,k; - angleMapping(i,j,k); - (*this)[i] = v.x; - (*this)[j] = v.y; - (*this)[k] = v.z; -} - -template -inline Vec3 -Euler::toXYZVector() const -{ - int i,j,k; - angleMapping(i,j,k); - return Vec3((*this)[i],(*this)[j],(*this)[k]); -} - - -template -Euler::Euler() : - Vec3(0,0,0), - _frameStatic(true), - _initialRepeated(false), - _parityEven(true), - _initialAxis(X) -{} - -template -Euler::Euler(typename Euler::Order p) : - Vec3(0,0,0), - _frameStatic(true), - _initialRepeated(false), - _parityEven(true), - _initialAxis(X) -{ - setOrder(p); -} - -template -inline Euler::Euler( const Vec3 &v, - typename Euler::Order p, - typename Euler::InputLayout l ) -{ - setOrder(p); - if ( l == XYZLayout ) setXYZVector(v); - else { x = v.x; y = v.y; z = v.z; } -} - -template -inline Euler::Euler(const Euler &euler) -{ - operator=(euler); -} - -template -inline Euler::Euler(const Euler &euler,Order p) -{ - setOrder(p); - Matrix33 M = euler.toMatrix33(); - extract(M); -} - -template -inline Euler::Euler( T xi, T yi, T zi, - typename Euler::Order p, - typename Euler::InputLayout l) -{ - setOrder(p); - if ( l == XYZLayout ) setXYZVector(Vec3(xi,yi,zi)); - else { x = xi; y = yi; z = zi; } -} - -template -inline Euler::Euler( const Matrix33 &M, typename Euler::Order p ) -{ - setOrder(p); - extract(M); -} - -template -inline Euler::Euler( const Matrix44 &M, typename Euler::Order p ) -{ - setOrder(p); - extract(M); -} - -template -inline void Euler::extract(const Quat &q) -{ - extract(q.toMatrix33()); -} - -template -void Euler::extract(const Matrix33 &M) -{ - int i,j,k; - angleOrder(i,j,k); - - if (_initialRepeated) - { - // - // Extract the first angle, x. - // - - x = Math::atan2 (M[j][i], M[k][i]); - - // - // Remove the x rotation from M, so that the remaining - // rotation, N, is only around two axes, and gimbal lock - // cannot occur. - // - - Vec3 r (0, 0, 0); - r[i] = (_parityEven? -x: x); - - Matrix44 N; - N.rotate (r); - - N = N * Matrix44 (M[0][0], M[0][1], M[0][2], 0, - M[1][0], M[1][1], M[1][2], 0, - M[2][0], M[2][1], M[2][2], 0, - 0, 0, 0, 1); - // - // Extract the other two angles, y and z, from N. - // - - T sy = Math::sqrt (N[j][i]*N[j][i] + N[k][i]*N[k][i]); - y = Math::atan2 (sy, N[i][i]); - z = Math::atan2 (N[j][k], N[j][j]); - } - else - { - // - // Extract the first angle, x. - // - - x = Math::atan2 (M[j][k], M[k][k]); - - // - // Remove the x rotation from M, so that the remaining - // rotation, N, is only around two axes, and gimbal lock - // cannot occur. - // - - Vec3 r (0, 0, 0); - r[i] = (_parityEven? -x: x); - - Matrix44 N; - N.rotate (r); - - N = N * Matrix44 (M[0][0], M[0][1], M[0][2], 0, - M[1][0], M[1][1], M[1][2], 0, - M[2][0], M[2][1], M[2][2], 0, - 0, 0, 0, 1); - // - // Extract the other two angles, y and z, from N. - // - - T cy = Math::sqrt (N[i][i]*N[i][i] + N[i][j]*N[i][j]); - y = Math::atan2 (-N[i][k], cy); - z = Math::atan2 (-N[j][i], N[j][j]); - } - - if (!_parityEven) - *this *= -1; - - if (!_frameStatic) - { - T t = x; - x = z; - z = t; - } -} - -template -void Euler::extract(const Matrix44 &M) -{ - int i,j,k; - angleOrder(i,j,k); - - if (_initialRepeated) - { - // - // Extract the first angle, x. - // - - x = Math::atan2 (M[j][i], M[k][i]); - - // - // Remove the x rotation from M, so that the remaining - // rotation, N, is only around two axes, and gimbal lock - // cannot occur. - // - - Vec3 r (0, 0, 0); - r[i] = (_parityEven? -x: x); - - Matrix44 N; - N.rotate (r); - N = N * M; - - // - // Extract the other two angles, y and z, from N. - // - - T sy = Math::sqrt (N[j][i]*N[j][i] + N[k][i]*N[k][i]); - y = Math::atan2 (sy, N[i][i]); - z = Math::atan2 (N[j][k], N[j][j]); - } - else - { - // - // Extract the first angle, x. - // - - x = Math::atan2 (M[j][k], M[k][k]); - - // - // Remove the x rotation from M, so that the remaining - // rotation, N, is only around two axes, and gimbal lock - // cannot occur. - // - - Vec3 r (0, 0, 0); - r[i] = (_parityEven? -x: x); - - Matrix44 N; - N.rotate (r); - N = N * M; - - // - // Extract the other two angles, y and z, from N. - // - - T cy = Math::sqrt (N[i][i]*N[i][i] + N[i][j]*N[i][j]); - y = Math::atan2 (-N[i][k], cy); - z = Math::atan2 (-N[j][i], N[j][j]); - } - - if (!_parityEven) - *this *= -1; - - if (!_frameStatic) - { - T t = x; - x = z; - z = t; - } -} - -template -Matrix33 Euler::toMatrix33() const -{ - int i,j,k; - angleOrder(i,j,k); - - Vec3 angles; - - if ( _frameStatic ) angles = (*this); - else angles = Vec3(z,y,x); - - if ( !_parityEven ) angles *= -1.0; - - T ci = Math::cos(angles.x); - T cj = Math::cos(angles.y); - T ch = Math::cos(angles.z); - T si = Math::sin(angles.x); - T sj = Math::sin(angles.y); - T sh = Math::sin(angles.z); - - T cc = ci*ch; - T cs = ci*sh; - T sc = si*ch; - T ss = si*sh; - - Matrix33 M; - - if ( _initialRepeated ) - { - M[i][i] = cj; M[j][i] = sj*si; M[k][i] = sj*ci; - M[i][j] = sj*sh; M[j][j] = -cj*ss+cc; M[k][j] = -cj*cs-sc; - M[i][k] = -sj*ch; M[j][k] = cj*sc+cs; M[k][k] = cj*cc-ss; - } - else - { - M[i][i] = cj*ch; M[j][i] = sj*sc-cs; M[k][i] = sj*cc+ss; - M[i][j] = cj*sh; M[j][j] = sj*ss+cc; M[k][j] = sj*cs-sc; - M[i][k] = -sj; M[j][k] = cj*si; M[k][k] = cj*ci; - } - - return M; -} - -template -Matrix44 Euler::toMatrix44() const -{ - int i,j,k; - angleOrder(i,j,k); - - Vec3 angles; - - if ( _frameStatic ) angles = (*this); - else angles = Vec3(z,y,x); - - if ( !_parityEven ) angles *= -1.0; - - T ci = Math::cos(angles.x); - T cj = Math::cos(angles.y); - T ch = Math::cos(angles.z); - T si = Math::sin(angles.x); - T sj = Math::sin(angles.y); - T sh = Math::sin(angles.z); - - T cc = ci*ch; - T cs = ci*sh; - T sc = si*ch; - T ss = si*sh; - - Matrix44 M; - - if ( _initialRepeated ) - { - M[i][i] = cj; M[j][i] = sj*si; M[k][i] = sj*ci; - M[i][j] = sj*sh; M[j][j] = -cj*ss+cc; M[k][j] = -cj*cs-sc; - M[i][k] = -sj*ch; M[j][k] = cj*sc+cs; M[k][k] = cj*cc-ss; - } - else - { - M[i][i] = cj*ch; M[j][i] = sj*sc-cs; M[k][i] = sj*cc+ss; - M[i][j] = cj*sh; M[j][j] = sj*ss+cc; M[k][j] = sj*cs-sc; - M[i][k] = -sj; M[j][k] = cj*si; M[k][k] = cj*ci; - } - - return M; -} - -template -Quat Euler::toQuat() const -{ - Vec3 angles; - int i,j,k; - angleOrder(i,j,k); - - if ( _frameStatic ) angles = (*this); - else angles = Vec3(z,y,x); - - if ( !_parityEven ) angles.y = -angles.y; - - T ti = angles.x*0.5; - T tj = angles.y*0.5; - T th = angles.z*0.5; - T ci = Math::cos(ti); - T cj = Math::cos(tj); - T ch = Math::cos(th); - T si = Math::sin(ti); - T sj = Math::sin(tj); - T sh = Math::sin(th); - T cc = ci*ch; - T cs = ci*sh; - T sc = si*ch; - T ss = si*sh; - - T parity = _parityEven ? 1.0 : -1.0; - - Quat q; - Vec3 a; - - if ( _initialRepeated ) - { - a[i] = cj*(cs + sc); - a[j] = sj*(cc + ss) * parity, - a[k] = sj*(cs - sc); - q.r = cj*(cc - ss); - } - else - { - a[i] = cj*sc - sj*cs, - a[j] = (cj*ss + sj*cc) * parity, - a[k] = cj*cs - sj*sc; - q.r = cj*cc + sj*ss; - } - - q.v = a; - - return q; -} - -template -inline bool -Euler::legal(typename Euler::Order order) -{ - return (order & ~Legal) ? false : true; -} - -template -typename Euler::Order -Euler::order() const -{ - int foo = (_initialAxis == Z ? 0x2000 : (_initialAxis == Y ? 0x1000 : 0)); - - if (_parityEven) foo |= 0x0100; - if (_initialRepeated) foo |= 0x0010; - if (_frameStatic) foo++; - - return (Order)foo; -} - -template -inline void Euler::setOrder(typename Euler::Order p) -{ - set( p & 0x2000 ? Z : (p & 0x1000 ? Y : X), // initial axis - !(p & 0x1), // static? - !!(p & 0x100), // permutation even? - !!(p & 0x10)); // initial repeats? -} - -template -void Euler::set(typename Euler::Axis axis, - bool relative, - bool parityEven, - bool firstRepeats) -{ - _initialAxis = axis; - _frameStatic = !relative; - _parityEven = parityEven; - _initialRepeated = firstRepeats; -} - -template -const Euler& Euler::operator= (const Euler &euler) -{ - x = euler.x; - y = euler.y; - z = euler.z; - _initialAxis = euler._initialAxis; - _frameStatic = euler._frameStatic; - _parityEven = euler._parityEven; - _initialRepeated = euler._initialRepeated; - return *this; -} - -template -const Euler& Euler::operator= (const Vec3 &v) -{ - x = v.x; - y = v.y; - z = v.z; - return *this; -} - -template -std::ostream& operator << (std::ostream &o, const Euler &euler) -{ - char a[3] = { 'X', 'Y', 'Z' }; - - const char* r = euler.frameStatic() ? "" : "r"; - int i,j,k; - euler.angleOrder(i,j,k); - - if ( euler.initialRepeated() ) k = i; - - return o << "(" - << euler.x << " " - << euler.y << " " - << euler.z << " " - << a[i] << a[j] << a[k] << r << ")"; -} - -template -float -Euler::angleMod (T angle) -{ - const T pi = static_cast(M_PI); - angle = fmod(T (angle), T (2 * pi)); - - if (angle < -pi) angle += 2 * pi; - if (angle > +pi) angle -= 2 * pi; - - return angle; -} - -template -void -Euler::simpleXYZRotation (Vec3 &xyzRot, const Vec3 &targetXyzRot) -{ - Vec3 d = xyzRot - targetXyzRot; - xyzRot[0] = targetXyzRot[0] + angleMod(d[0]); - xyzRot[1] = targetXyzRot[1] + angleMod(d[1]); - xyzRot[2] = targetXyzRot[2] + angleMod(d[2]); -} - -template -void -Euler::nearestRotation (Vec3 &xyzRot, const Vec3 &targetXyzRot, - Order order) -{ - int i,j,k; - Euler e (0,0,0, order); - e.angleOrder(i,j,k); - - simpleXYZRotation(xyzRot, targetXyzRot); - - Vec3 otherXyzRot; - otherXyzRot[i] = M_PI+xyzRot[i]; - otherXyzRot[j] = M_PI-xyzRot[j]; - otherXyzRot[k] = M_PI+xyzRot[k]; - - simpleXYZRotation(otherXyzRot, targetXyzRot); - - Vec3 d = xyzRot - targetXyzRot; - Vec3 od = otherXyzRot - targetXyzRot; - T dMag = d.dot(d); - T odMag = od.dot(od); - - if (odMag < dMag) - { - xyzRot = otherXyzRot; - } -} - -template -void -Euler::makeNear (const Euler &target) -{ - Vec3 xyzRot = toXYZVector(); - Vec3 targetXyz; - if (order() != target.order()) - { - Euler targetSameOrder = Euler(target, order()); - targetXyz = targetSameOrder.toXYZVector(); - } - else - { - targetXyz = target.toXYZVector(); - } - - nearestRotation(xyzRot, targetXyz, order()); - - setXYZVector(xyzRot); -} - -#if (defined _WIN32 || defined _WIN64) && defined _MSC_VER -#pragma warning(default:4244) -#endif - -IMATH_INTERNAL_NAMESPACE_HEADER_EXIT - - -#endif // INCLUDED_IMATHEULER_H diff --git a/3rdparty/openexr/Imath/ImathExc.h b/3rdparty/openexr/Imath/ImathExc.h deleted file mode 100644 index 65af3b558b..0000000000 --- a/3rdparty/openexr/Imath/ImathExc.h +++ /dev/null @@ -1,73 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2002-2012, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - -#ifndef INCLUDED_IMATHEXC_H -#define INCLUDED_IMATHEXC_H - - -//----------------------------------------------- -// -// Imath library-specific exceptions -// -//----------------------------------------------- - -#include "ImathNamespace.h" -#include "IexBaseExc.h" -#include "ImathExport.h" - -IMATH_INTERNAL_NAMESPACE_HEADER_ENTER - -// Attempt to normalize null vector -DEFINE_EXC_EXP (IMATH_EXPORT, NullVecExc, ::IEX_NAMESPACE::MathExc) - -// Attempt to normalize a point at infinity -DEFINE_EXC_EXP (IMATH_EXPORT, InfPointExc, ::IEX_NAMESPACE::MathExc) - -// Attempt to normalize null quaternion -DEFINE_EXC_EXP (IMATH_EXPORT, NullQuatExc, ::IEX_NAMESPACE::MathExc) - -// Attempt to invert singular matrix -DEFINE_EXC_EXP (IMATH_EXPORT, SingMatrixExc, ::IEX_NAMESPACE::MathExc) - -// Attempt to remove zero scaling from matrix -DEFINE_EXC_EXP (IMATH_EXPORT, ZeroScaleExc, ::IEX_NAMESPACE::MathExc) - -// Attempt to normalize a vector of whose elementsare an integer type -DEFINE_EXC_EXP (IMATH_EXPORT, IntVecNormalizeExc, ::IEX_NAMESPACE::MathExc) - - -IMATH_INTERNAL_NAMESPACE_HEADER_EXIT - -#endif // INCLUDED_IMATHEXC_H diff --git a/3rdparty/openexr/Imath/ImathExport.h b/3rdparty/openexr/Imath/ImathExport.h deleted file mode 100644 index 4357c126f8..0000000000 --- a/3rdparty/openexr/Imath/ImathExport.h +++ /dev/null @@ -1,46 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2012, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - -#if defined(OPENEXR_DLL) - #if defined(IMATH_EXPORTS) - #define IMATH_EXPORT __declspec(dllexport) - #define IMATH_EXPORT_CONST extern __declspec(dllexport) - #else - #define IMATH_EXPORT __declspec(dllimport) - #define IMATH_EXPORT_CONST extern __declspec(dllimport) - #endif -#else - #define IMATH_EXPORT - #define IMATH_EXPORT_CONST extern const -#endif diff --git a/3rdparty/openexr/Imath/ImathForward.h b/3rdparty/openexr/Imath/ImathForward.h deleted file mode 100644 index 39d398c8c7..0000000000 --- a/3rdparty/openexr/Imath/ImathForward.h +++ /dev/null @@ -1,72 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2012, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - -#ifndef INCLUDED_IMATHFORWARD_H -#define INCLUDED_IMATHFORWARD_H - -#include "ImathNamespace.h" - -IMATH_INTERNAL_NAMESPACE_HEADER_ENTER - -// -// Basic template type declarations. -// - -template class Box; -template class Color3; -template class Color4; -template class Euler; -template class Frustum; -template class FrustumTest; -template class Interval; -template class Line3; -template class Matrix33; -template class Matrix44; -template class Plane3; -template class Quat; -template class Shear6; -template class Sphere3; -template class TMatrix; -template class TMatrixBase; -template class TMatrixData; -template class Vec2; -template class Vec3; -template class Vec4; - -class Rand32; -class Rand48; - -IMATH_INTERNAL_NAMESPACE_HEADER_EXIT - -#endif // INCLUDED_IMATHFORWARD_H diff --git a/3rdparty/openexr/Imath/ImathFrame.h b/3rdparty/openexr/Imath/ImathFrame.h deleted file mode 100644 index 95ebb66013..0000000000 --- a/3rdparty/openexr/Imath/ImathFrame.h +++ /dev/null @@ -1,192 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2002-2012, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - - -#ifndef INCLUDED_IMATHFRAME_H -#define INCLUDED_IMATHFRAME_H - -#include "ImathNamespace.h" - -IMATH_INTERNAL_NAMESPACE_HEADER_ENTER - -template class Vec3; -template class Matrix44; - -// -// These methods compute a set of reference frames, defined by their -// transformation matrix, along a curve. It is designed so that the -// array of points and the array of matrices used to fetch these routines -// don't need to be ordered as the curve. -// -// A typical usage would be : -// -// m[0] = IMATH_INTERNAL_NAMESPACE::firstFrame( p[0], p[1], p[2] ); -// for( int i = 1; i < n - 1; i++ ) -// { -// m[i] = IMATH_INTERNAL_NAMESPACE::nextFrame( m[i-1], p[i-1], p[i], t[i-1], t[i] ); -// } -// m[n-1] = IMATH_INTERNAL_NAMESPACE::lastFrame( m[n-2], p[n-2], p[n-1] ); -// -// See Graphics Gems I for the underlying algorithm. -// - -template Matrix44 firstFrame( const Vec3&, // First point - const Vec3&, // Second point - const Vec3& ); // Third point - -template Matrix44 nextFrame( const Matrix44&, // Previous matrix - const Vec3&, // Previous point - const Vec3&, // Current point - Vec3&, // Previous tangent - Vec3& ); // Current tangent - -template Matrix44 lastFrame( const Matrix44&, // Previous matrix - const Vec3&, // Previous point - const Vec3& ); // Last point - -// -// firstFrame - Compute the first reference frame along a curve. -// -// This function returns the transformation matrix to the reference frame -// defined by the three points 'pi', 'pj' and 'pk'. Note that if the two -// vectors and are colinears, an arbitrary twist value will -// be choosen. -// -// Throw 'NullVecExc' if 'pi' and 'pj' are equals. -// - -template Matrix44 firstFrame -( - const Vec3& pi, // First point - const Vec3& pj, // Second point - const Vec3& pk ) // Third point -{ - Vec3 t = pj - pi; t.normalizeExc(); - - Vec3 n = t.cross( pk - pi ); n.normalize(); - if( n.length() == 0.0f ) - { - int i = fabs( t[0] ) < fabs( t[1] ) ? 0 : 1; - if( fabs( t[2] ) < fabs( t[i] )) i = 2; - - Vec3 v( 0.0, 0.0, 0.0 ); v[i] = 1.0; - n = t.cross( v ); n.normalize(); - } - - Vec3 b = t.cross( n ); - - Matrix44 M; - - M[0][0] = t[0]; M[0][1] = t[1]; M[0][2] = t[2]; M[0][3] = 0.0, - M[1][0] = n[0]; M[1][1] = n[1]; M[1][2] = n[2]; M[1][3] = 0.0, - M[2][0] = b[0]; M[2][1] = b[1]; M[2][2] = b[2]; M[2][3] = 0.0, - M[3][0] = pi[0]; M[3][1] = pi[1]; M[3][2] = pi[2]; M[3][3] = 1.0; - - return M; -} - -// -// nextFrame - Compute the next reference frame along a curve. -// -// This function returns the transformation matrix to the next reference -// frame defined by the previously computed transformation matrix and the -// new point and tangent vector along the curve. -// - -template Matrix44 nextFrame -( - const Matrix44& Mi, // Previous matrix - const Vec3& pi, // Previous point - const Vec3& pj, // Current point - Vec3& ti, // Previous tangent vector - Vec3& tj ) // Current tangent vector -{ - Vec3 a(0.0, 0.0, 0.0); // Rotation axis. - T r = 0.0; // Rotation angle. - - if( ti.length() != 0.0 && tj.length() != 0.0 ) - { - ti.normalize(); tj.normalize(); - T dot = ti.dot( tj ); - - // - // This is *really* necessary : - // - - if( dot > 1.0 ) dot = 1.0; - else if( dot < -1.0 ) dot = -1.0; - - r = acosf( dot ); - a = ti.cross( tj ); - } - - if( a.length() != 0.0 && r != 0.0 ) - { - Matrix44 R; R.setAxisAngle( a, r ); - Matrix44 Tj; Tj.translate( pj ); - Matrix44 Ti; Ti.translate( -pi ); - - return Mi * Ti * R * Tj; - } - else - { - Matrix44 Tr; Tr.translate( pj - pi ); - - return Mi * Tr; - } -} - -// -// lastFrame - Compute the last reference frame along a curve. -// -// This function returns the transformation matrix to the last reference -// frame defined by the previously computed transformation matrix and the -// last point along the curve. -// - -template Matrix44 lastFrame -( - const Matrix44& Mi, // Previous matrix - const Vec3& pi, // Previous point - const Vec3& pj ) // Last point -{ - Matrix44 Tr; Tr.translate( pj - pi ); - - return Mi * Tr; -} - -IMATH_INTERNAL_NAMESPACE_HEADER_EXIT - -#endif // INCLUDED_IMATHFRAME_H diff --git a/3rdparty/openexr/Imath/ImathFrustum.h b/3rdparty/openexr/Imath/ImathFrustum.h deleted file mode 100644 index 4df92c90f4..0000000000 --- a/3rdparty/openexr/Imath/ImathFrustum.h +++ /dev/null @@ -1,741 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2002-2012, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - - -#ifndef INCLUDED_IMATHFRUSTUM_H -#define INCLUDED_IMATHFRUSTUM_H - - -#include "ImathVec.h" -#include "ImathPlane.h" -#include "ImathLine.h" -#include "ImathMatrix.h" -#include "ImathLimits.h" -#include "ImathFun.h" -#include "ImathNamespace.h" - -#include "IexMathExc.h" - -IMATH_INTERNAL_NAMESPACE_HEADER_ENTER - -// -// template class Frustum -// -// The frustum is always located with the eye point at the -// origin facing down -Z. This makes the Frustum class -// compatable with OpenGL (or anything that assumes a camera -// looks down -Z, hence with a right-handed coordinate system) -// but not with RenderMan which assumes the camera looks down -// +Z. Additional functions are provided for conversion from -// and from various camera coordinate spaces. -// -// nearPlane/farPlane: near/far are keywords used by Microsoft's -// compiler, so we use nearPlane/farPlane instead to avoid -// issues. - - -template -class Frustum -{ - public: - Frustum(); - Frustum(const Frustum &); - Frustum(T nearPlane, T farPlane, T left, T right, T top, T bottom, bool ortho=false); - Frustum(T nearPlane, T farPlane, T fovx, T fovy, T aspect); - virtual ~Frustum(); - - //-------------------- - // Assignment operator - //-------------------- - - const Frustum & operator = (const Frustum &); - - //-------------------- - // Operators: ==, != - //-------------------- - - bool operator == (const Frustum &src) const; - bool operator != (const Frustum &src) const; - - //-------------------------------------------------------- - // Set functions change the entire state of the Frustum - //-------------------------------------------------------- - - void set(T nearPlane, T farPlane, - T left, T right, - T top, T bottom, - bool ortho=false); - - void set(T nearPlane, T farPlane, T fovx, T fovy, T aspect); - - //------------------------------------------------------ - // These functions modify an already valid frustum state - //------------------------------------------------------ - - void modifyNearAndFar(T nearPlane, T farPlane); - void setOrthographic(bool); - - //-------------- - // Access - //-------------- - - bool orthographic() const { return _orthographic; } - T nearPlane() const { return _nearPlane; } - T hither() const { return _nearPlane; } - T farPlane() const { return _farPlane; } - T yon() const { return _farPlane; } - T left() const { return _left; } - T right() const { return _right; } - T bottom() const { return _bottom; } - T top() const { return _top; } - - //----------------------------------------------------------------------- - // Sets the planes in p to be the six bounding planes of the frustum, in - // the following order: top, right, bottom, left, near, far. - // Note that the planes have normals that point out of the frustum. - // The version of this routine that takes a matrix applies that matrix - // to transform the frustum before setting the planes. - //----------------------------------------------------------------------- - - void planes(Plane3 p[6]) const; - void planes(Plane3 p[6], const Matrix44 &M) const; - - //---------------------- - // Derived Quantities - //---------------------- - - T fovx() const; - T fovy() const; - T aspect() const; - Matrix44 projectionMatrix() const; - bool degenerate() const; - - //----------------------------------------------------------------------- - // Takes a rectangle in the screen space (i.e., -1 <= left <= right <= 1 - // and -1 <= bottom <= top <= 1) of this Frustum, and returns a new - // Frustum whose near clipping-plane window is that rectangle in local - // space. - //----------------------------------------------------------------------- - - Frustum window(T left, T right, T top, T bottom) const; - - //---------------------------------------------------------- - // Projection is in screen space / Conversion from Z-Buffer - //---------------------------------------------------------- - - Line3 projectScreenToRay( const Vec2 & ) const; - Vec2 projectPointToScreen( const Vec3 & ) const; - - T ZToDepth(long zval, long min, long max) const; - T normalizedZToDepth(T zval) const; - long DepthToZ(T depth, long zmin, long zmax) const; - - T worldRadius(const Vec3 &p, T radius) const; - T screenRadius(const Vec3 &p, T radius) const; - - - protected: - - Vec2 screenToLocal( const Vec2 & ) const; - Vec2 localToScreen( const Vec2 & ) const; - - protected: - T _nearPlane; - T _farPlane; - T _left; - T _right; - T _top; - T _bottom; - bool _orthographic; -}; - - -template -inline Frustum::Frustum() -{ - set(T (0.1), - T (1000.0), - T (-1.0), - T (1.0), - T (1.0), - T (-1.0), - false); -} - -template -inline Frustum::Frustum(const Frustum &f) -{ - *this = f; -} - -template -inline Frustum::Frustum(T n, T f, T l, T r, T t, T b, bool o) -{ - set(n,f,l,r,t,b,o); -} - -template -inline Frustum::Frustum(T nearPlane, T farPlane, T fovx, T fovy, T aspect) -{ - set(nearPlane,farPlane,fovx,fovy,aspect); -} - -template -Frustum::~Frustum() -{ -} - -template -const Frustum & -Frustum::operator = (const Frustum &f) -{ - _nearPlane = f._nearPlane; - _farPlane = f._farPlane; - _left = f._left; - _right = f._right; - _top = f._top; - _bottom = f._bottom; - _orthographic = f._orthographic; - - return *this; -} - -template -bool -Frustum::operator == (const Frustum &src) const -{ - return - _nearPlane == src._nearPlane && - _farPlane == src._farPlane && - _left == src._left && - _right == src._right && - _top == src._top && - _bottom == src._bottom && - _orthographic == src._orthographic; -} - -template -inline bool -Frustum::operator != (const Frustum &src) const -{ - return !operator== (src); -} - -template -void Frustum::set(T n, T f, T l, T r, T t, T b, bool o) -{ - _nearPlane = n; - _farPlane = f; - _left = l; - _right = r; - _bottom = b; - _top = t; - _orthographic = o; -} - -template -void Frustum::modifyNearAndFar(T n, T f) -{ - if ( _orthographic ) - { - _nearPlane = n; - } - else - { - Line3 lowerLeft( Vec3(0,0,0), Vec3(_left,_bottom,-_nearPlane) ); - Line3 upperRight( Vec3(0,0,0), Vec3(_right,_top,-_nearPlane) ); - Plane3 nearPlane( Vec3(0,0,-1), n ); - - Vec3 ll,ur; - nearPlane.intersect(lowerLeft,ll); - nearPlane.intersect(upperRight,ur); - - _left = ll.x; - _right = ur.x; - _top = ur.y; - _bottom = ll.y; - _nearPlane = n; - _farPlane = f; - } - - _farPlane = f; -} - -template -void Frustum::setOrthographic(bool ortho) -{ - _orthographic = ortho; -} - -template -void Frustum::set(T nearPlane, T farPlane, T fovx, T fovy, T aspect) -{ - if (fovx != 0 && fovy != 0) - throw IEX_NAMESPACE::ArgExc ("fovx and fovy cannot both be non-zero."); - - const T two = static_cast(2); - - if (fovx != 0) - { - _right = nearPlane * Math::tan(fovx / two); - _left = -_right; - _top = ((_right - _left) / aspect) / two; - _bottom = -_top; - } - else - { - _top = nearPlane * Math::tan(fovy / two); - _bottom = -_top; - _right = (_top - _bottom) * aspect / two; - _left = -_right; - } - _nearPlane = nearPlane; - _farPlane = farPlane; - _orthographic = false; -} - -template -T Frustum::fovx() const -{ - return Math::atan2(_right,_nearPlane) - Math::atan2(_left,_nearPlane); -} - -template -T Frustum::fovy() const -{ - return Math::atan2(_top,_nearPlane) - Math::atan2(_bottom,_nearPlane); -} - -template -T Frustum::aspect() const -{ - T rightMinusLeft = _right-_left; - T topMinusBottom = _top-_bottom; - - if (abs(topMinusBottom) < 1 && - abs(rightMinusLeft) > limits::max() * abs(topMinusBottom)) - { - throw IEX_NAMESPACE::DivzeroExc ("Bad viewing frustum: " - "aspect ratio cannot be computed."); - } - - return rightMinusLeft / topMinusBottom; -} - -template -Matrix44 Frustum::projectionMatrix() const -{ - T rightPlusLeft = _right+_left; - T rightMinusLeft = _right-_left; - - T topPlusBottom = _top+_bottom; - T topMinusBottom = _top-_bottom; - - T farPlusNear = _farPlane+_nearPlane; - T farMinusNear = _farPlane-_nearPlane; - - if ((abs(rightMinusLeft) < 1 && - abs(rightPlusLeft) > limits::max() * abs(rightMinusLeft)) || - (abs(topMinusBottom) < 1 && - abs(topPlusBottom) > limits::max() * abs(topMinusBottom)) || - (abs(farMinusNear) < 1 && - abs(farPlusNear) > limits::max() * abs(farMinusNear))) - { - throw IEX_NAMESPACE::DivzeroExc ("Bad viewing frustum: " - "projection matrix cannot be computed."); - } - - if ( _orthographic ) - { - T tx = -rightPlusLeft / rightMinusLeft; - T ty = -topPlusBottom / topMinusBottom; - T tz = -farPlusNear / farMinusNear; - - if ((abs(rightMinusLeft) < 1 && - 2 > limits::max() * abs(rightMinusLeft)) || - (abs(topMinusBottom) < 1 && - 2 > limits::max() * abs(topMinusBottom)) || - (abs(farMinusNear) < 1 && - 2 > limits::max() * abs(farMinusNear))) - { - throw IEX_NAMESPACE::DivzeroExc ("Bad viewing frustum: " - "projection matrix cannot be computed."); - } - - T A = 2 / rightMinusLeft; - T B = 2 / topMinusBottom; - T C = -2 / farMinusNear; - - return Matrix44( A, 0, 0, 0, - 0, B, 0, 0, - 0, 0, C, 0, - tx, ty, tz, 1.f ); - } - else - { - T A = rightPlusLeft / rightMinusLeft; - T B = topPlusBottom / topMinusBottom; - T C = -farPlusNear / farMinusNear; - - T farTimesNear = -2 * _farPlane * _nearPlane; - if (abs(farMinusNear) < 1 && - abs(farTimesNear) > limits::max() * abs(farMinusNear)) - { - throw IEX_NAMESPACE::DivzeroExc ("Bad viewing frustum: " - "projection matrix cannot be computed."); - } - - T D = farTimesNear / farMinusNear; - - T twoTimesNear = 2 * _nearPlane; - - if ((abs(rightMinusLeft) < 1 && - abs(twoTimesNear) > limits::max() * abs(rightMinusLeft)) || - (abs(topMinusBottom) < 1 && - abs(twoTimesNear) > limits::max() * abs(topMinusBottom))) - { - throw IEX_NAMESPACE::DivzeroExc ("Bad viewing frustum: " - "projection matrix cannot be computed."); - } - - T E = twoTimesNear / rightMinusLeft; - T F = twoTimesNear / topMinusBottom; - - return Matrix44( E, 0, 0, 0, - 0, F, 0, 0, - A, B, C, -1, - 0, 0, D, 0 ); - } -} - -template -bool Frustum::degenerate() const -{ - return (_nearPlane == _farPlane) || - (_left == _right) || - (_top == _bottom); -} - -template -Frustum Frustum::window(T l, T r, T t, T b) const -{ - // move it to 0->1 space - - Vec2 bl = screenToLocal( Vec2(l,b) ); - Vec2 tr = screenToLocal( Vec2(r,t) ); - - return Frustum(_nearPlane, _farPlane, bl.x, tr.x, tr.y, bl.y, _orthographic); -} - - -template -Vec2 Frustum::screenToLocal(const Vec2 &s) const -{ - return Vec2( _left + (_right-_left) * (1.f+s.x) / 2.f, - _bottom + (_top-_bottom) * (1.f+s.y) / 2.f ); -} - -template -Vec2 Frustum::localToScreen(const Vec2 &p) const -{ - T leftPlusRight = _left - T (2) * p.x + _right; - T leftMinusRight = _left-_right; - T bottomPlusTop = _bottom - T (2) * p.y + _top; - T bottomMinusTop = _bottom-_top; - - if ((abs(leftMinusRight) < T (1) && - abs(leftPlusRight) > limits::max() * abs(leftMinusRight)) || - (abs(bottomMinusTop) < T (1) && - abs(bottomPlusTop) > limits::max() * abs(bottomMinusTop))) - { - throw IEX_NAMESPACE::DivzeroExc - ("Bad viewing frustum: " - "local-to-screen transformation cannot be computed"); - } - - return Vec2( leftPlusRight / leftMinusRight, - bottomPlusTop / bottomMinusTop ); -} - -template -Line3 Frustum::projectScreenToRay(const Vec2 &p) const -{ - Vec2 point = screenToLocal(p); - if (orthographic()) - return Line3( Vec3(point.x,point.y, 0.0), - Vec3(point.x,point.y,-1.0)); - else - return Line3( Vec3(0, 0, 0), Vec3(point.x,point.y,-_nearPlane)); -} - -template -Vec2 Frustum::projectPointToScreen(const Vec3 &point) const -{ - if (orthographic() || point.z == T (0)) - return localToScreen( Vec2( point.x, point.y ) ); - else - return localToScreen( Vec2( point.x * _nearPlane / -point.z, - point.y * _nearPlane / -point.z ) ); -} - -template -T Frustum::ZToDepth(long zval,long zmin,long zmax) const -{ - int zdiff = zmax - zmin; - - if (zdiff == 0) - { - throw IEX_NAMESPACE::DivzeroExc - ("Bad call to Frustum::ZToDepth: zmax == zmin"); - } - - if ( zval > zmax+1 ) zval -= zdiff; - - T fzval = (T(zval) - T(zmin)) / T(zdiff); - return normalizedZToDepth(fzval); -} - -template -T Frustum::normalizedZToDepth(T zval) const -{ - T Zp = zval * 2.0 - 1; - - if ( _orthographic ) - { - return -(Zp*(_farPlane-_nearPlane) + (_farPlane+_nearPlane))/2; - } - else - { - T farTimesNear = 2 * _farPlane * _nearPlane; - T farMinusNear = Zp * (_farPlane - _nearPlane) - _farPlane - _nearPlane; - - if (abs(farMinusNear) < 1 && - abs(farTimesNear) > limits::max() * abs(farMinusNear)) - { - throw IEX_NAMESPACE::DivzeroExc - ("Frustum::normalizedZToDepth cannot be computed. The " - "near and far clipping planes of the viewing frustum " - "may be too close to each other"); - } - - return farTimesNear / farMinusNear; - } -} - -template -long Frustum::DepthToZ(T depth,long zmin,long zmax) const -{ - long zdiff = zmax - zmin; - T farMinusNear = _farPlane-_nearPlane; - - if ( _orthographic ) - { - T farPlusNear = 2*depth + _farPlane + _nearPlane; - - if (abs(farMinusNear) < 1 && - abs(farPlusNear) > limits::max() * abs(farMinusNear)) - { - throw IEX_NAMESPACE::DivzeroExc - ("Bad viewing frustum: near and far clipping planes " - "are too close to each other"); - } - - T Zp = -farPlusNear/farMinusNear; - return long(0.5*(Zp+1)*zdiff) + zmin; - } - else - { - // Perspective - - T farTimesNear = 2*_farPlane*_nearPlane; - if (abs(depth) < 1 && - abs(farTimesNear) > limits::max() * abs(depth)) - { - throw IEX_NAMESPACE::DivzeroExc - ("Bad call to DepthToZ function: value of `depth' " - "is too small"); - } - - T farPlusNear = farTimesNear/depth + _farPlane + _nearPlane; - if (abs(farMinusNear) < 1 && - abs(farPlusNear) > limits::max() * abs(farMinusNear)) - { - throw IEX_NAMESPACE::DivzeroExc - ("Bad viewing frustum: near and far clipping planes " - "are too close to each other"); - } - - T Zp = farPlusNear/farMinusNear; - return long(0.5*(Zp+1)*zdiff) + zmin; - } -} - -template -T Frustum::screenRadius(const Vec3 &p, T radius) const -{ - // Derivation: - // Consider X-Z plane. - // X coord of projection of p = xp = p.x * (-_nearPlane / p.z) - // Let q be p + (radius, 0, 0). - // X coord of projection of q = xq = (p.x - radius) * (-_nearPlane / p.z) - // X coord of projection of segment from p to q = r = xp - xq - // = radius * (-_nearPlane / p.z) - // A similar analysis holds in the Y-Z plane. - // So r is the quantity we want to return. - - if (abs(p.z) > 1 || abs(-_nearPlane) < limits::max() * abs(p.z)) - { - return radius * (-_nearPlane / p.z); - } - else - { - throw IEX_NAMESPACE::DivzeroExc - ("Bad call to Frustum::screenRadius: the magnitude of `p' " - "is too small"); - } - - return radius * (-_nearPlane / p.z); -} - -template -T Frustum::worldRadius(const Vec3 &p, T radius) const -{ - if (abs(-_nearPlane) > 1 || abs(p.z) < limits::max() * abs(-_nearPlane)) - { - return radius * (p.z / -_nearPlane); - } - else - { - throw IEX_NAMESPACE::DivzeroExc - ("Bad viewing frustum: the near clipping plane is too " - "close to zero"); - } -} - -template -void Frustum::planes(Plane3 p[6]) const -{ - // - // Plane order: Top, Right, Bottom, Left, Near, Far. - // Normals point outwards. - // - - if (! _orthographic) - { - Vec3 a( _left, _bottom, -_nearPlane); - Vec3 b( _left, _top, -_nearPlane); - Vec3 c( _right, _top, -_nearPlane); - Vec3 d( _right, _bottom, -_nearPlane); - Vec3 o(0,0,0); - - p[0].set( o, c, b ); - p[1].set( o, d, c ); - p[2].set( o, a, d ); - p[3].set( o, b, a ); - } - else - { - p[0].set( Vec3( 0, 1, 0), _top ); - p[1].set( Vec3( 1, 0, 0), _right ); - p[2].set( Vec3( 0,-1, 0),-_bottom ); - p[3].set( Vec3(-1, 0, 0),-_left ); - } - p[4].set( Vec3(0, 0, 1), -_nearPlane ); - p[5].set( Vec3(0, 0,-1), _farPlane ); -} - - -template -void Frustum::planes(Plane3 p[6], const Matrix44 &M) const -{ - // - // Plane order: Top, Right, Bottom, Left, Near, Far. - // Normals point outwards. - // - - Vec3 a = Vec3( _left, _bottom, -_nearPlane) * M; - Vec3 b = Vec3( _left, _top, -_nearPlane) * M; - Vec3 c = Vec3( _right, _top, -_nearPlane) * M; - Vec3 d = Vec3( _right, _bottom, -_nearPlane) * M; - if (! _orthographic) - { - double s = _farPlane / double(_nearPlane); - T farLeft = (T) (s * _left); - T farRight = (T) (s * _right); - T farTop = (T) (s * _top); - T farBottom = (T) (s * _bottom); - Vec3 e = Vec3( farLeft, farBottom, -_farPlane) * M; - Vec3 f = Vec3( farLeft, farTop, -_farPlane) * M; - Vec3 g = Vec3( farRight, farTop, -_farPlane) * M; - Vec3 o = Vec3(0,0,0) * M; - p[0].set( o, c, b ); - p[1].set( o, d, c ); - p[2].set( o, a, d ); - p[3].set( o, b, a ); - p[4].set( a, d, c ); - p[5].set( e, f, g ); - } - else - { - Vec3 e = Vec3( _left, _bottom, -_farPlane) * M; - Vec3 f = Vec3( _left, _top, -_farPlane) * M; - Vec3 g = Vec3( _right, _top, -_farPlane) * M; - Vec3 h = Vec3( _right, _bottom, -_farPlane) * M; - p[0].set( c, g, f ); - p[1].set( d, h, g ); - p[2].set( a, e, h ); - p[3].set( b, f, e ); - p[4].set( a, d, c ); - p[5].set( e, f, g ); - } -} - -typedef Frustum Frustumf; -typedef Frustum Frustumd; - - -IMATH_INTERNAL_NAMESPACE_HEADER_EXIT - - -#if defined _WIN32 || defined _WIN64 - #ifdef _redef_near - #define near - #endif - #ifdef _redef_far - #define far - #endif -#endif - -#endif // INCLUDED_IMATHFRUSTUM_H diff --git a/3rdparty/openexr/Imath/ImathFrustumTest.h b/3rdparty/openexr/Imath/ImathFrustumTest.h deleted file mode 100644 index d9c10cc379..0000000000 --- a/3rdparty/openexr/Imath/ImathFrustumTest.h +++ /dev/null @@ -1,417 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2011-2012, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - -#ifndef INCLUDED_IMATHFRUSTUMTEST_H -#define INCLUDED_IMATHFRUSTUMTEST_H - -//------------------------------------------------------------------------- -// -// This file contains algorithms applied to or in conjunction with -// Frustum visibility testing (Imath::Frustum). -// -// Methods for frustum-based rejection of primitives are contained here. -// -//------------------------------------------------------------------------- - -#include "ImathFrustum.h" -#include "ImathBox.h" -#include "ImathSphere.h" -#include "ImathMatrix.h" -#include "ImathVec.h" -#include "ImathNamespace.h" - -IMATH_INTERNAL_NAMESPACE_HEADER_ENTER - -///////////////////////////////////////////////////////////////// -// FrustumTest -// -// template class FrustumTest -// -// This is a helper class, designed to accelerate the case -// where many tests are made against the same frustum. -// That's a really common case. -// -// The acceleration is achieved by pre-computing the planes of -// the frustum, along with the ablsolute values of the plane normals. -// - - - -////////////////////////////////////////////////////////////////// -// How to use this -// -// Given that you already have: -// Imath::Frustum myFrustum -// Imath::Matrix44 myCameraWorldMatrix -// -// First, make a frustum test object: -// FrustumTest myFrustumTest(myFrustum, myCameraWorldMatrix) -// -// Whenever the camera or frustum changes, call: -// myFrustumTest.setFrustum(myFrustum, myCameraWorldMatrix) -// -// For each object you want to test for visibility, call: -// myFrustumTest.isVisible(myBox) -// myFrustumTest.isVisible(mySphere) -// myFrustumTest.isVisible(myVec3) -// myFrustumTest.completelyContains(myBox) -// myFrustumTest.completelyContains(mySphere) -// - - - - -////////////////////////////////////////////////////////////////// -// Explanation of how it works -// -// -// We store six world-space Frustum planes (nx, ny, nz, offset) -// -// Points: To test a Vec3 for visibility, test it against each plane -// using the normal (v dot n - offset) method. (the result is exact) -// -// BBoxes: To test an axis-aligned bbox, test the center against each plane -// using the normal (v dot n - offset) method, but offset by the -// box extents dot the abs of the plane normal. (the result is NOT -// exact, but will not return false-negatives.) -// -// Spheres: To test a sphere, test the center against each plane -// using the normal (v dot n - offset) method, but offset by the -// sphere's radius. (the result is NOT exact, but will not return -// false-negatives.) -// -// -// SPECIAL NOTE: "Where are the dot products?" -// Actual dot products are currently slow for most SIMD architectures. -// In order to keep this code optimization-ready, the dot products -// are all performed using vector adds and multipies. -// -// In order to do this, the plane equations are stored in "transpose" -// form, with the X components grouped into an X vector, etc. -// - - -template -class FrustumTest -{ -public: - FrustumTest() - { - Frustum frust; - Matrix44 cameraMat; - cameraMat.makeIdentity(); - setFrustum(frust, cameraMat); - } - FrustumTest(const Frustum &frustum, const Matrix44 &cameraMat) - { - setFrustum(frustum, cameraMat); - } - - //////////////////////////////////////////////////////////////////// - // setFrustum() - // This updates the frustum test with a new frustum and matrix. - // This should usually be called just once per frame. - void setFrustum(const Frustum &frustum, const Matrix44 &cameraMat); - - //////////////////////////////////////////////////////////////////// - // isVisible() - // Check to see if shapes are visible. - bool isVisible(const Sphere3 &sphere) const; - bool isVisible(const Box > &box) const; - bool isVisible(const Vec3 &vec) const; - - //////////////////////////////////////////////////////////////////// - // completelyContains() - // Check to see if shapes are entirely contained. - bool completelyContains(const Sphere3 &sphere) const; - bool completelyContains(const Box > &box) const; - - // These next items are kept primarily for debugging tools. - // It's useful for drawing the culling environment, and also - // for getting an "outside view" of the culling frustum. - IMATH_INTERNAL_NAMESPACE::Matrix44 cameraMat() const {return cameraMatrix;} - IMATH_INTERNAL_NAMESPACE::Frustum currentFrustum() const {return currFrustum;} - -protected: - // To understand why the planes are stored this way, see - // the SPECIAL NOTE above. - Vec3 planeNormX[2]; // The X compunents from 6 plane equations - Vec3 planeNormY[2]; // The Y compunents from 6 plane equations - Vec3 planeNormZ[2]; // The Z compunents from 6 plane equations - - Vec3 planeOffsetVec[2]; // The distance offsets from 6 plane equations - - // The absolute values are stored to assist with bounding box tests. - Vec3 planeNormAbsX[2]; // The abs(X) compunents from 6 plane equations - Vec3 planeNormAbsY[2]; // The abs(X) compunents from 6 plane equations - Vec3 planeNormAbsZ[2]; // The abs(X) compunents from 6 plane equations - - // These are kept primarily for debugging tools. - Frustum currFrustum; - Matrix44 cameraMatrix; -}; - - -//////////////////////////////////////////////////////////////////// -// setFrustum() -// This should usually only be called once per frame, or however -// often the camera moves. -template -void FrustumTest::setFrustum(const Frustum &frustum, - const Matrix44 &cameraMat) -{ - Plane3 frustumPlanes[6]; - frustum.planes(frustumPlanes, cameraMat); - - // Here's where we effectively transpose the plane equations. - // We stuff all six X's into the two planeNormX vectors, etc. - for (int i = 0; i < 2; ++i) - { - int index = i * 3; - - planeNormX[i] = Vec3(frustumPlanes[index + 0].normal.x, - frustumPlanes[index + 1].normal.x, - frustumPlanes[index + 2].normal.x); - planeNormY[i] = Vec3(frustumPlanes[index + 0].normal.y, - frustumPlanes[index + 1].normal.y, - frustumPlanes[index + 2].normal.y); - planeNormZ[i] = Vec3(frustumPlanes[index + 0].normal.z, - frustumPlanes[index + 1].normal.z, - frustumPlanes[index + 2].normal.z); - - planeNormAbsX[i] = Vec3(IMATH_INTERNAL_NAMESPACE::abs(planeNormX[i].x), - IMATH_INTERNAL_NAMESPACE::abs(planeNormX[i].y), - IMATH_INTERNAL_NAMESPACE::abs(planeNormX[i].z)); - planeNormAbsY[i] = Vec3(IMATH_INTERNAL_NAMESPACE::abs(planeNormY[i].x), - IMATH_INTERNAL_NAMESPACE::abs(planeNormY[i].y), - IMATH_INTERNAL_NAMESPACE::abs(planeNormY[i].z)); - planeNormAbsZ[i] = Vec3(IMATH_INTERNAL_NAMESPACE::abs(planeNormZ[i].x), - IMATH_INTERNAL_NAMESPACE::abs(planeNormZ[i].y), - IMATH_INTERNAL_NAMESPACE::abs(planeNormZ[i].z)); - - planeOffsetVec[i] = Vec3(frustumPlanes[index + 0].distance, - frustumPlanes[index + 1].distance, - frustumPlanes[index + 2].distance); - } - currFrustum = frustum; - cameraMatrix = cameraMat; -} - - -//////////////////////////////////////////////////////////////////// -// isVisible(Sphere) -// Returns true if any part of the sphere is inside -// the frustum. -// The result MAY return close false-positives, but not false-negatives. -// -template -bool FrustumTest::isVisible(const Sphere3 &sphere) const -{ - Vec3 center = sphere.center; - Vec3 radiusVec = Vec3(sphere.radius, sphere.radius, sphere.radius); - - // This is a vertical dot-product on three vectors at once. - Vec3 d0 = planeNormX[0] * center.x - + planeNormY[0] * center.y - + planeNormZ[0] * center.z - - radiusVec - - planeOffsetVec[0]; - - if (d0.x >= 0 || d0.y >= 0 || d0.z >= 0) - return false; - - Vec3 d1 = planeNormX[1] * center.x - + planeNormY[1] * center.y - + planeNormZ[1] * center.z - - radiusVec - - planeOffsetVec[1]; - - if (d1.x >= 0 || d1.y >= 0 || d1.z >= 0) - return false; - - return true; -} - -//////////////////////////////////////////////////////////////////// -// completelyContains(Sphere) -// Returns true if every part of the sphere is inside -// the frustum. -// The result MAY return close false-negatives, but not false-positives. -// -template -bool FrustumTest::completelyContains(const Sphere3 &sphere) const -{ - Vec3 center = sphere.center; - Vec3 radiusVec = Vec3(sphere.radius, sphere.radius, sphere.radius); - - // This is a vertical dot-product on three vectors at once. - Vec3 d0 = planeNormX[0] * center.x - + planeNormY[0] * center.y - + planeNormZ[0] * center.z - + radiusVec - - planeOffsetVec[0]; - - if (d0.x >= 0 || d0.y >= 0 || d0.z >= 0) - return false; - - Vec3 d1 = planeNormX[1] * center.x - + planeNormY[1] * center.y - + planeNormZ[1] * center.z - + radiusVec - - planeOffsetVec[1]; - - if (d1.x >= 0 || d1.y >= 0 || d1.z >= 0) - return false; - - return true; -} - -//////////////////////////////////////////////////////////////////// -// isVisible(Box) -// Returns true if any part of the axis-aligned box -// is inside the frustum. -// The result MAY return close false-positives, but not false-negatives. -// -template -bool FrustumTest::isVisible(const Box > &box) const -{ - if (box.isEmpty()) - return false; - - Vec3 center = (box.min + box.max) / 2; - Vec3 extent = (box.max - center); - - // This is a vertical dot-product on three vectors at once. - Vec3 d0 = planeNormX[0] * center.x - + planeNormY[0] * center.y - + planeNormZ[0] * center.z - - planeNormAbsX[0] * extent.x - - planeNormAbsY[0] * extent.y - - planeNormAbsZ[0] * extent.z - - planeOffsetVec[0]; - - if (d0.x >= 0 || d0.y >= 0 || d0.z >= 0) - return false; - - Vec3 d1 = planeNormX[1] * center.x - + planeNormY[1] * center.y - + planeNormZ[1] * center.z - - planeNormAbsX[1] * extent.x - - planeNormAbsY[1] * extent.y - - planeNormAbsZ[1] * extent.z - - planeOffsetVec[1]; - - if (d1.x >= 0 || d1.y >= 0 || d1.z >= 0) - return false; - - return true; -} - -//////////////////////////////////////////////////////////////////// -// completelyContains(Box) -// Returns true if every part of the axis-aligned box -// is inside the frustum. -// The result MAY return close false-negatives, but not false-positives. -// -template -bool FrustumTest::completelyContains(const Box > &box) const -{ - if (box.isEmpty()) - return false; - - Vec3 center = (box.min + box.max) / 2; - Vec3 extent = (box.max - center); - - // This is a vertical dot-product on three vectors at once. - Vec3 d0 = planeNormX[0] * center.x - + planeNormY[0] * center.y - + planeNormZ[0] * center.z - + planeNormAbsX[0] * extent.x - + planeNormAbsY[0] * extent.y - + planeNormAbsZ[0] * extent.z - - planeOffsetVec[0]; - - if (d0.x >= 0 || d0.y >= 0 || d0.z >= 0) - return false; - - Vec3 d1 = planeNormX[1] * center.x - + planeNormY[1] * center.y - + planeNormZ[1] * center.z - + planeNormAbsX[1] * extent.x - + planeNormAbsY[1] * extent.y - + planeNormAbsZ[1] * extent.z - - planeOffsetVec[1]; - - if (d1.x >= 0 || d1.y >= 0 || d1.z >= 0) - return false; - - return true; -} - - -//////////////////////////////////////////////////////////////////// -// isVisible(Vec3) -// Returns true if the point is inside the frustum. -// -template -bool FrustumTest::isVisible(const Vec3 &vec) const -{ - // This is a vertical dot-product on three vectors at once. - Vec3 d0 = (planeNormX[0] * vec.x) - + (planeNormY[0] * vec.y) - + (planeNormZ[0] * vec.z) - - planeOffsetVec[0]; - - if (d0.x >= 0 || d0.y >= 0 || d0.z >= 0) - return false; - - Vec3 d1 = (planeNormX[1] * vec.x) - + (planeNormY[1] * vec.y) - + (planeNormZ[1] * vec.z) - - planeOffsetVec[1]; - - if (d1.x >= 0 || d1.y >= 0 || d1.z >= 0) - return false; - - return true; -} - - -typedef FrustumTest FrustumTestf; -typedef FrustumTest FrustumTestd; - -IMATH_INTERNAL_NAMESPACE_HEADER_EXIT - -#endif // INCLUDED_IMATHFRUSTUMTEST_H diff --git a/3rdparty/openexr/Imath/ImathFun.cpp b/3rdparty/openexr/Imath/ImathFun.cpp deleted file mode 100644 index 65cf62024b..0000000000 --- a/3rdparty/openexr/Imath/ImathFun.cpp +++ /dev/null @@ -1,181 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2002-2012, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - -#include "ImathFun.h" - -IMATH_INTERNAL_NAMESPACE_SOURCE_ENTER - - -float -succf (float f) -{ - union {float f; int i;} u; - u.f = f; - - if ((u.i & 0x7f800000) == 0x7f800000) - { - // Nan or infinity; don't change value. - } - else if (u.i == 0x00000000 || u.i == 0x80000000) - { - // Plus or minus zero. - - u.i = 0x00000001; - } - else if (u.i > 0) - { - // Positive float, normalized or denormalized. - // Incrementing the largest positive float - // produces +infinity. - - ++u.i; - } - else - { - // Negative normalized or denormalized float. - - --u.i; - } - - return u.f; -} - - -float -predf (float f) -{ - union {float f; int i;} u; - u.f = f; - - if ((u.i & 0x7f800000) == 0x7f800000) - { - // Nan or infinity; don't change value. - } - else if (u.i == 0x00000000 || u.i == 0x80000000) - { - // Plus or minus zero. - - u.i = 0x80000001; - } - else if (u.i > 0) - { - // Positive float, normalized or denormalized. - - --u.i; - } - else - { - // Negative normalized or denormalized float. - // Decrementing the largest negative float - // produces -infinity. - - ++u.i; - } - - return u.f; -} - - -double -succd (double d) -{ - union {double d; Int64 i;} u; - u.d = d; - - if ((u.i & 0x7ff0000000000000LL) == 0x7ff0000000000000LL) - { - // Nan or infinity; don't change value. - } - else if (u.i == 0x0000000000000000LL || u.i == 0x8000000000000000LL) - { - // Plus or minus zero. - - u.i = 0x0000000000000001LL; - } - else if (u.d > 0) - { - // Positive double, normalized or denormalized. - // Incrementing the largest positive double - // produces +infinity. - - ++u.i; - } - else - { - // Negative normalized or denormalized double. - - --u.i; - } - - return u.d; -} - - -double -predd (double d) -{ - union {double d; Int64 i;} u; - u.d = d; - - if ((u.i & 0x7ff0000000000000LL) == 0x7ff0000000000000LL) - { - // Nan or infinity; don't change value. - } - else if (u.i == 0x0000000000000000LL || u.i == 0x8000000000000000LL) - { - // Plus or minus zero. - - u.i = 0x8000000000000001LL; - } - else if (u.d > 0) - { - // Positive double, normalized or denormalized. - - --u.i; - } - else - { - // Negative normalized or denormalized double. - // Decrementing the largest negative double - // produces -infinity. - - ++u.i; - } - - return u.d; -} - - -IMATH_INTERNAL_NAMESPACE_SOURCE_EXIT diff --git a/3rdparty/openexr/Imath/ImathFun.h b/3rdparty/openexr/Imath/ImathFun.h deleted file mode 100644 index 068c68251b..0000000000 --- a/3rdparty/openexr/Imath/ImathFun.h +++ /dev/null @@ -1,269 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2002-2012, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - - -#ifndef INCLUDED_IMATHFUN_H -#define INCLUDED_IMATHFUN_H - -//----------------------------------------------------------------------------- -// -// Miscellaneous utility functions -// -//----------------------------------------------------------------------------- - -#include "ImathExport.h" -#include "ImathLimits.h" -#include "ImathInt64.h" -#include "ImathNamespace.h" - -IMATH_INTERNAL_NAMESPACE_HEADER_ENTER - -template -inline T -abs (T a) -{ - return (a > T(0)) ? a : -a; -} - - -template -inline int -sign (T a) -{ - return (a > T(0))? 1 : ((a < T(0)) ? -1 : 0); -} - - -template -inline T -lerp (T a, T b, Q t) -{ - return (T) (a * (1 - t) + b * t); -} - - -template -inline T -ulerp (T a, T b, Q t) -{ - return (T) ((a > b)? (a - (a - b) * t): (a + (b - a) * t)); -} - - -template -inline T -lerpfactor(T m, T a, T b) -{ - // - // Return how far m is between a and b, that is return t such that - // if: - // t = lerpfactor(m, a, b); - // then: - // m = lerp(a, b, t); - // - // If a==b, return 0. - // - - T d = b - a; - T n = m - a; - - if (abs(d) > T(1) || abs(n) < limits::max() * abs(d)) - return n / d; - - return T(0); -} - - -template -inline T -clamp (T a, T l, T h) -{ - return (a < l)? l : ((a > h)? h : a); -} - - -template -inline int -cmp (T a, T b) -{ - return IMATH_INTERNAL_NAMESPACE::sign (a - b); -} - - -template -inline int -cmpt (T a, T b, T t) -{ - return (IMATH_INTERNAL_NAMESPACE::abs (a - b) <= t)? 0 : cmp (a, b); -} - - -template -inline bool -iszero (T a, T t) -{ - return (IMATH_INTERNAL_NAMESPACE::abs (a) <= t) ? 1 : 0; -} - - -template -inline bool -equal (T1 a, T2 b, T3 t) -{ - return IMATH_INTERNAL_NAMESPACE::abs (a - b) <= t; -} - -template -inline int -floor (T x) -{ - return (x >= 0)? int (x): -(int (-x) + (-x > int (-x))); -} - - -template -inline int -ceil (T x) -{ - return -floor (-x); -} - -template -inline int -trunc (T x) -{ - return (x >= 0) ? int(x) : -int(-x); -} - - -// -// Integer division and remainder where the -// remainder of x/y has the same sign as x: -// -// divs(x,y) == (abs(x) / abs(y)) * (sign(x) * sign(y)) -// mods(x,y) == x - y * divs(x,y) -// - -inline int -divs (int x, int y) -{ - return (x >= 0)? ((y >= 0)? ( x / y): -( x / -y)): - ((y >= 0)? -(-x / y): (-x / -y)); -} - - -inline int -mods (int x, int y) -{ - return (x >= 0)? ((y >= 0)? ( x % y): ( x % -y)): - ((y >= 0)? -(-x % y): -(-x % -y)); -} - - -// -// Integer division and remainder where the -// remainder of x/y is always positive: -// -// divp(x,y) == floor (double(x) / double (y)) -// modp(x,y) == x - y * divp(x,y) -// - -inline int -divp (int x, int y) -{ - return (x >= 0)? ((y >= 0)? ( x / y): -( x / -y)): - ((y >= 0)? -((y-1-x) / y): ((-y-1-x) / -y)); -} - - -inline int -modp (int x, int y) -{ - return x - y * divp (x, y); -} - -//---------------------------------------------------------- -// Successor and predecessor for floating-point numbers: -// -// succf(f) returns float(f+e), where e is the smallest -// positive number such that float(f+e) != f. -// -// predf(f) returns float(f-e), where e is the smallest -// positive number such that float(f-e) != f. -// -// succd(d) returns double(d+e), where e is the smallest -// positive number such that double(d+e) != d. -// -// predd(d) returns double(d-e), where e is the smallest -// positive number such that double(d-e) != d. -// -// Exceptions: If the input value is an infinity or a nan, -// succf(), predf(), succd(), and predd() all -// return the input value without changing it. -// -//---------------------------------------------------------- - -IMATH_EXPORT float succf (float f); -IMATH_EXPORT float predf (float f); - -IMATH_EXPORT double succd (double d); -IMATH_EXPORT double predd (double d); - -// -// Return true if the number is not a NaN or Infinity. -// - -inline bool -finitef (float f) -{ - union {float f; int i;} u; - u.f = f; - - return (u.i & 0x7f800000) != 0x7f800000; -} - -inline bool -finited (double d) -{ - union {double d; Int64 i;} u; - u.d = d; - - return (u.i & 0x7ff0000000000000LL) != 0x7ff0000000000000LL; -} - - -IMATH_INTERNAL_NAMESPACE_HEADER_EXIT - -#endif // INCLUDED_IMATHFUN_H diff --git a/3rdparty/openexr/Imath/ImathHalfLimits.h b/3rdparty/openexr/Imath/ImathHalfLimits.h deleted file mode 100644 index de54bd6ce3..0000000000 --- a/3rdparty/openexr/Imath/ImathHalfLimits.h +++ /dev/null @@ -1,68 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2002-2012, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - - -#ifndef INCLUDED_IMATHHALFLIMITS_H -#define INCLUDED_IMATHHALFLIMITS_H - -//-------------------------------------------------- -// -// Imath-style limits for class half. -// -//-------------------------------------------------- - -#include "ImathLimits.h" -#include "ImathNamespace.h" - -#include "half.h" - -IMATH_INTERNAL_NAMESPACE_HEADER_ENTER - - -template <> -struct limits -{ - static float min() {return -HALF_MAX;} - static float max() {return HALF_MAX;} - static float smallest() {return HALF_MIN;} - static float epsilon() {return HALF_EPSILON;} - static bool isIntegral() {return false;} - static bool isSigned() {return true;} -}; - - -IMATH_INTERNAL_NAMESPACE_HEADER_EXIT - -#endif // INCLUDED_IMATHHALFLIMITS_H diff --git a/3rdparty/openexr/Imath/ImathInt64.h b/3rdparty/openexr/Imath/ImathInt64.h deleted file mode 100644 index 00102d6857..0000000000 --- a/3rdparty/openexr/Imath/ImathInt64.h +++ /dev/null @@ -1,65 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2006-2012, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - -#ifndef INCLUDED_IMATH_INT64_H -#define INCLUDED_IMATH_INT64_H - -//---------------------------------------------------------------------------- -// -// Int64 -- unsigned 64-bit integers -// -//---------------------------------------------------------------------------- - -#include "ImathNamespace.h" -#include - -IMATH_INTERNAL_NAMESPACE_HEADER_ENTER - - -#if (defined _WIN32 || defined _WIN64) && _MSC_VER >= 1300 - typedef unsigned __int64 Int64; - typedef __int64 SInt64; -#elif ULONG_MAX == 18446744073709551615LU - typedef long unsigned int Int64; - typedef long int SInt64; -#else - typedef long long unsigned int Int64; - typedef long long int SInt64; -#endif - - -IMATH_INTERNAL_NAMESPACE_HEADER_EXIT - -#endif // INCLUDED_IMATH_INT64_H diff --git a/3rdparty/openexr/Imath/ImathInterval.h b/3rdparty/openexr/Imath/ImathInterval.h deleted file mode 100644 index 0062f4d0a2..0000000000 --- a/3rdparty/openexr/Imath/ImathInterval.h +++ /dev/null @@ -1,226 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2002-2012, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - - -#ifndef INCLUDED_IMATHINTERVAL_H -#define INCLUDED_IMATHINTERVAL_H - - -//------------------------------------------------------------------- -// -// class Imath::Interval -// -------------------------------- -// -// An Interval has a min and a max and some miscellaneous -// functions. It is basically a Box that allows T to be -// a scalar. -// -//------------------------------------------------------------------- - -#include "ImathVec.h" -#include "ImathNamespace.h" - -IMATH_INTERNAL_NAMESPACE_HEADER_ENTER - - -template -class Interval -{ - public: - - //------------------------- - // Data Members are public - //------------------------- - - T min; - T max; - - //----------------------------------------------------- - // Constructors - an "empty" Interval is created by default - //----------------------------------------------------- - - Interval(); - Interval(const T& point); - Interval(const T& minT, const T& maxT); - - //-------------------------------- - // Operators: we get != from STL - //-------------------------------- - - bool operator == (const Interval &src) const; - - //------------------ - // Interval manipulation - //------------------ - - void makeEmpty(); - void extendBy(const T& point); - void extendBy(const Interval& interval); - - //--------------------------------------------------- - // Query functions - these compute results each time - //--------------------------------------------------- - - T size() const; - T center() const; - bool intersects(const T &point) const; - bool intersects(const Interval &interval) const; - - //---------------- - // Classification - //---------------- - - bool hasVolume() const; - bool isEmpty() const; -}; - - -//-------------------- -// Convenient typedefs -//-------------------- - - -typedef Interval Intervalf; -typedef Interval Intervald; -typedef Interval Intervals; -typedef Interval Intervali; - -//---------------- -// Implementation -//---------------- - - -template -inline Interval::Interval() -{ - makeEmpty(); -} - -template -inline Interval::Interval(const T& point) -{ - min = point; - max = point; -} - -template -inline Interval::Interval(const T& minV, const T& maxV) -{ - min = minV; - max = maxV; -} - -template -inline bool -Interval::operator == (const Interval &src) const -{ - return (min == src.min && max == src.max); -} - -template -inline void -Interval::makeEmpty() -{ - min = limits::max(); - max = limits::min(); -} - -template -inline void -Interval::extendBy(const T& point) -{ - if ( point < min ) - min = point; - - if ( point > max ) - max = point; -} - -template -inline void -Interval::extendBy(const Interval& interval) -{ - if ( interval.min < min ) - min = interval.min; - - if ( interval.max > max ) - max = interval.max; -} - -template -inline bool -Interval::intersects(const T& point) const -{ - return point >= min && point <= max; -} - -template -inline bool -Interval::intersects(const Interval& interval) const -{ - return interval.max >= min && interval.min <= max; -} - -template -inline T -Interval::size() const -{ - return max-min; -} - -template -inline T -Interval::center() const -{ - return (max+min)/2; -} - -template -inline bool -Interval::isEmpty() const -{ - return max < min; -} - -template -inline bool Interval::hasVolume() const -{ - return max > min; -} - - -IMATH_INTERNAL_NAMESPACE_HEADER_EXIT - -#endif // INCLUDED_IMATHINTERVAL_H diff --git a/3rdparty/openexr/Imath/ImathLimits.h b/3rdparty/openexr/Imath/ImathLimits.h deleted file mode 100644 index eb6f9998e5..0000000000 --- a/3rdparty/openexr/Imath/ImathLimits.h +++ /dev/null @@ -1,268 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2002-2012, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - - -#ifndef INCLUDED_IMATHLIMITS_H -#define INCLUDED_IMATHLIMITS_H - -//---------------------------------------------------------------- -// -// Limitations of the basic C++ numerical data types -// -//---------------------------------------------------------------- - -#include "ImathNamespace.h" -#include -#include - -//------------------------------------------ -// In Windows, min and max are macros. Yay. -//------------------------------------------ - -#if defined _WIN32 || defined _WIN64 - #ifdef min - #undef min - #endif - #ifdef max - #undef max - #endif -#endif - -IMATH_INTERNAL_NAMESPACE_HEADER_ENTER - - -//----------------------------------------------------------------- -// -// Template class limits returns information about the limits -// of numerical data type T: -// -// min() largest possible negative value of type T -// -// max() largest possible positive value of type T -// -// smallest() smallest possible positive value of type T -// (for float and double: smallest normalized -// positive value) -// -// epsilon() smallest possible e of type T, for which -// 1 + e != 1 -// -// isIntegral() returns true if T is an integral type -// -// isSigned() returns true if T is signed -// -// Class limits is useful to implement template classes or -// functions which depend on the limits of a numerical type -// which is not known in advance; for example: -// -// template max (T x[], int n) -// { -// T m = limits::min(); -// -// for (int i = 0; i < n; i++) -// if (m < x[i]) -// m = x[i]; -// -// return m; -// } -// -// Class limits has been implemented for the following types: -// -// char, signed char, unsigned char -// short, unsigned short -// int, unsigned int -// long, unsigned long -// float -// double -// long double -// -// Class limits has only static member functions, all of which -// are implemented as inlines. No objects of type limits are -// ever created. -// -//----------------------------------------------------------------- - - -template struct limits -{ - static T min(); - static T max(); - static T smallest(); - static T epsilon(); - static bool isIntegral(); - static bool isSigned(); -}; - - -//--------------- -// Implementation -//--------------- - -template <> -struct limits -{ - static char min() {return CHAR_MIN;} - static char max() {return CHAR_MAX;} - static char smallest() {return 1;} - static char epsilon() {return 1;} - static bool isIntegral() {return true;} - static bool isSigned() {return (char) ~0 < 0;} -}; - -template <> -struct limits -{ - static signed char min() {return SCHAR_MIN;} - static signed char max() {return SCHAR_MAX;} - static signed char smallest() {return 1;} - static signed char epsilon() {return 1;} - static bool isIntegral() {return true;} - static bool isSigned() {return true;} -}; - -template <> -struct limits -{ - static unsigned char min() {return 0;} - static unsigned char max() {return UCHAR_MAX;} - static unsigned char smallest() {return 1;} - static unsigned char epsilon() {return 1;} - static bool isIntegral() {return true;} - static bool isSigned() {return false;} -}; - -template <> -struct limits -{ - static short min() {return SHRT_MIN;} - static short max() {return SHRT_MAX;} - static short smallest() {return 1;} - static short epsilon() {return 1;} - static bool isIntegral() {return true;} - static bool isSigned() {return true;} -}; - -template <> -struct limits -{ - static unsigned short min() {return 0;} - static unsigned short max() {return USHRT_MAX;} - static unsigned short smallest() {return 1;} - static unsigned short epsilon() {return 1;} - static bool isIntegral() {return true;} - static bool isSigned() {return false;} -}; - -template <> -struct limits -{ - static int min() {return INT_MIN;} - static int max() {return INT_MAX;} - static int smallest() {return 1;} - static int epsilon() {return 1;} - static bool isIntegral() {return true;} - static bool isSigned() {return true;} -}; - -template <> -struct limits -{ - static unsigned int min() {return 0;} - static unsigned int max() {return UINT_MAX;} - static unsigned int smallest() {return 1;} - static unsigned int epsilon() {return 1;} - static bool isIntegral() {return true;} - static bool isSigned() {return false;} -}; - -template <> -struct limits -{ - static long min() {return LONG_MIN;} - static long max() {return LONG_MAX;} - static long smallest() {return 1;} - static long epsilon() {return 1;} - static bool isIntegral() {return true;} - static bool isSigned() {return true;} -}; - -template <> -struct limits -{ - static unsigned long min() {return 0;} - static unsigned long max() {return ULONG_MAX;} - static unsigned long smallest() {return 1;} - static unsigned long epsilon() {return 1;} - static bool isIntegral() {return true;} - static bool isSigned() {return false;} -}; - -template <> -struct limits -{ - static float min() {return -FLT_MAX;} - static float max() {return FLT_MAX;} - static float smallest() {return FLT_MIN;} - static float epsilon() {return FLT_EPSILON;} - static bool isIntegral() {return false;} - static bool isSigned() {return true;} -}; - -template <> -struct limits -{ - static double min() {return -DBL_MAX;} - static double max() {return DBL_MAX;} - static double smallest() {return DBL_MIN;} - static double epsilon() {return DBL_EPSILON;} - static bool isIntegral() {return false;} - static bool isSigned() {return true;} -}; - -template <> -struct limits -{ - static long double min() {return -LDBL_MAX;} - static long double max() {return LDBL_MAX;} - static long double smallest() {return LDBL_MIN;} - static long double epsilon() {return LDBL_EPSILON;} - static bool isIntegral() {return false;} - static bool isSigned() {return true;} -}; - - -IMATH_INTERNAL_NAMESPACE_HEADER_EXIT - -#endif // INCLUDED_IMATHLIMITS_H diff --git a/3rdparty/openexr/Imath/ImathLine.h b/3rdparty/openexr/Imath/ImathLine.h deleted file mode 100644 index 61e4508b9f..0000000000 --- a/3rdparty/openexr/Imath/ImathLine.h +++ /dev/null @@ -1,185 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2002-2012, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - - -#ifndef INCLUDED_IMATHLINE_H -#define INCLUDED_IMATHLINE_H - -//------------------------------------- -// -// A 3D line class template -// -//------------------------------------- - -#include "ImathVec.h" -#include "ImathLimits.h" -#include "ImathMatrix.h" -#include "ImathNamespace.h" - -IMATH_INTERNAL_NAMESPACE_HEADER_ENTER - - -template -class Line3 -{ - public: - - Vec3 pos; - Vec3 dir; - - //------------------------------------------------------------- - // Constructors - default is normalized units along direction - //------------------------------------------------------------- - - Line3() {} - Line3(const Vec3& point1, const Vec3& point2); - - //------------------ - // State Query/Set - //------------------ - - void set(const Vec3& point1, - const Vec3& point2); - - //------- - // F(t) - //------- - - Vec3 operator() (T parameter) const; - - //--------- - // Query - //--------- - - T distanceTo(const Vec3& point) const; - T distanceTo(const Line3& line) const; - Vec3 closestPointTo(const Vec3& point) const; - Vec3 closestPointTo(const Line3& line) const; -}; - - -//-------------------- -// Convenient typedefs -//-------------------- - -typedef Line3 Line3f; -typedef Line3 Line3d; - - -//--------------- -// Implementation -//--------------- - -template -inline Line3::Line3(const Vec3 &p0, const Vec3 &p1) -{ - set(p0,p1); -} - -template -inline void Line3::set(const Vec3 &p0, const Vec3 &p1) -{ - pos = p0; dir = p1-p0; - dir.normalize(); -} - -template -inline Vec3 Line3::operator()(T parameter) const -{ - return pos + dir * parameter; -} - -template -inline T Line3::distanceTo(const Vec3& point) const -{ - return (closestPointTo(point)-point).length(); -} - -template -inline Vec3 Line3::closestPointTo(const Vec3& point) const -{ - return ((point - pos) ^ dir) * dir + pos; -} - -template -inline T Line3::distanceTo(const Line3& line) const -{ - T d = (dir % line.dir) ^ (line.pos - pos); - return (d >= 0)? d: -d; -} - -template -inline Vec3 -Line3::closestPointTo(const Line3& line) const -{ - // Assumes the lines are normalized - - Vec3 posLpos = pos - line.pos ; - T c = dir ^ posLpos; - T a = line.dir ^ dir; - T f = line.dir ^ posLpos ; - T num = c - a * f; - - T denom = a*a - 1; - - T absDenom = ((denom >= 0)? denom: -denom); - - if (absDenom < 1) - { - T absNum = ((num >= 0)? num: -num); - - if (absNum >= absDenom * limits::max()) - return pos; - } - - return pos + dir * (num / denom); -} - -template -std::ostream& operator<< (std::ostream &o, const Line3 &line) -{ - return o << "(" << line.pos << ", " << line.dir << ")"; -} - -template -inline Line3 operator * (const Line3 &line, const Matrix44 &M) -{ - return Line3( line.pos * M, (line.pos + line.dir) * M ); -} - - -IMATH_INTERNAL_NAMESPACE_HEADER_EXIT - -#endif // INCLUDED_IMATHLINE_H diff --git a/3rdparty/openexr/Imath/ImathLineAlgo.h b/3rdparty/openexr/Imath/ImathLineAlgo.h deleted file mode 100644 index b08a1ffee3..0000000000 --- a/3rdparty/openexr/Imath/ImathLineAlgo.h +++ /dev/null @@ -1,288 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2002-2012, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - - -#ifndef INCLUDED_IMATHLINEALGO_H -#define INCLUDED_IMATHLINEALGO_H - -//------------------------------------------------------------------ -// -// This file contains algorithms applied to or in conjunction -// with lines (Imath::Line). These algorithms may require -// more headers to compile. The assumption made is that these -// functions are called much less often than the basic line -// functions or these functions require more support classes -// -// Contains: -// -// bool closestPoints(const Line& line1, -// const Line& line2, -// Vec3& point1, -// Vec3& point2) -// -// bool intersect( const Line3 &line, -// const Vec3 &v0, -// const Vec3 &v1, -// const Vec3 &v2, -// Vec3 &pt, -// Vec3 &barycentric, -// bool &front) -// -// V3f -// closestVertex(const Vec3 &v0, -// const Vec3 &v1, -// const Vec3 &v2, -// const Line3 &l) -// -// V3f -// rotatePoint(const Vec3 p, Line3 l, float angle) -// -//------------------------------------------------------------------ - -#include "ImathLine.h" -#include "ImathVecAlgo.h" -#include "ImathFun.h" -#include "ImathNamespace.h" - -IMATH_INTERNAL_NAMESPACE_HEADER_ENTER - - -template -bool -closestPoints - (const Line3& line1, - const Line3& line2, - Vec3& point1, - Vec3& point2) -{ - // - // Compute point1 and point2 such that point1 is on line1, point2 - // is on line2 and the distance between point1 and point2 is minimal. - // This function returns true if point1 and point2 can be computed, - // or false if line1 and line2 are parallel or nearly parallel. - // This function assumes that line1.dir and line2.dir are normalized. - // - - Vec3 w = line1.pos - line2.pos; - T d1w = line1.dir ^ w; - T d2w = line2.dir ^ w; - T d1d2 = line1.dir ^ line2.dir; - T n1 = d1d2 * d2w - d1w; - T n2 = d2w - d1d2 * d1w; - T d = 1 - d1d2 * d1d2; - T absD = abs (d); - - if ((absD > 1) || - (abs (n1) < limits::max() * absD && - abs (n2) < limits::max() * absD)) - { - point1 = line1 (n1 / d); - point2 = line2 (n2 / d); - return true; - } - else - { - return false; - } -} - - -template -bool -intersect - (const Line3 &line, - const Vec3 &v0, - const Vec3 &v1, - const Vec3 &v2, - Vec3 &pt, - Vec3 &barycentric, - bool &front) -{ - // - // Given a line and a triangle (v0, v1, v2), the intersect() function - // finds the intersection of the line and the plane that contains the - // triangle. - // - // If the intersection point cannot be computed, either because the - // line and the triangle's plane are nearly parallel or because the - // triangle's area is very small, intersect() returns false. - // - // If the intersection point is outside the triangle, intersect - // returns false. - // - // If the intersection point, pt, is inside the triangle, intersect() - // computes a front-facing flag and the barycentric coordinates of - // the intersection point, and returns true. - // - // The front-facing flag is true if the dot product of the triangle's - // normal, (v2-v1)%(v1-v0), and the line's direction is negative. - // - // The barycentric coordinates have the following property: - // - // pt = v0 * barycentric.x + v1 * barycentric.y + v2 * barycentric.z - // - - Vec3 edge0 = v1 - v0; - Vec3 edge1 = v2 - v1; - Vec3 normal = edge1 % edge0; - - T l = normal.length(); - - if (l != 0) - normal /= l; - else - return false; // zero-area triangle - - // - // d is the distance of line.pos from the plane that contains the triangle. - // The intersection point is at line.pos + (d/nd) * line.dir. - // - - T d = normal ^ (v0 - line.pos); - T nd = normal ^ line.dir; - - if (abs (nd) > 1 || abs (d) < limits::max() * abs (nd)) - pt = line (d / nd); - else - return false; // line and plane are nearly parallel - - // - // Compute the barycentric coordinates of the intersection point. - // The intersection is inside the triangle if all three barycentric - // coordinates are between zero and one. - // - - { - Vec3 en = edge0.normalized(); - Vec3 a = pt - v0; - Vec3 b = v2 - v0; - Vec3 c = (a - en * (en ^ a)); - Vec3 d = (b - en * (en ^ b)); - T e = c ^ d; - T f = d ^ d; - - if (e >= 0 && e <= f) - barycentric.z = e / f; - else - return false; // outside - } - - { - Vec3 en = edge1.normalized(); - Vec3 a = pt - v1; - Vec3 b = v0 - v1; - Vec3 c = (a - en * (en ^ a)); - Vec3 d = (b - en * (en ^ b)); - T e = c ^ d; - T f = d ^ d; - - if (e >= 0 && e <= f) - barycentric.x = e / f; - else - return false; // outside - } - - barycentric.y = 1 - barycentric.x - barycentric.z; - - if (barycentric.y < 0) - return false; // outside - - front = ((line.dir ^ normal) < 0); - return true; -} - - -template -Vec3 -closestVertex - (const Vec3 &v0, - const Vec3 &v1, - const Vec3 &v2, - const Line3 &l) -{ - Vec3 nearest = v0; - T neardot = (v0 - l.closestPointTo(v0)).length2(); - - T tmp = (v1 - l.closestPointTo(v1)).length2(); - - if (tmp < neardot) - { - neardot = tmp; - nearest = v1; - } - - tmp = (v2 - l.closestPointTo(v2)).length2(); - if (tmp < neardot) - { - neardot = tmp; - nearest = v2; - } - - return nearest; -} - - -template -Vec3 -rotatePoint (const Vec3 p, Line3 l, T angle) -{ - // - // Rotate the point p around the line l by the given angle. - // - - // - // Form a coordinate frame with . The rotation is the in xy - // plane. - // - - Vec3 q = l.closestPointTo(p); - Vec3 x = p - q; - T radius = x.length(); - - x.normalize(); - Vec3 y = (x % l.dir).normalize(); - - T cosangle = Math::cos(angle); - T sinangle = Math::sin(angle); - - Vec3 r = q + x * radius * cosangle + y * radius * sinangle; - - return r; -} - - -IMATH_INTERNAL_NAMESPACE_HEADER_EXIT - -#endif // INCLUDED_IMATHLINEALGO_H diff --git a/3rdparty/openexr/Imath/ImathMath.h b/3rdparty/openexr/Imath/ImathMath.h deleted file mode 100644 index 1961d5a82c..0000000000 --- a/3rdparty/openexr/Imath/ImathMath.h +++ /dev/null @@ -1,208 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2002-2012, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - - -#ifndef INCLUDED_IMATHMATH_H -#define INCLUDED_IMATHMATH_H - -//---------------------------------------------------------------------------- -// -// ImathMath.h -// -// This file contains template functions which call the double- -// precision math functions defined in math.h (sin(), sqrt(), -// exp() etc.), with specializations that call the faster -// single-precision versions (sinf(), sqrtf(), expf() etc.) -// when appropriate. -// -// Example: -// -// double x = Math::sqrt (3); // calls ::sqrt(double); -// float y = Math::sqrt (3); // calls ::sqrtf(float); -// -// When would I want to use this? -// -// You may be writing a template which needs to call some function -// defined in math.h, for example to extract a square root, but you -// don't know whether to call the single- or the double-precision -// version of this function (sqrt() or sqrtf()): -// -// template -// T -// glorp (T x) -// { -// return sqrt (x + 1); // should call ::sqrtf(float) -// } // if x is a float, but we -// // don't know if it is -// -// Using the templates in this file, you can make sure that -// the appropriate version of the math function is called: -// -// template -// T -// glorp (T x, T y) -// { -// return Math::sqrt (x + 1); // calls ::sqrtf(float) if x -// } // is a float, ::sqrt(double) -// // otherwise -// -//---------------------------------------------------------------------------- - -#include "ImathPlatform.h" -#include "ImathLimits.h" -#include "ImathNamespace.h" -#include - -IMATH_INTERNAL_NAMESPACE_HEADER_ENTER - - -template -struct Math -{ - static T acos (T x) {return ::acos (double(x));} - static T asin (T x) {return ::asin (double(x));} - static T atan (T x) {return ::atan (double(x));} - static T atan2 (T x, T y) {return ::atan2 (double(x), double(y));} - static T cos (T x) {return ::cos (double(x));} - static T sin (T x) {return ::sin (double(x));} - static T tan (T x) {return ::tan (double(x));} - static T cosh (T x) {return ::cosh (double(x));} - static T sinh (T x) {return ::sinh (double(x));} - static T tanh (T x) {return ::tanh (double(x));} - static T exp (T x) {return ::exp (double(x));} - static T log (T x) {return ::log (double(x));} - static T log10 (T x) {return ::log10 (double(x));} - static T modf (T x, T *iptr) - { - double ival; - T rval( ::modf (double(x),&ival)); - *iptr = ival; - return rval; - } - static T pow (T x, T y) {return ::pow (double(x), double(y));} - static T sqrt (T x) {return ::sqrt (double(x));} - static T ceil (T x) {return ::ceil (double(x));} - static T fabs (T x) {return ::fabs (double(x));} - static T floor (T x) {return ::floor (double(x));} - static T fmod (T x, T y) {return ::fmod (double(x), double(y));} - static T hypot (T x, T y) {return ::hypot (double(x), double(y));} -}; - - -template <> -struct Math -{ - static float acos (float x) {return ::acosf (x);} - static float asin (float x) {return ::asinf (x);} - static float atan (float x) {return ::atanf (x);} - static float atan2 (float x, float y) {return ::atan2f (x, y);} - static float cos (float x) {return ::cosf (x);} - static float sin (float x) {return ::sinf (x);} - static float tan (float x) {return ::tanf (x);} - static float cosh (float x) {return ::coshf (x);} - static float sinh (float x) {return ::sinhf (x);} - static float tanh (float x) {return ::tanhf (x);} - static float exp (float x) {return ::expf (x);} - static float log (float x) {return ::logf (x);} - static float log10 (float x) {return ::log10f (x);} - static float modf (float x, float *y) {return ::modff (x, y);} - static float pow (float x, float y) {return ::powf (x, y);} - static float sqrt (float x) {return ::sqrtf (x);} - static float ceil (float x) {return ::ceilf (x);} - static float fabs (float x) {return ::fabsf (x);} - static float floor (float x) {return ::floorf (x);} - static float fmod (float x, float y) {return ::fmodf (x, y);} -#if !defined(_MSC_VER) - static float hypot (float x, float y) {return ::hypotf (x, y);} -#else - static float hypot (float x, float y) {return ::sqrtf(x*x + y*y);} -#endif -}; - - -//-------------------------------------------------------------------------- -// Don Hatch's version of sin(x)/x, which is accurate for very small x. -// Returns 1 for x == 0. -//-------------------------------------------------------------------------- - -template -inline T -sinx_over_x (T x) -{ - if (x * x < limits::epsilon()) - return T (1); - else - return Math::sin (x) / x; -} - - -//-------------------------------------------------------------------------- -// Compare two numbers and test if they are "approximately equal": -// -// equalWithAbsError (x1, x2, e) -// -// Returns true if x1 is the same as x2 with an absolute error of -// no more than e, -// -// abs (x1 - x2) <= e -// -// equalWithRelError (x1, x2, e) -// -// Returns true if x1 is the same as x2 with an relative error of -// no more than e, -// -// abs (x1 - x2) <= e * x1 -// -//-------------------------------------------------------------------------- - -template -inline bool -equalWithAbsError (T x1, T x2, T e) -{ - return ((x1 > x2)? x1 - x2: x2 - x1) <= e; -} - - -template -inline bool -equalWithRelError (T x1, T x2, T e) -{ - return ((x1 > x2)? x1 - x2: x2 - x1) <= e * ((x1 > 0)? x1: -x1); -} - - -IMATH_INTERNAL_NAMESPACE_HEADER_EXIT - -#endif // INCLUDED_IMATHMATH_H diff --git a/3rdparty/openexr/Imath/ImathMatrix.h b/3rdparty/openexr/Imath/ImathMatrix.h deleted file mode 100644 index 5729c73458..0000000000 --- a/3rdparty/openexr/Imath/ImathMatrix.h +++ /dev/null @@ -1,3433 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2002-2012, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - - -#ifndef INCLUDED_IMATHMATRIX_H -#define INCLUDED_IMATHMATRIX_H - -//---------------------------------------------------------------- -// -// 2D (3x3) and 3D (4x4) transformation matrix templates. -// -//---------------------------------------------------------------- - -#include "ImathPlatform.h" -#include "ImathFun.h" -#include "ImathExc.h" -#include "ImathVec.h" -#include "ImathShear.h" -#include "ImathNamespace.h" - -#include -#include -#include -#include - -#if (defined _WIN32 || defined _WIN64) && defined _MSC_VER -// suppress exception specification warnings -#pragma warning(disable:4290) -#endif - - -IMATH_INTERNAL_NAMESPACE_HEADER_ENTER - -enum Uninitialized {UNINITIALIZED}; - - -template class Matrix33 -{ - public: - - //------------------- - // Access to elements - //------------------- - - T x[3][3]; - - T * operator [] (int i); - const T * operator [] (int i) const; - - - //------------- - // Constructors - //------------- - - Matrix33 (Uninitialized) {} - - Matrix33 (); - // 1 0 0 - // 0 1 0 - // 0 0 1 - - Matrix33 (T a); - // a a a - // a a a - // a a a - - Matrix33 (const T a[3][3]); - // a[0][0] a[0][1] a[0][2] - // a[1][0] a[1][1] a[1][2] - // a[2][0] a[2][1] a[2][2] - - Matrix33 (T a, T b, T c, T d, T e, T f, T g, T h, T i); - - // a b c - // d e f - // g h i - - - //-------------------------------- - // Copy constructor and assignment - //-------------------------------- - - Matrix33 (const Matrix33 &v); - template explicit Matrix33 (const Matrix33 &v); - - const Matrix33 & operator = (const Matrix33 &v); - const Matrix33 & operator = (T a); - - - //---------------------- - // Compatibility with Sb - //---------------------- - - T * getValue (); - const T * getValue () const; - - template - void getValue (Matrix33 &v) const; - template - Matrix33 & setValue (const Matrix33 &v); - - template - Matrix33 & setTheMatrix (const Matrix33 &v); - - - //--------- - // Identity - //--------- - - void makeIdentity(); - - - //--------- - // Equality - //--------- - - bool operator == (const Matrix33 &v) const; - bool operator != (const Matrix33 &v) const; - - //----------------------------------------------------------------------- - // Compare two matrices and test if they are "approximately equal": - // - // equalWithAbsError (m, e) - // - // Returns true if the coefficients of this and m are the same with - // an absolute error of no more than e, i.e., for all i, j - // - // abs (this[i][j] - m[i][j]) <= e - // - // equalWithRelError (m, e) - // - // Returns true if the coefficients of this and m are the same with - // a relative error of no more than e, i.e., for all i, j - // - // abs (this[i] - v[i][j]) <= e * abs (this[i][j]) - //----------------------------------------------------------------------- - - bool equalWithAbsError (const Matrix33 &v, T e) const; - bool equalWithRelError (const Matrix33 &v, T e) const; - - - //------------------------ - // Component-wise addition - //------------------------ - - const Matrix33 & operator += (const Matrix33 &v); - const Matrix33 & operator += (T a); - Matrix33 operator + (const Matrix33 &v) const; - - - //--------------------------- - // Component-wise subtraction - //--------------------------- - - const Matrix33 & operator -= (const Matrix33 &v); - const Matrix33 & operator -= (T a); - Matrix33 operator - (const Matrix33 &v) const; - - - //------------------------------------ - // Component-wise multiplication by -1 - //------------------------------------ - - Matrix33 operator - () const; - const Matrix33 & negate (); - - - //------------------------------ - // Component-wise multiplication - //------------------------------ - - const Matrix33 & operator *= (T a); - Matrix33 operator * (T a) const; - - - //----------------------------------- - // Matrix-times-matrix multiplication - //----------------------------------- - - const Matrix33 & operator *= (const Matrix33 &v); - Matrix33 operator * (const Matrix33 &v) const; - - - //----------------------------------------------------------------- - // Vector-times-matrix multiplication; see also the "operator *" - // functions defined below. - // - // m.multVecMatrix(src,dst) implements a homogeneous transformation - // by computing Vec3 (src.x, src.y, 1) * m and dividing by the - // result's third element. - // - // m.multDirMatrix(src,dst) multiplies src by the upper left 2x2 - // submatrix, ignoring the rest of matrix m. - //----------------------------------------------------------------- - - template - void multVecMatrix(const Vec2 &src, Vec2 &dst) const; - - template - void multDirMatrix(const Vec2 &src, Vec2 &dst) const; - - - //------------------------ - // Component-wise division - //------------------------ - - const Matrix33 & operator /= (T a); - Matrix33 operator / (T a) const; - - - //------------------ - // Transposed matrix - //------------------ - - const Matrix33 & transpose (); - Matrix33 transposed () const; - - - //------------------------------------------------------------ - // Inverse matrix: If singExc is false, inverting a singular - // matrix produces an identity matrix. If singExc is true, - // inverting a singular matrix throws a SingMatrixExc. - // - // inverse() and invert() invert matrices using determinants; - // gjInverse() and gjInvert() use the Gauss-Jordan method. - // - // inverse() and invert() are significantly faster than - // gjInverse() and gjInvert(), but the results may be slightly - // less accurate. - // - //------------------------------------------------------------ - - const Matrix33 & invert (bool singExc = false); - - Matrix33 inverse (bool singExc = false) const; - - const Matrix33 & gjInvert (bool singExc = false); - - Matrix33 gjInverse (bool singExc = false) const; - - - //------------------------------------------------ - // Calculate the matrix minor of the (r,c) element - //------------------------------------------------ - - T minorOf (const int r, const int c) const; - - //--------------------------------------------------- - // Build a minor using the specified rows and columns - //--------------------------------------------------- - - T fastMinor (const int r0, const int r1, - const int c0, const int c1) const; - - //------------ - // Determinant - //------------ - - T determinant() const; - - //----------------------------------------- - // Set matrix to rotation by r (in radians) - //----------------------------------------- - - template - const Matrix33 & setRotation (S r); - - - //----------------------------- - // Rotate the given matrix by r - //----------------------------- - - template - const Matrix33 & rotate (S r); - - - //-------------------------------------------- - // Set matrix to scale by given uniform factor - //-------------------------------------------- - - const Matrix33 & setScale (T s); - - - //------------------------------------ - // Set matrix to scale by given vector - //------------------------------------ - - template - const Matrix33 & setScale (const Vec2 &s); - - - //---------------------- - // Scale the matrix by s - //---------------------- - - template - const Matrix33 & scale (const Vec2 &s); - - - //------------------------------------------ - // Set matrix to translation by given vector - //------------------------------------------ - - template - const Matrix33 & setTranslation (const Vec2 &t); - - - //----------------------------- - // Return translation component - //----------------------------- - - Vec2 translation () const; - - - //-------------------------- - // Translate the matrix by t - //-------------------------- - - template - const Matrix33 & translate (const Vec2 &t); - - - //----------------------------------------------------------- - // Set matrix to shear x for each y coord. by given factor xy - //----------------------------------------------------------- - - template - const Matrix33 & setShear (const S &h); - - - //------------------------------------------------------------- - // Set matrix to shear x for each y coord. by given factor h[0] - // and to shear y for each x coord. by given factor h[1] - //------------------------------------------------------------- - - template - const Matrix33 & setShear (const Vec2 &h); - - - //----------------------------------------------------------- - // Shear the matrix in x for each y coord. by given factor xy - //----------------------------------------------------------- - - template - const Matrix33 & shear (const S &xy); - - - //----------------------------------------------------------- - // Shear the matrix in x for each y coord. by given factor xy - // and shear y for each x coord. by given factor yx - //----------------------------------------------------------- - - template - const Matrix33 & shear (const Vec2 &h); - - - //-------------------------------------------------------- - // Number of the row and column dimensions, since - // Matrix33 is a square matrix. - //-------------------------------------------------------- - - static unsigned int dimensions() {return 3;} - - - //------------------------------------------------- - // Limitations of type T (see also class limits) - //------------------------------------------------- - - static T baseTypeMin() {return limits::min();} - static T baseTypeMax() {return limits::max();} - static T baseTypeSmallest() {return limits::smallest();} - static T baseTypeEpsilon() {return limits::epsilon();} - - typedef T BaseType; - typedef Vec3 BaseVecType; - - private: - - template - struct isSameType - { - enum {value = 0}; - }; - - template - struct isSameType - { - enum {value = 1}; - }; -}; - - -template class Matrix44 -{ - public: - - //------------------- - // Access to elements - //------------------- - - T x[4][4]; - - T * operator [] (int i); - const T * operator [] (int i) const; - - - //------------- - // Constructors - //------------- - - Matrix44 (Uninitialized) {} - - Matrix44 (); - // 1 0 0 0 - // 0 1 0 0 - // 0 0 1 0 - // 0 0 0 1 - - Matrix44 (T a); - // a a a a - // a a a a - // a a a a - // a a a a - - Matrix44 (const T a[4][4]) ; - // a[0][0] a[0][1] a[0][2] a[0][3] - // a[1][0] a[1][1] a[1][2] a[1][3] - // a[2][0] a[2][1] a[2][2] a[2][3] - // a[3][0] a[3][1] a[3][2] a[3][3] - - Matrix44 (T a, T b, T c, T d, T e, T f, T g, T h, - T i, T j, T k, T l, T m, T n, T o, T p); - - // a b c d - // e f g h - // i j k l - // m n o p - - Matrix44 (Matrix33 r, Vec3 t); - // r r r 0 - // r r r 0 - // r r r 0 - // t t t 1 - - - //-------------------------------- - // Copy constructor and assignment - //-------------------------------- - - Matrix44 (const Matrix44 &v); - template explicit Matrix44 (const Matrix44 &v); - - const Matrix44 & operator = (const Matrix44 &v); - const Matrix44 & operator = (T a); - - - //---------------------- - // Compatibility with Sb - //---------------------- - - T * getValue (); - const T * getValue () const; - - template - void getValue (Matrix44 &v) const; - template - Matrix44 & setValue (const Matrix44 &v); - - template - Matrix44 & setTheMatrix (const Matrix44 &v); - - //--------- - // Identity - //--------- - - void makeIdentity(); - - - //--------- - // Equality - //--------- - - bool operator == (const Matrix44 &v) const; - bool operator != (const Matrix44 &v) const; - - //----------------------------------------------------------------------- - // Compare two matrices and test if they are "approximately equal": - // - // equalWithAbsError (m, e) - // - // Returns true if the coefficients of this and m are the same with - // an absolute error of no more than e, i.e., for all i, j - // - // abs (this[i][j] - m[i][j]) <= e - // - // equalWithRelError (m, e) - // - // Returns true if the coefficients of this and m are the same with - // a relative error of no more than e, i.e., for all i, j - // - // abs (this[i] - v[i][j]) <= e * abs (this[i][j]) - //----------------------------------------------------------------------- - - bool equalWithAbsError (const Matrix44 &v, T e) const; - bool equalWithRelError (const Matrix44 &v, T e) const; - - - //------------------------ - // Component-wise addition - //------------------------ - - const Matrix44 & operator += (const Matrix44 &v); - const Matrix44 & operator += (T a); - Matrix44 operator + (const Matrix44 &v) const; - - - //--------------------------- - // Component-wise subtraction - //--------------------------- - - const Matrix44 & operator -= (const Matrix44 &v); - const Matrix44 & operator -= (T a); - Matrix44 operator - (const Matrix44 &v) const; - - - //------------------------------------ - // Component-wise multiplication by -1 - //------------------------------------ - - Matrix44 operator - () const; - const Matrix44 & negate (); - - - //------------------------------ - // Component-wise multiplication - //------------------------------ - - const Matrix44 & operator *= (T a); - Matrix44 operator * (T a) const; - - - //----------------------------------- - // Matrix-times-matrix multiplication - //----------------------------------- - - const Matrix44 & operator *= (const Matrix44 &v); - Matrix44 operator * (const Matrix44 &v) const; - - static void multiply (const Matrix44 &a, // assumes that - const Matrix44 &b, // &a != &c and - Matrix44 &c); // &b != &c. - - - //----------------------------------------------------------------- - // Vector-times-matrix multiplication; see also the "operator *" - // functions defined below. - // - // m.multVecMatrix(src,dst) implements a homogeneous transformation - // by computing Vec4 (src.x, src.y, src.z, 1) * m and dividing by - // the result's third element. - // - // m.multDirMatrix(src,dst) multiplies src by the upper left 3x3 - // submatrix, ignoring the rest of matrix m. - //----------------------------------------------------------------- - - template - void multVecMatrix(const Vec3 &src, Vec3 &dst) const; - - template - void multDirMatrix(const Vec3 &src, Vec3 &dst) const; - - - //------------------------ - // Component-wise division - //------------------------ - - const Matrix44 & operator /= (T a); - Matrix44 operator / (T a) const; - - - //------------------ - // Transposed matrix - //------------------ - - const Matrix44 & transpose (); - Matrix44 transposed () const; - - - //------------------------------------------------------------ - // Inverse matrix: If singExc is false, inverting a singular - // matrix produces an identity matrix. If singExc is true, - // inverting a singular matrix throws a SingMatrixExc. - // - // inverse() and invert() invert matrices using determinants; - // gjInverse() and gjInvert() use the Gauss-Jordan method. - // - // inverse() and invert() are significantly faster than - // gjInverse() and gjInvert(), but the results may be slightly - // less accurate. - // - //------------------------------------------------------------ - - const Matrix44 & invert (bool singExc = false); - - Matrix44 inverse (bool singExc = false) const; - - const Matrix44 & gjInvert (bool singExc = false); - - Matrix44 gjInverse (bool singExc = false) const; - - - //------------------------------------------------ - // Calculate the matrix minor of the (r,c) element - //------------------------------------------------ - - T minorOf (const int r, const int c) const; - - //--------------------------------------------------- - // Build a minor using the specified rows and columns - //--------------------------------------------------- - - T fastMinor (const int r0, const int r1, const int r2, - const int c0, const int c1, const int c2) const; - - //------------ - // Determinant - //------------ - - T determinant() const; - - //-------------------------------------------------------- - // Set matrix to rotation by XYZ euler angles (in radians) - //-------------------------------------------------------- - - template - const Matrix44 & setEulerAngles (const Vec3& r); - - - //-------------------------------------------------------- - // Set matrix to rotation around given axis by given angle - //-------------------------------------------------------- - - template - const Matrix44 & setAxisAngle (const Vec3& ax, S ang); - - - //------------------------------------------- - // Rotate the matrix by XYZ euler angles in r - //------------------------------------------- - - template - const Matrix44 & rotate (const Vec3 &r); - - - //-------------------------------------------- - // Set matrix to scale by given uniform factor - //-------------------------------------------- - - const Matrix44 & setScale (T s); - - - //------------------------------------ - // Set matrix to scale by given vector - //------------------------------------ - - template - const Matrix44 & setScale (const Vec3 &s); - - - //---------------------- - // Scale the matrix by s - //---------------------- - - template - const Matrix44 & scale (const Vec3 &s); - - - //------------------------------------------ - // Set matrix to translation by given vector - //------------------------------------------ - - template - const Matrix44 & setTranslation (const Vec3 &t); - - - //----------------------------- - // Return translation component - //----------------------------- - - const Vec3 translation () const; - - - //-------------------------- - // Translate the matrix by t - //-------------------------- - - template - const Matrix44 & translate (const Vec3 &t); - - - //------------------------------------------------------------- - // Set matrix to shear by given vector h. The resulting matrix - // will shear x for each y coord. by a factor of h[0] ; - // will shear x for each z coord. by a factor of h[1] ; - // will shear y for each z coord. by a factor of h[2] . - //------------------------------------------------------------- - - template - const Matrix44 & setShear (const Vec3 &h); - - - //------------------------------------------------------------ - // Set matrix to shear by given factors. The resulting matrix - // will shear x for each y coord. by a factor of h.xy ; - // will shear x for each z coord. by a factor of h.xz ; - // will shear y for each z coord. by a factor of h.yz ; - // will shear y for each x coord. by a factor of h.yx ; - // will shear z for each x coord. by a factor of h.zx ; - // will shear z for each y coord. by a factor of h.zy . - //------------------------------------------------------------ - - template - const Matrix44 & setShear (const Shear6 &h); - - - //-------------------------------------------------------- - // Shear the matrix by given vector. The composed matrix - // will be * , where the shear matrix ... - // will shear x for each y coord. by a factor of h[0] ; - // will shear x for each z coord. by a factor of h[1] ; - // will shear y for each z coord. by a factor of h[2] . - //-------------------------------------------------------- - - template - const Matrix44 & shear (const Vec3 &h); - - //-------------------------------------------------------- - // Number of the row and column dimensions, since - // Matrix44 is a square matrix. - //-------------------------------------------------------- - - static unsigned int dimensions() {return 4;} - - - //------------------------------------------------------------ - // Shear the matrix by the given factors. The composed matrix - // will be * , where the shear matrix ... - // will shear x for each y coord. by a factor of h.xy ; - // will shear x for each z coord. by a factor of h.xz ; - // will shear y for each z coord. by a factor of h.yz ; - // will shear y for each x coord. by a factor of h.yx ; - // will shear z for each x coord. by a factor of h.zx ; - // will shear z for each y coord. by a factor of h.zy . - //------------------------------------------------------------ - - template - const Matrix44 & shear (const Shear6 &h); - - - //------------------------------------------------- - // Limitations of type T (see also class limits) - //------------------------------------------------- - - static T baseTypeMin() {return limits::min();} - static T baseTypeMax() {return limits::max();} - static T baseTypeSmallest() {return limits::smallest();} - static T baseTypeEpsilon() {return limits::epsilon();} - - typedef T BaseType; - typedef Vec4 BaseVecType; - - private: - - template - struct isSameType - { - enum {value = 0}; - }; - - template - struct isSameType - { - enum {value = 1}; - }; -}; - - -//-------------- -// Stream output -//-------------- - -template -std::ostream & operator << (std::ostream & s, const Matrix33 &m); - -template -std::ostream & operator << (std::ostream & s, const Matrix44 &m); - - -//--------------------------------------------- -// Vector-times-matrix multiplication operators -//--------------------------------------------- - -template -const Vec2 & operator *= (Vec2 &v, const Matrix33 &m); - -template -Vec2 operator * (const Vec2 &v, const Matrix33 &m); - -template -const Vec3 & operator *= (Vec3 &v, const Matrix33 &m); - -template -Vec3 operator * (const Vec3 &v, const Matrix33 &m); - -template -const Vec3 & operator *= (Vec3 &v, const Matrix44 &m); - -template -Vec3 operator * (const Vec3 &v, const Matrix44 &m); - -template -const Vec4 & operator *= (Vec4 &v, const Matrix44 &m); - -template -Vec4 operator * (const Vec4 &v, const Matrix44 &m); - -//------------------------- -// Typedefs for convenience -//------------------------- - -typedef Matrix33 M33f; -typedef Matrix33 M33d; -typedef Matrix44 M44f; -typedef Matrix44 M44d; - - -//--------------------------- -// Implementation of Matrix33 -//--------------------------- - -template -inline T * -Matrix33::operator [] (int i) -{ - return x[i]; -} - -template -inline const T * -Matrix33::operator [] (int i) const -{ - return x[i]; -} - -template -inline -Matrix33::Matrix33 () -{ - memset (x, 0, sizeof (x)); - x[0][0] = 1; - x[1][1] = 1; - x[2][2] = 1; -} - -template -inline -Matrix33::Matrix33 (T a) -{ - x[0][0] = a; - x[0][1] = a; - x[0][2] = a; - x[1][0] = a; - x[1][1] = a; - x[1][2] = a; - x[2][0] = a; - x[2][1] = a; - x[2][2] = a; -} - -template -inline -Matrix33::Matrix33 (const T a[3][3]) -{ - memcpy (x, a, sizeof (x)); -} - -template -inline -Matrix33::Matrix33 (T a, T b, T c, T d, T e, T f, T g, T h, T i) -{ - x[0][0] = a; - x[0][1] = b; - x[0][2] = c; - x[1][0] = d; - x[1][1] = e; - x[1][2] = f; - x[2][0] = g; - x[2][1] = h; - x[2][2] = i; -} - -template -inline -Matrix33::Matrix33 (const Matrix33 &v) -{ - memcpy (x, v.x, sizeof (x)); -} - -template -template -inline -Matrix33::Matrix33 (const Matrix33 &v) -{ - x[0][0] = T (v.x[0][0]); - x[0][1] = T (v.x[0][1]); - x[0][2] = T (v.x[0][2]); - x[1][0] = T (v.x[1][0]); - x[1][1] = T (v.x[1][1]); - x[1][2] = T (v.x[1][2]); - x[2][0] = T (v.x[2][0]); - x[2][1] = T (v.x[2][1]); - x[2][2] = T (v.x[2][2]); -} - -template -inline const Matrix33 & -Matrix33::operator = (const Matrix33 &v) -{ - memcpy (x, v.x, sizeof (x)); - return *this; -} - -template -inline const Matrix33 & -Matrix33::operator = (T a) -{ - x[0][0] = a; - x[0][1] = a; - x[0][2] = a; - x[1][0] = a; - x[1][1] = a; - x[1][2] = a; - x[2][0] = a; - x[2][1] = a; - x[2][2] = a; - return *this; -} - -template -inline T * -Matrix33::getValue () -{ - return (T *) &x[0][0]; -} - -template -inline const T * -Matrix33::getValue () const -{ - return (const T *) &x[0][0]; -} - -template -template -inline void -Matrix33::getValue (Matrix33 &v) const -{ - if (isSameType::value) - { - memcpy (v.x, x, sizeof (x)); - } - else - { - v.x[0][0] = x[0][0]; - v.x[0][1] = x[0][1]; - v.x[0][2] = x[0][2]; - v.x[1][0] = x[1][0]; - v.x[1][1] = x[1][1]; - v.x[1][2] = x[1][2]; - v.x[2][0] = x[2][0]; - v.x[2][1] = x[2][1]; - v.x[2][2] = x[2][2]; - } -} - -template -template -inline Matrix33 & -Matrix33::setValue (const Matrix33 &v) -{ - if (isSameType::value) - { - memcpy (x, v.x, sizeof (x)); - } - else - { - x[0][0] = v.x[0][0]; - x[0][1] = v.x[0][1]; - x[0][2] = v.x[0][2]; - x[1][0] = v.x[1][0]; - x[1][1] = v.x[1][1]; - x[1][2] = v.x[1][2]; - x[2][0] = v.x[2][0]; - x[2][1] = v.x[2][1]; - x[2][2] = v.x[2][2]; - } - - return *this; -} - -template -template -inline Matrix33 & -Matrix33::setTheMatrix (const Matrix33 &v) -{ - if (isSameType::value) - { - memcpy (x, v.x, sizeof (x)); - } - else - { - x[0][0] = v.x[0][0]; - x[0][1] = v.x[0][1]; - x[0][2] = v.x[0][2]; - x[1][0] = v.x[1][0]; - x[1][1] = v.x[1][1]; - x[1][2] = v.x[1][2]; - x[2][0] = v.x[2][0]; - x[2][1] = v.x[2][1]; - x[2][2] = v.x[2][2]; - } - - return *this; -} - -template -inline void -Matrix33::makeIdentity() -{ - memset (x, 0, sizeof (x)); - x[0][0] = 1; - x[1][1] = 1; - x[2][2] = 1; -} - -template -bool -Matrix33::operator == (const Matrix33 &v) const -{ - return x[0][0] == v.x[0][0] && - x[0][1] == v.x[0][1] && - x[0][2] == v.x[0][2] && - x[1][0] == v.x[1][0] && - x[1][1] == v.x[1][1] && - x[1][2] == v.x[1][2] && - x[2][0] == v.x[2][0] && - x[2][1] == v.x[2][1] && - x[2][2] == v.x[2][2]; -} - -template -bool -Matrix33::operator != (const Matrix33 &v) const -{ - return x[0][0] != v.x[0][0] || - x[0][1] != v.x[0][1] || - x[0][2] != v.x[0][2] || - x[1][0] != v.x[1][0] || - x[1][1] != v.x[1][1] || - x[1][2] != v.x[1][2] || - x[2][0] != v.x[2][0] || - x[2][1] != v.x[2][1] || - x[2][2] != v.x[2][2]; -} - -template -bool -Matrix33::equalWithAbsError (const Matrix33 &m, T e) const -{ - for (int i = 0; i < 3; i++) - for (int j = 0; j < 3; j++) - if (!IMATH_INTERNAL_NAMESPACE::equalWithAbsError ((*this)[i][j], m[i][j], e)) - return false; - - return true; -} - -template -bool -Matrix33::equalWithRelError (const Matrix33 &m, T e) const -{ - for (int i = 0; i < 3; i++) - for (int j = 0; j < 3; j++) - if (!IMATH_INTERNAL_NAMESPACE::equalWithRelError ((*this)[i][j], m[i][j], e)) - return false; - - return true; -} - -template -const Matrix33 & -Matrix33::operator += (const Matrix33 &v) -{ - x[0][0] += v.x[0][0]; - x[0][1] += v.x[0][1]; - x[0][2] += v.x[0][2]; - x[1][0] += v.x[1][0]; - x[1][1] += v.x[1][1]; - x[1][2] += v.x[1][2]; - x[2][0] += v.x[2][0]; - x[2][1] += v.x[2][1]; - x[2][2] += v.x[2][2]; - - return *this; -} - -template -const Matrix33 & -Matrix33::operator += (T a) -{ - x[0][0] += a; - x[0][1] += a; - x[0][2] += a; - x[1][0] += a; - x[1][1] += a; - x[1][2] += a; - x[2][0] += a; - x[2][1] += a; - x[2][2] += a; - - return *this; -} - -template -Matrix33 -Matrix33::operator + (const Matrix33 &v) const -{ - return Matrix33 (x[0][0] + v.x[0][0], - x[0][1] + v.x[0][1], - x[0][2] + v.x[0][2], - x[1][0] + v.x[1][0], - x[1][1] + v.x[1][1], - x[1][2] + v.x[1][2], - x[2][0] + v.x[2][0], - x[2][1] + v.x[2][1], - x[2][2] + v.x[2][2]); -} - -template -const Matrix33 & -Matrix33::operator -= (const Matrix33 &v) -{ - x[0][0] -= v.x[0][0]; - x[0][1] -= v.x[0][1]; - x[0][2] -= v.x[0][2]; - x[1][0] -= v.x[1][0]; - x[1][1] -= v.x[1][1]; - x[1][2] -= v.x[1][2]; - x[2][0] -= v.x[2][0]; - x[2][1] -= v.x[2][1]; - x[2][2] -= v.x[2][2]; - - return *this; -} - -template -const Matrix33 & -Matrix33::operator -= (T a) -{ - x[0][0] -= a; - x[0][1] -= a; - x[0][2] -= a; - x[1][0] -= a; - x[1][1] -= a; - x[1][2] -= a; - x[2][0] -= a; - x[2][1] -= a; - x[2][2] -= a; - - return *this; -} - -template -Matrix33 -Matrix33::operator - (const Matrix33 &v) const -{ - return Matrix33 (x[0][0] - v.x[0][0], - x[0][1] - v.x[0][1], - x[0][2] - v.x[0][2], - x[1][0] - v.x[1][0], - x[1][1] - v.x[1][1], - x[1][2] - v.x[1][2], - x[2][0] - v.x[2][0], - x[2][1] - v.x[2][1], - x[2][2] - v.x[2][2]); -} - -template -Matrix33 -Matrix33::operator - () const -{ - return Matrix33 (-x[0][0], - -x[0][1], - -x[0][2], - -x[1][0], - -x[1][1], - -x[1][2], - -x[2][0], - -x[2][1], - -x[2][2]); -} - -template -const Matrix33 & -Matrix33::negate () -{ - x[0][0] = -x[0][0]; - x[0][1] = -x[0][1]; - x[0][2] = -x[0][2]; - x[1][0] = -x[1][0]; - x[1][1] = -x[1][1]; - x[1][2] = -x[1][2]; - x[2][0] = -x[2][0]; - x[2][1] = -x[2][1]; - x[2][2] = -x[2][2]; - - return *this; -} - -template -const Matrix33 & -Matrix33::operator *= (T a) -{ - x[0][0] *= a; - x[0][1] *= a; - x[0][2] *= a; - x[1][0] *= a; - x[1][1] *= a; - x[1][2] *= a; - x[2][0] *= a; - x[2][1] *= a; - x[2][2] *= a; - - return *this; -} - -template -Matrix33 -Matrix33::operator * (T a) const -{ - return Matrix33 (x[0][0] * a, - x[0][1] * a, - x[0][2] * a, - x[1][0] * a, - x[1][1] * a, - x[1][2] * a, - x[2][0] * a, - x[2][1] * a, - x[2][2] * a); -} - -template -inline Matrix33 -operator * (T a, const Matrix33 &v) -{ - return v * a; -} - -template -const Matrix33 & -Matrix33::operator *= (const Matrix33 &v) -{ - Matrix33 tmp (T (0)); - - for (int i = 0; i < 3; i++) - for (int j = 0; j < 3; j++) - for (int k = 0; k < 3; k++) - tmp.x[i][j] += x[i][k] * v.x[k][j]; - - *this = tmp; - return *this; -} - -template -Matrix33 -Matrix33::operator * (const Matrix33 &v) const -{ - Matrix33 tmp (T (0)); - - for (int i = 0; i < 3; i++) - for (int j = 0; j < 3; j++) - for (int k = 0; k < 3; k++) - tmp.x[i][j] += x[i][k] * v.x[k][j]; - - return tmp; -} - -template -template -void -Matrix33::multVecMatrix(const Vec2 &src, Vec2 &dst) const -{ - S a, b, w; - - a = src[0] * x[0][0] + src[1] * x[1][0] + x[2][0]; - b = src[0] * x[0][1] + src[1] * x[1][1] + x[2][1]; - w = src[0] * x[0][2] + src[1] * x[1][2] + x[2][2]; - - dst.x = a / w; - dst.y = b / w; -} - -template -template -void -Matrix33::multDirMatrix(const Vec2 &src, Vec2 &dst) const -{ - S a, b; - - a = src[0] * x[0][0] + src[1] * x[1][0]; - b = src[0] * x[0][1] + src[1] * x[1][1]; - - dst.x = a; - dst.y = b; -} - -template -const Matrix33 & -Matrix33::operator /= (T a) -{ - x[0][0] /= a; - x[0][1] /= a; - x[0][2] /= a; - x[1][0] /= a; - x[1][1] /= a; - x[1][2] /= a; - x[2][0] /= a; - x[2][1] /= a; - x[2][2] /= a; - - return *this; -} - -template -Matrix33 -Matrix33::operator / (T a) const -{ - return Matrix33 (x[0][0] / a, - x[0][1] / a, - x[0][2] / a, - x[1][0] / a, - x[1][1] / a, - x[1][2] / a, - x[2][0] / a, - x[2][1] / a, - x[2][2] / a); -} - -template -const Matrix33 & -Matrix33::transpose () -{ - Matrix33 tmp (x[0][0], - x[1][0], - x[2][0], - x[0][1], - x[1][1], - x[2][1], - x[0][2], - x[1][2], - x[2][2]); - *this = tmp; - return *this; -} - -template -Matrix33 -Matrix33::transposed () const -{ - return Matrix33 (x[0][0], - x[1][0], - x[2][0], - x[0][1], - x[1][1], - x[2][1], - x[0][2], - x[1][2], - x[2][2]); -} - -template -const Matrix33 & -Matrix33::gjInvert (bool singExc) -{ - *this = gjInverse (singExc); - return *this; -} - -template -Matrix33 -Matrix33::gjInverse (bool singExc) const -{ - int i, j, k; - Matrix33 s; - Matrix33 t (*this); - - // Forward elimination - - for (i = 0; i < 2 ; i++) - { - int pivot = i; - - T pivotsize = t[i][i]; - - if (pivotsize < 0) - pivotsize = -pivotsize; - - for (j = i + 1; j < 3; j++) - { - T tmp = t[j][i]; - - if (tmp < 0) - tmp = -tmp; - - if (tmp > pivotsize) - { - pivot = j; - pivotsize = tmp; - } - } - - if (pivotsize == 0) - { - if (singExc) - throw ::IMATH_INTERNAL_NAMESPACE::SingMatrixExc ("Cannot invert singular matrix."); - - return Matrix33(); - } - - if (pivot != i) - { - for (j = 0; j < 3; j++) - { - T tmp; - - tmp = t[i][j]; - t[i][j] = t[pivot][j]; - t[pivot][j] = tmp; - - tmp = s[i][j]; - s[i][j] = s[pivot][j]; - s[pivot][j] = tmp; - } - } - - for (j = i + 1; j < 3; j++) - { - T f = t[j][i] / t[i][i]; - - for (k = 0; k < 3; k++) - { - t[j][k] -= f * t[i][k]; - s[j][k] -= f * s[i][k]; - } - } - } - - // Backward substitution - - for (i = 2; i >= 0; --i) - { - T f; - - if ((f = t[i][i]) == 0) - { - if (singExc) - throw ::IMATH_INTERNAL_NAMESPACE::SingMatrixExc ("Cannot invert singular matrix."); - - return Matrix33(); - } - - for (j = 0; j < 3; j++) - { - t[i][j] /= f; - s[i][j] /= f; - } - - for (j = 0; j < i; j++) - { - f = t[j][i]; - - for (k = 0; k < 3; k++) - { - t[j][k] -= f * t[i][k]; - s[j][k] -= f * s[i][k]; - } - } - } - - return s; -} - -template -const Matrix33 & -Matrix33::invert (bool singExc) -{ - *this = inverse (singExc); - return *this; -} - -template -Matrix33 -Matrix33::inverse (bool singExc) const -{ - if (x[0][2] != 0 || x[1][2] != 0 || x[2][2] != 1) - { - Matrix33 s (x[1][1] * x[2][2] - x[2][1] * x[1][2], - x[2][1] * x[0][2] - x[0][1] * x[2][2], - x[0][1] * x[1][2] - x[1][1] * x[0][2], - - x[2][0] * x[1][2] - x[1][0] * x[2][2], - x[0][0] * x[2][2] - x[2][0] * x[0][2], - x[1][0] * x[0][2] - x[0][0] * x[1][2], - - x[1][0] * x[2][1] - x[2][0] * x[1][1], - x[2][0] * x[0][1] - x[0][0] * x[2][1], - x[0][0] * x[1][1] - x[1][0] * x[0][1]); - - T r = x[0][0] * s[0][0] + x[0][1] * s[1][0] + x[0][2] * s[2][0]; - - if (IMATH_INTERNAL_NAMESPACE::abs (r) >= 1) - { - for (int i = 0; i < 3; ++i) - { - for (int j = 0; j < 3; ++j) - { - s[i][j] /= r; - } - } - } - else - { - T mr = IMATH_INTERNAL_NAMESPACE::abs (r) / limits::smallest(); - - for (int i = 0; i < 3; ++i) - { - for (int j = 0; j < 3; ++j) - { - if (mr > IMATH_INTERNAL_NAMESPACE::abs (s[i][j])) - { - s[i][j] /= r; - } - else - { - if (singExc) - throw SingMatrixExc ("Cannot invert " - "singular matrix."); - return Matrix33(); - } - } - } - } - - return s; - } - else - { - Matrix33 s ( x[1][1], - -x[0][1], - 0, - - -x[1][0], - x[0][0], - 0, - - 0, - 0, - 1); - - T r = x[0][0] * x[1][1] - x[1][0] * x[0][1]; - - if (IMATH_INTERNAL_NAMESPACE::abs (r) >= 1) - { - for (int i = 0; i < 2; ++i) - { - for (int j = 0; j < 2; ++j) - { - s[i][j] /= r; - } - } - } - else - { - T mr = IMATH_INTERNAL_NAMESPACE::abs (r) / limits::smallest(); - - for (int i = 0; i < 2; ++i) - { - for (int j = 0; j < 2; ++j) - { - if (mr > IMATH_INTERNAL_NAMESPACE::abs (s[i][j])) - { - s[i][j] /= r; - } - else - { - if (singExc) - throw SingMatrixExc ("Cannot invert " - "singular matrix."); - return Matrix33(); - } - } - } - } - - s[2][0] = -x[2][0] * s[0][0] - x[2][1] * s[1][0]; - s[2][1] = -x[2][0] * s[0][1] - x[2][1] * s[1][1]; - - return s; - } -} - -template -inline T -Matrix33::minorOf (const int r, const int c) const -{ - int r0 = 0 + (r < 1 ? 1 : 0); - int r1 = 1 + (r < 2 ? 1 : 0); - int c0 = 0 + (c < 1 ? 1 : 0); - int c1 = 1 + (c < 2 ? 1 : 0); - - return x[r0][c0]*x[r1][c1] - x[r1][c0]*x[r0][c1]; -} - -template -inline T -Matrix33::fastMinor( const int r0, const int r1, - const int c0, const int c1) const -{ - return x[r0][c0]*x[r1][c1] - x[r0][c1]*x[r1][c0]; -} - -template -inline T -Matrix33::determinant () const -{ - return x[0][0]*(x[1][1]*x[2][2] - x[1][2]*x[2][1]) + - x[0][1]*(x[1][2]*x[2][0] - x[1][0]*x[2][2]) + - x[0][2]*(x[1][0]*x[2][1] - x[1][1]*x[2][0]); -} - -template -template -const Matrix33 & -Matrix33::setRotation (S r) -{ - S cos_r, sin_r; - - cos_r = Math::cos (r); - sin_r = Math::sin (r); - - x[0][0] = cos_r; - x[0][1] = sin_r; - x[0][2] = 0; - - x[1][0] = -sin_r; - x[1][1] = cos_r; - x[1][2] = 0; - - x[2][0] = 0; - x[2][1] = 0; - x[2][2] = 1; - - return *this; -} - -template -template -const Matrix33 & -Matrix33::rotate (S r) -{ - *this *= Matrix33().setRotation (r); - return *this; -} - -template -const Matrix33 & -Matrix33::setScale (T s) -{ - memset (x, 0, sizeof (x)); - x[0][0] = s; - x[1][1] = s; - x[2][2] = 1; - - return *this; -} - -template -template -const Matrix33 & -Matrix33::setScale (const Vec2 &s) -{ - memset (x, 0, sizeof (x)); - x[0][0] = s[0]; - x[1][1] = s[1]; - x[2][2] = 1; - - return *this; -} - -template -template -const Matrix33 & -Matrix33::scale (const Vec2 &s) -{ - x[0][0] *= s[0]; - x[0][1] *= s[0]; - x[0][2] *= s[0]; - - x[1][0] *= s[1]; - x[1][1] *= s[1]; - x[1][2] *= s[1]; - - return *this; -} - -template -template -const Matrix33 & -Matrix33::setTranslation (const Vec2 &t) -{ - x[0][0] = 1; - x[0][1] = 0; - x[0][2] = 0; - - x[1][0] = 0; - x[1][1] = 1; - x[1][2] = 0; - - x[2][0] = t[0]; - x[2][1] = t[1]; - x[2][2] = 1; - - return *this; -} - -template -inline Vec2 -Matrix33::translation () const -{ - return Vec2 (x[2][0], x[2][1]); -} - -template -template -const Matrix33 & -Matrix33::translate (const Vec2 &t) -{ - x[2][0] += t[0] * x[0][0] + t[1] * x[1][0]; - x[2][1] += t[0] * x[0][1] + t[1] * x[1][1]; - x[2][2] += t[0] * x[0][2] + t[1] * x[1][2]; - - return *this; -} - -template -template -const Matrix33 & -Matrix33::setShear (const S &xy) -{ - x[0][0] = 1; - x[0][1] = 0; - x[0][2] = 0; - - x[1][0] = xy; - x[1][1] = 1; - x[1][2] = 0; - - x[2][0] = 0; - x[2][1] = 0; - x[2][2] = 1; - - return *this; -} - -template -template -const Matrix33 & -Matrix33::setShear (const Vec2 &h) -{ - x[0][0] = 1; - x[0][1] = h[1]; - x[0][2] = 0; - - x[1][0] = h[0]; - x[1][1] = 1; - x[1][2] = 0; - - x[2][0] = 0; - x[2][1] = 0; - x[2][2] = 1; - - return *this; -} - -template -template -const Matrix33 & -Matrix33::shear (const S &xy) -{ - // - // In this case, we don't need a temp. copy of the matrix - // because we never use a value on the RHS after we've - // changed it on the LHS. - // - - x[1][0] += xy * x[0][0]; - x[1][1] += xy * x[0][1]; - x[1][2] += xy * x[0][2]; - - return *this; -} - -template -template -const Matrix33 & -Matrix33::shear (const Vec2 &h) -{ - Matrix33 P (*this); - - x[0][0] = P[0][0] + h[1] * P[1][0]; - x[0][1] = P[0][1] + h[1] * P[1][1]; - x[0][2] = P[0][2] + h[1] * P[1][2]; - - x[1][0] = P[1][0] + h[0] * P[0][0]; - x[1][1] = P[1][1] + h[0] * P[0][1]; - x[1][2] = P[1][2] + h[0] * P[0][2]; - - return *this; -} - - -//--------------------------- -// Implementation of Matrix44 -//--------------------------- - -template -inline T * -Matrix44::operator [] (int i) -{ - return x[i]; -} - -template -inline const T * -Matrix44::operator [] (int i) const -{ - return x[i]; -} - -template -inline -Matrix44::Matrix44 () -{ - memset (x, 0, sizeof (x)); - x[0][0] = 1; - x[1][1] = 1; - x[2][2] = 1; - x[3][3] = 1; -} - -template -inline -Matrix44::Matrix44 (T a) -{ - x[0][0] = a; - x[0][1] = a; - x[0][2] = a; - x[0][3] = a; - x[1][0] = a; - x[1][1] = a; - x[1][2] = a; - x[1][3] = a; - x[2][0] = a; - x[2][1] = a; - x[2][2] = a; - x[2][3] = a; - x[3][0] = a; - x[3][1] = a; - x[3][2] = a; - x[3][3] = a; -} - -template -inline -Matrix44::Matrix44 (const T a[4][4]) -{ - memcpy (x, a, sizeof (x)); -} - -template -inline -Matrix44::Matrix44 (T a, T b, T c, T d, T e, T f, T g, T h, - T i, T j, T k, T l, T m, T n, T o, T p) -{ - x[0][0] = a; - x[0][1] = b; - x[0][2] = c; - x[0][3] = d; - x[1][0] = e; - x[1][1] = f; - x[1][2] = g; - x[1][3] = h; - x[2][0] = i; - x[2][1] = j; - x[2][2] = k; - x[2][3] = l; - x[3][0] = m; - x[3][1] = n; - x[3][2] = o; - x[3][3] = p; -} - - -template -inline -Matrix44::Matrix44 (Matrix33 r, Vec3 t) -{ - x[0][0] = r[0][0]; - x[0][1] = r[0][1]; - x[0][2] = r[0][2]; - x[0][3] = 0; - x[1][0] = r[1][0]; - x[1][1] = r[1][1]; - x[1][2] = r[1][2]; - x[1][3] = 0; - x[2][0] = r[2][0]; - x[2][1] = r[2][1]; - x[2][2] = r[2][2]; - x[2][3] = 0; - x[3][0] = t[0]; - x[3][1] = t[1]; - x[3][2] = t[2]; - x[3][3] = 1; -} - -template -inline -Matrix44::Matrix44 (const Matrix44 &v) -{ - x[0][0] = v.x[0][0]; - x[0][1] = v.x[0][1]; - x[0][2] = v.x[0][2]; - x[0][3] = v.x[0][3]; - x[1][0] = v.x[1][0]; - x[1][1] = v.x[1][1]; - x[1][2] = v.x[1][2]; - x[1][3] = v.x[1][3]; - x[2][0] = v.x[2][0]; - x[2][1] = v.x[2][1]; - x[2][2] = v.x[2][2]; - x[2][3] = v.x[2][3]; - x[3][0] = v.x[3][0]; - x[3][1] = v.x[3][1]; - x[3][2] = v.x[3][2]; - x[3][3] = v.x[3][3]; -} - -template -template -inline -Matrix44::Matrix44 (const Matrix44 &v) -{ - x[0][0] = T (v.x[0][0]); - x[0][1] = T (v.x[0][1]); - x[0][2] = T (v.x[0][2]); - x[0][3] = T (v.x[0][3]); - x[1][0] = T (v.x[1][0]); - x[1][1] = T (v.x[1][1]); - x[1][2] = T (v.x[1][2]); - x[1][3] = T (v.x[1][3]); - x[2][0] = T (v.x[2][0]); - x[2][1] = T (v.x[2][1]); - x[2][2] = T (v.x[2][2]); - x[2][3] = T (v.x[2][3]); - x[3][0] = T (v.x[3][0]); - x[3][1] = T (v.x[3][1]); - x[3][2] = T (v.x[3][2]); - x[3][3] = T (v.x[3][3]); -} - -template -inline const Matrix44 & -Matrix44::operator = (const Matrix44 &v) -{ - x[0][0] = v.x[0][0]; - x[0][1] = v.x[0][1]; - x[0][2] = v.x[0][2]; - x[0][3] = v.x[0][3]; - x[1][0] = v.x[1][0]; - x[1][1] = v.x[1][1]; - x[1][2] = v.x[1][2]; - x[1][3] = v.x[1][3]; - x[2][0] = v.x[2][0]; - x[2][1] = v.x[2][1]; - x[2][2] = v.x[2][2]; - x[2][3] = v.x[2][3]; - x[3][0] = v.x[3][0]; - x[3][1] = v.x[3][1]; - x[3][2] = v.x[3][2]; - x[3][3] = v.x[3][3]; - return *this; -} - -template -inline const Matrix44 & -Matrix44::operator = (T a) -{ - x[0][0] = a; - x[0][1] = a; - x[0][2] = a; - x[0][3] = a; - x[1][0] = a; - x[1][1] = a; - x[1][2] = a; - x[1][3] = a; - x[2][0] = a; - x[2][1] = a; - x[2][2] = a; - x[2][3] = a; - x[3][0] = a; - x[3][1] = a; - x[3][2] = a; - x[3][3] = a; - return *this; -} - -template -inline T * -Matrix44::getValue () -{ - return (T *) &x[0][0]; -} - -template -inline const T * -Matrix44::getValue () const -{ - return (const T *) &x[0][0]; -} - -template -template -inline void -Matrix44::getValue (Matrix44 &v) const -{ - if (isSameType::value) - { - memcpy (v.x, x, sizeof (x)); - } - else - { - v.x[0][0] = x[0][0]; - v.x[0][1] = x[0][1]; - v.x[0][2] = x[0][2]; - v.x[0][3] = x[0][3]; - v.x[1][0] = x[1][0]; - v.x[1][1] = x[1][1]; - v.x[1][2] = x[1][2]; - v.x[1][3] = x[1][3]; - v.x[2][0] = x[2][0]; - v.x[2][1] = x[2][1]; - v.x[2][2] = x[2][2]; - v.x[2][3] = x[2][3]; - v.x[3][0] = x[3][0]; - v.x[3][1] = x[3][1]; - v.x[3][2] = x[3][2]; - v.x[3][3] = x[3][3]; - } -} - -template -template -inline Matrix44 & -Matrix44::setValue (const Matrix44 &v) -{ - if (isSameType::value) - { - memcpy (x, v.x, sizeof (x)); - } - else - { - x[0][0] = v.x[0][0]; - x[0][1] = v.x[0][1]; - x[0][2] = v.x[0][2]; - x[0][3] = v.x[0][3]; - x[1][0] = v.x[1][0]; - x[1][1] = v.x[1][1]; - x[1][2] = v.x[1][2]; - x[1][3] = v.x[1][3]; - x[2][0] = v.x[2][0]; - x[2][1] = v.x[2][1]; - x[2][2] = v.x[2][2]; - x[2][3] = v.x[2][3]; - x[3][0] = v.x[3][0]; - x[3][1] = v.x[3][1]; - x[3][2] = v.x[3][2]; - x[3][3] = v.x[3][3]; - } - - return *this; -} - -template -template -inline Matrix44 & -Matrix44::setTheMatrix (const Matrix44 &v) -{ - if (isSameType::value) - { - memcpy (x, v.x, sizeof (x)); - } - else - { - x[0][0] = v.x[0][0]; - x[0][1] = v.x[0][1]; - x[0][2] = v.x[0][2]; - x[0][3] = v.x[0][3]; - x[1][0] = v.x[1][0]; - x[1][1] = v.x[1][1]; - x[1][2] = v.x[1][2]; - x[1][3] = v.x[1][3]; - x[2][0] = v.x[2][0]; - x[2][1] = v.x[2][1]; - x[2][2] = v.x[2][2]; - x[2][3] = v.x[2][3]; - x[3][0] = v.x[3][0]; - x[3][1] = v.x[3][1]; - x[3][2] = v.x[3][2]; - x[3][3] = v.x[3][3]; - } - - return *this; -} - -template -inline void -Matrix44::makeIdentity() -{ - memset (x, 0, sizeof (x)); - x[0][0] = 1; - x[1][1] = 1; - x[2][2] = 1; - x[3][3] = 1; -} - -template -bool -Matrix44::operator == (const Matrix44 &v) const -{ - return x[0][0] == v.x[0][0] && - x[0][1] == v.x[0][1] && - x[0][2] == v.x[0][2] && - x[0][3] == v.x[0][3] && - x[1][0] == v.x[1][0] && - x[1][1] == v.x[1][1] && - x[1][2] == v.x[1][2] && - x[1][3] == v.x[1][3] && - x[2][0] == v.x[2][0] && - x[2][1] == v.x[2][1] && - x[2][2] == v.x[2][2] && - x[2][3] == v.x[2][3] && - x[3][0] == v.x[3][0] && - x[3][1] == v.x[3][1] && - x[3][2] == v.x[3][2] && - x[3][3] == v.x[3][3]; -} - -template -bool -Matrix44::operator != (const Matrix44 &v) const -{ - return x[0][0] != v.x[0][0] || - x[0][1] != v.x[0][1] || - x[0][2] != v.x[0][2] || - x[0][3] != v.x[0][3] || - x[1][0] != v.x[1][0] || - x[1][1] != v.x[1][1] || - x[1][2] != v.x[1][2] || - x[1][3] != v.x[1][3] || - x[2][0] != v.x[2][0] || - x[2][1] != v.x[2][1] || - x[2][2] != v.x[2][2] || - x[2][3] != v.x[2][3] || - x[3][0] != v.x[3][0] || - x[3][1] != v.x[3][1] || - x[3][2] != v.x[3][2] || - x[3][3] != v.x[3][3]; -} - -template -bool -Matrix44::equalWithAbsError (const Matrix44 &m, T e) const -{ - for (int i = 0; i < 4; i++) - for (int j = 0; j < 4; j++) - if (!IMATH_INTERNAL_NAMESPACE::equalWithAbsError ((*this)[i][j], m[i][j], e)) - return false; - - return true; -} - -template -bool -Matrix44::equalWithRelError (const Matrix44 &m, T e) const -{ - for (int i = 0; i < 4; i++) - for (int j = 0; j < 4; j++) - if (!IMATH_INTERNAL_NAMESPACE::equalWithRelError ((*this)[i][j], m[i][j], e)) - return false; - - return true; -} - -template -const Matrix44 & -Matrix44::operator += (const Matrix44 &v) -{ - x[0][0] += v.x[0][0]; - x[0][1] += v.x[0][1]; - x[0][2] += v.x[0][2]; - x[0][3] += v.x[0][3]; - x[1][0] += v.x[1][0]; - x[1][1] += v.x[1][1]; - x[1][2] += v.x[1][2]; - x[1][3] += v.x[1][3]; - x[2][0] += v.x[2][0]; - x[2][1] += v.x[2][1]; - x[2][2] += v.x[2][2]; - x[2][3] += v.x[2][3]; - x[3][0] += v.x[3][0]; - x[3][1] += v.x[3][1]; - x[3][2] += v.x[3][2]; - x[3][3] += v.x[3][3]; - - return *this; -} - -template -const Matrix44 & -Matrix44::operator += (T a) -{ - x[0][0] += a; - x[0][1] += a; - x[0][2] += a; - x[0][3] += a; - x[1][0] += a; - x[1][1] += a; - x[1][2] += a; - x[1][3] += a; - x[2][0] += a; - x[2][1] += a; - x[2][2] += a; - x[2][3] += a; - x[3][0] += a; - x[3][1] += a; - x[3][2] += a; - x[3][3] += a; - - return *this; -} - -template -Matrix44 -Matrix44::operator + (const Matrix44 &v) const -{ - return Matrix44 (x[0][0] + v.x[0][0], - x[0][1] + v.x[0][1], - x[0][2] + v.x[0][2], - x[0][3] + v.x[0][3], - x[1][0] + v.x[1][0], - x[1][1] + v.x[1][1], - x[1][2] + v.x[1][2], - x[1][3] + v.x[1][3], - x[2][0] + v.x[2][0], - x[2][1] + v.x[2][1], - x[2][2] + v.x[2][2], - x[2][3] + v.x[2][3], - x[3][0] + v.x[3][0], - x[3][1] + v.x[3][1], - x[3][2] + v.x[3][2], - x[3][3] + v.x[3][3]); -} - -template -const Matrix44 & -Matrix44::operator -= (const Matrix44 &v) -{ - x[0][0] -= v.x[0][0]; - x[0][1] -= v.x[0][1]; - x[0][2] -= v.x[0][2]; - x[0][3] -= v.x[0][3]; - x[1][0] -= v.x[1][0]; - x[1][1] -= v.x[1][1]; - x[1][2] -= v.x[1][2]; - x[1][3] -= v.x[1][3]; - x[2][0] -= v.x[2][0]; - x[2][1] -= v.x[2][1]; - x[2][2] -= v.x[2][2]; - x[2][3] -= v.x[2][3]; - x[3][0] -= v.x[3][0]; - x[3][1] -= v.x[3][1]; - x[3][2] -= v.x[3][2]; - x[3][3] -= v.x[3][3]; - - return *this; -} - -template -const Matrix44 & -Matrix44::operator -= (T a) -{ - x[0][0] -= a; - x[0][1] -= a; - x[0][2] -= a; - x[0][3] -= a; - x[1][0] -= a; - x[1][1] -= a; - x[1][2] -= a; - x[1][3] -= a; - x[2][0] -= a; - x[2][1] -= a; - x[2][2] -= a; - x[2][3] -= a; - x[3][0] -= a; - x[3][1] -= a; - x[3][2] -= a; - x[3][3] -= a; - - return *this; -} - -template -Matrix44 -Matrix44::operator - (const Matrix44 &v) const -{ - return Matrix44 (x[0][0] - v.x[0][0], - x[0][1] - v.x[0][1], - x[0][2] - v.x[0][2], - x[0][3] - v.x[0][3], - x[1][0] - v.x[1][0], - x[1][1] - v.x[1][1], - x[1][2] - v.x[1][2], - x[1][3] - v.x[1][3], - x[2][0] - v.x[2][0], - x[2][1] - v.x[2][1], - x[2][2] - v.x[2][2], - x[2][3] - v.x[2][3], - x[3][0] - v.x[3][0], - x[3][1] - v.x[3][1], - x[3][2] - v.x[3][2], - x[3][3] - v.x[3][3]); -} - -template -Matrix44 -Matrix44::operator - () const -{ - return Matrix44 (-x[0][0], - -x[0][1], - -x[0][2], - -x[0][3], - -x[1][0], - -x[1][1], - -x[1][2], - -x[1][3], - -x[2][0], - -x[2][1], - -x[2][2], - -x[2][3], - -x[3][0], - -x[3][1], - -x[3][2], - -x[3][3]); -} - -template -const Matrix44 & -Matrix44::negate () -{ - x[0][0] = -x[0][0]; - x[0][1] = -x[0][1]; - x[0][2] = -x[0][2]; - x[0][3] = -x[0][3]; - x[1][0] = -x[1][0]; - x[1][1] = -x[1][1]; - x[1][2] = -x[1][2]; - x[1][3] = -x[1][3]; - x[2][0] = -x[2][0]; - x[2][1] = -x[2][1]; - x[2][2] = -x[2][2]; - x[2][3] = -x[2][3]; - x[3][0] = -x[3][0]; - x[3][1] = -x[3][1]; - x[3][2] = -x[3][2]; - x[3][3] = -x[3][3]; - - return *this; -} - -template -const Matrix44 & -Matrix44::operator *= (T a) -{ - x[0][0] *= a; - x[0][1] *= a; - x[0][2] *= a; - x[0][3] *= a; - x[1][0] *= a; - x[1][1] *= a; - x[1][2] *= a; - x[1][3] *= a; - x[2][0] *= a; - x[2][1] *= a; - x[2][2] *= a; - x[2][3] *= a; - x[3][0] *= a; - x[3][1] *= a; - x[3][2] *= a; - x[3][3] *= a; - - return *this; -} - -template -Matrix44 -Matrix44::operator * (T a) const -{ - return Matrix44 (x[0][0] * a, - x[0][1] * a, - x[0][2] * a, - x[0][3] * a, - x[1][0] * a, - x[1][1] * a, - x[1][2] * a, - x[1][3] * a, - x[2][0] * a, - x[2][1] * a, - x[2][2] * a, - x[2][3] * a, - x[3][0] * a, - x[3][1] * a, - x[3][2] * a, - x[3][3] * a); -} - -template -inline Matrix44 -operator * (T a, const Matrix44 &v) -{ - return v * a; -} - -template -inline const Matrix44 & -Matrix44::operator *= (const Matrix44 &v) -{ - Matrix44 tmp (T (0)); - - multiply (*this, v, tmp); - *this = tmp; - return *this; -} - -template -inline Matrix44 -Matrix44::operator * (const Matrix44 &v) const -{ - Matrix44 tmp (T (0)); - - multiply (*this, v, tmp); - return tmp; -} - -template -void -Matrix44::multiply (const Matrix44 &a, - const Matrix44 &b, - Matrix44 &c) -{ - const T * IMATH_RESTRICT ap = &a.x[0][0]; - const T * IMATH_RESTRICT bp = &b.x[0][0]; - T * IMATH_RESTRICT cp = &c.x[0][0]; - - T a0, a1, a2, a3; - - a0 = ap[0]; - a1 = ap[1]; - a2 = ap[2]; - a3 = ap[3]; - - cp[0] = a0 * bp[0] + a1 * bp[4] + a2 * bp[8] + a3 * bp[12]; - cp[1] = a0 * bp[1] + a1 * bp[5] + a2 * bp[9] + a3 * bp[13]; - cp[2] = a0 * bp[2] + a1 * bp[6] + a2 * bp[10] + a3 * bp[14]; - cp[3] = a0 * bp[3] + a1 * bp[7] + a2 * bp[11] + a3 * bp[15]; - - a0 = ap[4]; - a1 = ap[5]; - a2 = ap[6]; - a3 = ap[7]; - - cp[4] = a0 * bp[0] + a1 * bp[4] + a2 * bp[8] + a3 * bp[12]; - cp[5] = a0 * bp[1] + a1 * bp[5] + a2 * bp[9] + a3 * bp[13]; - cp[6] = a0 * bp[2] + a1 * bp[6] + a2 * bp[10] + a3 * bp[14]; - cp[7] = a0 * bp[3] + a1 * bp[7] + a2 * bp[11] + a3 * bp[15]; - - a0 = ap[8]; - a1 = ap[9]; - a2 = ap[10]; - a3 = ap[11]; - - cp[8] = a0 * bp[0] + a1 * bp[4] + a2 * bp[8] + a3 * bp[12]; - cp[9] = a0 * bp[1] + a1 * bp[5] + a2 * bp[9] + a3 * bp[13]; - cp[10] = a0 * bp[2] + a1 * bp[6] + a2 * bp[10] + a3 * bp[14]; - cp[11] = a0 * bp[3] + a1 * bp[7] + a2 * bp[11] + a3 * bp[15]; - - a0 = ap[12]; - a1 = ap[13]; - a2 = ap[14]; - a3 = ap[15]; - - cp[12] = a0 * bp[0] + a1 * bp[4] + a2 * bp[8] + a3 * bp[12]; - cp[13] = a0 * bp[1] + a1 * bp[5] + a2 * bp[9] + a3 * bp[13]; - cp[14] = a0 * bp[2] + a1 * bp[6] + a2 * bp[10] + a3 * bp[14]; - cp[15] = a0 * bp[3] + a1 * bp[7] + a2 * bp[11] + a3 * bp[15]; -} - -template template -void -Matrix44::multVecMatrix(const Vec3 &src, Vec3 &dst) const -{ - S a, b, c, w; - - a = src[0] * x[0][0] + src[1] * x[1][0] + src[2] * x[2][0] + x[3][0]; - b = src[0] * x[0][1] + src[1] * x[1][1] + src[2] * x[2][1] + x[3][1]; - c = src[0] * x[0][2] + src[1] * x[1][2] + src[2] * x[2][2] + x[3][2]; - w = src[0] * x[0][3] + src[1] * x[1][3] + src[2] * x[2][3] + x[3][3]; - - dst.x = a / w; - dst.y = b / w; - dst.z = c / w; -} - -template template -void -Matrix44::multDirMatrix(const Vec3 &src, Vec3 &dst) const -{ - S a, b, c; - - a = src[0] * x[0][0] + src[1] * x[1][0] + src[2] * x[2][0]; - b = src[0] * x[0][1] + src[1] * x[1][1] + src[2] * x[2][1]; - c = src[0] * x[0][2] + src[1] * x[1][2] + src[2] * x[2][2]; - - dst.x = a; - dst.y = b; - dst.z = c; -} - -template -const Matrix44 & -Matrix44::operator /= (T a) -{ - x[0][0] /= a; - x[0][1] /= a; - x[0][2] /= a; - x[0][3] /= a; - x[1][0] /= a; - x[1][1] /= a; - x[1][2] /= a; - x[1][3] /= a; - x[2][0] /= a; - x[2][1] /= a; - x[2][2] /= a; - x[2][3] /= a; - x[3][0] /= a; - x[3][1] /= a; - x[3][2] /= a; - x[3][3] /= a; - - return *this; -} - -template -Matrix44 -Matrix44::operator / (T a) const -{ - return Matrix44 (x[0][0] / a, - x[0][1] / a, - x[0][2] / a, - x[0][3] / a, - x[1][0] / a, - x[1][1] / a, - x[1][2] / a, - x[1][3] / a, - x[2][0] / a, - x[2][1] / a, - x[2][2] / a, - x[2][3] / a, - x[3][0] / a, - x[3][1] / a, - x[3][2] / a, - x[3][3] / a); -} - -template -const Matrix44 & -Matrix44::transpose () -{ - Matrix44 tmp (x[0][0], - x[1][0], - x[2][0], - x[3][0], - x[0][1], - x[1][1], - x[2][1], - x[3][1], - x[0][2], - x[1][2], - x[2][2], - x[3][2], - x[0][3], - x[1][3], - x[2][3], - x[3][3]); - *this = tmp; - return *this; -} - -template -Matrix44 -Matrix44::transposed () const -{ - return Matrix44 (x[0][0], - x[1][0], - x[2][0], - x[3][0], - x[0][1], - x[1][1], - x[2][1], - x[3][1], - x[0][2], - x[1][2], - x[2][2], - x[3][2], - x[0][3], - x[1][3], - x[2][3], - x[3][3]); -} - -template -const Matrix44 & -Matrix44::gjInvert (bool singExc) -{ - *this = gjInverse (singExc); - return *this; -} - -template -Matrix44 -Matrix44::gjInverse (bool singExc) const -{ - int i, j, k; - Matrix44 s; - Matrix44 t (*this); - - // Forward elimination - - for (i = 0; i < 3 ; i++) - { - int pivot = i; - - T pivotsize = t[i][i]; - - if (pivotsize < 0) - pivotsize = -pivotsize; - - for (j = i + 1; j < 4; j++) - { - T tmp = t[j][i]; - - if (tmp < 0) - tmp = -tmp; - - if (tmp > pivotsize) - { - pivot = j; - pivotsize = tmp; - } - } - - if (pivotsize == 0) - { - if (singExc) - throw ::IMATH_INTERNAL_NAMESPACE::SingMatrixExc ("Cannot invert singular matrix."); - - return Matrix44(); - } - - if (pivot != i) - { - for (j = 0; j < 4; j++) - { - T tmp; - - tmp = t[i][j]; - t[i][j] = t[pivot][j]; - t[pivot][j] = tmp; - - tmp = s[i][j]; - s[i][j] = s[pivot][j]; - s[pivot][j] = tmp; - } - } - - for (j = i + 1; j < 4; j++) - { - T f = t[j][i] / t[i][i]; - - for (k = 0; k < 4; k++) - { - t[j][k] -= f * t[i][k]; - s[j][k] -= f * s[i][k]; - } - } - } - - // Backward substitution - - for (i = 3; i >= 0; --i) - { - T f; - - if ((f = t[i][i]) == 0) - { - if (singExc) - throw ::IMATH_INTERNAL_NAMESPACE::SingMatrixExc ("Cannot invert singular matrix."); - - return Matrix44(); - } - - for (j = 0; j < 4; j++) - { - t[i][j] /= f; - s[i][j] /= f; - } - - for (j = 0; j < i; j++) - { - f = t[j][i]; - - for (k = 0; k < 4; k++) - { - t[j][k] -= f * t[i][k]; - s[j][k] -= f * s[i][k]; - } - } - } - - return s; -} - -template -const Matrix44 & -Matrix44::invert (bool singExc) -{ - *this = inverse (singExc); - return *this; -} - -template -Matrix44 -Matrix44::inverse (bool singExc) const -{ - if (x[0][3] != 0 || x[1][3] != 0 || x[2][3] != 0 || x[3][3] != 1) - return gjInverse(singExc); - - Matrix44 s (x[1][1] * x[2][2] - x[2][1] * x[1][2], - x[2][1] * x[0][2] - x[0][1] * x[2][2], - x[0][1] * x[1][2] - x[1][1] * x[0][2], - 0, - - x[2][0] * x[1][2] - x[1][0] * x[2][2], - x[0][0] * x[2][2] - x[2][0] * x[0][2], - x[1][0] * x[0][2] - x[0][0] * x[1][2], - 0, - - x[1][0] * x[2][1] - x[2][0] * x[1][1], - x[2][0] * x[0][1] - x[0][0] * x[2][1], - x[0][0] * x[1][1] - x[1][0] * x[0][1], - 0, - - 0, - 0, - 0, - 1); - - T r = x[0][0] * s[0][0] + x[0][1] * s[1][0] + x[0][2] * s[2][0]; - - if (IMATH_INTERNAL_NAMESPACE::abs (r) >= 1) - { - for (int i = 0; i < 3; ++i) - { - for (int j = 0; j < 3; ++j) - { - s[i][j] /= r; - } - } - } - else - { - T mr = IMATH_INTERNAL_NAMESPACE::abs (r) / limits::smallest(); - - for (int i = 0; i < 3; ++i) - { - for (int j = 0; j < 3; ++j) - { - if (mr > IMATH_INTERNAL_NAMESPACE::abs (s[i][j])) - { - s[i][j] /= r; - } - else - { - if (singExc) - throw SingMatrixExc ("Cannot invert singular matrix."); - - return Matrix44(); - } - } - } - } - - s[3][0] = -x[3][0] * s[0][0] - x[3][1] * s[1][0] - x[3][2] * s[2][0]; - s[3][1] = -x[3][0] * s[0][1] - x[3][1] * s[1][1] - x[3][2] * s[2][1]; - s[3][2] = -x[3][0] * s[0][2] - x[3][1] * s[1][2] - x[3][2] * s[2][2]; - - return s; -} - -template -inline T -Matrix44::fastMinor( const int r0, const int r1, const int r2, - const int c0, const int c1, const int c2) const -{ - return x[r0][c0] * (x[r1][c1]*x[r2][c2] - x[r1][c2]*x[r2][c1]) - + x[r0][c1] * (x[r1][c2]*x[r2][c0] - x[r1][c0]*x[r2][c2]) - + x[r0][c2] * (x[r1][c0]*x[r2][c1] - x[r1][c1]*x[r2][c0]); -} - -template -inline T -Matrix44::minorOf (const int r, const int c) const -{ - int r0 = 0 + (r < 1 ? 1 : 0); - int r1 = 1 + (r < 2 ? 1 : 0); - int r2 = 2 + (r < 3 ? 1 : 0); - int c0 = 0 + (c < 1 ? 1 : 0); - int c1 = 1 + (c < 2 ? 1 : 0); - int c2 = 2 + (c < 3 ? 1 : 0); - - Matrix33 working (x[r0][c0],x[r1][c0],x[r2][c0], - x[r0][c1],x[r1][c1],x[r2][c1], - x[r0][c2],x[r1][c2],x[r2][c2]); - - return working.determinant(); -} - -template -inline T -Matrix44::determinant () const -{ - T sum = (T)0; - - if (x[0][3] != 0.) sum -= x[0][3] * fastMinor(1,2,3,0,1,2); - if (x[1][3] != 0.) sum += x[1][3] * fastMinor(0,2,3,0,1,2); - if (x[2][3] != 0.) sum -= x[2][3] * fastMinor(0,1,3,0,1,2); - if (x[3][3] != 0.) sum += x[3][3] * fastMinor(0,1,2,0,1,2); - - return sum; -} - -template -template -const Matrix44 & -Matrix44::setEulerAngles (const Vec3& r) -{ - S cos_rz, sin_rz, cos_ry, sin_ry, cos_rx, sin_rx; - - cos_rz = Math::cos (r[2]); - cos_ry = Math::cos (r[1]); - cos_rx = Math::cos (r[0]); - - sin_rz = Math::sin (r[2]); - sin_ry = Math::sin (r[1]); - sin_rx = Math::sin (r[0]); - - x[0][0] = cos_rz * cos_ry; - x[0][1] = sin_rz * cos_ry; - x[0][2] = -sin_ry; - x[0][3] = 0; - - x[1][0] = -sin_rz * cos_rx + cos_rz * sin_ry * sin_rx; - x[1][1] = cos_rz * cos_rx + sin_rz * sin_ry * sin_rx; - x[1][2] = cos_ry * sin_rx; - x[1][3] = 0; - - x[2][0] = sin_rz * sin_rx + cos_rz * sin_ry * cos_rx; - x[2][1] = -cos_rz * sin_rx + sin_rz * sin_ry * cos_rx; - x[2][2] = cos_ry * cos_rx; - x[2][3] = 0; - - x[3][0] = 0; - x[3][1] = 0; - x[3][2] = 0; - x[3][3] = 1; - - return *this; -} - -template -template -const Matrix44 & -Matrix44::setAxisAngle (const Vec3& axis, S angle) -{ - Vec3 unit (axis.normalized()); - S sine = Math::sin (angle); - S cosine = Math::cos (angle); - - x[0][0] = unit[0] * unit[0] * (1 - cosine) + cosine; - x[0][1] = unit[0] * unit[1] * (1 - cosine) + unit[2] * sine; - x[0][2] = unit[0] * unit[2] * (1 - cosine) - unit[1] * sine; - x[0][3] = 0; - - x[1][0] = unit[0] * unit[1] * (1 - cosine) - unit[2] * sine; - x[1][1] = unit[1] * unit[1] * (1 - cosine) + cosine; - x[1][2] = unit[1] * unit[2] * (1 - cosine) + unit[0] * sine; - x[1][3] = 0; - - x[2][0] = unit[0] * unit[2] * (1 - cosine) + unit[1] * sine; - x[2][1] = unit[1] * unit[2] * (1 - cosine) - unit[0] * sine; - x[2][2] = unit[2] * unit[2] * (1 - cosine) + cosine; - x[2][3] = 0; - - x[3][0] = 0; - x[3][1] = 0; - x[3][2] = 0; - x[3][3] = 1; - - return *this; -} - -template -template -const Matrix44 & -Matrix44::rotate (const Vec3 &r) -{ - S cos_rz, sin_rz, cos_ry, sin_ry, cos_rx, sin_rx; - S m00, m01, m02; - S m10, m11, m12; - S m20, m21, m22; - - cos_rz = Math::cos (r[2]); - cos_ry = Math::cos (r[1]); - cos_rx = Math::cos (r[0]); - - sin_rz = Math::sin (r[2]); - sin_ry = Math::sin (r[1]); - sin_rx = Math::sin (r[0]); - - m00 = cos_rz * cos_ry; - m01 = sin_rz * cos_ry; - m02 = -sin_ry; - m10 = -sin_rz * cos_rx + cos_rz * sin_ry * sin_rx; - m11 = cos_rz * cos_rx + sin_rz * sin_ry * sin_rx; - m12 = cos_ry * sin_rx; - m20 = -sin_rz * -sin_rx + cos_rz * sin_ry * cos_rx; - m21 = cos_rz * -sin_rx + sin_rz * sin_ry * cos_rx; - m22 = cos_ry * cos_rx; - - Matrix44 P (*this); - - x[0][0] = P[0][0] * m00 + P[1][0] * m01 + P[2][0] * m02; - x[0][1] = P[0][1] * m00 + P[1][1] * m01 + P[2][1] * m02; - x[0][2] = P[0][2] * m00 + P[1][2] * m01 + P[2][2] * m02; - x[0][3] = P[0][3] * m00 + P[1][3] * m01 + P[2][3] * m02; - - x[1][0] = P[0][0] * m10 + P[1][0] * m11 + P[2][0] * m12; - x[1][1] = P[0][1] * m10 + P[1][1] * m11 + P[2][1] * m12; - x[1][2] = P[0][2] * m10 + P[1][2] * m11 + P[2][2] * m12; - x[1][3] = P[0][3] * m10 + P[1][3] * m11 + P[2][3] * m12; - - x[2][0] = P[0][0] * m20 + P[1][0] * m21 + P[2][0] * m22; - x[2][1] = P[0][1] * m20 + P[1][1] * m21 + P[2][1] * m22; - x[2][2] = P[0][2] * m20 + P[1][2] * m21 + P[2][2] * m22; - x[2][3] = P[0][3] * m20 + P[1][3] * m21 + P[2][3] * m22; - - return *this; -} - -template -const Matrix44 & -Matrix44::setScale (T s) -{ - memset (x, 0, sizeof (x)); - x[0][0] = s; - x[1][1] = s; - x[2][2] = s; - x[3][3] = 1; - - return *this; -} - -template -template -const Matrix44 & -Matrix44::setScale (const Vec3 &s) -{ - memset (x, 0, sizeof (x)); - x[0][0] = s[0]; - x[1][1] = s[1]; - x[2][2] = s[2]; - x[3][3] = 1; - - return *this; -} - -template -template -const Matrix44 & -Matrix44::scale (const Vec3 &s) -{ - x[0][0] *= s[0]; - x[0][1] *= s[0]; - x[0][2] *= s[0]; - x[0][3] *= s[0]; - - x[1][0] *= s[1]; - x[1][1] *= s[1]; - x[1][2] *= s[1]; - x[1][3] *= s[1]; - - x[2][0] *= s[2]; - x[2][1] *= s[2]; - x[2][2] *= s[2]; - x[2][3] *= s[2]; - - return *this; -} - -template -template -const Matrix44 & -Matrix44::setTranslation (const Vec3 &t) -{ - x[0][0] = 1; - x[0][1] = 0; - x[0][2] = 0; - x[0][3] = 0; - - x[1][0] = 0; - x[1][1] = 1; - x[1][2] = 0; - x[1][3] = 0; - - x[2][0] = 0; - x[2][1] = 0; - x[2][2] = 1; - x[2][3] = 0; - - x[3][0] = t[0]; - x[3][1] = t[1]; - x[3][2] = t[2]; - x[3][3] = 1; - - return *this; -} - -template -inline const Vec3 -Matrix44::translation () const -{ - return Vec3 (x[3][0], x[3][1], x[3][2]); -} - -template -template -const Matrix44 & -Matrix44::translate (const Vec3 &t) -{ - x[3][0] += t[0] * x[0][0] + t[1] * x[1][0] + t[2] * x[2][0]; - x[3][1] += t[0] * x[0][1] + t[1] * x[1][1] + t[2] * x[2][1]; - x[3][2] += t[0] * x[0][2] + t[1] * x[1][2] + t[2] * x[2][2]; - x[3][3] += t[0] * x[0][3] + t[1] * x[1][3] + t[2] * x[2][3]; - - return *this; -} - -template -template -const Matrix44 & -Matrix44::setShear (const Vec3 &h) -{ - x[0][0] = 1; - x[0][1] = 0; - x[0][2] = 0; - x[0][3] = 0; - - x[1][0] = h[0]; - x[1][1] = 1; - x[1][2] = 0; - x[1][3] = 0; - - x[2][0] = h[1]; - x[2][1] = h[2]; - x[2][2] = 1; - x[2][3] = 0; - - x[3][0] = 0; - x[3][1] = 0; - x[3][2] = 0; - x[3][3] = 1; - - return *this; -} - -template -template -const Matrix44 & -Matrix44::setShear (const Shear6 &h) -{ - x[0][0] = 1; - x[0][1] = h.yx; - x[0][2] = h.zx; - x[0][3] = 0; - - x[1][0] = h.xy; - x[1][1] = 1; - x[1][2] = h.zy; - x[1][3] = 0; - - x[2][0] = h.xz; - x[2][1] = h.yz; - x[2][2] = 1; - x[2][3] = 0; - - x[3][0] = 0; - x[3][1] = 0; - x[3][2] = 0; - x[3][3] = 1; - - return *this; -} - -template -template -const Matrix44 & -Matrix44::shear (const Vec3 &h) -{ - // - // In this case, we don't need a temp. copy of the matrix - // because we never use a value on the RHS after we've - // changed it on the LHS. - // - - for (int i=0; i < 4; i++) - { - x[2][i] += h[1] * x[0][i] + h[2] * x[1][i]; - x[1][i] += h[0] * x[0][i]; - } - - return *this; -} - -template -template -const Matrix44 & -Matrix44::shear (const Shear6 &h) -{ - Matrix44 P (*this); - - for (int i=0; i < 4; i++) - { - x[0][i] = P[0][i] + h.yx * P[1][i] + h.zx * P[2][i]; - x[1][i] = h.xy * P[0][i] + P[1][i] + h.zy * P[2][i]; - x[2][i] = h.xz * P[0][i] + h.yz * P[1][i] + P[2][i]; - } - - return *this; -} - - -//-------------------------------- -// Implementation of stream output -//-------------------------------- - -template -std::ostream & -operator << (std::ostream &s, const Matrix33 &m) -{ - std::ios_base::fmtflags oldFlags = s.flags(); - int width; - - if (s.flags() & std::ios_base::fixed) - { - s.setf (std::ios_base::showpoint); - width = static_cast(s.precision()) + 5; - } - else - { - s.setf (std::ios_base::scientific); - s.setf (std::ios_base::showpoint); - width = static_cast(s.precision()) + 8; - } - - s << "(" << std::setw (width) << m[0][0] << - " " << std::setw (width) << m[0][1] << - " " << std::setw (width) << m[0][2] << "\n" << - - " " << std::setw (width) << m[1][0] << - " " << std::setw (width) << m[1][1] << - " " << std::setw (width) << m[1][2] << "\n" << - - " " << std::setw (width) << m[2][0] << - " " << std::setw (width) << m[2][1] << - " " << std::setw (width) << m[2][2] << ")\n"; - - s.flags (oldFlags); - return s; -} - -template -std::ostream & -operator << (std::ostream &s, const Matrix44 &m) -{ - std::ios_base::fmtflags oldFlags = s.flags(); - int width; - - if (s.flags() & std::ios_base::fixed) - { - s.setf (std::ios_base::showpoint); - width = static_cast(s.precision()) + 5; - } - else - { - s.setf (std::ios_base::scientific); - s.setf (std::ios_base::showpoint); - width = static_cast(s.precision()) + 8; - } - - s << "(" << std::setw (width) << m[0][0] << - " " << std::setw (width) << m[0][1] << - " " << std::setw (width) << m[0][2] << - " " << std::setw (width) << m[0][3] << "\n" << - - " " << std::setw (width) << m[1][0] << - " " << std::setw (width) << m[1][1] << - " " << std::setw (width) << m[1][2] << - " " << std::setw (width) << m[1][3] << "\n" << - - " " << std::setw (width) << m[2][0] << - " " << std::setw (width) << m[2][1] << - " " << std::setw (width) << m[2][2] << - " " << std::setw (width) << m[2][3] << "\n" << - - " " << std::setw (width) << m[3][0] << - " " << std::setw (width) << m[3][1] << - " " << std::setw (width) << m[3][2] << - " " << std::setw (width) << m[3][3] << ")\n"; - - s.flags (oldFlags); - return s; -} - - -//--------------------------------------------------------------- -// Implementation of vector-times-matrix multiplication operators -//--------------------------------------------------------------- - -template -inline const Vec2 & -operator *= (Vec2 &v, const Matrix33 &m) -{ - S x = S(v.x * m[0][0] + v.y * m[1][0] + m[2][0]); - S y = S(v.x * m[0][1] + v.y * m[1][1] + m[2][1]); - S w = S(v.x * m[0][2] + v.y * m[1][2] + m[2][2]); - - v.x = x / w; - v.y = y / w; - - return v; -} - -template -inline Vec2 -operator * (const Vec2 &v, const Matrix33 &m) -{ - S x = S(v.x * m[0][0] + v.y * m[1][0] + m[2][0]); - S y = S(v.x * m[0][1] + v.y * m[1][1] + m[2][1]); - S w = S(v.x * m[0][2] + v.y * m[1][2] + m[2][2]); - - return Vec2 (x / w, y / w); -} - - -template -inline const Vec3 & -operator *= (Vec3 &v, const Matrix33 &m) -{ - S x = S(v.x * m[0][0] + v.y * m[1][0] + v.z * m[2][0]); - S y = S(v.x * m[0][1] + v.y * m[1][1] + v.z * m[2][1]); - S z = S(v.x * m[0][2] + v.y * m[1][2] + v.z * m[2][2]); - - v.x = x; - v.y = y; - v.z = z; - - return v; -} - -template -inline Vec3 -operator * (const Vec3 &v, const Matrix33 &m) -{ - S x = S(v.x * m[0][0] + v.y * m[1][0] + v.z * m[2][0]); - S y = S(v.x * m[0][1] + v.y * m[1][1] + v.z * m[2][1]); - S z = S(v.x * m[0][2] + v.y * m[1][2] + v.z * m[2][2]); - - return Vec3 (x, y, z); -} - - -template -inline const Vec3 & -operator *= (Vec3 &v, const Matrix44 &m) -{ - S x = S(v.x * m[0][0] + v.y * m[1][0] + v.z * m[2][0] + m[3][0]); - S y = S(v.x * m[0][1] + v.y * m[1][1] + v.z * m[2][1] + m[3][1]); - S z = S(v.x * m[0][2] + v.y * m[1][2] + v.z * m[2][2] + m[3][2]); - S w = S(v.x * m[0][3] + v.y * m[1][3] + v.z * m[2][3] + m[3][3]); - - v.x = x / w; - v.y = y / w; - v.z = z / w; - - return v; -} - -template -inline Vec3 -operator * (const Vec3 &v, const Matrix44 &m) -{ - S x = S(v.x * m[0][0] + v.y * m[1][0] + v.z * m[2][0] + m[3][0]); - S y = S(v.x * m[0][1] + v.y * m[1][1] + v.z * m[2][1] + m[3][1]); - S z = S(v.x * m[0][2] + v.y * m[1][2] + v.z * m[2][2] + m[3][2]); - S w = S(v.x * m[0][3] + v.y * m[1][3] + v.z * m[2][3] + m[3][3]); - - return Vec3 (x / w, y / w, z / w); -} - - -template -inline const Vec4 & -operator *= (Vec4 &v, const Matrix44 &m) -{ - S x = S(v.x * m[0][0] + v.y * m[1][0] + v.z * m[2][0] + v.w * m[3][0]); - S y = S(v.x * m[0][1] + v.y * m[1][1] + v.z * m[2][1] + v.w * m[3][1]); - S z = S(v.x * m[0][2] + v.y * m[1][2] + v.z * m[2][2] + v.w * m[3][2]); - S w = S(v.x * m[0][3] + v.y * m[1][3] + v.z * m[2][3] + v.w * m[3][3]); - - v.x = x; - v.y = y; - v.z = z; - v.w = w; - - return v; -} - -template -inline Vec4 -operator * (const Vec4 &v, const Matrix44 &m) -{ - S x = S(v.x * m[0][0] + v.y * m[1][0] + v.z * m[2][0] + v.w * m[3][0]); - S y = S(v.x * m[0][1] + v.y * m[1][1] + v.z * m[2][1] + v.w * m[3][1]); - S z = S(v.x * m[0][2] + v.y * m[1][2] + v.z * m[2][2] + v.w * m[3][2]); - S w = S(v.x * m[0][3] + v.y * m[1][3] + v.z * m[2][3] + v.w * m[3][3]); - - return Vec4 (x, y, z, w); -} - -IMATH_INTERNAL_NAMESPACE_HEADER_EXIT - -#endif // INCLUDED_IMATHMATRIX_H diff --git a/3rdparty/openexr/Imath/ImathMatrixAlgo.cpp b/3rdparty/openexr/Imath/ImathMatrixAlgo.cpp deleted file mode 100644 index 0cafd5c060..0000000000 --- a/3rdparty/openexr/Imath/ImathMatrixAlgo.cpp +++ /dev/null @@ -1,1252 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2002-2012, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - - - - -//---------------------------------------------------------------------------- -// -// Implementation of non-template items declared in ImathMatrixAlgo.h -// -//---------------------------------------------------------------------------- - -#include "ImathMatrixAlgo.h" -#include -#include - -#if defined(OPENEXR_DLL) - #define EXPORT_CONST __declspec(dllexport) -#else - #define EXPORT_CONST const -#endif - -IMATH_INTERNAL_NAMESPACE_SOURCE_ENTER - -EXPORT_CONST M33f identity33f ( 1, 0, 0, - 0, 1, 0, - 0, 0, 1); - -EXPORT_CONST M33d identity33d ( 1, 0, 0, - 0, 1, 0, - 0, 0, 1); - -EXPORT_CONST M44f identity44f ( 1, 0, 0, 0, - 0, 1, 0, 0, - 0, 0, 1, 0, - 0, 0, 0, 1); - -EXPORT_CONST M44d identity44d ( 1, 0, 0, 0, - 0, 1, 0, 0, - 0, 0, 1, 0, - 0, 0, 0, 1); - -namespace -{ - -class KahanSum -{ -public: - KahanSum() : _total(0), _correction(0) {} - - void - operator+= (const double val) - { - const double y = val - _correction; - const double t = _total + y; - _correction = (t - _total) - y; - _total = t; - } - - double get() const - { - return _total; - } - -private: - double _total; - double _correction; -}; - -} - -template -M44d -procrustesRotationAndTranslation (const Vec3* A, const Vec3* B, const T* weights, const size_t numPoints, const bool doScale) -{ - if (numPoints == 0) - return M44d(); - - // Always do the accumulation in double precision: - V3d Acenter (0.0); - V3d Bcenter (0.0); - double weightsSum = 0.0; - - if (weights == 0) - { - for (int i = 0; i < numPoints; ++i) - { - Acenter += (V3d) A[i]; - Bcenter += (V3d) B[i]; - } - weightsSum = (double) numPoints; - } - else - { - for (int i = 0; i < numPoints; ++i) - { - const double w = weights[i]; - weightsSum += w; - - Acenter += w * (V3d) A[i]; - Bcenter += w * (V3d) B[i]; - } - } - - if (weightsSum == 0) - return M44d(); - - Acenter /= weightsSum; - Bcenter /= weightsSum; - - // - // Find Q such that |Q*A - B| (actually A-Acenter and B-Bcenter, weighted) - // is minimized in the least squares sense. - // From Golub/Van Loan, p.601 - // - // A,B are 3xn - // Let C = B A^T (where A is 3xn and B^T is nx3, so C is 3x3) - // Compute the SVD: C = U D V^T (U,V rotations, D diagonal). - // Throw away the D part, and return Q = U V^T - M33d C (0.0); - if (weights == 0) - { - for (int i = 0; i < numPoints; ++i) - C += outerProduct ((V3d) B[i] - Bcenter, (V3d) A[i] - Acenter); - } - else - { - for (int i = 0; i < numPoints; ++i) - { - const double w = weights[i]; - C += outerProduct (w * ((V3d) B[i] - Bcenter), (V3d) A[i] - Acenter); - } - } - - M33d U, V; - V3d S; - jacobiSVD (C, U, S, V, IMATH_INTERNAL_NAMESPACE::limits::epsilon(), true); - - // We want Q.transposed() here since we are going to be using it in the - // Imath style (multiplying vectors on the right, v' = v*A^T): - const M33d Qt = V * U.transposed(); - - double s = 1.0; - if (doScale && numPoints > 1) - { - // Finding a uniform scale: let us assume the Q is completely fixed - // at this point (solving for both simultaneously seems much harder). - // We are trying to compute (again, per Golub and van Loan) - // min || s*A*Q - B ||_F - // Notice that we've jammed a uniform scale in front of the Q. - // Now, the Frobenius norm (the least squares norm over matrices) - // has the neat property that it is equivalent to minimizing the trace - // of M^T*M (see your friendly neighborhood linear algebra text for a - // derivation). Thus, we can expand this out as - // min tr (s*A*Q - B)^T*(s*A*Q - B) - // = min tr(Q^T*A^T*s*s*A*Q) + tr(B^T*B) - 2*tr(Q^T*A^T*s*B) by linearity of the trace - // = min s^2 tr(A^T*A) + tr(B^T*B) - 2*s*tr(Q^T*A^T*B) using the fact that the trace is invariant - // under similarity transforms Q*M*Q^T - // If we differentiate w.r.t. s and set this to 0, we get - // 0 = 2*s*tr(A^T*A) - 2*tr(Q^T*A^T*B) - // so - // 2*s*tr(A^T*A) = 2*s*tr(Q^T*A^T*B) - // s = tr(Q^T*A^T*B) / tr(A^T*A) - - KahanSum traceATA; - if (weights == 0) - { - for (int i = 0; i < numPoints; ++i) - traceATA += ((V3d) A[i] - Acenter).length2(); - } - else - { - for (int i = 0; i < numPoints; ++i) - traceATA += ((double) weights[i]) * ((V3d) A[i] - Acenter).length2(); - } - - KahanSum traceBATQ; - for (int i = 0; i < 3; ++i) - for (int j = 0; j < 3; ++j) - traceBATQ += Qt[j][i] * C[i][j]; - - s = traceBATQ.get() / traceATA.get(); - } - - // Q is the rotation part of what we want to return. - // The entire transform is: - // (translate origin to Bcenter) * Q * (translate Acenter to origin) - // last first - // The effect of this on a point is: - // (translate origin to Bcenter) * Q * (translate Acenter to origin) * point - // = (translate origin to Bcenter) * Q * (-Acenter + point) - // = (translate origin to Bcenter) * (-Q*Acenter + Q*point) - // = (translate origin to Bcenter) * (translate Q*Acenter to origin) * Q*point - // = (translate Q*Acenter to Bcenter) * Q*point - // So what we want to return is: - // (translate Q*Acenter to Bcenter) * Q - // - // In block form, this is: - // [ 1 0 0 | ] [ 0 ] [ 1 0 0 | ] [ 1 0 0 | ] [ | ] [ ] - // [ 0 1 0 tb ] [ s*Q 0 ] [ 0 1 0 -ta ] = [ 0 1 0 tb ] [ s*Q -s*Q*ta ] = [ Q tb-s*Q*ta ] - // [ 0 0 1 | ] [ 0 ] [ 0 0 1 | ] [ 0 0 1 | ] [ | ] [ ] - // [ 0 0 0 1 ] [ 0 0 0 1 ] [ 0 0 0 1 ] [ 0 0 0 1 ] [ 0 0 0 1 ] [ 0 0 0 1 ] - // (ofc the whole thing is transposed for Imath). - const V3d translate = Bcenter - s*Acenter*Qt; - - return M44d (s*Qt.x[0][0], s*Qt.x[0][1], s*Qt.x[0][2], T(0), - s*Qt.x[1][0], s*Qt.x[1][1], s*Qt.x[1][2], T(0), - s*Qt.x[2][0], s*Qt.x[2][1], s*Qt.x[2][2], T(0), - translate.x, translate.y, translate.z, T(1)); -} // procrustesRotationAndTranslation - -template -M44d -procrustesRotationAndTranslation (const Vec3* A, const Vec3* B, const size_t numPoints, const bool doScale) -{ - return procrustesRotationAndTranslation (A, B, (const T*) 0, numPoints, doScale); -} // procrustesRotationAndTranslation - - -template IMATH_EXPORT M44d procrustesRotationAndTranslation (const V3d* from, const V3d* to, const size_t numPoints, const bool doScale); -template IMATH_EXPORT M44d procrustesRotationAndTranslation (const V3f* from, const V3f* to, const size_t numPoints, const bool doScale); -template IMATH_EXPORT M44d procrustesRotationAndTranslation (const V3d* from, const V3d* to, const double* weights, const size_t numPoints, const bool doScale); -template IMATH_EXPORT M44d procrustesRotationAndTranslation (const V3f* from, const V3f* to, const float* weights, const size_t numPoints, const bool doScale); - - -namespace -{ - -// Applies the 2x2 Jacobi rotation -// [ c s 0 ] [ 1 0 0 ] [ c 0 s ] -// [ -s c 0 ] or [ 0 c s ] or [ 0 1 0 ] -// [ 0 0 1 ] [ 0 -s c ] [ -s 0 c ] -// from the right; that is, computes -// J * A -// for the Jacobi rotation J and the matrix A. This is efficient because we -// only need to touch exactly the 2 columns that are affected, so we never -// need to explicitly construct the J matrix. -template -void -jacobiRotateRight (IMATH_INTERNAL_NAMESPACE::Matrix33& A, - const T c, - const T s) -{ - for (int i = 0; i < 3; ++i) - { - const T tau1 = A[i][j]; - const T tau2 = A[i][k]; - A[i][j] = c * tau1 - s * tau2; - A[i][k] = s * tau1 + c * tau2; - } -} - -template -void -jacobiRotateRight (IMATH_INTERNAL_NAMESPACE::Matrix44& A, - const int j, - const int k, - const T c, - const T s) -{ - for (int i = 0; i < 4; ++i) - { - const T tau1 = A[i][j]; - const T tau2 = A[i][k]; - A[i][j] = c * tau1 - s * tau2; - A[i][k] = s * tau1 + c * tau2; - } -} - -// This routine solves the 2x2 SVD: -// [ c1 s1 ] [ w x ] [ c2 s2 ] [ d1 0 ] -// [ ] [ ] [ ] = [ ] -// [ -s1 c1 ] [ y z ] [ -s2 c2 ] [ 0 d2 ] -// where -// [ w x ] -// A = [ ] -// [ y z ] -// is the subset of A consisting of the [j,k] entries, A([j k], [j k]) in -// Matlab parlance. The method is the 'USVD' algorithm described in the -// following paper: -// 'Computation of the Singular Value Decomposition using Mesh-Connected Processors' -// by Richard P. Brent, Franklin T. Luk, and Charles Van Loan -// It breaks the computation into two steps: the first symmetrizes the matrix, -// and the second diagonalizes the symmetric matrix. -template -bool -twoSidedJacobiRotation (IMATH_INTERNAL_NAMESPACE::Matrix33& A, - IMATH_INTERNAL_NAMESPACE::Matrix33& U, - IMATH_INTERNAL_NAMESPACE::Matrix33& V, - const T tol) -{ - // Load everything into local variables to make things easier on the - // optimizer: - const T w = A[j][j]; - const T x = A[j][k]; - const T y = A[k][j]; - const T z = A[k][k]; - - // We will keep track of whether we're actually performing any rotations, - // since if the matrix is already diagonal we'll end up with the identity - // as our Jacobi rotation and we can short-circuit. - bool changed = false; - - // The first step is to symmetrize the 2x2 matrix, - // [ c s ]^T [ w x ] = [ p q ] - // [ -s c ] [ y z ] [ q r ] - T mu_1 = w + z; - T mu_2 = x - y; - - T c, s; - if (std::abs(mu_2) <= tol*std::abs(mu_1)) // Already symmetric (to tolerance) - { // Note that the <= is important here - c = T(1); // because we want to bypass the computation - s = T(0); // of rho if mu_1 = mu_2 = 0. - - const T p = w; - const T r = z; - mu_1 = r - p; - mu_2 = x + y; - } - else - { - const T rho = mu_1 / mu_2; - s = T(1) / std::sqrt (T(1) + rho*rho); // TODO is there a native inverse square root function? - if (rho < 0) - s = -s; - c = s * rho; - - mu_1 = s * (x + y) + c * (z - w); // = r - p - mu_2 = T(2) * (c * x - s * z); // = 2*q - - changed = true; - } - - // The second stage diagonalizes, - // [ c2 s2 ]^T [ p q ] [ c2 s2 ] = [ d1 0 ] - // [ -s2 c2 ] [ q r ] [ -s2 c2 ] [ 0 d2 ] - T c_2, s_2; - if (std::abs(mu_2) <= tol*std::abs(mu_1)) - { - c_2 = T(1); - s_2 = T(0); - } - else - { - const T rho_2 = mu_1 / mu_2; - T t_2 = T(1) / (std::abs(rho_2) + std::sqrt(1 + rho_2*rho_2)); - if (rho_2 < 0) - t_2 = -t_2; - c_2 = T(1) / std::sqrt (T(1) + t_2*t_2); - s_2 = c_2 * t_2; - - changed = true; - } - - const T c_1 = c_2 * c - s_2 * s; - const T s_1 = s_2 * c + c_2 * s; - - if (!changed) - { - // We've decided that the off-diagonal entries are already small - // enough, so we'll set them to zero. This actually appears to result - // in smaller errors than leaving them be, possibly because it prevents - // us from trying to do extra rotations later that we don't need. - A[k][j] = 0; - A[j][k] = 0; - return false; - } - - const T d_1 = c_1*(w*c_2 - x*s_2) - s_1*(y*c_2 - z*s_2); - const T d_2 = s_1*(w*s_2 + x*c_2) + c_1*(y*s_2 + z*c_2); - - // For the entries we just zeroed out, we'll just set them to 0, since - // they should be 0 up to machine precision. - A[j][j] = d_1; - A[k][k] = d_2; - A[k][j] = 0; - A[j][k] = 0; - - // Rotate the entries that _weren't_ involved in the 2x2 SVD: - { - // Rotate on the left by - // [ c1 s1 0 ]^T [ c1 0 s1 ]^T [ 1 0 0 ]^T - // [ -s1 c1 0 ] or [ 0 1 0 ] or [ 0 c1 s1 ] - // [ 0 0 1 ] [ -s1 0 c1 ] [ 0 -s1 c1 ] - // This has the effect of adding the (weighted) ith and jth _rows_ to - // each other. - const T tau1 = A[j][l]; - const T tau2 = A[k][l]; - A[j][l] = c_1 * tau1 - s_1 * tau2; - A[k][l] = s_1 * tau1 + c_1 * tau2; - } - - { - // Rotate on the right by - // [ c2 s2 0 ] [ c2 0 s2 ] [ 1 0 0 ] - // [ -s2 c2 0 ] or [ 0 1 0 ] or [ 0 c2 s2 ] - // [ 0 0 1 ] [ -s2 0 c2 ] [ 0 -s2 c2 ] - // This has the effect of adding the (weighted) ith and jth _columns_ to - // each other. - const T tau1 = A[l][j]; - const T tau2 = A[l][k]; - A[l][j] = c_2 * tau1 - s_2 * tau2; - A[l][k] = s_2 * tau1 + c_2 * tau2; - } - - // Now apply the rotations to U and V: - // Remember that we have - // R1^T * A * R2 = D - // This is in the 2x2 case, but after doing a bunch of these - // we will get something like this for the 3x3 case: - // ... R1b^T * R1a^T * A * R2a * R2b * ... = D - // ----------------- --------------- - // = U^T = V - // So, - // U = R1a * R1b * ... - // V = R2a * R2b * ... - jacobiRotateRight (U, c_1, s_1); - jacobiRotateRight (V, c_2, s_2); - - return true; -} - -template -bool -twoSidedJacobiRotation (IMATH_INTERNAL_NAMESPACE::Matrix44& A, - int j, - int k, - IMATH_INTERNAL_NAMESPACE::Matrix44& U, - IMATH_INTERNAL_NAMESPACE::Matrix44& V, - const T tol) -{ - // Load everything into local variables to make things easier on the - // optimizer: - const T w = A[j][j]; - const T x = A[j][k]; - const T y = A[k][j]; - const T z = A[k][k]; - - // We will keep track of whether we're actually performing any rotations, - // since if the matrix is already diagonal we'll end up with the identity - // as our Jacobi rotation and we can short-circuit. - bool changed = false; - - // The first step is to symmetrize the 2x2 matrix, - // [ c s ]^T [ w x ] = [ p q ] - // [ -s c ] [ y z ] [ q r ] - T mu_1 = w + z; - T mu_2 = x - y; - - T c, s; - if (std::abs(mu_2) <= tol*std::abs(mu_1)) // Already symmetric (to tolerance) - { // Note that the <= is important here - c = T(1); // because we want to bypass the computation - s = T(0); // of rho if mu_1 = mu_2 = 0. - - const T p = w; - const T r = z; - mu_1 = r - p; - mu_2 = x + y; - } - else - { - const T rho = mu_1 / mu_2; - s = T(1) / std::sqrt (T(1) + rho*rho); // TODO is there a native inverse square root function? - if (rho < 0) - s = -s; - c = s * rho; - - mu_1 = s * (x + y) + c * (z - w); // = r - p - mu_2 = T(2) * (c * x - s * z); // = 2*q - - changed = true; - } - - // The second stage diagonalizes, - // [ c2 s2 ]^T [ p q ] [ c2 s2 ] = [ d1 0 ] - // [ -s2 c2 ] [ q r ] [ -s2 c2 ] [ 0 d2 ] - T c_2, s_2; - if (std::abs(mu_2) <= tol*std::abs(mu_1)) - { - c_2 = T(1); - s_2 = T(0); - } - else - { - const T rho_2 = mu_1 / mu_2; - T t_2 = T(1) / (std::abs(rho_2) + std::sqrt(1 + rho_2*rho_2)); - if (rho_2 < 0) - t_2 = -t_2; - c_2 = T(1) / std::sqrt (T(1) + t_2*t_2); - s_2 = c_2 * t_2; - - changed = true; - } - - const T c_1 = c_2 * c - s_2 * s; - const T s_1 = s_2 * c + c_2 * s; - - if (!changed) - { - // We've decided that the off-diagonal entries are already small - // enough, so we'll set them to zero. This actually appears to result - // in smaller errors than leaving them be, possibly because it prevents - // us from trying to do extra rotations later that we don't need. - A[k][j] = 0; - A[j][k] = 0; - return false; - } - - const T d_1 = c_1*(w*c_2 - x*s_2) - s_1*(y*c_2 - z*s_2); - const T d_2 = s_1*(w*s_2 + x*c_2) + c_1*(y*s_2 + z*c_2); - - // For the entries we just zeroed out, we'll just set them to 0, since - // they should be 0 up to machine precision. - A[j][j] = d_1; - A[k][k] = d_2; - A[k][j] = 0; - A[j][k] = 0; - - // Rotate the entries that _weren't_ involved in the 2x2 SVD: - for (int l = 0; l < 4; ++l) - { - if (l == j || l == k) - continue; - - // Rotate on the left by - // [ 1 ] - // [ . ] - // [ c2 s2 ] j - // [ 1 ] - // [ -s2 c2 ] k - // [ . ] - // [ 1 ] - // j k - // - // This has the effect of adding the (weighted) ith and jth _rows_ to - // each other. - const T tau1 = A[j][l]; - const T tau2 = A[k][l]; - A[j][l] = c_1 * tau1 - s_1 * tau2; - A[k][l] = s_1 * tau1 + c_1 * tau2; - } - - for (int l = 0; l < 4; ++l) - { - // We set the A[j/k][j/k] entries already - if (l == j || l == k) - continue; - - // Rotate on the right by - // [ 1 ] - // [ . ] - // [ c2 s2 ] j - // [ 1 ] - // [ -s2 c2 ] k - // [ . ] - // [ 1 ] - // j k - // - // This has the effect of adding the (weighted) ith and jth _columns_ to - // each other. - const T tau1 = A[l][j]; - const T tau2 = A[l][k]; - A[l][j] = c_2 * tau1 - s_2 * tau2; - A[l][k] = s_2 * tau1 + c_2 * tau2; - } - - // Now apply the rotations to U and V: - // Remember that we have - // R1^T * A * R2 = D - // This is in the 2x2 case, but after doing a bunch of these - // we will get something like this for the 3x3 case: - // ... R1b^T * R1a^T * A * R2a * R2b * ... = D - // ----------------- --------------- - // = U^T = V - // So, - // U = R1a * R1b * ... - // V = R2a * R2b * ... - jacobiRotateRight (U, j, k, c_1, s_1); - jacobiRotateRight (V, j, k, c_2, s_2); - - return true; -} - -template -void -swapColumns (IMATH_INTERNAL_NAMESPACE::Matrix33& A, int j, int k) -{ - for (int i = 0; i < 3; ++i) - std::swap (A[i][j], A[i][k]); -} - -template -T -maxOffDiag (const IMATH_INTERNAL_NAMESPACE::Matrix33& A) -{ - T result = 0; - result = std::max (result, std::abs (A[0][1])); - result = std::max (result, std::abs (A[0][2])); - result = std::max (result, std::abs (A[1][0])); - result = std::max (result, std::abs (A[1][2])); - result = std::max (result, std::abs (A[2][0])); - result = std::max (result, std::abs (A[2][1])); - return result; -} - -template -T -maxOffDiag (const IMATH_INTERNAL_NAMESPACE::Matrix44& A) -{ - T result = 0; - for (int i = 0; i < 4; ++i) - { - for (int j = 0; j < 4; ++j) - { - if (i != j) - result = std::max (result, std::abs (A[i][j])); - } - } - - return result; -} - -template -void -twoSidedJacobiSVD (IMATH_INTERNAL_NAMESPACE::Matrix33 A, - IMATH_INTERNAL_NAMESPACE::Matrix33& U, - IMATH_INTERNAL_NAMESPACE::Vec3& S, - IMATH_INTERNAL_NAMESPACE::Matrix33& V, - const T tol, - const bool forcePositiveDeterminant) -{ - // The two-sided Jacobi SVD works by repeatedly zeroing out - // off-diagonal entries of the matrix, 2 at a time. Basically, - // we can take our 3x3 matrix, - // [* * *] - // [* * *] - // [* * *] - // and use a pair of orthogonal transforms to zero out, say, the - // pair of entries (0, 1) and (1, 0): - // [ c1 s1 ] [* * *] [ c2 s2 ] [* *] - // [-s1 c1 ] [* * *] [-s2 c2 ] = [ * *] - // [ 1] [* * *] [ 1] [* * *] - // When we go to zero out the next pair of entries (say, (0, 2) and (2, 0)) - // then we don't expect those entries to stay 0: - // [ c1 s1 ] [* *] [ c2 s2 ] [* * ] - // [-s1 c1 ] [ * *] [-s2 c2 ] = [* * *] - // [ 1] [* * *] [ 1] [ * *] - // However, if we keep doing this, we'll find that the off-diagonal entries - // converge to 0 fairly quickly (convergence should be roughly cubic). The - // result is a diagonal A matrix and a bunch of orthogonal transforms: - // [* * *] [* ] - // L1 L2 ... Ln [* * *] Rn ... R2 R1 = [ * ] - // [* * *] [ *] - // ------------ ------- ------------ ------- - // U^T A V S - // This turns out to be highly accurate because (1) orthogonal transforms - // are extremely stable to compute and apply (this is why QR factorization - // works so well, FWIW) and because (2) by applying everything to the original - // matrix A instead of computing (A^T * A) we avoid any precision loss that - // would result from that. - U.makeIdentity(); - V.makeIdentity(); - - const int maxIter = 20; // In case we get really unlucky, prevents infinite loops - const T absTol = tol * maxOffDiag (A); // Tolerance is in terms of the maximum - if (absTol != 0) // _off-diagonal_ entry. - { - int numIter = 0; - do - { - ++numIter; - bool changed = twoSidedJacobiRotation (A, U, V, tol); - changed = twoSidedJacobiRotation (A, U, V, tol) || changed; - changed = twoSidedJacobiRotation (A, U, V, tol) || changed; - if (!changed) - break; - } while (maxOffDiag(A) > absTol && numIter < maxIter); - } - - // The off-diagonal entries are (effectively) 0, so whatever's left on the - // diagonal are the singular values: - S.x = A[0][0]; - S.y = A[1][1]; - S.z = A[2][2]; - - // Nothing thus far has guaranteed that the singular values are positive, - // so let's go back through and flip them if not (since by contract we are - // supposed to return all positive SVs): - for (int i = 0; i < 3; ++i) - { - if (S[i] < 0) - { - // If we flip S[i], we need to flip the corresponding column of U - // (we could also pick V if we wanted; it doesn't really matter): - S[i] = -S[i]; - for (int j = 0; j < 3; ++j) - U[j][i] = -U[j][i]; - } - } - - // Order the singular values from largest to smallest; this requires - // exactly two passes through the data using bubble sort: - for (int i = 0; i < 2; ++i) - { - for (int j = 0; j < (2 - i); ++j) - { - // No absolute values necessary since we already ensured that - // they're positive: - if (S[j] < S[j+1]) - { - // If we swap singular values we also have to swap - // corresponding columns in U and V: - std::swap (S[j], S[j+1]); - swapColumns (U, j, j+1); - swapColumns (V, j, j+1); - } - } - } - - if (forcePositiveDeterminant) - { - // We want to guarantee that the returned matrices always have positive - // determinant. We can do this by adding the appropriate number of - // matrices of the form: - // [ 1 ] - // L = [ 1 ] - // [ -1 ] - // Note that L' = L and L*L = Identity. Thus we can add: - // U*L*L*S*V = (U*L)*(L*S)*V - // if U has a negative determinant, and - // U*S*L*L*V = U*(S*L)*(L*V) - // if V has a neg. determinant. - if (U.determinant() < 0) - { - for (int i = 0; i < 3; ++i) - U[i][2] = -U[i][2]; - S.z = -S.z; - } - - if (V.determinant() < 0) - { - for (int i = 0; i < 3; ++i) - V[i][2] = -V[i][2]; - S.z = -S.z; - } - } -} - -template -void -twoSidedJacobiSVD (IMATH_INTERNAL_NAMESPACE::Matrix44 A, - IMATH_INTERNAL_NAMESPACE::Matrix44& U, - IMATH_INTERNAL_NAMESPACE::Vec4& S, - IMATH_INTERNAL_NAMESPACE::Matrix44& V, - const T tol, - const bool forcePositiveDeterminant) -{ - // Please see the Matrix33 version for a detailed description of the algorithm. - U.makeIdentity(); - V.makeIdentity(); - - const int maxIter = 20; // In case we get really unlucky, prevents infinite loops - const T absTol = tol * maxOffDiag (A); // Tolerance is in terms of the maximum - if (absTol != 0) // _off-diagonal_ entry. - { - int numIter = 0; - do - { - ++numIter; - bool changed = twoSidedJacobiRotation (A, 0, 1, U, V, tol); - changed = twoSidedJacobiRotation (A, 0, 2, U, V, tol) || changed; - changed = twoSidedJacobiRotation (A, 0, 3, U, V, tol) || changed; - changed = twoSidedJacobiRotation (A, 1, 2, U, V, tol) || changed; - changed = twoSidedJacobiRotation (A, 1, 3, U, V, tol) || changed; - changed = twoSidedJacobiRotation (A, 2, 3, U, V, tol) || changed; - if (!changed) - break; - } while (maxOffDiag(A) > absTol && numIter < maxIter); - } - - // The off-diagonal entries are (effectively) 0, so whatever's left on the - // diagonal are the singular values: - S[0] = A[0][0]; - S[1] = A[1][1]; - S[2] = A[2][2]; - S[3] = A[3][3]; - - // Nothing thus far has guaranteed that the singular values are positive, - // so let's go back through and flip them if not (since by contract we are - // supposed to return all positive SVs): - for (int i = 0; i < 4; ++i) - { - if (S[i] < 0) - { - // If we flip S[i], we need to flip the corresponding column of U - // (we could also pick V if we wanted; it doesn't really matter): - S[i] = -S[i]; - for (int j = 0; j < 4; ++j) - U[j][i] = -U[j][i]; - } - } - - // Order the singular values from largest to smallest using insertion sort: - for (int i = 1; i < 4; ++i) - { - const IMATH_INTERNAL_NAMESPACE::Vec4 uCol (U[0][i], U[1][i], U[2][i], U[3][i]); - const IMATH_INTERNAL_NAMESPACE::Vec4 vCol (V[0][i], V[1][i], V[2][i], V[3][i]); - const T sVal = S[i]; - - int j = i - 1; - while (std::abs (S[j]) < std::abs (sVal)) - { - for (int k = 0; k < 4; ++k) - U[k][j+1] = U[k][j]; - for (int k = 0; k < 4; ++k) - V[k][j+1] = V[k][j]; - S[j+1] = S[j]; - - --j; - if (j < 0) - break; - } - - for (int k = 0; k < 4; ++k) - U[k][j+1] = uCol[k]; - for (int k = 0; k < 4; ++k) - V[k][j+1] = vCol[k]; - S[j+1] = sVal; - } - - if (forcePositiveDeterminant) - { - // We want to guarantee that the returned matrices always have positive - // determinant. We can do this by adding the appropriate number of - // matrices of the form: - // [ 1 ] - // L = [ 1 ] - // [ 1 ] - // [ -1 ] - // Note that L' = L and L*L = Identity. Thus we can add: - // U*L*L*S*V = (U*L)*(L*S)*V - // if U has a negative determinant, and - // U*S*L*L*V = U*(S*L)*(L*V) - // if V has a neg. determinant. - if (U.determinant() < 0) - { - for (int i = 0; i < 4; ++i) - U[i][3] = -U[i][3]; - S[3] = -S[3]; - } - - if (V.determinant() < 0) - { - for (int i = 0; i < 4; ++i) - V[i][3] = -V[i][3]; - S[3] = -S[3]; - } - } -} - -} - -template -void -jacobiSVD (const IMATH_INTERNAL_NAMESPACE::Matrix33& A, - IMATH_INTERNAL_NAMESPACE::Matrix33& U, - IMATH_INTERNAL_NAMESPACE::Vec3& S, - IMATH_INTERNAL_NAMESPACE::Matrix33& V, - const T tol, - const bool forcePositiveDeterminant) -{ - twoSidedJacobiSVD (A, U, S, V, tol, forcePositiveDeterminant); -} - -template -void -jacobiSVD (const IMATH_INTERNAL_NAMESPACE::Matrix44& A, - IMATH_INTERNAL_NAMESPACE::Matrix44& U, - IMATH_INTERNAL_NAMESPACE::Vec4& S, - IMATH_INTERNAL_NAMESPACE::Matrix44& V, - const T tol, - const bool forcePositiveDeterminant) -{ - twoSidedJacobiSVD (A, U, S, V, tol, forcePositiveDeterminant); -} - -template IMATH_EXPORT void jacobiSVD (const IMATH_INTERNAL_NAMESPACE::Matrix33& A, - IMATH_INTERNAL_NAMESPACE::Matrix33& U, - IMATH_INTERNAL_NAMESPACE::Vec3& S, - IMATH_INTERNAL_NAMESPACE::Matrix33& V, - const float tol, - const bool forcePositiveDeterminant); -template IMATH_EXPORT void jacobiSVD (const IMATH_INTERNAL_NAMESPACE::Matrix33& A, - IMATH_INTERNAL_NAMESPACE::Matrix33& U, - IMATH_INTERNAL_NAMESPACE::Vec3& S, - IMATH_INTERNAL_NAMESPACE::Matrix33& V, - const double tol, - const bool forcePositiveDeterminant); -template IMATH_EXPORT void jacobiSVD (const IMATH_INTERNAL_NAMESPACE::Matrix44& A, - IMATH_INTERNAL_NAMESPACE::Matrix44& U, - IMATH_INTERNAL_NAMESPACE::Vec4& S, - IMATH_INTERNAL_NAMESPACE::Matrix44& V, - const float tol, - const bool forcePositiveDeterminant); -template IMATH_EXPORT void jacobiSVD (const IMATH_INTERNAL_NAMESPACE::Matrix44& A, - IMATH_INTERNAL_NAMESPACE::Matrix44& U, - IMATH_INTERNAL_NAMESPACE::Vec4& S, - IMATH_INTERNAL_NAMESPACE::Matrix44& V, - const double tol, - const bool forcePositiveDeterminant); - -namespace -{ - -template -inline -void -jacobiRotateRight (TM& A, - const typename TM::BaseType s, - const typename TM::BaseType tau) -{ - typedef typename TM::BaseType T; - - for (unsigned int i = 0; i < TM::dimensions(); ++i) - { - const T nu1 = A[i][j]; - const T nu2 = A[i][k]; - A[i][j] -= s * (nu2 + tau * nu1); - A[i][k] += s * (nu1 - tau * nu2); - } -} - -template -bool -jacobiRotation (Matrix33& A, - Matrix33& V, - Vec3& Z, - const T tol) -{ - // Load everything into local variables to make things easier on the - // optimizer: - const T x = A[j][j]; - const T y = A[j][k]; - const T z = A[k][k]; - - // The first stage diagonalizes, - // [ c s ]^T [ x y ] [ c -s ] = [ d1 0 ] - // [ -s c ] [ y z ] [ s c ] [ 0 d2 ] - const T mu1 = z - x; - const T mu2 = 2 * y; - - if (std::abs(mu2) <= tol*std::abs(mu1)) - { - // We've decided that the off-diagonal entries are already small - // enough, so we'll set them to zero. This actually appears to result - // in smaller errors than leaving them be, possibly because it prevents - // us from trying to do extra rotations later that we don't need. - A[j][k] = 0; - return false; - } - const T rho = mu1 / mu2; - const T t = (rho < 0 ? T(-1) : T(1)) / (std::abs(rho) + std::sqrt(1 + rho*rho)); - const T c = T(1) / std::sqrt (T(1) + t*t); - const T s = t * c; - const T tau = s / (T(1) + c); - const T h = t * y; - - // Update diagonal elements. - Z[j] -= h; - Z[k] += h; - A[j][j] -= h; - A[k][k] += h; - - // For the entries we just zeroed out, we'll just set them to 0, since - // they should be 0 up to machine precision. - A[j][k] = 0; - - // We only update upper triagnular elements of A, since - // A is supposed to be symmetric. - T& offd1 = l < j ? A[l][j] : A[j][l]; - T& offd2 = l < k ? A[l][k] : A[k][l]; - const T nu1 = offd1; - const T nu2 = offd2; - offd1 = nu1 - s * (nu2 + tau * nu1); - offd2 = nu2 + s * (nu1 - tau * nu2); - - // Apply rotation to V - jacobiRotateRight (V, s, tau); - - return true; -} - -template -bool -jacobiRotation (Matrix44& A, - Matrix44& V, - Vec4& Z, - const T tol) -{ - const T x = A[j][j]; - const T y = A[j][k]; - const T z = A[k][k]; - - const T mu1 = z - x; - const T mu2 = T(2) * y; - - // Let's see if rho^(-1) = mu2 / mu1 is less than tol - // This test also checks if rho^2 will overflow - // when tol^(-1) < sqrt(limits::max()). - if (std::abs(mu2) <= tol*std::abs(mu1)) - { - A[j][k] = 0; - return true; - } - - const T rho = mu1 / mu2; - const T t = (rho < 0 ? T(-1) : T(1)) / (std::abs(rho) + std::sqrt(1 + rho*rho)); - const T c = T(1) / std::sqrt (T(1) + t*t); - const T s = c * t; - const T tau = s / (T(1) + c); - const T h = t * y; - - Z[j] -= h; - Z[k] += h; - A[j][j] -= h; - A[k][k] += h; - A[j][k] = 0; - - { - T& offd1 = l1 < j ? A[l1][j] : A[j][l1]; - T& offd2 = l1 < k ? A[l1][k] : A[k][l1]; - const T nu1 = offd1; - const T nu2 = offd2; - offd1 -= s * (nu2 + tau * nu1); - offd2 += s * (nu1 - tau * nu2); - } - - { - T& offd1 = l2 < j ? A[l2][j] : A[j][l2]; - T& offd2 = l2 < k ? A[l2][k] : A[k][l2]; - const T nu1 = offd1; - const T nu2 = offd2; - offd1 -= s * (nu2 + tau * nu1); - offd2 += s * (nu1 - tau * nu2); - } - - jacobiRotateRight (V, s, tau); - - return true; -} - -template -inline -typename TM::BaseType -maxOffDiagSymm (const TM& A) -{ - typedef typename TM::BaseType T; - T result = 0; - for (unsigned int i = 0; i < TM::dimensions(); ++i) - for (unsigned int j = i+1; j < TM::dimensions(); ++j) - result = std::max (result, std::abs (A[i][j])); - - return result; -} - -} // namespace - -template -void -jacobiEigenSolver (Matrix33& A, - Vec3& S, - Matrix33& V, - const T tol) -{ - V.makeIdentity(); - for(int i = 0; i < 3; ++i) { - S[i] = A[i][i]; - } - - const int maxIter = 20; // In case we get really unlucky, prevents infinite loops - const T absTol = tol * maxOffDiagSymm (A); // Tolerance is in terms of the maximum - if (absTol != 0) // _off-diagonal_ entry. - { - int numIter = 0; - do - { - // Z is for accumulating small changes (h) to diagonal entries - // of A for one sweep. Adding h's directly to A might cause - // a cancellation effect when h is relatively very small to - // the corresponding diagonal entry of A and - // this will increase numerical errors - Vec3 Z(0, 0, 0); - ++numIter; - bool changed = jacobiRotation<0, 1, 2> (A, V, Z, tol); - changed = jacobiRotation<0, 2, 1> (A, V, Z, tol) || changed; - changed = jacobiRotation<1, 2, 0> (A, V, Z, tol) || changed; - // One sweep passed. Add accumulated changes (Z) to singular values (S) - // Update diagonal elements of A for better accuracy as well. - for(int i = 0; i < 3; ++i) { - A[i][i] = S[i] += Z[i]; - } - if (!changed) - break; - } while (maxOffDiagSymm(A) > absTol && numIter < maxIter); - } -} - -template -void -jacobiEigenSolver (Matrix44& A, - Vec4& S, - Matrix44& V, - const T tol) -{ - V.makeIdentity(); - - for(int i = 0; i < 4; ++i) { - S[i] = A[i][i]; - } - - const int maxIter = 20; // In case we get really unlucky, prevents infinite loops - const T absTol = tol * maxOffDiagSymm (A); // Tolerance is in terms of the maximum - if (absTol != 0) // _off-diagonal_ entry. - { - int numIter = 0; - do - { - ++numIter; - Vec4 Z(0, 0, 0, 0); - bool changed = jacobiRotation<0, 1, 2, 3> (A, V, Z, tol); - changed = jacobiRotation<0, 2, 1, 3> (A, V, Z, tol) || changed; - changed = jacobiRotation<0, 3, 1, 2> (A, V, Z, tol) || changed; - changed = jacobiRotation<1, 2, 0, 3> (A, V, Z, tol) || changed; - changed = jacobiRotation<1, 3, 0, 2> (A, V, Z, tol) || changed; - changed = jacobiRotation<2, 3, 0, 1> (A, V, Z, tol) || changed; - for(int i = 0; i < 4; ++i) { - A[i][i] = S[i] += Z[i]; - } - if (!changed) - break; - } while (maxOffDiagSymm(A) > absTol && numIter < maxIter); - } -} - -template -void -maxEigenVector (TM& A, TV& V) -{ - TV S; - TM MV; - jacobiEigenSolver(A, S, MV); - - int maxIdx(0); - for(unsigned int i = 1; i < TV::dimensions(); ++i) - { - if(std::abs(S[i]) > std::abs(S[maxIdx])) - maxIdx = i; - } - - for(unsigned int i = 0; i < TV::dimensions(); ++i) - V[i] = MV[i][maxIdx]; -} - -template -void -minEigenVector (TM& A, TV& V) -{ - TV S; - TM MV; - jacobiEigenSolver(A, S, MV); - - int minIdx(0); - for(unsigned int i = 1; i < TV::dimensions(); ++i) - { - if(std::abs(S[i]) < std::abs(S[minIdx])) - minIdx = i; - } - - for(unsigned int i = 0; i < TV::dimensions(); ++i) - V[i] = MV[i][minIdx]; -} - -template IMATH_EXPORT void jacobiEigenSolver (Matrix33& A, - Vec3& S, - Matrix33& V, - const float tol); -template IMATH_EXPORT void jacobiEigenSolver (Matrix33& A, - Vec3& S, - Matrix33& V, - const double tol); -template IMATH_EXPORT void jacobiEigenSolver (Matrix44& A, - Vec4& S, - Matrix44& V, - const float tol); -template IMATH_EXPORT void jacobiEigenSolver (Matrix44& A, - Vec4& S, - Matrix44& V, - const double tol); - -template IMATH_EXPORT void maxEigenVector (Matrix33& A, - Vec3& S); -template IMATH_EXPORT void maxEigenVector (Matrix44& A, - Vec4& S); -template IMATH_EXPORT void maxEigenVector (Matrix33& A, - Vec3& S); -template IMATH_EXPORT void maxEigenVector (Matrix44& A, - Vec4& S); - -template IMATH_EXPORT void minEigenVector (Matrix33& A, - Vec3& S); -template IMATH_EXPORT void minEigenVector (Matrix44& A, - Vec4& S); -template IMATH_EXPORT void minEigenVector (Matrix33& A, - Vec3& S); -template IMATH_EXPORT void minEigenVector (Matrix44& A, - Vec4& S); - -IMATH_INTERNAL_NAMESPACE_SOURCE_EXIT diff --git a/3rdparty/openexr/Imath/ImathMatrixAlgo.h b/3rdparty/openexr/Imath/ImathMatrixAlgo.h deleted file mode 100644 index 8e90b02cb4..0000000000 --- a/3rdparty/openexr/Imath/ImathMatrixAlgo.h +++ /dev/null @@ -1,1425 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2002-2012, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - -#ifndef INCLUDED_IMATHMATRIXALGO_H -#define INCLUDED_IMATHMATRIXALGO_H - -//------------------------------------------------------------------------- -// -// This file contains algorithms applied to or in conjunction with -// transformation matrices (Imath::Matrix33 and Imath::Matrix44). -// The assumption made is that these functions are called much less -// often than the basic point functions or these functions require -// more support classes. -// -// This file also defines a few predefined constant matrices. -// -//------------------------------------------------------------------------- - -#include "ImathExport.h" -#include "ImathMatrix.h" -#include "ImathQuat.h" -#include "ImathEuler.h" -#include "ImathExc.h" -#include "ImathVec.h" -#include "ImathLimits.h" -#include "ImathNamespace.h" -#include - -IMATH_INTERNAL_NAMESPACE_HEADER_ENTER - -//------------------ -// Identity matrices -//------------------ - -IMATH_EXPORT_CONST M33f identity33f; -IMATH_EXPORT_CONST M44f identity44f; -IMATH_EXPORT_CONST M33d identity33d; -IMATH_EXPORT_CONST M44d identity44d; - -//---------------------------------------------------------------------- -// Extract scale, shear, rotation, and translation values from a matrix: -// -// Notes: -// -// This implementation follows the technique described in the paper by -// Spencer W. Thomas in the Graphics Gems II article: "Decomposing a -// Matrix into Simple Transformations", p. 320. -// -// - Some of the functions below have an optional exc parameter -// that determines the functions' behavior when the matrix' -// scaling is very close to zero: -// -// If exc is true, the functions throw an Imath::ZeroScale exception. -// -// If exc is false: -// -// extractScaling (m, s) returns false, s is invalid -// sansScaling (m) returns m -// removeScaling (m) returns false, m is unchanged -// sansScalingAndShear (m) returns m -// removeScalingAndShear (m) returns false, m is unchanged -// extractAndRemoveScalingAndShear (m, s, h) -// returns false, m is unchanged, -// (sh) are invalid -// checkForZeroScaleInRow () returns false -// extractSHRT (m, s, h, r, t) returns false, (shrt) are invalid -// -// - Functions extractEuler(), extractEulerXYZ() and extractEulerZYX() -// assume that the matrix does not include shear or non-uniform scaling, -// but they do not examine the matrix to verify this assumption. -// Matrices with shear or non-uniform scaling are likely to produce -// meaningless results. Therefore, you should use the -// removeScalingAndShear() routine, if necessary, prior to calling -// extractEuler...() . -// -// - All functions assume that the matrix does not include perspective -// transformation(s), but they do not examine the matrix to verify -// this assumption. Matrices with perspective transformations are -// likely to produce meaningless results. -// -//---------------------------------------------------------------------- - - -// -// Declarations for 4x4 matrix. -// - -template bool extractScaling - (const Matrix44 &mat, - Vec3 &scl, - bool exc = true); - -template Matrix44 sansScaling (const Matrix44 &mat, - bool exc = true); - -template bool removeScaling - (Matrix44 &mat, - bool exc = true); - -template bool extractScalingAndShear - (const Matrix44 &mat, - Vec3 &scl, - Vec3 &shr, - bool exc = true); - -template Matrix44 sansScalingAndShear - (const Matrix44 &mat, - bool exc = true); - -template void sansScalingAndShear - (Matrix44 &result, - const Matrix44 &mat, - bool exc = true); - -template bool removeScalingAndShear - (Matrix44 &mat, - bool exc = true); - -template bool extractAndRemoveScalingAndShear - (Matrix44 &mat, - Vec3 &scl, - Vec3 &shr, - bool exc = true); - -template void extractEulerXYZ - (const Matrix44 &mat, - Vec3 &rot); - -template void extractEulerZYX - (const Matrix44 &mat, - Vec3 &rot); - -template Quat extractQuat (const Matrix44 &mat); - -template bool extractSHRT - (const Matrix44 &mat, - Vec3 &s, - Vec3 &h, - Vec3 &r, - Vec3 &t, - bool exc /*= true*/, - typename Euler::Order rOrder); - -template bool extractSHRT - (const Matrix44 &mat, - Vec3 &s, - Vec3 &h, - Vec3 &r, - Vec3 &t, - bool exc = true); - -template bool extractSHRT - (const Matrix44 &mat, - Vec3 &s, - Vec3 &h, - Euler &r, - Vec3 &t, - bool exc = true); - -// -// Internal utility function. -// - -template bool checkForZeroScaleInRow - (const T &scl, - const Vec3 &row, - bool exc = true); - -template Matrix44 outerProduct - ( const Vec4 &a, - const Vec4 &b); - - -// -// Returns a matrix that rotates "fromDirection" vector to "toDirection" -// vector. -// - -template Matrix44 rotationMatrix (const Vec3 &fromDirection, - const Vec3 &toDirection); - - - -// -// Returns a matrix that rotates the "fromDir" vector -// so that it points towards "toDir". You may also -// specify that you want the up vector to be pointing -// in a certain direction "upDir". -// - -template Matrix44 rotationMatrixWithUpDir - (const Vec3 &fromDir, - const Vec3 &toDir, - const Vec3 &upDir); - - -// -// Constructs a matrix that rotates the z-axis so that it -// points towards "targetDir". You must also specify -// that you want the up vector to be pointing in a -// certain direction "upDir". -// -// Notes: The following degenerate cases are handled: -// (a) when the directions given by "toDir" and "upDir" -// are parallel or opposite; -// (the direction vectors must have a non-zero cross product) -// (b) when any of the given direction vectors have zero length -// - -template void alignZAxisWithTargetDir - (Matrix44 &result, - Vec3 targetDir, - Vec3 upDir); - - -// Compute an orthonormal direct frame from : a position, an x axis direction and a normal to the y axis -// If the x axis and normal are perpendicular, then the normal will have the same direction as the z axis. -// Inputs are : -// -the position of the frame -// -the x axis direction of the frame -// -a normal to the y axis of the frame -// Return is the orthonormal frame -template Matrix44 computeLocalFrame( const Vec3& p, - const Vec3& xDir, - const Vec3& normal); - -// Add a translate/rotate/scale offset to an input frame -// and put it in another frame of reference -// Inputs are : -// - input frame -// - translate offset -// - rotate offset in degrees -// - scale offset -// - frame of reference -// Output is the offsetted frame -template Matrix44 addOffset( const Matrix44& inMat, - const Vec3& tOffset, - const Vec3& rOffset, - const Vec3& sOffset, - const Vec3& ref); - -// Compute Translate/Rotate/Scale matrix from matrix A with the Rotate/Scale of Matrix B -// Inputs are : -// -keepRotateA : if true keep rotate from matrix A, use B otherwise -// -keepScaleA : if true keep scale from matrix A, use B otherwise -// -Matrix A -// -Matrix B -// Return Matrix A with tweaked rotation/scale -template Matrix44 computeRSMatrix( bool keepRotateA, - bool keepScaleA, - const Matrix44& A, - const Matrix44& B); - - -//---------------------------------------------------------------------- - - -// -// Declarations for 3x3 matrix. -// - - -template bool extractScaling - (const Matrix33 &mat, - Vec2 &scl, - bool exc = true); - -template Matrix33 sansScaling (const Matrix33 &mat, - bool exc = true); - -template bool removeScaling - (Matrix33 &mat, - bool exc = true); - -template bool extractScalingAndShear - (const Matrix33 &mat, - Vec2 &scl, - T &h, - bool exc = true); - -template Matrix33 sansScalingAndShear - (const Matrix33 &mat, - bool exc = true); - -template bool removeScalingAndShear - (Matrix33 &mat, - bool exc = true); - -template bool extractAndRemoveScalingAndShear - (Matrix33 &mat, - Vec2 &scl, - T &shr, - bool exc = true); - -template void extractEuler - (const Matrix33 &mat, - T &rot); - -template bool extractSHRT (const Matrix33 &mat, - Vec2 &s, - T &h, - T &r, - Vec2 &t, - bool exc = true); - -template bool checkForZeroScaleInRow - (const T &scl, - const Vec2 &row, - bool exc = true); - -template Matrix33 outerProduct - ( const Vec3 &a, - const Vec3 &b); - - -//----------------------------------------------------------------------------- -// Implementation for 4x4 Matrix -//------------------------------ - - -template -bool -extractScaling (const Matrix44 &mat, Vec3 &scl, bool exc) -{ - Vec3 shr; - Matrix44 M (mat); - - if (! extractAndRemoveScalingAndShear (M, scl, shr, exc)) - return false; - - return true; -} - - -template -Matrix44 -sansScaling (const Matrix44 &mat, bool exc) -{ - Vec3 scl; - Vec3 shr; - Vec3 rot; - Vec3 tran; - - if (! extractSHRT (mat, scl, shr, rot, tran, exc)) - return mat; - - Matrix44 M; - - M.translate (tran); - M.rotate (rot); - M.shear (shr); - - return M; -} - - -template -bool -removeScaling (Matrix44 &mat, bool exc) -{ - Vec3 scl; - Vec3 shr; - Vec3 rot; - Vec3 tran; - - if (! extractSHRT (mat, scl, shr, rot, tran, exc)) - return false; - - mat.makeIdentity (); - mat.translate (tran); - mat.rotate (rot); - mat.shear (shr); - - return true; -} - - -template -bool -extractScalingAndShear (const Matrix44 &mat, - Vec3 &scl, Vec3 &shr, bool exc) -{ - Matrix44 M (mat); - - if (! extractAndRemoveScalingAndShear (M, scl, shr, exc)) - return false; - - return true; -} - - -template -Matrix44 -sansScalingAndShear (const Matrix44 &mat, bool exc) -{ - Vec3 scl; - Vec3 shr; - Matrix44 M (mat); - - if (! extractAndRemoveScalingAndShear (M, scl, shr, exc)) - return mat; - - return M; -} - - -template -void -sansScalingAndShear (Matrix44 &result, const Matrix44 &mat, bool exc) -{ - Vec3 scl; - Vec3 shr; - - if (! extractAndRemoveScalingAndShear (result, scl, shr, exc)) - result = mat; -} - - -template -bool -removeScalingAndShear (Matrix44 &mat, bool exc) -{ - Vec3 scl; - Vec3 shr; - - if (! extractAndRemoveScalingAndShear (mat, scl, shr, exc)) - return false; - - return true; -} - - -template -bool -extractAndRemoveScalingAndShear (Matrix44 &mat, - Vec3 &scl, Vec3 &shr, bool exc) -{ - // - // This implementation follows the technique described in the paper by - // Spencer W. Thomas in the Graphics Gems II article: "Decomposing a - // Matrix into Simple Transformations", p. 320. - // - - Vec3 row[3]; - - row[0] = Vec3 (mat[0][0], mat[0][1], mat[0][2]); - row[1] = Vec3 (mat[1][0], mat[1][1], mat[1][2]); - row[2] = Vec3 (mat[2][0], mat[2][1], mat[2][2]); - - T maxVal = 0; - for (int i=0; i < 3; i++) - for (int j=0; j < 3; j++) - if (IMATH_INTERNAL_NAMESPACE::abs (row[i][j]) > maxVal) - maxVal = IMATH_INTERNAL_NAMESPACE::abs (row[i][j]); - - // - // We normalize the 3x3 matrix here. - // It was noticed that this can improve numerical stability significantly, - // especially when many of the upper 3x3 matrix's coefficients are very - // close to zero; we correct for this step at the end by multiplying the - // scaling factors by maxVal at the end (shear and rotation are not - // affected by the normalization). - - if (maxVal != 0) - { - for (int i=0; i < 3; i++) - if (! checkForZeroScaleInRow (maxVal, row[i], exc)) - return false; - else - row[i] /= maxVal; - } - - // Compute X scale factor. - scl.x = row[0].length (); - if (! checkForZeroScaleInRow (scl.x, row[0], exc)) - return false; - - // Normalize first row. - row[0] /= scl.x; - - // An XY shear factor will shear the X coord. as the Y coord. changes. - // There are 6 combinations (XY, XZ, YZ, YX, ZX, ZY), although we only - // extract the first 3 because we can effect the last 3 by shearing in - // XY, XZ, YZ combined rotations and scales. - // - // shear matrix < 1, YX, ZX, 0, - // XY, 1, ZY, 0, - // XZ, YZ, 1, 0, - // 0, 0, 0, 1 > - - // Compute XY shear factor and make 2nd row orthogonal to 1st. - shr[0] = row[0].dot (row[1]); - row[1] -= shr[0] * row[0]; - - // Now, compute Y scale. - scl.y = row[1].length (); - if (! checkForZeroScaleInRow (scl.y, row[1], exc)) - return false; - - // Normalize 2nd row and correct the XY shear factor for Y scaling. - row[1] /= scl.y; - shr[0] /= scl.y; - - // Compute XZ and YZ shears, orthogonalize 3rd row. - shr[1] = row[0].dot (row[2]); - row[2] -= shr[1] * row[0]; - shr[2] = row[1].dot (row[2]); - row[2] -= shr[2] * row[1]; - - // Next, get Z scale. - scl.z = row[2].length (); - if (! checkForZeroScaleInRow (scl.z, row[2], exc)) - return false; - - // Normalize 3rd row and correct the XZ and YZ shear factors for Z scaling. - row[2] /= scl.z; - shr[1] /= scl.z; - shr[2] /= scl.z; - - // At this point, the upper 3x3 matrix in mat is orthonormal. - // Check for a coordinate system flip. If the determinant - // is less than zero, then negate the matrix and the scaling factors. - if (row[0].dot (row[1].cross (row[2])) < 0) - for (int i=0; i < 3; i++) - { - scl[i] *= -1; - row[i] *= -1; - } - - // Copy over the orthonormal rows into the returned matrix. - // The upper 3x3 matrix in mat is now a rotation matrix. - for (int i=0; i < 3; i++) - { - mat[i][0] = row[i][0]; - mat[i][1] = row[i][1]; - mat[i][2] = row[i][2]; - } - - // Correct the scaling factors for the normalization step that we - // performed above; shear and rotation are not affected by the - // normalization. - scl *= maxVal; - - return true; -} - - -template -void -extractEulerXYZ (const Matrix44 &mat, Vec3 &rot) -{ - // - // Normalize the local x, y and z axes to remove scaling. - // - - Vec3 i (mat[0][0], mat[0][1], mat[0][2]); - Vec3 j (mat[1][0], mat[1][1], mat[1][2]); - Vec3 k (mat[2][0], mat[2][1], mat[2][2]); - - i.normalize(); - j.normalize(); - k.normalize(); - - Matrix44 M (i[0], i[1], i[2], 0, - j[0], j[1], j[2], 0, - k[0], k[1], k[2], 0, - 0, 0, 0, 1); - - // - // Extract the first angle, rot.x. - // - - rot.x = Math::atan2 (M[1][2], M[2][2]); - - // - // Remove the rot.x rotation from M, so that the remaining - // rotation, N, is only around two axes, and gimbal lock - // cannot occur. - // - - Matrix44 N; - N.rotate (Vec3 (-rot.x, 0, 0)); - N = N * M; - - // - // Extract the other two angles, rot.y and rot.z, from N. - // - - T cy = Math::sqrt (N[0][0]*N[0][0] + N[0][1]*N[0][1]); - rot.y = Math::atan2 (-N[0][2], cy); - rot.z = Math::atan2 (-N[1][0], N[1][1]); -} - - -template -void -extractEulerZYX (const Matrix44 &mat, Vec3 &rot) -{ - // - // Normalize the local x, y and z axes to remove scaling. - // - - Vec3 i (mat[0][0], mat[0][1], mat[0][2]); - Vec3 j (mat[1][0], mat[1][1], mat[1][2]); - Vec3 k (mat[2][0], mat[2][1], mat[2][2]); - - i.normalize(); - j.normalize(); - k.normalize(); - - Matrix44 M (i[0], i[1], i[2], 0, - j[0], j[1], j[2], 0, - k[0], k[1], k[2], 0, - 0, 0, 0, 1); - - // - // Extract the first angle, rot.x. - // - - rot.x = -Math::atan2 (M[1][0], M[0][0]); - - // - // Remove the x rotation from M, so that the remaining - // rotation, N, is only around two axes, and gimbal lock - // cannot occur. - // - - Matrix44 N; - N.rotate (Vec3 (0, 0, -rot.x)); - N = N * M; - - // - // Extract the other two angles, rot.y and rot.z, from N. - // - - T cy = Math::sqrt (N[2][2]*N[2][2] + N[2][1]*N[2][1]); - rot.y = -Math::atan2 (-N[2][0], cy); - rot.z = -Math::atan2 (-N[1][2], N[1][1]); -} - - -template -Quat -extractQuat (const Matrix44 &mat) -{ - Matrix44 rot; - - T tr, s; - T q[4]; - int i, j, k; - Quat quat; - - int nxt[3] = {1, 2, 0}; - tr = mat[0][0] + mat[1][1] + mat[2][2]; - - // check the diagonal - if (tr > 0.0) { - s = Math::sqrt (tr + T(1.0)); - quat.r = s / T(2.0); - s = T(0.5) / s; - - quat.v.x = (mat[1][2] - mat[2][1]) * s; - quat.v.y = (mat[2][0] - mat[0][2]) * s; - quat.v.z = (mat[0][1] - mat[1][0]) * s; - } - else { - // diagonal is negative - i = 0; - if (mat[1][1] > mat[0][0]) - i=1; - if (mat[2][2] > mat[i][i]) - i=2; - - j = nxt[i]; - k = nxt[j]; - s = Math::sqrt ((mat[i][i] - (mat[j][j] + mat[k][k])) + T(1.0)); - - q[i] = s * T(0.5); - if (s != T(0.0)) - s = T(0.5) / s; - - q[3] = (mat[j][k] - mat[k][j]) * s; - q[j] = (mat[i][j] + mat[j][i]) * s; - q[k] = (mat[i][k] + mat[k][i]) * s; - - quat.v.x = q[0]; - quat.v.y = q[1]; - quat.v.z = q[2]; - quat.r = q[3]; - } - - return quat; -} - -template -bool -extractSHRT (const Matrix44 &mat, - Vec3 &s, - Vec3 &h, - Vec3 &r, - Vec3 &t, - bool exc /* = true */ , - typename Euler::Order rOrder /* = Euler::XYZ */ ) -{ - Matrix44 rot; - - rot = mat; - if (! extractAndRemoveScalingAndShear (rot, s, h, exc)) - return false; - - extractEulerXYZ (rot, r); - - t.x = mat[3][0]; - t.y = mat[3][1]; - t.z = mat[3][2]; - - if (rOrder != Euler::XYZ) - { - IMATH_INTERNAL_NAMESPACE::Euler eXYZ (r, IMATH_INTERNAL_NAMESPACE::Euler::XYZ); - IMATH_INTERNAL_NAMESPACE::Euler e (eXYZ, rOrder); - r = e.toXYZVector (); - } - - return true; -} - -template -bool -extractSHRT (const Matrix44 &mat, - Vec3 &s, - Vec3 &h, - Vec3 &r, - Vec3 &t, - bool exc) -{ - return extractSHRT(mat, s, h, r, t, exc, IMATH_INTERNAL_NAMESPACE::Euler::XYZ); -} - -template -bool -extractSHRT (const Matrix44 &mat, - Vec3 &s, - Vec3 &h, - Euler &r, - Vec3 &t, - bool exc /* = true */) -{ - return extractSHRT (mat, s, h, r, t, exc, r.order ()); -} - - -template -bool -checkForZeroScaleInRow (const T& scl, - const Vec3 &row, - bool exc /* = true */ ) -{ - for (int i = 0; i < 3; i++) - { - if ((abs (scl) < 1 && abs (row[i]) >= limits::max() * abs (scl))) - { - if (exc) - throw IMATH_INTERNAL_NAMESPACE::ZeroScaleExc ("Cannot remove zero scaling " - "from matrix."); - else - return false; - } - } - - return true; -} - -template -Matrix44 -outerProduct (const Vec4 &a, const Vec4 &b ) -{ - return Matrix44 (a.x*b.x, a.x*b.y, a.x*b.z, a.x*b.w, - a.y*b.x, a.y*b.y, a.y*b.z, a.x*b.w, - a.z*b.x, a.z*b.y, a.z*b.z, a.x*b.w, - a.w*b.x, a.w*b.y, a.w*b.z, a.w*b.w); -} - -template -Matrix44 -rotationMatrix (const Vec3 &from, const Vec3 &to) -{ - Quat q; - q.setRotation(from, to); - return q.toMatrix44(); -} - - -template -Matrix44 -rotationMatrixWithUpDir (const Vec3 &fromDir, - const Vec3 &toDir, - const Vec3 &upDir) -{ - // - // The goal is to obtain a rotation matrix that takes - // "fromDir" to "toDir". We do this in two steps and - // compose the resulting rotation matrices; - // (a) rotate "fromDir" into the z-axis - // (b) rotate the z-axis into "toDir" - // - - // The from direction must be non-zero; but we allow zero to and up dirs. - if (fromDir.length () == 0) - return Matrix44 (); - - else - { - Matrix44 zAxis2FromDir( IMATH_INTERNAL_NAMESPACE::UNINITIALIZED ); - alignZAxisWithTargetDir (zAxis2FromDir, fromDir, Vec3 (0, 1, 0)); - - Matrix44 fromDir2zAxis = zAxis2FromDir.transposed (); - - Matrix44 zAxis2ToDir( IMATH_INTERNAL_NAMESPACE::UNINITIALIZED ); - alignZAxisWithTargetDir (zAxis2ToDir, toDir, upDir); - - return fromDir2zAxis * zAxis2ToDir; - } -} - - -template -void -alignZAxisWithTargetDir (Matrix44 &result, Vec3 targetDir, Vec3 upDir) -{ - // - // Ensure that the target direction is non-zero. - // - - if ( targetDir.length () == 0 ) - targetDir = Vec3 (0, 0, 1); - - // - // Ensure that the up direction is non-zero. - // - - if ( upDir.length () == 0 ) - upDir = Vec3 (0, 1, 0); - - // - // Check for degeneracies. If the upDir and targetDir are parallel - // or opposite, then compute a new, arbitrary up direction that is - // not parallel or opposite to the targetDir. - // - - if (upDir.cross (targetDir).length () == 0) - { - upDir = targetDir.cross (Vec3 (1, 0, 0)); - if (upDir.length() == 0) - upDir = targetDir.cross(Vec3 (0, 0, 1)); - } - - // - // Compute the x-, y-, and z-axis vectors of the new coordinate system. - // - - Vec3 targetPerpDir = upDir.cross (targetDir); - Vec3 targetUpDir = targetDir.cross (targetPerpDir); - - // - // Rotate the x-axis into targetPerpDir (row 0), - // rotate the y-axis into targetUpDir (row 1), - // rotate the z-axis into targetDir (row 2). - // - - Vec3 row[3]; - row[0] = targetPerpDir.normalized (); - row[1] = targetUpDir .normalized (); - row[2] = targetDir .normalized (); - - result.x[0][0] = row[0][0]; - result.x[0][1] = row[0][1]; - result.x[0][2] = row[0][2]; - result.x[0][3] = (T)0; - - result.x[1][0] = row[1][0]; - result.x[1][1] = row[1][1]; - result.x[1][2] = row[1][2]; - result.x[1][3] = (T)0; - - result.x[2][0] = row[2][0]; - result.x[2][1] = row[2][1]; - result.x[2][2] = row[2][2]; - result.x[2][3] = (T)0; - - result.x[3][0] = (T)0; - result.x[3][1] = (T)0; - result.x[3][2] = (T)0; - result.x[3][3] = (T)1; -} - - -// Compute an orthonormal direct frame from : a position, an x axis direction and a normal to the y axis -// If the x axis and normal are perpendicular, then the normal will have the same direction as the z axis. -// Inputs are : -// -the position of the frame -// -the x axis direction of the frame -// -a normal to the y axis of the frame -// Return is the orthonormal frame -template -Matrix44 -computeLocalFrame( const Vec3& p, - const Vec3& xDir, - const Vec3& normal) -{ - Vec3 _xDir(xDir); - Vec3 x = _xDir.normalize(); - Vec3 y = (normal % x).normalize(); - Vec3 z = (x % y).normalize(); - - Matrix44 L; - L[0][0] = x[0]; - L[0][1] = x[1]; - L[0][2] = x[2]; - L[0][3] = 0.0; - - L[1][0] = y[0]; - L[1][1] = y[1]; - L[1][2] = y[2]; - L[1][3] = 0.0; - - L[2][0] = z[0]; - L[2][1] = z[1]; - L[2][2] = z[2]; - L[2][3] = 0.0; - - L[3][0] = p[0]; - L[3][1] = p[1]; - L[3][2] = p[2]; - L[3][3] = 1.0; - - return L; -} - -// Add a translate/rotate/scale offset to an input frame -// and put it in another frame of reference -// Inputs are : -// - input frame -// - translate offset -// - rotate offset in degrees -// - scale offset -// - frame of reference -// Output is the offsetted frame -template -Matrix44 -addOffset( const Matrix44& inMat, - const Vec3& tOffset, - const Vec3& rOffset, - const Vec3& sOffset, - const Matrix44& ref) -{ - Matrix44 O; - - Vec3 _rOffset(rOffset); - _rOffset *= M_PI / 180.0; - O.rotate (_rOffset); - - O[3][0] = tOffset[0]; - O[3][1] = tOffset[1]; - O[3][2] = tOffset[2]; - - Matrix44 S; - S.scale (sOffset); - - Matrix44 X = S * O * inMat * ref; - - return X; -} - -// Compute Translate/Rotate/Scale matrix from matrix A with the Rotate/Scale of Matrix B -// Inputs are : -// -keepRotateA : if true keep rotate from matrix A, use B otherwise -// -keepScaleA : if true keep scale from matrix A, use B otherwise -// -Matrix A -// -Matrix B -// Return Matrix A with tweaked rotation/scale -template -Matrix44 -computeRSMatrix( bool keepRotateA, - bool keepScaleA, - const Matrix44& A, - const Matrix44& B) -{ - Vec3 as, ah, ar, at; - extractSHRT (A, as, ah, ar, at); - - Vec3 bs, bh, br, bt; - extractSHRT (B, bs, bh, br, bt); - - if (!keepRotateA) - ar = br; - - if (!keepScaleA) - as = bs; - - Matrix44 mat; - mat.makeIdentity(); - mat.translate (at); - mat.rotate (ar); - mat.scale (as); - - return mat; -} - - - -//----------------------------------------------------------------------------- -// Implementation for 3x3 Matrix -//------------------------------ - - -template -bool -extractScaling (const Matrix33 &mat, Vec2 &scl, bool exc) -{ - T shr; - Matrix33 M (mat); - - if (! extractAndRemoveScalingAndShear (M, scl, shr, exc)) - return false; - - return true; -} - - -template -Matrix33 -sansScaling (const Matrix33 &mat, bool exc) -{ - Vec2 scl; - T shr; - T rot; - Vec2 tran; - - if (! extractSHRT (mat, scl, shr, rot, tran, exc)) - return mat; - - Matrix33 M; - - M.translate (tran); - M.rotate (rot); - M.shear (shr); - - return M; -} - - -template -bool -removeScaling (Matrix33 &mat, bool exc) -{ - Vec2 scl; - T shr; - T rot; - Vec2 tran; - - if (! extractSHRT (mat, scl, shr, rot, tran, exc)) - return false; - - mat.makeIdentity (); - mat.translate (tran); - mat.rotate (rot); - mat.shear (shr); - - return true; -} - - -template -bool -extractScalingAndShear (const Matrix33 &mat, Vec2 &scl, T &shr, bool exc) -{ - Matrix33 M (mat); - - if (! extractAndRemoveScalingAndShear (M, scl, shr, exc)) - return false; - - return true; -} - - -template -Matrix33 -sansScalingAndShear (const Matrix33 &mat, bool exc) -{ - Vec2 scl; - T shr; - Matrix33 M (mat); - - if (! extractAndRemoveScalingAndShear (M, scl, shr, exc)) - return mat; - - return M; -} - - -template -bool -removeScalingAndShear (Matrix33 &mat, bool exc) -{ - Vec2 scl; - T shr; - - if (! extractAndRemoveScalingAndShear (mat, scl, shr, exc)) - return false; - - return true; -} - -template -bool -extractAndRemoveScalingAndShear (Matrix33 &mat, - Vec2 &scl, T &shr, bool exc) -{ - Vec2 row[2]; - - row[0] = Vec2 (mat[0][0], mat[0][1]); - row[1] = Vec2 (mat[1][0], mat[1][1]); - - T maxVal = 0; - for (int i=0; i < 2; i++) - for (int j=0; j < 2; j++) - if (IMATH_INTERNAL_NAMESPACE::abs (row[i][j]) > maxVal) - maxVal = IMATH_INTERNAL_NAMESPACE::abs (row[i][j]); - - // - // We normalize the 2x2 matrix here. - // It was noticed that this can improve numerical stability significantly, - // especially when many of the upper 2x2 matrix's coefficients are very - // close to zero; we correct for this step at the end by multiplying the - // scaling factors by maxVal at the end (shear and rotation are not - // affected by the normalization). - - if (maxVal != 0) - { - for (int i=0; i < 2; i++) - if (! checkForZeroScaleInRow (maxVal, row[i], exc)) - return false; - else - row[i] /= maxVal; - } - - // Compute X scale factor. - scl.x = row[0].length (); - if (! checkForZeroScaleInRow (scl.x, row[0], exc)) - return false; - - // Normalize first row. - row[0] /= scl.x; - - // An XY shear factor will shear the X coord. as the Y coord. changes. - // There are 2 combinations (XY, YX), although we only extract the XY - // shear factor because we can effect the an YX shear factor by - // shearing in XY combined with rotations and scales. - // - // shear matrix < 1, YX, 0, - // XY, 1, 0, - // 0, 0, 1 > - - // Compute XY shear factor and make 2nd row orthogonal to 1st. - shr = row[0].dot (row[1]); - row[1] -= shr * row[0]; - - // Now, compute Y scale. - scl.y = row[1].length (); - if (! checkForZeroScaleInRow (scl.y, row[1], exc)) - return false; - - // Normalize 2nd row and correct the XY shear factor for Y scaling. - row[1] /= scl.y; - shr /= scl.y; - - // At this point, the upper 2x2 matrix in mat is orthonormal. - // Check for a coordinate system flip. If the determinant - // is -1, then flip the rotation matrix and adjust the scale(Y) - // and shear(XY) factors to compensate. - if (row[0][0] * row[1][1] - row[0][1] * row[1][0] < 0) - { - row[1][0] *= -1; - row[1][1] *= -1; - scl[1] *= -1; - shr *= -1; - } - - // Copy over the orthonormal rows into the returned matrix. - // The upper 2x2 matrix in mat is now a rotation matrix. - for (int i=0; i < 2; i++) - { - mat[i][0] = row[i][0]; - mat[i][1] = row[i][1]; - } - - scl *= maxVal; - - return true; -} - - -template -void -extractEuler (const Matrix33 &mat, T &rot) -{ - // - // Normalize the local x and y axes to remove scaling. - // - - Vec2 i (mat[0][0], mat[0][1]); - Vec2 j (mat[1][0], mat[1][1]); - - i.normalize(); - j.normalize(); - - // - // Extract the angle, rot. - // - - rot = - Math::atan2 (j[0], i[0]); -} - - -template -bool -extractSHRT (const Matrix33 &mat, - Vec2 &s, - T &h, - T &r, - Vec2 &t, - bool exc) -{ - Matrix33 rot; - - rot = mat; - if (! extractAndRemoveScalingAndShear (rot, s, h, exc)) - return false; - - extractEuler (rot, r); - - t.x = mat[2][0]; - t.y = mat[2][1]; - - return true; -} - - -template -bool -checkForZeroScaleInRow (const T& scl, - const Vec2 &row, - bool exc /* = true */ ) -{ - for (int i = 0; i < 2; i++) - { - if ((abs (scl) < 1 && abs (row[i]) >= limits::max() * abs (scl))) - { - if (exc) - throw IMATH_INTERNAL_NAMESPACE::ZeroScaleExc ( - "Cannot remove zero scaling from matrix."); - else - return false; - } - } - - return true; -} - - -template -Matrix33 -outerProduct (const Vec3 &a, const Vec3 &b ) -{ - return Matrix33 (a.x*b.x, a.x*b.y, a.x*b.z, - a.y*b.x, a.y*b.y, a.y*b.z, - a.z*b.x, a.z*b.y, a.z*b.z ); -} - - -// Computes the translation and rotation that brings the 'from' points -// as close as possible to the 'to' points under the Frobenius norm. -// To be more specific, let x be the matrix of 'from' points and y be -// the matrix of 'to' points, we want to find the matrix A of the form -// [ R t ] -// [ 0 1 ] -// that minimizes -// || (A*x - y)^T * W * (A*x - y) ||_F -// If doScaling is true, then a uniform scale is allowed also. -template -IMATH_INTERNAL_NAMESPACE::M44d -procrustesRotationAndTranslation (const IMATH_INTERNAL_NAMESPACE::Vec3* A, // From these - const IMATH_INTERNAL_NAMESPACE::Vec3* B, // To these - const T* weights, - const size_t numPoints, - const bool doScaling = false); - -// Unweighted: -template -IMATH_INTERNAL_NAMESPACE::M44d -procrustesRotationAndTranslation (const IMATH_INTERNAL_NAMESPACE::Vec3* A, - const IMATH_INTERNAL_NAMESPACE::Vec3* B, - const size_t numPoints, - const bool doScaling = false); - -// Compute the SVD of a 3x3 matrix using Jacobi transformations. This method -// should be quite accurate (competitive with LAPACK) even for poorly -// conditioned matrices, and because it has been written specifically for the -// 3x3/4x4 case it is much faster than calling out to LAPACK. -// -// The SVD of a 3x3/4x4 matrix A is defined as follows: -// A = U * S * V^T -// where S is the diagonal matrix of singular values and both U and V are -// orthonormal. By convention, the entries S are all positive and sorted from -// the largest to the smallest. However, some uses of this function may -// require that the matrix U*V^T have positive determinant; in this case, we -// may make the smallest singular value negative to ensure that this is -// satisfied. -// -// Currently only available for single- and double-precision matrices. -template -void -jacobiSVD (const IMATH_INTERNAL_NAMESPACE::Matrix33& A, - IMATH_INTERNAL_NAMESPACE::Matrix33& U, - IMATH_INTERNAL_NAMESPACE::Vec3& S, - IMATH_INTERNAL_NAMESPACE::Matrix33& V, - const T tol = IMATH_INTERNAL_NAMESPACE::limits::epsilon(), - const bool forcePositiveDeterminant = false); - -template -void -jacobiSVD (const IMATH_INTERNAL_NAMESPACE::Matrix44& A, - IMATH_INTERNAL_NAMESPACE::Matrix44& U, - IMATH_INTERNAL_NAMESPACE::Vec4& S, - IMATH_INTERNAL_NAMESPACE::Matrix44& V, - const T tol = IMATH_INTERNAL_NAMESPACE::limits::epsilon(), - const bool forcePositiveDeterminant = false); - -// Compute the eigenvalues (S) and the eigenvectors (V) of -// a real symmetric matrix using Jacobi transformation. -// -// Jacobi transformation of a 3x3/4x4 matrix A outputs S and V: -// A = V * S * V^T -// where V is orthonormal and S is the diagonal matrix of eigenvalues. -// Input matrix A must be symmetric. A is also modified during -// the computation so that upper diagonal entries of A become zero. -// -template -void -jacobiEigenSolver (Matrix33& A, - Vec3& S, - Matrix33& V, - const T tol); - -template -inline -void -jacobiEigenSolver (Matrix33& A, - Vec3& S, - Matrix33& V) -{ - jacobiEigenSolver(A,S,V,limits::epsilon()); -} - -template -void -jacobiEigenSolver (Matrix44& A, - Vec4& S, - Matrix44& V, - const T tol); - -template -inline -void -jacobiEigenSolver (Matrix44& A, - Vec4& S, - Matrix44& V) -{ - jacobiEigenSolver(A,S,V,limits::epsilon()); -} - -// Compute a eigenvector corresponding to the abs max/min eigenvalue -// of a real symmetric matrix using Jacobi transformation. -template -void -maxEigenVector (TM& A, TV& S); -template -void -minEigenVector (TM& A, TV& S); - -IMATH_INTERNAL_NAMESPACE_HEADER_EXIT - -#endif // INCLUDED_IMATHMATRIXALGO_H diff --git a/3rdparty/openexr/Imath/ImathNamespace.h b/3rdparty/openexr/Imath/ImathNamespace.h deleted file mode 100644 index c1fb993529..0000000000 --- a/3rdparty/openexr/Imath/ImathNamespace.h +++ /dev/null @@ -1,115 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2012, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - -#ifndef INCLUDED_IMATHNAMESPACE_H -#define INCLUDED_IMATHNAMESPACE_H - -// -// The purpose of this file is to make it possible to specify an -// IMATH_INTERNAL_NAMESPACE as a preprocessor definition and have all of the -// Imath symbols defined within that namespace rather than the standard -// Imath namespace. Those symbols are made available to client code through -// the IMATH_NAMESPACE in addition to the IMATH_INTERNAL_NAMESPACE. -// -// To ensure source code compatibility, the IMATH_NAMESPACE defaults to Imath -// and then "using namespace IMATH_INTERNAL_NAMESPACE;" brings all of the -// declarations from the IMATH_INTERNAL_NAMESPACE into the IMATH_NAMESPACE. -// This means that client code can continue to use syntax like Imath::V3f, -// but at link time it will resolve to a mangled symbol based on the -// IMATH_INTERNAL_NAMESPACE. -// -// As an example, if one needed to build against a newer version of Imath and -// have it run alongside an older version in the same application, it is now -// possible to use an internal namespace to prevent collisions between the -// older versions of Imath symbols and the newer ones. To do this, the -// following could be defined at build time: -// -// IMATH_INTERNAL_NAMESPACE = Imath_v2 -// -// This means that declarations inside Imath headers look like this (after -// the preprocessor has done its work): -// -// namespace Imath_v2 { -// ... -// class declarations -// ... -// } -// -// namespace Imath { -// using namespace Imath_v2; -// } -// - -// -// Open Source version of this file pulls in the IlmBaseConfig.h file -// for the configure time options. -// -#include "IlmBaseConfig.h" - - -#ifndef IMATH_NAMESPACE -#define IMATH_NAMESPACE Imath -#endif - -#ifndef IMATH_INTERNAL_NAMESPACE -#define IMATH_INTERNAL_NAMESPACE IMATH_NAMESPACE -#endif - -// -// We need to be sure that we import the internal namespace into the public one. -// To do this, we use the small bit of code below which initially defines -// IMATH_INTERNAL_NAMESPACE (so it can be referenced) and then defines -// IMATH_NAMESPACE and pulls the internal symbols into the public -// namespace. -// - -namespace IMATH_INTERNAL_NAMESPACE {} -namespace IMATH_NAMESPACE { - using namespace IMATH_INTERNAL_NAMESPACE; -} - -// -// There are identical pairs of HEADER/SOURCE ENTER/EXIT macros so that -// future extension to the namespace mechanism is possible without changing -// project source code. -// - -#define IMATH_INTERNAL_NAMESPACE_HEADER_ENTER namespace IMATH_INTERNAL_NAMESPACE { -#define IMATH_INTERNAL_NAMESPACE_HEADER_EXIT } - -#define IMATH_INTERNAL_NAMESPACE_SOURCE_ENTER namespace IMATH_INTERNAL_NAMESPACE { -#define IMATH_INTERNAL_NAMESPACE_SOURCE_EXIT } - - -#endif /* INCLUDED_IMATHNAMESPACE_H */ diff --git a/3rdparty/openexr/Imath/ImathPlane.h b/3rdparty/openexr/Imath/ImathPlane.h deleted file mode 100644 index 7272d67ddf..0000000000 --- a/3rdparty/openexr/Imath/ImathPlane.h +++ /dev/null @@ -1,257 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2002-2012, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - - -#ifndef INCLUDED_IMATHPLANE_H -#define INCLUDED_IMATHPLANE_H - -//---------------------------------------------------------------------- -// -// template class Plane3 -// -// The Imath::Plane3<> class represents a half space, so the -// normal may point either towards or away from origin. The -// plane P can be represented by Imath::Plane3 as either p or -p -// corresponding to the two half-spaces on either side of the -// plane. Any function which computes a distance will return -// either negative or positive values for the distance indicating -// which half-space the point is in. Note that reflection, and -// intersection functions will operate as expected. -// -//---------------------------------------------------------------------- - -#include "ImathVec.h" -#include "ImathLine.h" -#include "ImathNamespace.h" - -IMATH_INTERNAL_NAMESPACE_HEADER_ENTER - - -template -class Plane3 -{ - public: - - Vec3 normal; - T distance; - - Plane3() {} - Plane3(const Vec3 &normal, T distance); - Plane3(const Vec3 &point, const Vec3 &normal); - Plane3(const Vec3 &point1, - const Vec3 &point2, - const Vec3 &point3); - - //---------------------- - // Various set methods - //---------------------- - - void set(const Vec3 &normal, - T distance); - - void set(const Vec3 &point, - const Vec3 &normal); - - void set(const Vec3 &point1, - const Vec3 &point2, - const Vec3 &point3 ); - - //---------------------- - // Utilities - //---------------------- - - bool intersect(const Line3 &line, - Vec3 &intersection) const; - - bool intersectT(const Line3 &line, - T ¶meter) const; - - T distanceTo(const Vec3 &) const; - - Vec3 reflectPoint(const Vec3 &) const; - Vec3 reflectVector(const Vec3 &) const; -}; - - -//-------------------- -// Convenient typedefs -//-------------------- - -typedef Plane3 Plane3f; -typedef Plane3 Plane3d; - - -//--------------- -// Implementation -//--------------- - -template -inline Plane3::Plane3(const Vec3 &p0, - const Vec3 &p1, - const Vec3 &p2) -{ - set(p0,p1,p2); -} - -template -inline Plane3::Plane3(const Vec3 &n, T d) -{ - set(n, d); -} - -template -inline Plane3::Plane3(const Vec3 &p, const Vec3 &n) -{ - set(p, n); -} - -template -inline void Plane3::set(const Vec3& point1, - const Vec3& point2, - const Vec3& point3) -{ - normal = (point2 - point1) % (point3 - point1); - normal.normalize(); - distance = normal ^ point1; -} - -template -inline void Plane3::set(const Vec3& point, const Vec3& n) -{ - normal = n; - normal.normalize(); - distance = normal ^ point; -} - -template -inline void Plane3::set(const Vec3& n, T d) -{ - normal = n; - normal.normalize(); - distance = d; -} - -template -inline T Plane3::distanceTo(const Vec3 &point) const -{ - return (point ^ normal) - distance; -} - -template -inline Vec3 Plane3::reflectPoint(const Vec3 &point) const -{ - return normal * distanceTo(point) * -2.0 + point; -} - - -template -inline Vec3 Plane3::reflectVector(const Vec3 &v) const -{ - return normal * (normal ^ v) * 2.0 - v; -} - - -template -inline bool Plane3::intersect(const Line3& line, Vec3& point) const -{ - T d = normal ^ line.dir; - if ( d == 0.0 ) return false; - T t = - ((normal ^ line.pos) - distance) / d; - point = line(t); - return true; -} - -template -inline bool Plane3::intersectT(const Line3& line, T &t) const -{ - T d = normal ^ line.dir; - if ( d == 0.0 ) return false; - t = - ((normal ^ line.pos) - distance) / d; - return true; -} - -template -std::ostream &operator<< (std::ostream &o, const Plane3 &plane) -{ - return o << "(" << plane.normal << ", " << plane.distance - << ")"; -} - -template -Plane3 operator* (const Plane3 &plane, const Matrix44 &M) -{ - // T - // -1 - // Could also compute M but that would suck. - // - - Vec3 dir1 = Vec3 (1, 0, 0) % plane.normal; - T dir1Len = dir1 ^ dir1; - - Vec3 tmp = Vec3 (0, 1, 0) % plane.normal; - T tmpLen = tmp ^ tmp; - - if (tmpLen > dir1Len) - { - dir1 = tmp; - dir1Len = tmpLen; - } - - tmp = Vec3 (0, 0, 1) % plane.normal; - tmpLen = tmp ^ tmp; - - if (tmpLen > dir1Len) - { - dir1 = tmp; - } - - Vec3 dir2 = dir1 % plane.normal; - Vec3 point = plane.distance * plane.normal; - - return Plane3 ( point * M, - (point + dir2) * M, - (point + dir1) * M ); -} - -template -Plane3 operator- (const Plane3 &plane) -{ - return Plane3(-plane.normal,-plane.distance); -} - - -IMATH_INTERNAL_NAMESPACE_HEADER_EXIT - -#endif // INCLUDED_IMATHPLANE_H diff --git a/3rdparty/openexr/Imath/ImathPlatform.h b/3rdparty/openexr/Imath/ImathPlatform.h deleted file mode 100644 index 91e82cc209..0000000000 --- a/3rdparty/openexr/Imath/ImathPlatform.h +++ /dev/null @@ -1,112 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - -#ifndef INCLUDED_IMATHPLATFORM_H -#define INCLUDED_IMATHPLATFORM_H - -//---------------------------------------------------------------------------- -// -// ImathPlatform.h -// -// This file contains functions and constants which aren't -// provided by the system libraries, compilers, or includes on -// certain platforms. -// -//---------------------------------------------------------------------------- - -#include - -#ifndef M_PI - #define M_PI 3.14159265358979323846 -#endif - -#ifndef M_PI_2 - #define M_PI_2 1.57079632679489661923 // pi/2 -#endif - - -//----------------------------------------------------------------------------- -// -// Some, but not all, C++ compilers support the C99 restrict -// keyword or some variant of it, for example, __restrict. -// -//----------------------------------------------------------------------------- - -#if defined __GNUC__ - - // - // supports __restrict - // - - #define IMATH_RESTRICT __restrict - -#elif defined (__INTEL_COMPILER) || \ - defined(__ICL) || \ - defined(__ICC) || \ - defined(__ECC) - - // - // supports restrict - // - - #define IMATH_RESTRICT restrict - -#elif defined __sgi - - // - // supports restrict - // - - #define IMATH_RESTRICT restrict - -#elif defined _MSC_VER - - // - // supports __restrict - // - -// #define IMATH_RESTRICT __restrict - #define IMATH_RESTRICT - -#else - - // - // restrict / __restrict not supported - // - - #define IMATH_RESTRICT - -#endif - -#endif // INCLUDED_IMATHPLATFORM_H diff --git a/3rdparty/openexr/Imath/ImathQuat.h b/3rdparty/openexr/Imath/ImathQuat.h deleted file mode 100644 index e01d10b7c3..0000000000 --- a/3rdparty/openexr/Imath/ImathQuat.h +++ /dev/null @@ -1,965 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2002-2012, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - - -#ifndef INCLUDED_IMATHQUAT_H -#define INCLUDED_IMATHQUAT_H - -//---------------------------------------------------------------------- -// -// template class Quat -// -// "Quaternions came from Hamilton ... and have been an unmixed -// evil to those who have touched them in any way. Vector is a -// useless survival ... and has never been of the slightest use -// to any creature." -// -// - Lord Kelvin -// -// This class implements the quaternion numerical type -- you -// will probably want to use this class to represent orientations -// in R3 and to convert between various euler angle reps. You -// should probably use Imath::Euler<> for that. -// -//---------------------------------------------------------------------- - -#include "ImathExc.h" -#include "ImathMatrix.h" -#include "ImathNamespace.h" - -#include -#include - -IMATH_INTERNAL_NAMESPACE_HEADER_ENTER - -#if (defined _WIN32 || defined _WIN64) && defined _MSC_VER -// Disable MS VC++ warnings about conversion from double to float -#pragma warning(disable:4244) -#endif - -template -class Quat -{ - public: - - T r; // real part - Vec3 v; // imaginary vector - - - //----------------------------------------------------- - // Constructors - default constructor is identity quat - //----------------------------------------------------- - - Quat (); - - template - Quat (const Quat &q); - - Quat (T s, T i, T j, T k); - - Quat (T s, Vec3 d); - - static Quat identity (); - - - //------------------------------------------------- - // Basic Algebra - Operators and Methods - // The operator return values are *NOT* normalized - // - // operator^ and euclideanInnnerProduct() both - // implement the 4D dot product - // - // operator/ uses the inverse() quaternion - // - // operator~ is conjugate -- if (S+V) is quat then - // the conjugate (S+V)* == (S-V) - // - // some operators (*,/,*=,/=) treat the quat as - // a 4D vector when one of the operands is scalar - //------------------------------------------------- - - const Quat & operator = (const Quat &q); - const Quat & operator *= (const Quat &q); - const Quat & operator *= (T t); - const Quat & operator /= (const Quat &q); - const Quat & operator /= (T t); - const Quat & operator += (const Quat &q); - const Quat & operator -= (const Quat &q); - T & operator [] (int index); // as 4D vector - T operator [] (int index) const; - - template bool operator == (const Quat &q) const; - template bool operator != (const Quat &q) const; - - Quat & invert (); // this -> 1 / this - Quat inverse () const; - Quat & normalize (); // returns this - Quat normalized () const; - T length () const; // in R4 - Vec3 rotateVector(const Vec3 &original) const; - T euclideanInnerProduct(const Quat &q) const; - - //----------------------- - // Rotation conversion - //----------------------- - - Quat & setAxisAngle (const Vec3 &axis, T radians); - - Quat & setRotation (const Vec3 &fromDirection, - const Vec3 &toDirection); - - T angle () const; - Vec3 axis () const; - - Matrix33 toMatrix33 () const; - Matrix44 toMatrix44 () const; - - Quat log () const; - Quat exp () const; - - - private: - - void setRotationInternal (const Vec3 &f0, - const Vec3 &t0, - Quat &q); -}; - - -template -Quat slerp (const Quat &q1, const Quat &q2, T t); - -template -Quat slerpShortestArc - (const Quat &q1, const Quat &q2, T t); - - -template -Quat squad (const Quat &q1, const Quat &q2, - const Quat &qa, const Quat &qb, T t); - -template -void intermediate (const Quat &q0, const Quat &q1, - const Quat &q2, const Quat &q3, - Quat &qa, Quat &qb); - -template -Matrix33 operator * (const Matrix33 &M, const Quat &q); - -template -Matrix33 operator * (const Quat &q, const Matrix33 &M); - -template -std::ostream & operator << (std::ostream &o, const Quat &q); - -template -Quat operator * (const Quat &q1, const Quat &q2); - -template -Quat operator / (const Quat &q1, const Quat &q2); - -template -Quat operator / (const Quat &q, T t); - -template -Quat operator * (const Quat &q, T t); - -template -Quat operator * (T t, const Quat &q); - -template -Quat operator + (const Quat &q1, const Quat &q2); - -template -Quat operator - (const Quat &q1, const Quat &q2); - -template -Quat operator ~ (const Quat &q); - -template -Quat operator - (const Quat &q); - -template -Vec3 operator * (const Vec3 &v, const Quat &q); - - -//-------------------- -// Convenient typedefs -//-------------------- - -typedef Quat Quatf; -typedef Quat Quatd; - - -//--------------- -// Implementation -//--------------- - -template -inline -Quat::Quat (): r (1), v (0, 0, 0) -{ - // empty -} - - -template -template -inline -Quat::Quat (const Quat &q): r (q.r), v (q.v) -{ - // empty -} - - -template -inline -Quat::Quat (T s, T i, T j, T k): r (s), v (i, j, k) -{ - // empty -} - - -template -inline -Quat::Quat (T s, Vec3 d): r (s), v (d) -{ - // empty -} - - -template -inline Quat -Quat::identity () -{ - return Quat(); -} - -template -inline const Quat & -Quat::operator = (const Quat &q) -{ - r = q.r; - v = q.v; - return *this; -} - - -template -inline const Quat & -Quat::operator *= (const Quat &q) -{ - T rtmp = r * q.r - (v ^ q.v); - v = r * q.v + v * q.r + v % q.v; - r = rtmp; - return *this; -} - - -template -inline const Quat & -Quat::operator *= (T t) -{ - r *= t; - v *= t; - return *this; -} - - -template -inline const Quat & -Quat::operator /= (const Quat &q) -{ - *this = *this * q.inverse(); - return *this; -} - - -template -inline const Quat & -Quat::operator /= (T t) -{ - r /= t; - v /= t; - return *this; -} - - -template -inline const Quat & -Quat::operator += (const Quat &q) -{ - r += q.r; - v += q.v; - return *this; -} - - -template -inline const Quat & -Quat::operator -= (const Quat &q) -{ - r -= q.r; - v -= q.v; - return *this; -} - - -template -inline T & -Quat::operator [] (int index) -{ - return index ? v[index - 1] : r; -} - - -template -inline T -Quat::operator [] (int index) const -{ - return index ? v[index - 1] : r; -} - - -template -template -inline bool -Quat::operator == (const Quat &q) const -{ - return r == q.r && v == q.v; -} - - -template -template -inline bool -Quat::operator != (const Quat &q) const -{ - return r != q.r || v != q.v; -} - - -template -inline T -operator ^ (const Quat& q1 ,const Quat& q2) -{ - return q1.r * q2.r + (q1.v ^ q2.v); -} - - -template -inline T -Quat::length () const -{ - return Math::sqrt (r * r + (v ^ v)); -} - - -template -inline Quat & -Quat::normalize () -{ - if (T l = length()) - { - r /= l; - v /= l; - } - else - { - r = 1; - v = Vec3 (0); - } - - return *this; -} - - -template -inline Quat -Quat::normalized () const -{ - if (T l = length()) - return Quat (r / l, v / l); - - return Quat(); -} - - -template -inline Quat -Quat::inverse () const -{ - // - // 1 Q* - // - = ---- where Q* is conjugate (operator~) - // Q Q* Q and (Q* Q) == Q ^ Q (4D dot) - // - - T qdot = *this ^ *this; - return Quat (r / qdot, -v / qdot); -} - - -template -inline Quat & -Quat::invert () -{ - T qdot = (*this) ^ (*this); - r /= qdot; - v = -v / qdot; - return *this; -} - - -template -inline Vec3 -Quat::rotateVector(const Vec3& original) const -{ - // - // Given a vector p and a quaternion q (aka this), - // calculate p' = qpq* - // - // Assumes unit quaternions (because non-unit - // quaternions cannot be used to rotate vectors - // anyway). - // - - Quat vec (0, original); // temporarily promote grade of original - Quat inv (*this); - inv.v *= -1; // unit multiplicative inverse - Quat result = *this * vec * inv; - return result.v; -} - - -template -inline T -Quat::euclideanInnerProduct (const Quat &q) const -{ - return r * q.r + v.x * q.v.x + v.y * q.v.y + v.z * q.v.z; -} - - -template -T -angle4D (const Quat &q1, const Quat &q2) -{ - // - // Compute the angle between two quaternions, - // interpreting the quaternions as 4D vectors. - // - - Quat d = q1 - q2; - T lengthD = Math::sqrt (d ^ d); - - Quat s = q1 + q2; - T lengthS = Math::sqrt (s ^ s); - - return 2 * Math::atan2 (lengthD, lengthS); -} - - -template -Quat -slerp (const Quat &q1, const Quat &q2, T t) -{ - // - // Spherical linear interpolation. - // Assumes q1 and q2 are normalized and that q1 != -q2. - // - // This method does *not* interpolate along the shortest - // arc between q1 and q2. If you desire interpolation - // along the shortest arc, and q1^q2 is negative, then - // consider calling slerpShortestArc(), below, or flipping - // the second quaternion explicitly. - // - // The implementation of squad() depends on a slerp() - // that interpolates as is, without the automatic - // flipping. - // - // Don Hatch explains the method we use here on his - // web page, The Right Way to Calculate Stuff, at - // http://www.plunk.org/~hatch/rightway.php - // - - T a = angle4D (q1, q2); - T s = 1 - t; - - Quat q = sinx_over_x (s * a) / sinx_over_x (a) * s * q1 + - sinx_over_x (t * a) / sinx_over_x (a) * t * q2; - - return q.normalized(); -} - - -template -Quat -slerpShortestArc (const Quat &q1, const Quat &q2, T t) -{ - // - // Spherical linear interpolation along the shortest - // arc from q1 to either q2 or -q2, whichever is closer. - // Assumes q1 and q2 are unit quaternions. - // - - if ((q1 ^ q2) >= 0) - return slerp (q1, q2, t); - else - return slerp (q1, -q2, t); -} - - -template -Quat -spline (const Quat &q0, const Quat &q1, - const Quat &q2, const Quat &q3, - T t) -{ - // - // Spherical Cubic Spline Interpolation - - // from Advanced Animation and Rendering - // Techniques by Watt and Watt, Page 366: - // A spherical curve is constructed using three - // spherical linear interpolations of a quadrangle - // of unit quaternions: q1, qa, qb, q2. - // Given a set of quaternion keys: q0, q1, q2, q3, - // this routine does the interpolation between - // q1 and q2 by constructing two intermediate - // quaternions: qa and qb. The qa and qb are - // computed by the intermediate function to - // guarantee the continuity of tangents across - // adjacent cubic segments. The qa represents in-tangent - // for q1 and the qb represents the out-tangent for q2. - // - // The q1 q2 is the cubic segment being interpolated. - // The q0 is from the previous adjacent segment and q3 is - // from the next adjacent segment. The q0 and q3 are used - // in computing qa and qb. - // - - Quat qa = intermediate (q0, q1, q2); - Quat qb = intermediate (q1, q2, q3); - Quat result = squad (q1, qa, qb, q2, t); - - return result; -} - - -template -Quat -squad (const Quat &q1, const Quat &qa, - const Quat &qb, const Quat &q2, - T t) -{ - // - // Spherical Quadrangle Interpolation - - // from Advanced Animation and Rendering - // Techniques by Watt and Watt, Page 366: - // It constructs a spherical cubic interpolation as - // a series of three spherical linear interpolations - // of a quadrangle of unit quaternions. - // - - Quat r1 = slerp (q1, q2, t); - Quat r2 = slerp (qa, qb, t); - Quat result = slerp (r1, r2, 2 * t * (1 - t)); - - return result; -} - - -template -Quat -intermediate (const Quat &q0, const Quat &q1, const Quat &q2) -{ - // - // From advanced Animation and Rendering - // Techniques by Watt and Watt, Page 366: - // computing the inner quadrangle - // points (qa and qb) to guarantee tangent - // continuity. - // - - Quat q1inv = q1.inverse(); - Quat c1 = q1inv * q2; - Quat c2 = q1inv * q0; - Quat c3 = (T) (-0.25) * (c2.log() + c1.log()); - Quat qa = q1 * c3.exp(); - qa.normalize(); - return qa; -} - - -template -inline Quat -Quat::log () const -{ - // - // For unit quaternion, from Advanced Animation and - // Rendering Techniques by Watt and Watt, Page 366: - // - - T theta = Math::acos (std::min (r, (T) 1.0)); - - if (theta == 0) - return Quat (0, v); - - T sintheta = Math::sin (theta); - - T k; - if (abs (sintheta) < 1 && abs (theta) >= limits::max() * abs (sintheta)) - k = 1; - else - k = theta / sintheta; - - return Quat ((T) 0, v.x * k, v.y * k, v.z * k); -} - - -template -inline Quat -Quat::exp () const -{ - // - // For pure quaternion (zero scalar part): - // from Advanced Animation and Rendering - // Techniques by Watt and Watt, Page 366: - // - - T theta = v.length(); - T sintheta = Math::sin (theta); - - T k; - if (abs (theta) < 1 && abs (sintheta) >= limits::max() * abs (theta)) - k = 1; - else - k = sintheta / theta; - - T costheta = Math::cos (theta); - - return Quat (costheta, v.x * k, v.y * k, v.z * k); -} - - -template -inline T -Quat::angle () const -{ - return 2 * Math::atan2 (v.length(), r); -} - - -template -inline Vec3 -Quat::axis () const -{ - return v.normalized(); -} - - -template -inline Quat & -Quat::setAxisAngle (const Vec3 &axis, T radians) -{ - r = Math::cos (radians / 2); - v = axis.normalized() * Math::sin (radians / 2); - return *this; -} - - -template -Quat & -Quat::setRotation (const Vec3 &from, const Vec3 &to) -{ - // - // Create a quaternion that rotates vector from into vector to, - // such that the rotation is around an axis that is the cross - // product of from and to. - // - // This function calls function setRotationInternal(), which is - // numerically accurate only for rotation angles that are not much - // greater than pi/2. In order to achieve good accuracy for angles - // greater than pi/2, we split large angles in half, and rotate in - // two steps. - // - - // - // Normalize from and to, yielding f0 and t0. - // - - Vec3 f0 = from.normalized(); - Vec3 t0 = to.normalized(); - - if ((f0 ^ t0) >= 0) - { - // - // The rotation angle is less than or equal to pi/2. - // - - setRotationInternal (f0, t0, *this); - } - else - { - // - // The angle is greater than pi/2. After computing h0, - // which is halfway between f0 and t0, we rotate first - // from f0 to h0, then from h0 to t0. - // - - Vec3 h0 = (f0 + t0).normalized(); - - if ((h0 ^ h0) != 0) - { - setRotationInternal (f0, h0, *this); - - Quat q; - setRotationInternal (h0, t0, q); - - *this *= q; - } - else - { - // - // f0 and t0 point in exactly opposite directions. - // Pick an arbitrary axis that is orthogonal to f0, - // and rotate by pi. - // - - r = T (0); - - Vec3 f02 = f0 * f0; - - if (f02.x <= f02.y && f02.x <= f02.z) - v = (f0 % Vec3 (1, 0, 0)).normalized(); - else if (f02.y <= f02.z) - v = (f0 % Vec3 (0, 1, 0)).normalized(); - else - v = (f0 % Vec3 (0, 0, 1)).normalized(); - } - } - - return *this; -} - - -template -void -Quat::setRotationInternal (const Vec3 &f0, const Vec3 &t0, Quat &q) -{ - // - // The following is equivalent to setAxisAngle(n,2*phi), - // where the rotation axis, n, is orthogonal to the f0 and - // t0 vectors, and 2*phi is the angle between f0 and t0. - // - // This function is called by setRotation(), above; it assumes - // that f0 and t0 are normalized and that the angle between - // them is not much greater than pi/2. This function becomes - // numerically inaccurate if f0 and t0 point into nearly - // opposite directions. - // - - // - // Find a normalized vector, h0, that is halfway between f0 and t0. - // The angle between f0 and h0 is phi. - // - - Vec3 h0 = (f0 + t0).normalized(); - - // - // Store the rotation axis and rotation angle. - // - - q.r = f0 ^ h0; // f0 ^ h0 == cos (phi) - q.v = f0 % h0; // (f0 % h0).length() == sin (phi) -} - - -template -Matrix33 -Quat::toMatrix33() const -{ - return Matrix33 (1 - 2 * (v.y * v.y + v.z * v.z), - 2 * (v.x * v.y + v.z * r), - 2 * (v.z * v.x - v.y * r), - - 2 * (v.x * v.y - v.z * r), - 1 - 2 * (v.z * v.z + v.x * v.x), - 2 * (v.y * v.z + v.x * r), - - 2 * (v.z * v.x + v.y * r), - 2 * (v.y * v.z - v.x * r), - 1 - 2 * (v.y * v.y + v.x * v.x)); -} - -template -Matrix44 -Quat::toMatrix44() const -{ - return Matrix44 (1 - 2 * (v.y * v.y + v.z * v.z), - 2 * (v.x * v.y + v.z * r), - 2 * (v.z * v.x - v.y * r), - 0, - 2 * (v.x * v.y - v.z * r), - 1 - 2 * (v.z * v.z + v.x * v.x), - 2 * (v.y * v.z + v.x * r), - 0, - 2 * (v.z * v.x + v.y * r), - 2 * (v.y * v.z - v.x * r), - 1 - 2 * (v.y * v.y + v.x * v.x), - 0, - 0, - 0, - 0, - 1); -} - - -template -inline Matrix33 -operator * (const Matrix33 &M, const Quat &q) -{ - return M * q.toMatrix33(); -} - - -template -inline Matrix33 -operator * (const Quat &q, const Matrix33 &M) -{ - return q.toMatrix33() * M; -} - - -template -std::ostream & -operator << (std::ostream &o, const Quat &q) -{ - return o << "(" << q.r - << " " << q.v.x - << " " << q.v.y - << " " << q.v.z - << ")"; -} - - -template -inline Quat -operator * (const Quat &q1, const Quat &q2) -{ - return Quat (q1.r * q2.r - (q1.v ^ q2.v), - q1.r * q2.v + q1.v * q2.r + q1.v % q2.v); -} - - -template -inline Quat -operator / (const Quat &q1, const Quat &q2) -{ - return q1 * q2.inverse(); -} - - -template -inline Quat -operator / (const Quat &q, T t) -{ - return Quat (q.r / t, q.v / t); -} - - -template -inline Quat -operator * (const Quat &q, T t) -{ - return Quat (q.r * t, q.v * t); -} - - -template -inline Quat -operator * (T t, const Quat &q) -{ - return Quat (q.r * t, q.v * t); -} - - -template -inline Quat -operator + (const Quat &q1, const Quat &q2) -{ - return Quat (q1.r + q2.r, q1.v + q2.v); -} - - -template -inline Quat -operator - (const Quat &q1, const Quat &q2) -{ - return Quat (q1.r - q2.r, q1.v - q2.v); -} - - -template -inline Quat -operator ~ (const Quat &q) -{ - return Quat (q.r, -q.v); -} - - -template -inline Quat -operator - (const Quat &q) -{ - return Quat (-q.r, -q.v); -} - - -template -inline Vec3 -operator * (const Vec3 &v, const Quat &q) -{ - Vec3 a = q.v % v; - Vec3 b = q.v % a; - return v + T (2) * (q.r * a + b); -} - -#if (defined _WIN32 || defined _WIN64) && defined _MSC_VER -#pragma warning(default:4244) -#endif - -IMATH_INTERNAL_NAMESPACE_HEADER_EXIT - -#endif // INCLUDED_IMATHQUAT_H diff --git a/3rdparty/openexr/Imath/ImathRandom.cpp b/3rdparty/openexr/Imath/ImathRandom.cpp deleted file mode 100644 index cf3d600415..0000000000 --- a/3rdparty/openexr/Imath/ImathRandom.cpp +++ /dev/null @@ -1,194 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2002-2012, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - -//----------------------------------------------------------------------------- -// -// Routines that generate pseudo-random numbers compatible -// with the standard erand48(), nrand48(), etc. functions. -// -//----------------------------------------------------------------------------- - -#include "ImathRandom.h" -#include "ImathInt64.h" - -IMATH_INTERNAL_NAMESPACE_SOURCE_ENTER -namespace { - -// -// Static state used by Imath::drand48(), Imath::lrand48() and Imath::srand48() -// - -unsigned short staticState[3] = {0, 0, 0}; - - -void -rand48Next (unsigned short state[3]) -{ - // - // drand48() and friends are all based on a linear congruential - // sequence, - // - // x[n+1] = (a * x[n] + c) % m, - // - // where a and c are as specified below, and m == (1 << 48) - // - - static const Int64 a = Int64 (0x5deece66dLL); - static const Int64 c = Int64 (0xbLL); - - // - // Assemble the 48-bit value x[n] from the - // three 16-bit values stored in state. - // - - Int64 x = (Int64 (state[2]) << 32) | - (Int64 (state[1]) << 16) | - Int64 (state[0]); - - // - // Compute x[n+1], except for the "modulo m" part. - // - - x = a * x + c; - - // - // Disassemble the 48 least significant bits of x[n+1] into - // three 16-bit values. Discard the 16 most significant bits; - // this takes care of the "modulo m" operation. - // - // We assume that sizeof (unsigned short) == 2. - // - - state[2] = (unsigned short)(x >> 32); - state[1] = (unsigned short)(x >> 16); - state[0] = (unsigned short)(x); -} - -} // namespace - - -double -erand48 (unsigned short state[3]) -{ - // - // Generate double-precision floating-point values between 0.0 and 1.0: - // - // The exponent is set to 0x3ff, which indicates a value greater - // than or equal to 1.0, and less than 2.0. The 48 most significant - // bits of the significand (mantissa) are filled with pseudo-random - // bits generated by rand48Next(). The remaining 4 bits are a copy - // of the 4 most significant bits of the significand. This results - // in bit patterns between 0x3ff0000000000000 and 0x3fffffffffffffff, - // which correspond to uniformly distributed floating-point values - // between 1.0 and 1.99999999999999978. Subtracting 1.0 from those - // values produces numbers between 0.0 and 0.99999999999999978, that - // is, between 0.0 and 1.0-DBL_EPSILON. - // - - rand48Next (state); - - union {double d; Int64 i;} u; - - u.i = (Int64 (0x3ff) << 52) | // sign and exponent - (Int64 (state[2]) << 36) | // significand - (Int64 (state[1]) << 20) | - (Int64 (state[0]) << 4) | - (Int64 (state[2]) >> 12); - - return u.d - 1; -} - - -double -drand48 () -{ - return IMATH_INTERNAL_NAMESPACE::erand48 (staticState); -} - - -long int -nrand48 (unsigned short state[3]) -{ - // - // Generate uniformly distributed integers between 0 and 0x7fffffff. - // - - rand48Next (state); - - return ((long int) (state[2]) << 15) | - ((long int) (state[1]) >> 1); -} - - -long int -lrand48 () -{ - return IMATH_INTERNAL_NAMESPACE::nrand48 (staticState); -} - - -void -srand48 (long int seed) -{ - staticState[2] = (unsigned short)(seed >> 16); - staticState[1] = (unsigned short)(seed); - staticState[0] = 0x330e; -} - - -float -Rand32::nextf () -{ - // - // Generate single-precision floating-point values between 0.0 and 1.0: - // - // The exponent is set to 0x7f, which indicates a value greater than - // or equal to 1.0, and less than 2.0. The 23 bits of the significand - // (mantissa) are filled with pseudo-random bits generated by - // Rand32::next(). This results in in bit patterns between 0x3f800000 - // and 0x3fffffff, which correspond to uniformly distributed floating- - // point values between 1.0 and 1.99999988. Subtracting 1.0 from - // those values produces numbers between 0.0 and 0.99999988, that is, - // between 0.0 and 1.0-FLT_EPSILON. - // - - next (); - - union {float f; unsigned int i;} u; - - u.i = 0x3f800000 | (_state & 0x7fffff); - return u.f - 1; -} - -IMATH_INTERNAL_NAMESPACE_SOURCE_EXIT diff --git a/3rdparty/openexr/Imath/ImathRandom.h b/3rdparty/openexr/Imath/ImathRandom.h deleted file mode 100644 index 4f0db1312f..0000000000 --- a/3rdparty/openexr/Imath/ImathRandom.h +++ /dev/null @@ -1,401 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2002-2012, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - -#ifndef INCLUDED_IMATHRANDOM_H -#define INCLUDED_IMATHRANDOM_H - -//----------------------------------------------------------------------------- -// -// Generators for uniformly distributed pseudo-random numbers and -// functions that use those generators to generate numbers with -// non-uniform distributions: -// -// class Rand32 -// class Rand48 -// solidSphereRand() -// hollowSphereRand() -// gaussRand() -// gaussSphereRand() -// -// Note: class Rand48() calls erand48() and nrand48(), which are not -// available on all operating systems. For compatibility we include -// our own versions of erand48() and nrand48(). Our functions have -// been reverse-engineered from the corresponding Unix/Linux man page. -// -//----------------------------------------------------------------------------- - -#include "ImathNamespace.h" -#include "ImathExport.h" - -#include -#include - -IMATH_INTERNAL_NAMESPACE_HEADER_ENTER - -//----------------------------------------------- -// Fast random-number generator that generates -// a uniformly distributed sequence with a period -// length of 2^32. -//----------------------------------------------- - -class IMATH_EXPORT Rand32 -{ - public: - - //------------ - // Constructor - //------------ - - Rand32 (unsigned long int seed = 0); - - - //-------------------------------- - // Re-initialize with a given seed - //-------------------------------- - - void init (unsigned long int seed); - - - //---------------------------------------------------------- - // Get the next value in the sequence (range: [false, true]) - //---------------------------------------------------------- - - bool nextb (); - - - //--------------------------------------------------------------- - // Get the next value in the sequence (range: [0 ... 0xffffffff]) - //--------------------------------------------------------------- - - unsigned long int nexti (); - - - //------------------------------------------------------ - // Get the next value in the sequence (range: [0 ... 1[) - //------------------------------------------------------ - - float nextf (); - - - //------------------------------------------------------------------- - // Get the next value in the sequence (range [rangeMin ... rangeMax[) - //------------------------------------------------------------------- - - float nextf (float rangeMin, float rangeMax); - - - private: - - void next (); - - unsigned long int _state; -}; - - -//-------------------------------------------------------- -// Random-number generator based on the C Standard Library -// functions erand48(), nrand48() & company; generates a -// uniformly distributed sequence. -//-------------------------------------------------------- - -class Rand48 -{ - public: - - //------------ - // Constructor - //------------ - - Rand48 (unsigned long int seed = 0); - - - //-------------------------------- - // Re-initialize with a given seed - //-------------------------------- - - void init (unsigned long int seed); - - - //---------------------------------------------------------- - // Get the next value in the sequence (range: [false, true]) - //---------------------------------------------------------- - - bool nextb (); - - - //--------------------------------------------------------------- - // Get the next value in the sequence (range: [0 ... 0x7fffffff]) - //--------------------------------------------------------------- - - long int nexti (); - - - //------------------------------------------------------ - // Get the next value in the sequence (range: [0 ... 1[) - //------------------------------------------------------ - - double nextf (); - - - //------------------------------------------------------------------- - // Get the next value in the sequence (range [rangeMin ... rangeMax[) - //------------------------------------------------------------------- - - double nextf (double rangeMin, double rangeMax); - - - private: - - unsigned short int _state[3]; -}; - - -//------------------------------------------------------------ -// Return random points uniformly distributed in a sphere with -// radius 1 around the origin (distance from origin <= 1). -//------------------------------------------------------------ - -template -Vec -solidSphereRand (Rand &rand); - - -//------------------------------------------------------------- -// Return random points uniformly distributed on the surface of -// a sphere with radius 1 around the origin. -//------------------------------------------------------------- - -template -Vec -hollowSphereRand (Rand &rand); - - -//----------------------------------------------- -// Return random numbers with a normal (Gaussian) -// distribution with zero mean and unit variance. -//----------------------------------------------- - -template -float -gaussRand (Rand &rand); - - -//---------------------------------------------------- -// Return random points whose distance from the origin -// has a normal (Gaussian) distribution with zero mean -// and unit variance. -//---------------------------------------------------- - -template -Vec -gaussSphereRand (Rand &rand); - - -//--------------------------------- -// erand48(), nrand48() and friends -//--------------------------------- - -IMATH_EXPORT double erand48 (unsigned short state[3]); -IMATH_EXPORT double drand48 (); -IMATH_EXPORT long int nrand48 (unsigned short state[3]); -IMATH_EXPORT long int lrand48 (); -IMATH_EXPORT void srand48 (long int seed); - - -//--------------- -// Implementation -//--------------- - - -inline void -Rand32::init (unsigned long int seed) -{ - _state = (seed * 0xa5a573a5L) ^ 0x5a5a5a5aL; -} - - -inline -Rand32::Rand32 (unsigned long int seed) -{ - init (seed); -} - - -inline void -Rand32::next () -{ - _state = 1664525L * _state + 1013904223L; -} - - -inline bool -Rand32::nextb () -{ - next (); - // Return the 31st (most significant) bit, by and-ing with 2 ^ 31. - return !!(_state & 2147483648UL); -} - - -inline unsigned long int -Rand32::nexti () -{ - next (); - return _state & 0xffffffff; -} - - -inline float -Rand32::nextf (float rangeMin, float rangeMax) -{ - float f = nextf(); - return rangeMin * (1 - f) + rangeMax * f; -} - - -inline void -Rand48::init (unsigned long int seed) -{ - seed = (seed * 0xa5a573a5L) ^ 0x5a5a5a5aL; - - _state[0] = (unsigned short int) (seed & 0xFFFF); - _state[1] = (unsigned short int) ((seed >> 16) & 0xFFFF); - _state[2] = (unsigned short int) (seed & 0xFFFF); -} - - -inline -Rand48::Rand48 (unsigned long int seed) -{ - init (seed); -} - - -inline bool -Rand48::nextb () -{ - return nrand48 (_state) & 1; -} - - -inline long int -Rand48::nexti () -{ - return nrand48 (_state); -} - - -inline double -Rand48::nextf () -{ - return erand48 (_state); -} - - -inline double -Rand48::nextf (double rangeMin, double rangeMax) -{ - double f = nextf(); - return rangeMin * (1 - f) + rangeMax * f; -} - - -template -Vec -solidSphereRand (Rand &rand) -{ - Vec v; - - do - { - for (unsigned int i = 0; i < Vec::dimensions(); i++) - v[i] = (typename Vec::BaseType) rand.nextf (-1, 1); - } - while (v.length2() > 1); - - return v; -} - - -template -Vec -hollowSphereRand (Rand &rand) -{ - Vec v; - typename Vec::BaseType length; - - do - { - for (unsigned int i = 0; i < Vec::dimensions(); i++) - v[i] = (typename Vec::BaseType) rand.nextf (-1, 1); - - length = v.length(); - } - while (length > 1 || length == 0); - - return v / length; -} - - -template -float -gaussRand (Rand &rand) -{ - float x; // Note: to avoid numerical problems with very small - float y; // numbers, we make these variables singe-precision - float length2; // floats, but later we call the double-precision log() - // and sqrt() functions instead of logf() and sqrtf(). - do - { - x = float (rand.nextf (-1, 1)); - y = float (rand.nextf (-1, 1)); - length2 = x * x + y * y; - } - while (length2 >= 1 || length2 == 0); - - return x * sqrt (-2 * log (double (length2)) / length2); -} - - -template -Vec -gaussSphereRand (Rand &rand) -{ - return hollowSphereRand (rand) * gaussRand (rand); -} - -IMATH_INTERNAL_NAMESPACE_HEADER_EXIT - -#endif // INCLUDED_IMATHRANDOM_H diff --git a/3rdparty/openexr/Imath/ImathRoots.h b/3rdparty/openexr/Imath/ImathRoots.h deleted file mode 100644 index 036b7f7468..0000000000 --- a/3rdparty/openexr/Imath/ImathRoots.h +++ /dev/null @@ -1,219 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2002-2012, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - - -#ifndef INCLUDED_IMATHROOTS_H -#define INCLUDED_IMATHROOTS_H - -//--------------------------------------------------------------------- -// -// Functions to solve linear, quadratic or cubic equations -// -//--------------------------------------------------------------------- - -#include "ImathMath.h" -#include "ImathNamespace.h" -#include - -IMATH_INTERNAL_NAMESPACE_HEADER_ENTER - -//-------------------------------------------------------------------------- -// Find the real solutions of a linear, quadratic or cubic equation: -// -// function equation solved -// -// solveLinear (a, b, x) a * x + b == 0 -// solveQuadratic (a, b, c, x) a * x*x + b * x + c == 0 -// solveNormalizedCubic (r, s, t, x) x*x*x + r * x*x + s * x + t == 0 -// solveCubic (a, b, c, d, x) a * x*x*x + b * x*x + c * x + d == 0 -// -// Return value: -// -// 3 three real solutions, stored in x[0], x[1] and x[2] -// 2 two real solutions, stored in x[0] and x[1] -// 1 one real solution, stored in x[1] -// 0 no real solutions -// -1 all real numbers are solutions -// -// Notes: -// -// * It is possible that an equation has real solutions, but that the -// solutions (or some intermediate result) are not representable. -// In this case, either some of the solutions returned are invalid -// (nan or infinity), or, if floating-point exceptions have been -// enabled with Iex::mathExcOn(), an Iex::MathExc exception is -// thrown. -// -// * Cubic equations are solved using Cardano's Formula; even though -// only real solutions are produced, some intermediate results are -// complex (std::complex). -// -//-------------------------------------------------------------------------- - -template int solveLinear (T a, T b, T &x); -template int solveQuadratic (T a, T b, T c, T x[2]); -template int solveNormalizedCubic (T r, T s, T t, T x[3]); -template int solveCubic (T a, T b, T c, T d, T x[3]); - - -//--------------- -// Implementation -//--------------- - -template -int -solveLinear (T a, T b, T &x) -{ - if (a != 0) - { - x = -b / a; - return 1; - } - else if (b != 0) - { - return 0; - } - else - { - return -1; - } -} - - -template -int -solveQuadratic (T a, T b, T c, T x[2]) -{ - if (a == 0) - { - return solveLinear (b, c, x[0]); - } - else - { - T D = b * b - 4 * a * c; - - if (D > 0) - { - T s = Math::sqrt (D); - T q = -(b + (b > 0 ? 1 : -1) * s) / T(2); - - x[0] = q / a; - x[1] = c / q; - return 2; - } - if (D == 0) - { - x[0] = -b / (2 * a); - return 1; - } - else - { - return 0; - } - } -} - - -template -int -solveNormalizedCubic (T r, T s, T t, T x[3]) -{ - T p = (3 * s - r * r) / 3; - T q = 2 * r * r * r / 27 - r * s / 3 + t; - T p3 = p / 3; - T q2 = q / 2; - T D = p3 * p3 * p3 + q2 * q2; - - if (D == 0 && p3 == 0) - { - x[0] = -r / 3; - x[1] = -r / 3; - x[2] = -r / 3; - return 1; - } - - std::complex u = std::pow (-q / 2 + std::sqrt (std::complex (D)), - T (1) / T (3)); - - std::complex v = -p / (T (3) * u); - - const T sqrt3 = T (1.73205080756887729352744634150587); // enough digits - // for long double - std::complex y0 (u + v); - - std::complex y1 (-(u + v) / T (2) + - (u - v) / T (2) * std::complex (0, sqrt3)); - - std::complex y2 (-(u + v) / T (2) - - (u - v) / T (2) * std::complex (0, sqrt3)); - - if (D > 0) - { - x[0] = y0.real() - r / 3; - return 1; - } - else if (D == 0) - { - x[0] = y0.real() - r / 3; - x[1] = y1.real() - r / 3; - return 2; - } - else - { - x[0] = y0.real() - r / 3; - x[1] = y1.real() - r / 3; - x[2] = y2.real() - r / 3; - return 3; - } -} - - -template -int -solveCubic (T a, T b, T c, T d, T x[3]) -{ - if (a == 0) - { - return solveQuadratic (b, c, d, x); - } - else - { - return solveNormalizedCubic (b / a, c / a, d / a, x); - } -} - -IMATH_INTERNAL_NAMESPACE_HEADER_EXIT - -#endif // INCLUDED_IMATHROOTS_H diff --git a/3rdparty/openexr/Imath/ImathShear.cpp b/3rdparty/openexr/Imath/ImathShear.cpp deleted file mode 100644 index 2c0ba2ae1b..0000000000 --- a/3rdparty/openexr/Imath/ImathShear.cpp +++ /dev/null @@ -1,54 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2002-2012, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - - - -//---------------------------------------------------------------------------- -// -// Specializations of the Shear6 template. -// -//---------------------------------------------------------------------------- - -#include "ImathShear.h" - -IMATH_INTERNAL_NAMESPACE_SOURCE_ENTER - - - -// empty - - - -IMATH_INTERNAL_NAMESPACE_SOURCE_EXIT diff --git a/3rdparty/openexr/Imath/ImathShear.h b/3rdparty/openexr/Imath/ImathShear.h deleted file mode 100644 index b6f7b9a968..0000000000 --- a/3rdparty/openexr/Imath/ImathShear.h +++ /dev/null @@ -1,656 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2004-2012, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - - -#ifndef INCLUDED_IMATHSHEAR_H -#define INCLUDED_IMATHSHEAR_H - -//---------------------------------------------------- -// -// Shear6 class template. -// -//---------------------------------------------------- - -#include "ImathExc.h" -#include "ImathLimits.h" -#include "ImathMath.h" -#include "ImathVec.h" -#include "ImathNamespace.h" -#include - - -IMATH_INTERNAL_NAMESPACE_HEADER_ENTER - -template class Shear6 -{ - public: - - //------------------- - // Access to elements - //------------------- - - T xy, xz, yz, yx, zx, zy; - - T & operator [] (int i); - const T & operator [] (int i) const; - - - //------------- - // Constructors - //------------- - - Shear6 (); // (0 0 0 0 0 0) - Shear6 (T XY, T XZ, T YZ); // (XY XZ YZ 0 0 0) - Shear6 (const Vec3 &v); // (v.x v.y v.z 0 0 0) - template // (v.x v.y v.z 0 0 0) - Shear6 (const Vec3 &v); - Shear6 (T XY, T XZ, T YZ, // (XY XZ YZ YX ZX ZY) - T YX, T ZX, T ZY); - - - //--------------------------------- - // Copy constructors and assignment - //--------------------------------- - - Shear6 (const Shear6 &h); - template Shear6 (const Shear6 &h); - - const Shear6 & operator = (const Shear6 &h); - template - const Shear6 & operator = (const Vec3 &v); - - - //---------------------- - // Compatibility with Sb - //---------------------- - - template - void setValue (S XY, S XZ, S YZ, S YX, S ZX, S ZY); - - template - void setValue (const Shear6 &h); - - template - void getValue (S &XY, S &XZ, S &YZ, - S &YX, S &ZX, S &ZY) const; - - template - void getValue (Shear6 &h) const; - - T * getValue(); - const T * getValue() const; - - - //--------- - // Equality - //--------- - - template - bool operator == (const Shear6 &h) const; - - template - bool operator != (const Shear6 &h) const; - - //----------------------------------------------------------------------- - // Compare two shears and test if they are "approximately equal": - // - // equalWithAbsError (h, e) - // - // Returns true if the coefficients of this and h are the same with - // an absolute error of no more than e, i.e., for all i - // - // abs (this[i] - h[i]) <= e - // - // equalWithRelError (h, e) - // - // Returns true if the coefficients of this and h are the same with - // a relative error of no more than e, i.e., for all i - // - // abs (this[i] - h[i]) <= e * abs (this[i]) - //----------------------------------------------------------------------- - - bool equalWithAbsError (const Shear6 &h, T e) const; - bool equalWithRelError (const Shear6 &h, T e) const; - - - //------------------------ - // Component-wise addition - //------------------------ - - const Shear6 & operator += (const Shear6 &h); - Shear6 operator + (const Shear6 &h) const; - - - //--------------------------- - // Component-wise subtraction - //--------------------------- - - const Shear6 & operator -= (const Shear6 &h); - Shear6 operator - (const Shear6 &h) const; - - - //------------------------------------ - // Component-wise multiplication by -1 - //------------------------------------ - - Shear6 operator - () const; - const Shear6 & negate (); - - - //------------------------------ - // Component-wise multiplication - //------------------------------ - - const Shear6 & operator *= (const Shear6 &h); - const Shear6 & operator *= (T a); - Shear6 operator * (const Shear6 &h) const; - Shear6 operator * (T a) const; - - - //------------------------ - // Component-wise division - //------------------------ - - const Shear6 & operator /= (const Shear6 &h); - const Shear6 & operator /= (T a); - Shear6 operator / (const Shear6 &h) const; - Shear6 operator / (T a) const; - - - //---------------------------------------------------------- - // Number of dimensions, i.e. number of elements in a Shear6 - //---------------------------------------------------------- - - static unsigned int dimensions() {return 6;} - - - //------------------------------------------------- - // Limitations of type T (see also class limits) - //------------------------------------------------- - - static T baseTypeMin() {return limits::min();} - static T baseTypeMax() {return limits::max();} - static T baseTypeSmallest() {return limits::smallest();} - static T baseTypeEpsilon() {return limits::epsilon();} - - - //-------------------------------------------------------------- - // Base type -- in templates, which accept a parameter, V, which - // could be either a Vec2 or a Shear6, you can refer to T as - // V::BaseType - //-------------------------------------------------------------- - - typedef T BaseType; -}; - - -//-------------- -// Stream output -//-------------- - -template -std::ostream & operator << (std::ostream &s, const Shear6 &h); - - -//---------------------------------------------------- -// Reverse multiplication: scalar * Shear6 -//---------------------------------------------------- - -template Shear6 operator * (S a, const Shear6 &h); - - -//------------------------- -// Typedefs for convenience -//------------------------- - -typedef Vec3 Shear3f; -typedef Vec3 Shear3d; -typedef Shear6 Shear6f; -typedef Shear6 Shear6d; - - - - -//----------------------- -// Implementation of Shear6 -//----------------------- - -template -inline T & -Shear6::operator [] (int i) -{ - return (&xy)[i]; -} - -template -inline const T & -Shear6::operator [] (int i) const -{ - return (&xy)[i]; -} - -template -inline -Shear6::Shear6 () -{ - xy = xz = yz = yx = zx = zy = 0; -} - -template -inline -Shear6::Shear6 (T XY, T XZ, T YZ) -{ - xy = XY; - xz = XZ; - yz = YZ; - yx = 0; - zx = 0; - zy = 0; -} - -template -inline -Shear6::Shear6 (const Vec3 &v) -{ - xy = v.x; - xz = v.y; - yz = v.z; - yx = 0; - zx = 0; - zy = 0; -} - -template -template -inline -Shear6::Shear6 (const Vec3 &v) -{ - xy = T (v.x); - xz = T (v.y); - yz = T (v.z); - yx = 0; - zx = 0; - zy = 0; -} - -template -inline -Shear6::Shear6 (T XY, T XZ, T YZ, T YX, T ZX, T ZY) -{ - xy = XY; - xz = XZ; - yz = YZ; - yx = YX; - zx = ZX; - zy = ZY; -} - -template -inline -Shear6::Shear6 (const Shear6 &h) -{ - xy = h.xy; - xz = h.xz; - yz = h.yz; - yx = h.yx; - zx = h.zx; - zy = h.zy; -} - -template -template -inline -Shear6::Shear6 (const Shear6 &h) -{ - xy = T (h.xy); - xz = T (h.xz); - yz = T (h.yz); - yx = T (h.yx); - zx = T (h.zx); - zy = T (h.zy); -} - -template -inline const Shear6 & -Shear6::operator = (const Shear6 &h) -{ - xy = h.xy; - xz = h.xz; - yz = h.yz; - yx = h.yx; - zx = h.zx; - zy = h.zy; - return *this; -} - -template -template -inline const Shear6 & -Shear6::operator = (const Vec3 &v) -{ - xy = T (v.x); - xz = T (v.y); - yz = T (v.z); - yx = 0; - zx = 0; - zy = 0; - return *this; -} - -template -template -inline void -Shear6::setValue (S XY, S XZ, S YZ, S YX, S ZX, S ZY) -{ - xy = T (XY); - xz = T (XZ); - yz = T (YZ); - yx = T (YX); - zx = T (ZX); - zy = T (ZY); -} - -template -template -inline void -Shear6::setValue (const Shear6 &h) -{ - xy = T (h.xy); - xz = T (h.xz); - yz = T (h.yz); - yx = T (h.yx); - zx = T (h.zx); - zy = T (h.zy); -} - -template -template -inline void -Shear6::getValue (S &XY, S &XZ, S &YZ, S &YX, S &ZX, S &ZY) const -{ - XY = S (xy); - XZ = S (xz); - YZ = S (yz); - YX = S (yx); - ZX = S (zx); - ZY = S (zy); -} - -template -template -inline void -Shear6::getValue (Shear6 &h) const -{ - h.xy = S (xy); - h.xz = S (xz); - h.yz = S (yz); - h.yx = S (yx); - h.zx = S (zx); - h.zy = S (zy); -} - -template -inline T * -Shear6::getValue() -{ - return (T *) &xy; -} - -template -inline const T * -Shear6::getValue() const -{ - return (const T *) &xy; -} - -template -template -inline bool -Shear6::operator == (const Shear6 &h) const -{ - return xy == h.xy && xz == h.xz && yz == h.yz && - yx == h.yx && zx == h.zx && zy == h.zy; -} - -template -template -inline bool -Shear6::operator != (const Shear6 &h) const -{ - return xy != h.xy || xz != h.xz || yz != h.yz || - yx != h.yx || zx != h.zx || zy != h.zy; -} - -template -bool -Shear6::equalWithAbsError (const Shear6 &h, T e) const -{ - for (int i = 0; i < 6; i++) - if (!IMATH_INTERNAL_NAMESPACE::equalWithAbsError ((*this)[i], h[i], e)) - return false; - - return true; -} - -template -bool -Shear6::equalWithRelError (const Shear6 &h, T e) const -{ - for (int i = 0; i < 6; i++) - if (!IMATH_INTERNAL_NAMESPACE::equalWithRelError ((*this)[i], h[i], e)) - return false; - - return true; -} - - -template -inline const Shear6 & -Shear6::operator += (const Shear6 &h) -{ - xy += h.xy; - xz += h.xz; - yz += h.yz; - yx += h.yx; - zx += h.zx; - zy += h.zy; - return *this; -} - -template -inline Shear6 -Shear6::operator + (const Shear6 &h) const -{ - return Shear6 (xy + h.xy, xz + h.xz, yz + h.yz, - yx + h.yx, zx + h.zx, zy + h.zy); -} - -template -inline const Shear6 & -Shear6::operator -= (const Shear6 &h) -{ - xy -= h.xy; - xz -= h.xz; - yz -= h.yz; - yx -= h.yx; - zx -= h.zx; - zy -= h.zy; - return *this; -} - -template -inline Shear6 -Shear6::operator - (const Shear6 &h) const -{ - return Shear6 (xy - h.xy, xz - h.xz, yz - h.yz, - yx - h.yx, zx - h.zx, zy - h.zy); -} - -template -inline Shear6 -Shear6::operator - () const -{ - return Shear6 (-xy, -xz, -yz, -yx, -zx, -zy); -} - -template -inline const Shear6 & -Shear6::negate () -{ - xy = -xy; - xz = -xz; - yz = -yz; - yx = -yx; - zx = -zx; - zy = -zy; - return *this; -} - -template -inline const Shear6 & -Shear6::operator *= (const Shear6 &h) -{ - xy *= h.xy; - xz *= h.xz; - yz *= h.yz; - yx *= h.yx; - zx *= h.zx; - zy *= h.zy; - return *this; -} - -template -inline const Shear6 & -Shear6::operator *= (T a) -{ - xy *= a; - xz *= a; - yz *= a; - yx *= a; - zx *= a; - zy *= a; - return *this; -} - -template -inline Shear6 -Shear6::operator * (const Shear6 &h) const -{ - return Shear6 (xy * h.xy, xz * h.xz, yz * h.yz, - yx * h.yx, zx * h.zx, zy * h.zy); -} - -template -inline Shear6 -Shear6::operator * (T a) const -{ - return Shear6 (xy * a, xz * a, yz * a, - yx * a, zx * a, zy * a); -} - -template -inline const Shear6 & -Shear6::operator /= (const Shear6 &h) -{ - xy /= h.xy; - xz /= h.xz; - yz /= h.yz; - yx /= h.yx; - zx /= h.zx; - zy /= h.zy; - return *this; -} - -template -inline const Shear6 & -Shear6::operator /= (T a) -{ - xy /= a; - xz /= a; - yz /= a; - yx /= a; - zx /= a; - zy /= a; - return *this; -} - -template -inline Shear6 -Shear6::operator / (const Shear6 &h) const -{ - return Shear6 (xy / h.xy, xz / h.xz, yz / h.yz, - yx / h.yx, zx / h.zx, zy / h.zy); -} - -template -inline Shear6 -Shear6::operator / (T a) const -{ - return Shear6 (xy / a, xz / a, yz / a, - yx / a, zx / a, zy / a); -} - - -//----------------------------- -// Stream output implementation -//----------------------------- - -template -std::ostream & -operator << (std::ostream &s, const Shear6 &h) -{ - return s << '(' - << h.xy << ' ' << h.xz << ' ' << h.yz - << h.yx << ' ' << h.zx << ' ' << h.zy - << ')'; -} - - -//----------------------------------------- -// Implementation of reverse multiplication -//----------------------------------------- - -template -inline Shear6 -operator * (S a, const Shear6 &h) -{ - return Shear6 (a * h.xy, a * h.xz, a * h.yz, - a * h.yx, a * h.zx, a * h.zy); -} - - -IMATH_INTERNAL_NAMESPACE_HEADER_EXIT - -#endif // INCLUDED_IMATHSHEAR_H diff --git a/3rdparty/openexr/Imath/ImathSphere.h b/3rdparty/openexr/Imath/ImathSphere.h deleted file mode 100644 index e8f36dfe56..0000000000 --- a/3rdparty/openexr/Imath/ImathSphere.h +++ /dev/null @@ -1,177 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2002-2012, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - - -#ifndef INCLUDED_IMATHSPHERE_H -#define INCLUDED_IMATHSPHERE_H - -//------------------------------------- -// -// A 3D sphere class template -// -//------------------------------------- - -#include "ImathVec.h" -#include "ImathBox.h" -#include "ImathLine.h" -#include "ImathNamespace.h" - -IMATH_INTERNAL_NAMESPACE_HEADER_ENTER - -template -class Sphere3 -{ - public: - - Vec3 center; - T radius; - - //--------------- - // Constructors - //--------------- - - Sphere3() : center(0,0,0), radius(0) {} - Sphere3(const Vec3 &c, T r) : center(c), radius(r) {} - - //------------------------------------------------------------------- - // Utilities: - // - // s.circumscribe(b) sets center and radius of sphere s - // so that the s tightly encloses box b. - // - // s.intersectT (l, t) If sphere s and line l intersect, then - // intersectT() computes the smallest t, - // t >= 0, so that l(t) is a point on the - // sphere. intersectT() then returns true. - // - // If s and l do not intersect, intersectT() - // returns false. - // - // s.intersect (l, i) If sphere s and line l intersect, then - // intersect() calls s.intersectT(l,t) and - // computes i = l(t). - // - // If s and l do not intersect, intersect() - // returns false. - // - //------------------------------------------------------------------- - - void circumscribe(const Box > &box); - bool intersect(const Line3 &l, Vec3 &intersection) const; - bool intersectT(const Line3 &l, T &t) const; -}; - - -//-------------------- -// Convenient typedefs -//-------------------- - -typedef Sphere3 Sphere3f; -typedef Sphere3 Sphere3d; - - -//--------------- -// Implementation -//--------------- - -template -void Sphere3::circumscribe(const Box > &box) -{ - center = T(0.5) * (box.min + box.max); - radius = (box.max - center).length(); -} - - -template -bool Sphere3::intersectT(const Line3 &line, T &t) const -{ - bool doesIntersect = true; - - Vec3 v = line.pos - center; - T B = T(2.0) * (line.dir ^ v); - T C = (v ^ v) - (radius * radius); - - // compute discriminant - // if negative, there is no intersection - - T discr = B*B - T(4.0)*C; - - if (discr < 0.0) - { - // line and Sphere3 do not intersect - - doesIntersect = false; - } - else - { - // t0: (-B - sqrt(B^2 - 4AC)) / 2A (A = 1) - - T sqroot = Math::sqrt(discr); - t = (-B - sqroot) * T(0.5); - - if (t < 0.0) - { - // no intersection, try t1: (-B + sqrt(B^2 - 4AC)) / 2A (A = 1) - - t = (-B + sqroot) * T(0.5); - } - - if (t < 0.0) - doesIntersect = false; - } - - return doesIntersect; -} - - -template -bool Sphere3::intersect(const Line3 &line, Vec3 &intersection) const -{ - T t; - - if (intersectT (line, t)) - { - intersection = line(t); - return true; - } - else - { - return false; - } -} - -IMATH_INTERNAL_NAMESPACE_HEADER_EXIT - -#endif // INCLUDED_IMATHSPHERE_H diff --git a/3rdparty/openexr/Imath/ImathVec.cpp b/3rdparty/openexr/Imath/ImathVec.cpp deleted file mode 100644 index 37edc970ce..0000000000 --- a/3rdparty/openexr/Imath/ImathVec.cpp +++ /dev/null @@ -1,583 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2002-2012, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - - -//---------------------------------------------------------------------------- -// -// Specializations of the Vec2 and Vec3 templates. -// -//---------------------------------------------------------------------------- - -#include "ImathVec.h" -#include "ImathExport.h" - -#if (defined _WIN32 || defined _WIN64) && defined _MSC_VER -// suppress exception specification warnings -#pragma warning(disable:4290) -#endif - - -IMATH_INTERNAL_NAMESPACE_SOURCE_ENTER - -namespace -{ - -template -bool -normalizeOrThrow(Vec2 &v) -{ - int axis = -1; - for (int i = 0; i < 2; i ++) - { - if (v[i] != 0) - { - if (axis != -1) - { - throw IntVecNormalizeExc ("Cannot normalize an integer " - "vector unless it is parallel " - "to a principal axis"); - } - axis = i; - } - } - v[axis] = (v[axis] > 0) ? 1 : -1; - return true; -} - - -template -bool -normalizeOrThrow(Vec3 &v) -{ - int axis = -1; - for (int i = 0; i < 3; i ++) - { - if (v[i] != 0) - { - if (axis != -1) - { - throw IntVecNormalizeExc ("Cannot normalize an integer " - "vector unless it is parallel " - "to a principal axis"); - } - axis = i; - } - } - v[axis] = (v[axis] > 0) ? 1 : -1; - return true; -} - - -template -bool -normalizeOrThrow(Vec4 &v) -{ - int axis = -1; - for (int i = 0; i < 4; i ++) - { - if (v[i] != 0) - { - if (axis != -1) - { - throw IntVecNormalizeExc ("Cannot normalize an integer " - "vector unless it is parallel " - "to a principal axis"); - } - axis = i; - } - } - v[axis] = (v[axis] > 0) ? 1 : -1; - return true; -} - -} - - -// Vec2 - -template <> -IMATH_EXPORT -short -Vec2::length () const -{ - float lenF = Math::sqrt ((float)dot (*this)); - short lenS = (short) (lenF + 0.5f); - return lenS; -} - -template <> -IMATH_EXPORT -const Vec2 & -Vec2::normalize () -{ - normalizeOrThrow(*this); - return *this; -} - -template <> -IMATH_EXPORT -const Vec2 & -Vec2::normalizeExc () -{ - if ((x == 0) && (y == 0)) - throw NullVecExc ("Cannot normalize null vector."); - - normalizeOrThrow(*this); - return *this; -} - -template <> -IMATH_EXPORT -const Vec2 & -Vec2::normalizeNonNull () -{ - normalizeOrThrow(*this); - return *this; -} - -template <> -IMATH_EXPORT -Vec2 -Vec2::normalized () const -{ - Vec2 v(*this); - normalizeOrThrow(v); - return v; -} - -template <> -IMATH_EXPORT -Vec2 -Vec2::normalizedExc () const -{ - if ((x == 0) && (y == 0)) - throw NullVecExc ("Cannot normalize null vector."); - - Vec2 v(*this); - normalizeOrThrow(v); - return v; -} - -template <> -IMATH_EXPORT -Vec2 -Vec2::normalizedNonNull () const -{ - Vec2 v(*this); - normalizeOrThrow(v); - return v; -} - - -// Vec2 - -template <> -IMATH_EXPORT -int -Vec2::length () const -{ - float lenF = Math::sqrt ((float)dot (*this)); - int lenI = (int) (lenF + 0.5f); - return lenI; -} - -template <> -IMATH_EXPORT -const Vec2 & -Vec2::normalize () -{ - normalizeOrThrow(*this); - return *this; -} - -template <> -IMATH_EXPORT -const Vec2 & -Vec2::normalizeExc () -{ - if ((x == 0) && (y == 0)) - throw NullVecExc ("Cannot normalize null vector."); - - normalizeOrThrow(*this); - return *this; -} - -template <> -IMATH_EXPORT -const Vec2 & -Vec2::normalizeNonNull () -{ - normalizeOrThrow(*this); - return *this; -} - -template <> -IMATH_EXPORT -Vec2 -Vec2::normalized () const -{ - Vec2 v(*this); - normalizeOrThrow(v); - return v; -} - -template <> -IMATH_EXPORT -Vec2 -Vec2::normalizedExc () const -{ - if ((x == 0) && (y == 0)) - throw NullVecExc ("Cannot normalize null vector."); - - Vec2 v(*this); - normalizeOrThrow(v); - return v; -} - -template <> -IMATH_EXPORT -Vec2 -Vec2::normalizedNonNull () const -{ - Vec2 v(*this); - normalizeOrThrow(v); - return v; -} - - -// Vec3 - -template <> -IMATH_EXPORT -short -Vec3::length () const -{ - float lenF = Math::sqrt ((float)dot (*this)); - short lenS = (short) (lenF + 0.5f); - return lenS; -} - -template <> -IMATH_EXPORT -const Vec3 & -Vec3::normalize () -{ - normalizeOrThrow(*this); - return *this; -} - -template <> -IMATH_EXPORT -const Vec3 & -Vec3::normalizeExc () -{ - if ((x == 0) && (y == 0) && (z == 0)) - throw NullVecExc ("Cannot normalize null vector."); - - normalizeOrThrow(*this); - return *this; -} - -template <> -IMATH_EXPORT -const Vec3 & -Vec3::normalizeNonNull () -{ - normalizeOrThrow(*this); - return *this; -} - -template <> -IMATH_EXPORT -Vec3 -Vec3::normalized () const -{ - Vec3 v(*this); - normalizeOrThrow(v); - return v; -} - -template <> -IMATH_EXPORT -Vec3 -Vec3::normalizedExc () const -{ - if ((x == 0) && (y == 0) && (z == 0)) - throw NullVecExc ("Cannot normalize null vector."); - - Vec3 v(*this); - normalizeOrThrow(v); - return v; -} - -template <> -IMATH_EXPORT -Vec3 -Vec3::normalizedNonNull () const -{ - Vec3 v(*this); - normalizeOrThrow(v); - return v; -} - - -// Vec3 - -template <> -IMATH_EXPORT -int -Vec3::length () const -{ - float lenF = Math::sqrt ((float)dot (*this)); - int lenI = (int) (lenF + 0.5f); - return lenI; -} - -template <> -IMATH_EXPORT -const Vec3 & -Vec3::normalize () -{ - normalizeOrThrow(*this); - return *this; -} - -template <> -IMATH_EXPORT -const Vec3 & -Vec3::normalizeExc () -{ - if ((x == 0) && (y == 0) && (z == 0)) - throw NullVecExc ("Cannot normalize null vector."); - - normalizeOrThrow(*this); - return *this; -} - -template <> -IMATH_EXPORT -const Vec3 & -Vec3::normalizeNonNull () -{ - normalizeOrThrow(*this); - return *this; -} - -template <> -IMATH_EXPORT -Vec3 -Vec3::normalized () const -{ - Vec3 v(*this); - normalizeOrThrow(v); - return v; -} - -template <> -IMATH_EXPORT -Vec3 -Vec3::normalizedExc () const -{ - if ((x == 0) && (y == 0) && (z == 0)) - throw NullVecExc ("Cannot normalize null vector."); - - Vec3 v(*this); - normalizeOrThrow(v); - return v; -} - -template <> -IMATH_EXPORT -Vec3 -Vec3::normalizedNonNull () const -{ - Vec3 v(*this); - normalizeOrThrow(v); - return v; -} - - -// Vec4 - -template <> -IMATH_EXPORT -short -Vec4::length () const -{ - float lenF = Math::sqrt ((float)dot (*this)); - short lenS = (short) (lenF + 0.5f); - return lenS; -} - -template <> -IMATH_EXPORT -const Vec4 & -Vec4::normalize () -{ - normalizeOrThrow(*this); - return *this; -} - -template <> -IMATH_EXPORT -const Vec4 & -Vec4::normalizeExc () -{ - if ((x == 0) && (y == 0) && (z == 0) && (w == 0)) - throw NullVecExc ("Cannot normalize null vector."); - - normalizeOrThrow(*this); - return *this; -} - -template <> -IMATH_EXPORT -const Vec4 & -Vec4::normalizeNonNull () -{ - normalizeOrThrow(*this); - return *this; -} - -template <> -IMATH_EXPORT -Vec4 -Vec4::normalized () const -{ - Vec4 v(*this); - normalizeOrThrow(v); - return v; -} - -template <> -IMATH_EXPORT -Vec4 -Vec4::normalizedExc () const -{ - if ((x == 0) && (y == 0) && (z == 0) && (w == 0)) - throw NullVecExc ("Cannot normalize null vector."); - - Vec4 v(*this); - normalizeOrThrow(v); - return v; -} - -template <> -IMATH_EXPORT -Vec4 -Vec4::normalizedNonNull () const -{ - Vec4 v(*this); - normalizeOrThrow(v); - return v; -} - - -// Vec4 - -template <> -IMATH_EXPORT -int -Vec4::length () const -{ - float lenF = Math::sqrt ((float)dot (*this)); - int lenI = (int) (lenF + 0.5f); - return lenI; -} - -template <> -IMATH_EXPORT -const Vec4 & -Vec4::normalize () -{ - normalizeOrThrow(*this); - return *this; -} - -template <> -IMATH_EXPORT -const Vec4 & -Vec4::normalizeExc () -{ - if ((x == 0) && (y == 0) && (z == 0) && (w == 0)) - throw NullVecExc ("Cannot normalize null vector."); - - normalizeOrThrow(*this); - return *this; -} - -template <> -IMATH_EXPORT -const Vec4 & -Vec4::normalizeNonNull () -{ - normalizeOrThrow(*this); - return *this; -} - -template <> -IMATH_EXPORT -Vec4 -Vec4::normalized () const -{ - Vec4 v(*this); - normalizeOrThrow(v); - return v; -} - -template <> -IMATH_EXPORT -Vec4 -Vec4::normalizedExc () const -{ - if ((x == 0) && (y == 0) && (z == 0) && (w == 0)) - throw NullVecExc ("Cannot normalize null vector."); - - Vec4 v(*this); - normalizeOrThrow(v); - return v; -} - -template <> -IMATH_EXPORT -Vec4 -Vec4::normalizedNonNull () const -{ - Vec4 v(*this); - normalizeOrThrow(v); - return v; -} - -IMATH_INTERNAL_NAMESPACE_SOURCE_EXIT diff --git a/3rdparty/openexr/Imath/ImathVec.h b/3rdparty/openexr/Imath/ImathVec.h deleted file mode 100644 index 6f4e82a38e..0000000000 --- a/3rdparty/openexr/Imath/ImathVec.h +++ /dev/null @@ -1,2227 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2004-2012, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - - -#ifndef INCLUDED_IMATHVEC_H -#define INCLUDED_IMATHVEC_H - -//---------------------------------------------------- -// -// 2D, 3D and 4D point/vector class templates -// -//---------------------------------------------------- - -#include "ImathExc.h" -#include "ImathLimits.h" -#include "ImathMath.h" -#include "ImathNamespace.h" - -#include - -#if (defined _WIN32 || defined _WIN64) && defined _MSC_VER -// suppress exception specification warnings -#pragma warning(push) -#pragma warning(disable:4290) -#endif - - -IMATH_INTERNAL_NAMESPACE_HEADER_ENTER - -template class Vec2; -template class Vec3; -template class Vec4; - -enum InfException {INF_EXCEPTION}; - - -template class Vec2 -{ - public: - - //------------------- - // Access to elements - //------------------- - - T x, y; - - T & operator [] (int i); - const T & operator [] (int i) const; - - - //------------- - // Constructors - //------------- - - Vec2 (); // no initialization - explicit Vec2 (T a); // (a a) - Vec2 (T a, T b); // (a b) - - - //--------------------------------- - // Copy constructors and assignment - //--------------------------------- - - Vec2 (const Vec2 &v); - template Vec2 (const Vec2 &v); - - const Vec2 & operator = (const Vec2 &v); - - - //---------------------- - // Compatibility with Sb - //---------------------- - - template - void setValue (S a, S b); - - template - void setValue (const Vec2 &v); - - template - void getValue (S &a, S &b) const; - - template - void getValue (Vec2 &v) const; - - T * getValue (); - const T * getValue () const; - - - //--------- - // Equality - //--------- - - template - bool operator == (const Vec2 &v) const; - - template - bool operator != (const Vec2 &v) const; - - - //----------------------------------------------------------------------- - // Compare two vectors and test if they are "approximately equal": - // - // equalWithAbsError (v, e) - // - // Returns true if the coefficients of this and v are the same with - // an absolute error of no more than e, i.e., for all i - // - // abs (this[i] - v[i]) <= e - // - // equalWithRelError (v, e) - // - // Returns true if the coefficients of this and v are the same with - // a relative error of no more than e, i.e., for all i - // - // abs (this[i] - v[i]) <= e * abs (this[i]) - //----------------------------------------------------------------------- - - bool equalWithAbsError (const Vec2 &v, T e) const; - bool equalWithRelError (const Vec2 &v, T e) const; - - //------------ - // Dot product - //------------ - - T dot (const Vec2 &v) const; - T operator ^ (const Vec2 &v) const; - - - //------------------------------------------------ - // Right-handed cross product, i.e. z component of - // Vec3 (this->x, this->y, 0) % Vec3 (v.x, v.y, 0) - //------------------------------------------------ - - T cross (const Vec2 &v) const; - T operator % (const Vec2 &v) const; - - - //------------------------ - // Component-wise addition - //------------------------ - - const Vec2 & operator += (const Vec2 &v); - Vec2 operator + (const Vec2 &v) const; - - - //--------------------------- - // Component-wise subtraction - //--------------------------- - - const Vec2 & operator -= (const Vec2 &v); - Vec2 operator - (const Vec2 &v) const; - - - //------------------------------------ - // Component-wise multiplication by -1 - //------------------------------------ - - Vec2 operator - () const; - const Vec2 & negate (); - - - //------------------------------ - // Component-wise multiplication - //------------------------------ - - const Vec2 & operator *= (const Vec2 &v); - const Vec2 & operator *= (T a); - Vec2 operator * (const Vec2 &v) const; - Vec2 operator * (T a) const; - - - //------------------------ - // Component-wise division - //------------------------ - - const Vec2 & operator /= (const Vec2 &v); - const Vec2 & operator /= (T a); - Vec2 operator / (const Vec2 &v) const; - Vec2 operator / (T a) const; - - - //---------------------------------------------------------------- - // Length and normalization: If v.length() is 0.0, v.normalize() - // and v.normalized() produce a null vector; v.normalizeExc() and - // v.normalizedExc() throw a NullVecExc. - // v.normalizeNonNull() and v.normalizedNonNull() are slightly - // faster than the other normalization routines, but if v.length() - // is 0.0, the result is undefined. - //---------------------------------------------------------------- - - T length () const; - T length2 () const; - - const Vec2 & normalize (); // modifies *this - const Vec2 & normalizeExc (); - const Vec2 & normalizeNonNull (); - - Vec2 normalized () const; // does not modify *this - Vec2 normalizedExc () const; - Vec2 normalizedNonNull () const; - - - //-------------------------------------------------------- - // Number of dimensions, i.e. number of elements in a Vec2 - //-------------------------------------------------------- - - static unsigned int dimensions() {return 2;} - - - //------------------------------------------------- - // Limitations of type T (see also class limits) - //------------------------------------------------- - - static T baseTypeMin() {return limits::min();} - static T baseTypeMax() {return limits::max();} - static T baseTypeSmallest() {return limits::smallest();} - static T baseTypeEpsilon() {return limits::epsilon();} - - - //-------------------------------------------------------------- - // Base type -- in templates, which accept a parameter, V, which - // could be either a Vec2, a Vec3, or a Vec4 you can - // refer to T as V::BaseType - //-------------------------------------------------------------- - - typedef T BaseType; - - private: - - T lengthTiny () const; -}; - - -template class Vec3 -{ - public: - - //------------------- - // Access to elements - //------------------- - - T x, y, z; - - T & operator [] (int i); - const T & operator [] (int i) const; - - - //------------- - // Constructors - //------------- - - Vec3 (); // no initialization - explicit Vec3 (T a); // (a a a) - Vec3 (T a, T b, T c); // (a b c) - - - //--------------------------------- - // Copy constructors and assignment - //--------------------------------- - - Vec3 (const Vec3 &v); - template Vec3 (const Vec3 &v); - - const Vec3 & operator = (const Vec3 &v); - - - //--------------------------------------------------------- - // Vec4 to Vec3 conversion, divides x, y and z by w: - // - // The one-argument conversion function divides by w even - // if w is zero. The result depends on how the environment - // handles floating-point exceptions. - // - // The two-argument version thows an InfPointExc exception - // if w is zero or if division by w would overflow. - //--------------------------------------------------------- - - template explicit Vec3 (const Vec4 &v); - template explicit Vec3 (const Vec4 &v, InfException); - - - //---------------------- - // Compatibility with Sb - //---------------------- - - template - void setValue (S a, S b, S c); - - template - void setValue (const Vec3 &v); - - template - void getValue (S &a, S &b, S &c) const; - - template - void getValue (Vec3 &v) const; - - T * getValue(); - const T * getValue() const; - - - //--------- - // Equality - //--------- - - template - bool operator == (const Vec3 &v) const; - - template - bool operator != (const Vec3 &v) const; - - //----------------------------------------------------------------------- - // Compare two vectors and test if they are "approximately equal": - // - // equalWithAbsError (v, e) - // - // Returns true if the coefficients of this and v are the same with - // an absolute error of no more than e, i.e., for all i - // - // abs (this[i] - v[i]) <= e - // - // equalWithRelError (v, e) - // - // Returns true if the coefficients of this and v are the same with - // a relative error of no more than e, i.e., for all i - // - // abs (this[i] - v[i]) <= e * abs (this[i]) - //----------------------------------------------------------------------- - - bool equalWithAbsError (const Vec3 &v, T e) const; - bool equalWithRelError (const Vec3 &v, T e) const; - - //------------ - // Dot product - //------------ - - T dot (const Vec3 &v) const; - T operator ^ (const Vec3 &v) const; - - - //--------------------------- - // Right-handed cross product - //--------------------------- - - Vec3 cross (const Vec3 &v) const; - const Vec3 & operator %= (const Vec3 &v); - Vec3 operator % (const Vec3 &v) const; - - - //------------------------ - // Component-wise addition - //------------------------ - - const Vec3 & operator += (const Vec3 &v); - Vec3 operator + (const Vec3 &v) const; - - - //--------------------------- - // Component-wise subtraction - //--------------------------- - - const Vec3 & operator -= (const Vec3 &v); - Vec3 operator - (const Vec3 &v) const; - - - //------------------------------------ - // Component-wise multiplication by -1 - //------------------------------------ - - Vec3 operator - () const; - const Vec3 & negate (); - - - //------------------------------ - // Component-wise multiplication - //------------------------------ - - const Vec3 & operator *= (const Vec3 &v); - const Vec3 & operator *= (T a); - Vec3 operator * (const Vec3 &v) const; - Vec3 operator * (T a) const; - - - //------------------------ - // Component-wise division - //------------------------ - - const Vec3 & operator /= (const Vec3 &v); - const Vec3 & operator /= (T a); - Vec3 operator / (const Vec3 &v) const; - Vec3 operator / (T a) const; - - - //---------------------------------------------------------------- - // Length and normalization: If v.length() is 0.0, v.normalize() - // and v.normalized() produce a null vector; v.normalizeExc() and - // v.normalizedExc() throw a NullVecExc. - // v.normalizeNonNull() and v.normalizedNonNull() are slightly - // faster than the other normalization routines, but if v.length() - // is 0.0, the result is undefined. - //---------------------------------------------------------------- - - T length () const; - T length2 () const; - - const Vec3 & normalize (); // modifies *this - const Vec3 & normalizeExc (); - const Vec3 & normalizeNonNull (); - - Vec3 normalized () const; // does not modify *this - Vec3 normalizedExc () const; - Vec3 normalizedNonNull () const; - - - //-------------------------------------------------------- - // Number of dimensions, i.e. number of elements in a Vec3 - //-------------------------------------------------------- - - static unsigned int dimensions() {return 3;} - - - //------------------------------------------------- - // Limitations of type T (see also class limits) - //------------------------------------------------- - - static T baseTypeMin() {return limits::min();} - static T baseTypeMax() {return limits::max();} - static T baseTypeSmallest() {return limits::smallest();} - static T baseTypeEpsilon() {return limits::epsilon();} - - - //-------------------------------------------------------------- - // Base type -- in templates, which accept a parameter, V, which - // could be either a Vec2, a Vec3, or a Vec4 you can - // refer to T as V::BaseType - //-------------------------------------------------------------- - - typedef T BaseType; - - private: - - T lengthTiny () const; -}; - - - -template class Vec4 -{ - public: - - //------------------- - // Access to elements - //------------------- - - T x, y, z, w; - - T & operator [] (int i); - const T & operator [] (int i) const; - - - //------------- - // Constructors - //------------- - - Vec4 (); // no initialization - explicit Vec4 (T a); // (a a a a) - Vec4 (T a, T b, T c, T d); // (a b c d) - - - //--------------------------------- - // Copy constructors and assignment - //--------------------------------- - - Vec4 (const Vec4 &v); - template Vec4 (const Vec4 &v); - - const Vec4 & operator = (const Vec4 &v); - - - //------------------------------------- - // Vec3 to Vec4 conversion, sets w to 1 - //------------------------------------- - - template explicit Vec4 (const Vec3 &v); - - - //--------- - // Equality - //--------- - - template - bool operator == (const Vec4 &v) const; - - template - bool operator != (const Vec4 &v) const; - - - //----------------------------------------------------------------------- - // Compare two vectors and test if they are "approximately equal": - // - // equalWithAbsError (v, e) - // - // Returns true if the coefficients of this and v are the same with - // an absolute error of no more than e, i.e., for all i - // - // abs (this[i] - v[i]) <= e - // - // equalWithRelError (v, e) - // - // Returns true if the coefficients of this and v are the same with - // a relative error of no more than e, i.e., for all i - // - // abs (this[i] - v[i]) <= e * abs (this[i]) - //----------------------------------------------------------------------- - - bool equalWithAbsError (const Vec4 &v, T e) const; - bool equalWithRelError (const Vec4 &v, T e) const; - - - //------------ - // Dot product - //------------ - - T dot (const Vec4 &v) const; - T operator ^ (const Vec4 &v) const; - - - //----------------------------------- - // Cross product is not defined in 4D - //----------------------------------- - - //------------------------ - // Component-wise addition - //------------------------ - - const Vec4 & operator += (const Vec4 &v); - Vec4 operator + (const Vec4 &v) const; - - - //--------------------------- - // Component-wise subtraction - //--------------------------- - - const Vec4 & operator -= (const Vec4 &v); - Vec4 operator - (const Vec4 &v) const; - - - //------------------------------------ - // Component-wise multiplication by -1 - //------------------------------------ - - Vec4 operator - () const; - const Vec4 & negate (); - - - //------------------------------ - // Component-wise multiplication - //------------------------------ - - const Vec4 & operator *= (const Vec4 &v); - const Vec4 & operator *= (T a); - Vec4 operator * (const Vec4 &v) const; - Vec4 operator * (T a) const; - - - //------------------------ - // Component-wise division - //------------------------ - - const Vec4 & operator /= (const Vec4 &v); - const Vec4 & operator /= (T a); - Vec4 operator / (const Vec4 &v) const; - Vec4 operator / (T a) const; - - - //---------------------------------------------------------------- - // Length and normalization: If v.length() is 0.0, v.normalize() - // and v.normalized() produce a null vector; v.normalizeExc() and - // v.normalizedExc() throw a NullVecExc. - // v.normalizeNonNull() and v.normalizedNonNull() are slightly - // faster than the other normalization routines, but if v.length() - // is 0.0, the result is undefined. - //---------------------------------------------------------------- - - T length () const; - T length2 () const; - - const Vec4 & normalize (); // modifies *this - const Vec4 & normalizeExc (); - const Vec4 & normalizeNonNull (); - - Vec4 normalized () const; // does not modify *this - Vec4 normalizedExc () const; - Vec4 normalizedNonNull () const; - - - //-------------------------------------------------------- - // Number of dimensions, i.e. number of elements in a Vec4 - //-------------------------------------------------------- - - static unsigned int dimensions() {return 4;} - - - //------------------------------------------------- - // Limitations of type T (see also class limits) - //------------------------------------------------- - - static T baseTypeMin() {return limits::min();} - static T baseTypeMax() {return limits::max();} - static T baseTypeSmallest() {return limits::smallest();} - static T baseTypeEpsilon() {return limits::epsilon();} - - - //-------------------------------------------------------------- - // Base type -- in templates, which accept a parameter, V, which - // could be either a Vec2, a Vec3, or a Vec4 you can - // refer to T as V::BaseType - //-------------------------------------------------------------- - - typedef T BaseType; - - private: - - T lengthTiny () const; -}; - - -//-------------- -// Stream output -//-------------- - -template -std::ostream & operator << (std::ostream &s, const Vec2 &v); - -template -std::ostream & operator << (std::ostream &s, const Vec3 &v); - -template -std::ostream & operator << (std::ostream &s, const Vec4 &v); - -//---------------------------------------------------- -// Reverse multiplication: S * Vec2 and S * Vec3 -//---------------------------------------------------- - -template Vec2 operator * (T a, const Vec2 &v); -template Vec3 operator * (T a, const Vec3 &v); -template Vec4 operator * (T a, const Vec4 &v); - - -//------------------------- -// Typedefs for convenience -//------------------------- - -typedef Vec2 V2s; -typedef Vec2 V2i; -typedef Vec2 V2f; -typedef Vec2 V2d; -typedef Vec3 V3s; -typedef Vec3 V3i; -typedef Vec3 V3f; -typedef Vec3 V3d; -typedef Vec4 V4s; -typedef Vec4 V4i; -typedef Vec4 V4f; -typedef Vec4 V4d; - - -//------------------------------------------- -// Specializations for VecN, VecN -//------------------------------------------- - -// Vec2 - -template <> short -Vec2::length () const; - -template <> const Vec2 & -Vec2::normalize (); - -template <> const Vec2 & -Vec2::normalizeExc (); - -template <> const Vec2 & -Vec2::normalizeNonNull (); - -template <> Vec2 -Vec2::normalized () const; - -template <> Vec2 -Vec2::normalizedExc () const; - -template <> Vec2 -Vec2::normalizedNonNull () const; - - -// Vec2 - -template <> int -Vec2::length () const; - -template <> const Vec2 & -Vec2::normalize (); - -template <> const Vec2 & -Vec2::normalizeExc (); - -template <> const Vec2 & -Vec2::normalizeNonNull (); - -template <> Vec2 -Vec2::normalized () const; - -template <> Vec2 -Vec2::normalizedExc () const; - -template <> Vec2 -Vec2::normalizedNonNull () const; - - -// Vec3 - -template <> short -Vec3::length () const; - -template <> const Vec3 & -Vec3::normalize (); - -template <> const Vec3 & -Vec3::normalizeExc (); - -template <> const Vec3 & -Vec3::normalizeNonNull (); - -template <> Vec3 -Vec3::normalized () const; - -template <> Vec3 -Vec3::normalizedExc () const; - -template <> Vec3 -Vec3::normalizedNonNull () const; - - -// Vec3 - -template <> int -Vec3::length () const; - -template <> const Vec3 & -Vec3::normalize (); - -template <> const Vec3 & -Vec3::normalizeExc (); - -template <> const Vec3 & -Vec3::normalizeNonNull (); - -template <> Vec3 -Vec3::normalized () const; - -template <> Vec3 -Vec3::normalizedExc () const; - -template <> Vec3 -Vec3::normalizedNonNull () const; - -// Vec4 - -template <> short -Vec4::length () const; - -template <> const Vec4 & -Vec4::normalize (); - -template <> const Vec4 & -Vec4::normalizeExc (); - -template <> const Vec4 & -Vec4::normalizeNonNull (); - -template <> Vec4 -Vec4::normalized () const; - -template <> Vec4 -Vec4::normalizedExc () const; - -template <> Vec4 -Vec4::normalizedNonNull () const; - - -// Vec4 - -template <> int -Vec4::length () const; - -template <> const Vec4 & -Vec4::normalize (); - -template <> const Vec4 & -Vec4::normalizeExc (); - -template <> const Vec4 & -Vec4::normalizeNonNull (); - -template <> Vec4 -Vec4::normalized () const; - -template <> Vec4 -Vec4::normalizedExc () const; - -template <> Vec4 -Vec4::normalizedNonNull () const; - - -//------------------------ -// Implementation of Vec2: -//------------------------ - -template -inline T & -Vec2::operator [] (int i) -{ - return (&x)[i]; -} - -template -inline const T & -Vec2::operator [] (int i) const -{ - return (&x)[i]; -} - -template -inline -Vec2::Vec2 () -{ - // empty -} - -template -inline -Vec2::Vec2 (T a) -{ - x = y = a; -} - -template -inline -Vec2::Vec2 (T a, T b) -{ - x = a; - y = b; -} - -template -inline -Vec2::Vec2 (const Vec2 &v) -{ - x = v.x; - y = v.y; -} - -template -template -inline -Vec2::Vec2 (const Vec2 &v) -{ - x = T (v.x); - y = T (v.y); -} - -template -inline const Vec2 & -Vec2::operator = (const Vec2 &v) -{ - x = v.x; - y = v.y; - return *this; -} - -template -template -inline void -Vec2::setValue (S a, S b) -{ - x = T (a); - y = T (b); -} - -template -template -inline void -Vec2::setValue (const Vec2 &v) -{ - x = T (v.x); - y = T (v.y); -} - -template -template -inline void -Vec2::getValue (S &a, S &b) const -{ - a = S (x); - b = S (y); -} - -template -template -inline void -Vec2::getValue (Vec2 &v) const -{ - v.x = S (x); - v.y = S (y); -} - -template -inline T * -Vec2::getValue() -{ - return (T *) &x; -} - -template -inline const T * -Vec2::getValue() const -{ - return (const T *) &x; -} - -template -template -inline bool -Vec2::operator == (const Vec2 &v) const -{ - return x == v.x && y == v.y; -} - -template -template -inline bool -Vec2::operator != (const Vec2 &v) const -{ - return x != v.x || y != v.y; -} - -template -bool -Vec2::equalWithAbsError (const Vec2 &v, T e) const -{ - for (int i = 0; i < 2; i++) - if (!IMATH_INTERNAL_NAMESPACE::equalWithAbsError ((*this)[i], v[i], e)) - return false; - - return true; -} - -template -bool -Vec2::equalWithRelError (const Vec2 &v, T e) const -{ - for (int i = 0; i < 2; i++) - if (!IMATH_INTERNAL_NAMESPACE::equalWithRelError ((*this)[i], v[i], e)) - return false; - - return true; -} - -template -inline T -Vec2::dot (const Vec2 &v) const -{ - return x * v.x + y * v.y; -} - -template -inline T -Vec2::operator ^ (const Vec2 &v) const -{ - return dot (v); -} - -template -inline T -Vec2::cross (const Vec2 &v) const -{ - return x * v.y - y * v.x; - -} - -template -inline T -Vec2::operator % (const Vec2 &v) const -{ - return x * v.y - y * v.x; -} - -template -inline const Vec2 & -Vec2::operator += (const Vec2 &v) -{ - x += v.x; - y += v.y; - return *this; -} - -template -inline Vec2 -Vec2::operator + (const Vec2 &v) const -{ - return Vec2 (x + v.x, y + v.y); -} - -template -inline const Vec2 & -Vec2::operator -= (const Vec2 &v) -{ - x -= v.x; - y -= v.y; - return *this; -} - -template -inline Vec2 -Vec2::operator - (const Vec2 &v) const -{ - return Vec2 (x - v.x, y - v.y); -} - -template -inline Vec2 -Vec2::operator - () const -{ - return Vec2 (-x, -y); -} - -template -inline const Vec2 & -Vec2::negate () -{ - x = -x; - y = -y; - return *this; -} - -template -inline const Vec2 & -Vec2::operator *= (const Vec2 &v) -{ - x *= v.x; - y *= v.y; - return *this; -} - -template -inline const Vec2 & -Vec2::operator *= (T a) -{ - x *= a; - y *= a; - return *this; -} - -template -inline Vec2 -Vec2::operator * (const Vec2 &v) const -{ - return Vec2 (x * v.x, y * v.y); -} - -template -inline Vec2 -Vec2::operator * (T a) const -{ - return Vec2 (x * a, y * a); -} - -template -inline const Vec2 & -Vec2::operator /= (const Vec2 &v) -{ - x /= v.x; - y /= v.y; - return *this; -} - -template -inline const Vec2 & -Vec2::operator /= (T a) -{ - x /= a; - y /= a; - return *this; -} - -template -inline Vec2 -Vec2::operator / (const Vec2 &v) const -{ - return Vec2 (x / v.x, y / v.y); -} - -template -inline Vec2 -Vec2::operator / (T a) const -{ - return Vec2 (x / a, y / a); -} - -template -T -Vec2::lengthTiny () const -{ - T absX = (x >= T (0))? x: -x; - T absY = (y >= T (0))? y: -y; - - T max = absX; - - if (max < absY) - max = absY; - - if (max == T (0)) - return T (0); - - // - // Do not replace the divisions by max with multiplications by 1/max. - // Computing 1/max can overflow but the divisions below will always - // produce results less than or equal to 1. - // - - absX /= max; - absY /= max; - - return max * Math::sqrt (absX * absX + absY * absY); -} - -template -inline T -Vec2::length () const -{ - T length2 = dot (*this); - - if (length2 < T (2) * limits::smallest()) - return lengthTiny(); - - return Math::sqrt (length2); -} - -template -inline T -Vec2::length2 () const -{ - return dot (*this); -} - -template -const Vec2 & -Vec2::normalize () -{ - T l = length(); - - if (l != T (0)) - { - // - // Do not replace the divisions by l with multiplications by 1/l. - // Computing 1/l can overflow but the divisions below will always - // produce results less than or equal to 1. - // - - x /= l; - y /= l; - } - - return *this; -} - -template -const Vec2 & -Vec2::normalizeExc () -{ - T l = length(); - - if (l == T (0)) - throw NullVecExc ("Cannot normalize null vector."); - - x /= l; - y /= l; - return *this; -} - -template -inline -const Vec2 & -Vec2::normalizeNonNull () -{ - T l = length(); - x /= l; - y /= l; - return *this; -} - -template -Vec2 -Vec2::normalized () const -{ - T l = length(); - - if (l == T (0)) - return Vec2 (T (0)); - - return Vec2 (x / l, y / l); -} - -template -Vec2 -Vec2::normalizedExc () const -{ - T l = length(); - - if (l == T (0)) - throw NullVecExc ("Cannot normalize null vector."); - - return Vec2 (x / l, y / l); -} - -template -inline -Vec2 -Vec2::normalizedNonNull () const -{ - T l = length(); - return Vec2 (x / l, y / l); -} - - -//----------------------- -// Implementation of Vec3 -//----------------------- - -template -inline T & -Vec3::operator [] (int i) -{ - return (&x)[i]; -} - -template -inline const T & -Vec3::operator [] (int i) const -{ - return (&x)[i]; -} - -template -inline -Vec3::Vec3 () -{ - // empty -} - -template -inline -Vec3::Vec3 (T a) -{ - x = y = z = a; -} - -template -inline -Vec3::Vec3 (T a, T b, T c) -{ - x = a; - y = b; - z = c; -} - -template -inline -Vec3::Vec3 (const Vec3 &v) -{ - x = v.x; - y = v.y; - z = v.z; -} - -template -template -inline -Vec3::Vec3 (const Vec3 &v) -{ - x = T (v.x); - y = T (v.y); - z = T (v.z); -} - -template -inline const Vec3 & -Vec3::operator = (const Vec3 &v) -{ - x = v.x; - y = v.y; - z = v.z; - return *this; -} - -template -template -inline -Vec3::Vec3 (const Vec4 &v) -{ - x = T (v.x / v.w); - y = T (v.y / v.w); - z = T (v.z / v.w); -} - -template -template -Vec3::Vec3 (const Vec4 &v, InfException) -{ - T vx = T (v.x); - T vy = T (v.y); - T vz = T (v.z); - T vw = T (v.w); - - T absW = (vw >= T (0))? vw: -vw; - - if (absW < 1) - { - T m = baseTypeMax() * absW; - - if (vx <= -m || vx >= m || vy <= -m || vy >= m || vz <= -m || vz >= m) - throw InfPointExc ("Cannot normalize point at infinity."); - } - - x = vx / vw; - y = vy / vw; - z = vz / vw; -} - -template -template -inline void -Vec3::setValue (S a, S b, S c) -{ - x = T (a); - y = T (b); - z = T (c); -} - -template -template -inline void -Vec3::setValue (const Vec3 &v) -{ - x = T (v.x); - y = T (v.y); - z = T (v.z); -} - -template -template -inline void -Vec3::getValue (S &a, S &b, S &c) const -{ - a = S (x); - b = S (y); - c = S (z); -} - -template -template -inline void -Vec3::getValue (Vec3 &v) const -{ - v.x = S (x); - v.y = S (y); - v.z = S (z); -} - -template -inline T * -Vec3::getValue() -{ - return (T *) &x; -} - -template -inline const T * -Vec3::getValue() const -{ - return (const T *) &x; -} - -template -template -inline bool -Vec3::operator == (const Vec3 &v) const -{ - return x == v.x && y == v.y && z == v.z; -} - -template -template -inline bool -Vec3::operator != (const Vec3 &v) const -{ - return x != v.x || y != v.y || z != v.z; -} - -template -bool -Vec3::equalWithAbsError (const Vec3 &v, T e) const -{ - for (int i = 0; i < 3; i++) - if (!IMATH_INTERNAL_NAMESPACE::equalWithAbsError ((*this)[i], v[i], e)) - return false; - - return true; -} - -template -bool -Vec3::equalWithRelError (const Vec3 &v, T e) const -{ - for (int i = 0; i < 3; i++) - if (!IMATH_INTERNAL_NAMESPACE::equalWithRelError ((*this)[i], v[i], e)) - return false; - - return true; -} - -template -inline T -Vec3::dot (const Vec3 &v) const -{ - return x * v.x + y * v.y + z * v.z; -} - -template -inline T -Vec3::operator ^ (const Vec3 &v) const -{ - return dot (v); -} - -template -inline Vec3 -Vec3::cross (const Vec3 &v) const -{ - return Vec3 (y * v.z - z * v.y, - z * v.x - x * v.z, - x * v.y - y * v.x); -} - -template -inline const Vec3 & -Vec3::operator %= (const Vec3 &v) -{ - T a = y * v.z - z * v.y; - T b = z * v.x - x * v.z; - T c = x * v.y - y * v.x; - x = a; - y = b; - z = c; - return *this; -} - -template -inline Vec3 -Vec3::operator % (const Vec3 &v) const -{ - return Vec3 (y * v.z - z * v.y, - z * v.x - x * v.z, - x * v.y - y * v.x); -} - -template -inline const Vec3 & -Vec3::operator += (const Vec3 &v) -{ - x += v.x; - y += v.y; - z += v.z; - return *this; -} - -template -inline Vec3 -Vec3::operator + (const Vec3 &v) const -{ - return Vec3 (x + v.x, y + v.y, z + v.z); -} - -template -inline const Vec3 & -Vec3::operator -= (const Vec3 &v) -{ - x -= v.x; - y -= v.y; - z -= v.z; - return *this; -} - -template -inline Vec3 -Vec3::operator - (const Vec3 &v) const -{ - return Vec3 (x - v.x, y - v.y, z - v.z); -} - -template -inline Vec3 -Vec3::operator - () const -{ - return Vec3 (-x, -y, -z); -} - -template -inline const Vec3 & -Vec3::negate () -{ - x = -x; - y = -y; - z = -z; - return *this; -} - -template -inline const Vec3 & -Vec3::operator *= (const Vec3 &v) -{ - x *= v.x; - y *= v.y; - z *= v.z; - return *this; -} - -template -inline const Vec3 & -Vec3::operator *= (T a) -{ - x *= a; - y *= a; - z *= a; - return *this; -} - -template -inline Vec3 -Vec3::operator * (const Vec3 &v) const -{ - return Vec3 (x * v.x, y * v.y, z * v.z); -} - -template -inline Vec3 -Vec3::operator * (T a) const -{ - return Vec3 (x * a, y * a, z * a); -} - -template -inline const Vec3 & -Vec3::operator /= (const Vec3 &v) -{ - x /= v.x; - y /= v.y; - z /= v.z; - return *this; -} - -template -inline const Vec3 & -Vec3::operator /= (T a) -{ - x /= a; - y /= a; - z /= a; - return *this; -} - -template -inline Vec3 -Vec3::operator / (const Vec3 &v) const -{ - return Vec3 (x / v.x, y / v.y, z / v.z); -} - -template -inline Vec3 -Vec3::operator / (T a) const -{ - return Vec3 (x / a, y / a, z / a); -} - -template -T -Vec3::lengthTiny () const -{ - T absX = (x >= T (0))? x: -x; - T absY = (y >= T (0))? y: -y; - T absZ = (z >= T (0))? z: -z; - - T max = absX; - - if (max < absY) - max = absY; - - if (max < absZ) - max = absZ; - - if (max == T (0)) - return T (0); - - // - // Do not replace the divisions by max with multiplications by 1/max. - // Computing 1/max can overflow but the divisions below will always - // produce results less than or equal to 1. - // - - absX /= max; - absY /= max; - absZ /= max; - - return max * Math::sqrt (absX * absX + absY * absY + absZ * absZ); -} - -template -inline T -Vec3::length () const -{ - T length2 = dot (*this); - - if (length2 < T (2) * limits::smallest()) - return lengthTiny(); - - return Math::sqrt (length2); -} - -template -inline T -Vec3::length2 () const -{ - return dot (*this); -} - -template -const Vec3 & -Vec3::normalize () -{ - T l = length(); - - if (l != T (0)) - { - // - // Do not replace the divisions by l with multiplications by 1/l. - // Computing 1/l can overflow but the divisions below will always - // produce results less than or equal to 1. - // - - x /= l; - y /= l; - z /= l; - } - - return *this; -} - -template -const Vec3 & -Vec3::normalizeExc () -{ - T l = length(); - - if (l == T (0)) - throw NullVecExc ("Cannot normalize null vector."); - - x /= l; - y /= l; - z /= l; - return *this; -} - -template -inline -const Vec3 & -Vec3::normalizeNonNull () -{ - T l = length(); - x /= l; - y /= l; - z /= l; - return *this; -} - -template -Vec3 -Vec3::normalized () const -{ - T l = length(); - - if (l == T (0)) - return Vec3 (T (0)); - - return Vec3 (x / l, y / l, z / l); -} - -template -Vec3 -Vec3::normalizedExc () const -{ - T l = length(); - - if (l == T (0)) - throw NullVecExc ("Cannot normalize null vector."); - - return Vec3 (x / l, y / l, z / l); -} - -template -inline -Vec3 -Vec3::normalizedNonNull () const -{ - T l = length(); - return Vec3 (x / l, y / l, z / l); -} - - -//----------------------- -// Implementation of Vec4 -//----------------------- - -template -inline T & -Vec4::operator [] (int i) -{ - return (&x)[i]; -} - -template -inline const T & -Vec4::operator [] (int i) const -{ - return (&x)[i]; -} - -template -inline -Vec4::Vec4 () -{ - // empty -} - -template -inline -Vec4::Vec4 (T a) -{ - x = y = z = w = a; -} - -template -inline -Vec4::Vec4 (T a, T b, T c, T d) -{ - x = a; - y = b; - z = c; - w = d; -} - -template -inline -Vec4::Vec4 (const Vec4 &v) -{ - x = v.x; - y = v.y; - z = v.z; - w = v.w; -} - -template -template -inline -Vec4::Vec4 (const Vec4 &v) -{ - x = T (v.x); - y = T (v.y); - z = T (v.z); - w = T (v.w); -} - -template -inline const Vec4 & -Vec4::operator = (const Vec4 &v) -{ - x = v.x; - y = v.y; - z = v.z; - w = v.w; - return *this; -} - -template -template -inline -Vec4::Vec4 (const Vec3 &v) -{ - x = T (v.x); - y = T (v.y); - z = T (v.z); - w = T (1); -} - -template -template -inline bool -Vec4::operator == (const Vec4 &v) const -{ - return x == v.x && y == v.y && z == v.z && w == v.w; -} - -template -template -inline bool -Vec4::operator != (const Vec4 &v) const -{ - return x != v.x || y != v.y || z != v.z || w != v.w; -} - -template -bool -Vec4::equalWithAbsError (const Vec4 &v, T e) const -{ - for (int i = 0; i < 4; i++) - if (!IMATH_INTERNAL_NAMESPACE::equalWithAbsError ((*this)[i], v[i], e)) - return false; - - return true; -} - -template -bool -Vec4::equalWithRelError (const Vec4 &v, T e) const -{ - for (int i = 0; i < 4; i++) - if (!IMATH_INTERNAL_NAMESPACE::equalWithRelError ((*this)[i], v[i], e)) - return false; - - return true; -} - -template -inline T -Vec4::dot (const Vec4 &v) const -{ - return x * v.x + y * v.y + z * v.z + w * v.w; -} - -template -inline T -Vec4::operator ^ (const Vec4 &v) const -{ - return dot (v); -} - - -template -inline const Vec4 & -Vec4::operator += (const Vec4 &v) -{ - x += v.x; - y += v.y; - z += v.z; - w += v.w; - return *this; -} - -template -inline Vec4 -Vec4::operator + (const Vec4 &v) const -{ - return Vec4 (x + v.x, y + v.y, z + v.z, w + v.w); -} - -template -inline const Vec4 & -Vec4::operator -= (const Vec4 &v) -{ - x -= v.x; - y -= v.y; - z -= v.z; - w -= v.w; - return *this; -} - -template -inline Vec4 -Vec4::operator - (const Vec4 &v) const -{ - return Vec4 (x - v.x, y - v.y, z - v.z, w - v.w); -} - -template -inline Vec4 -Vec4::operator - () const -{ - return Vec4 (-x, -y, -z, -w); -} - -template -inline const Vec4 & -Vec4::negate () -{ - x = -x; - y = -y; - z = -z; - w = -w; - return *this; -} - -template -inline const Vec4 & -Vec4::operator *= (const Vec4 &v) -{ - x *= v.x; - y *= v.y; - z *= v.z; - w *= v.w; - return *this; -} - -template -inline const Vec4 & -Vec4::operator *= (T a) -{ - x *= a; - y *= a; - z *= a; - w *= a; - return *this; -} - -template -inline Vec4 -Vec4::operator * (const Vec4 &v) const -{ - return Vec4 (x * v.x, y * v.y, z * v.z, w * v.w); -} - -template -inline Vec4 -Vec4::operator * (T a) const -{ - return Vec4 (x * a, y * a, z * a, w * a); -} - -template -inline const Vec4 & -Vec4::operator /= (const Vec4 &v) -{ - x /= v.x; - y /= v.y; - z /= v.z; - w /= v.w; - return *this; -} - -template -inline const Vec4 & -Vec4::operator /= (T a) -{ - x /= a; - y /= a; - z /= a; - w /= a; - return *this; -} - -template -inline Vec4 -Vec4::operator / (const Vec4 &v) const -{ - return Vec4 (x / v.x, y / v.y, z / v.z, w / v.w); -} - -template -inline Vec4 -Vec4::operator / (T a) const -{ - return Vec4 (x / a, y / a, z / a, w / a); -} - -template -T -Vec4::lengthTiny () const -{ - T absX = (x >= T (0))? x: -x; - T absY = (y >= T (0))? y: -y; - T absZ = (z >= T (0))? z: -z; - T absW = (w >= T (0))? w: -w; - - T max = absX; - - if (max < absY) - max = absY; - - if (max < absZ) - max = absZ; - - if (max < absW) - max = absW; - - if (max == T (0)) - return T (0); - - // - // Do not replace the divisions by max with multiplications by 1/max. - // Computing 1/max can overflow but the divisions below will always - // produce results less than or equal to 1. - // - - absX /= max; - absY /= max; - absZ /= max; - absW /= max; - - return max * - Math::sqrt (absX * absX + absY * absY + absZ * absZ + absW * absW); -} - -template -inline T -Vec4::length () const -{ - T length2 = dot (*this); - - if (length2 < T (2) * limits::smallest()) - return lengthTiny(); - - return Math::sqrt (length2); -} - -template -inline T -Vec4::length2 () const -{ - return dot (*this); -} - -template -const Vec4 & -Vec4::normalize () -{ - T l = length(); - - if (l != T (0)) - { - // - // Do not replace the divisions by l with multiplications by 1/l. - // Computing 1/l can overflow but the divisions below will always - // produce results less than or equal to 1. - // - - x /= l; - y /= l; - z /= l; - w /= l; - } - - return *this; -} - -template -const Vec4 & -Vec4::normalizeExc () -{ - T l = length(); - - if (l == T (0)) - throw NullVecExc ("Cannot normalize null vector."); - - x /= l; - y /= l; - z /= l; - w /= l; - return *this; -} - -template -inline -const Vec4 & -Vec4::normalizeNonNull () -{ - T l = length(); - x /= l; - y /= l; - z /= l; - w /= l; - return *this; -} - -template -Vec4 -Vec4::normalized () const -{ - T l = length(); - - if (l == T (0)) - return Vec4 (T (0)); - - return Vec4 (x / l, y / l, z / l, w / l); -} - -template -Vec4 -Vec4::normalizedExc () const -{ - T l = length(); - - if (l == T (0)) - throw NullVecExc ("Cannot normalize null vector."); - - return Vec4 (x / l, y / l, z / l, w / l); -} - -template -inline -Vec4 -Vec4::normalizedNonNull () const -{ - T l = length(); - return Vec4 (x / l, y / l, z / l, w / l); -} - -//----------------------------- -// Stream output implementation -//----------------------------- - -template -std::ostream & -operator << (std::ostream &s, const Vec2 &v) -{ - return s << '(' << v.x << ' ' << v.y << ')'; -} - -template -std::ostream & -operator << (std::ostream &s, const Vec3 &v) -{ - return s << '(' << v.x << ' ' << v.y << ' ' << v.z << ')'; -} - -template -std::ostream & -operator << (std::ostream &s, const Vec4 &v) -{ - return s << '(' << v.x << ' ' << v.y << ' ' << v.z << ' ' << v.w << ')'; -} - - -//----------------------------------------- -// Implementation of reverse multiplication -//----------------------------------------- - -template -inline Vec2 -operator * (T a, const Vec2 &v) -{ - return Vec2 (a * v.x, a * v.y); -} - -template -inline Vec3 -operator * (T a, const Vec3 &v) -{ - return Vec3 (a * v.x, a * v.y, a * v.z); -} - -template -inline Vec4 -operator * (T a, const Vec4 &v) -{ - return Vec4 (a * v.x, a * v.y, a * v.z, a * v.w); -} - - -#if (defined _WIN32 || defined _WIN64) && defined _MSC_VER -#pragma warning(pop) -#endif - -IMATH_INTERNAL_NAMESPACE_HEADER_EXIT - -#endif // INCLUDED_IMATHVEC_H diff --git a/3rdparty/openexr/Imath/ImathVecAlgo.h b/3rdparty/openexr/Imath/ImathVecAlgo.h deleted file mode 100644 index 28bab6bdd0..0000000000 --- a/3rdparty/openexr/Imath/ImathVecAlgo.h +++ /dev/null @@ -1,147 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// -// Copyright (c) 2002-2012, Industrial Light & Magic, a division of Lucas -// Digital Ltd. LLC -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Industrial Light & Magic nor the names of -// its contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/////////////////////////////////////////////////////////////////////////// - - - -#ifndef INCLUDED_IMATHVECALGO_H -#define INCLUDED_IMATHVECALGO_H - -//------------------------------------------------------------------------- -// -// This file contains algorithms applied to or in conjunction -// with points (Imath::Vec2 and Imath::Vec3). -// The assumption made is that these functions are called much -// less often than the basic point functions or these functions -// require more support classes. -// -//------------------------------------------------------------------------- - -#include "ImathVec.h" -#include "ImathLimits.h" -#include "ImathNamespace.h" - -IMATH_INTERNAL_NAMESPACE_HEADER_ENTER - - -//----------------------------------------------------------------- -// Find the projection of vector t onto vector s (Vec2, Vec3, Vec4) -//----------------------------------------------------------------- - -template Vec project (const Vec &s, const Vec &t); - - -//------------------------------------------------ -// Find a vector that is perpendicular to s and -// in the same plane as s and t (Vec2, Vec3, Vec4) -//------------------------------------------------ - -template Vec orthogonal (const Vec &s, const Vec &t); - - -//----------------------------------------------- -// Find the direction of a ray s after reflection -// off a plane with normal t (Vec2, Vec3, Vec4) -//----------------------------------------------- - -template Vec reflect (const Vec &s, const Vec &t); - - -//-------------------------------------------------------------------- -// Find the vertex of triangle (v0, v1, v2) that is closest to point p -// (Vec2, Vec3, Vec4) -//-------------------------------------------------------------------- - -template Vec closestVertex (const Vec &v0, - const Vec &v1, - const Vec &v2, - const Vec &p); - -//--------------- -// Implementation -//--------------- - -template -Vec -project (const Vec &s, const Vec &t) -{ - Vec sNormalized = s.normalized(); - return sNormalized * (sNormalized ^ t); -} - -template -Vec -orthogonal (const Vec &s, const Vec &t) -{ - return t - project (s, t); -} - -template -Vec -reflect (const Vec &s, const Vec &t) -{ - return s - typename Vec::BaseType(2) * (s - project(t, s)); -} - -template -Vec -closestVertex(const Vec &v0, - const Vec &v1, - const Vec &v2, - const Vec &p) -{ - Vec nearest = v0; - typename Vec::BaseType neardot = (v0 - p).length2(); - typename Vec::BaseType tmp = (v1 - p).length2(); - - if (tmp < neardot) - { - neardot = tmp; - nearest = v1; - } - - tmp = (v2 - p).length2(); - - if (tmp < neardot) - { - neardot = tmp; - nearest = v2; - } - - return nearest; -} - - -IMATH_INTERNAL_NAMESPACE_HEADER_EXIT - -#endif // INCLUDED_IMATHVECALGO_H diff --git a/3rdparty/openexr/LICENSE b/3rdparty/openexr/LICENSE deleted file mode 100644 index 6372750d3c..0000000000 --- a/3rdparty/openexr/LICENSE +++ /dev/null @@ -1,34 +0,0 @@ -Copyright (c) 2006, Industrial Light & Magic, a division of Lucasfilm -Entertainment Company Ltd. Portions contributed and copyright held by -others as indicated. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above - copyright notice, this list of conditions and the following - disclaimer. - - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided with - the distribution. - - * Neither the name of Industrial Light & Magic nor the names of - any other contributors to this software may be used to endorse or - promote products derived from this software without specific prior - written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS -IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR -CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - diff --git a/3rdparty/openexr/OpenEXRConfig.h.cmakein b/3rdparty/openexr/OpenEXRConfig.h.cmakein deleted file mode 100644 index 33b2cc9981..0000000000 --- a/3rdparty/openexr/OpenEXRConfig.h.cmakein +++ /dev/null @@ -1,72 +0,0 @@ -// -// Define and set to 1 if the target system supports a proc filesystem -// compatible with the Linux kernel's proc filesystem. Note that this -// is only used by a program in the IlmImfTest test suite, it's not -// used by any OpenEXR library or application code. -// - -#cmakedefine OPENEXR_IMF_HAVE_LINUX_PROCFS - -// -// Define and set to 1 if the target system is a Darwin-based system -// (e.g., OS X). -// - -#cmakedefine OPENEXR_IMF_HAVE_DARWIN - -// -// Define and set to 1 if the target system has a complete -// implementation, specifically if it supports the std::right -// formatter. -// - -#cmakedefine OPENEXR_IMF_HAVE_COMPLETE_IOMANIP - -// -// Define and set to 1 if the target system has support for large -// stack sizes. -// - -#cmakedefine OPENEXR_IMF_HAVE_LARGE_STACK - -// -// Define if we can support GCC style inline asm with AVX instructions -// - -#cmakedefine OPENEXR_IMF_HAVE_GCC_INLINE_ASM_AVX - -// -// Define if we can use sysconf(_SC_NPROCESSORS_ONLN) to get CPU count -// - -#cmakedefine OPENEXR_IMF_HAVE_SYSCONF_NPROCESSORS_ONLN - -// -// Current internal library namepace name -// -#define OPENEXR_IMF_INTERNAL_NAMESPACE_CUSTOM @OPENEXR_IMF_INTERNAL_NAMESPACE_CUSTOM@ -#define OPENEXR_IMF_INTERNAL_NAMESPACE @OPENEXR_IMF_INTERNAL_NAMESPACE@ - -// -// Current public user namepace name -// - -#define OPENEXR_IMF_NAMESPACE_CUSTOM @OPENEXR_IMF_NAMESPACE_CUSTOM@ -#define OPENEXR_IMF_NAMESPACE @OPENEXR_IMF_NAMESPACE@ - -// -// Version string for runtime access -// - -#define OPENEXR_VERSION_STRING @OPENEXR_VERSION_STRING@ -#define OPENEXR_PACKAGE_STRING @OPENEXR_PACKAGE_STRING@ - -#define OPENEXR_VERSION_MAJOR @OPENEXR_VERSION_MAJOR@ -#define OPENEXR_VERSION_MINOR @OPENEXR_VERSION_MINOR@ -#define OPENEXR_VERSION_PATCH @OPENEXR_VERSION_PATCH@ - -// Version as a single hex number, e.g. 0x01000300 == 1.0.3 -#define OPENEXR_VERSION_HEX ((OPENEXR_VERSION_MAJOR << 24) | \ - (OPENEXR_VERSION_MINOR << 16) | \ - (OPENEXR_VERSION_PATCH << 8)) - diff --git a/3rdparty/readme.txt b/3rdparty/readme.txt index 394a74ae25..0b31b26557 100644 --- a/3rdparty/readme.txt +++ b/3rdparty/readme.txt @@ -65,15 +65,6 @@ jasper JasPer is a collection of software https://github.com/jasper-software/jasper.git for details and links to source code ------------------------------------------------------------------------------------ -openexr OpenEXR is a high dynamic-range (HDR) image file format developed - by Industrial Light & Magic for use in computer imaging applications. - - Copyright (c) 2006, Industrial Light & Magic, a division of Lucasfilm - Entertainment Company Ltd. Portions contributed and copyright held by - others as indicated. All rights reserved. - - The project homepage: http://www.openexr.com ------------------------------------------------------------------------------------- ffmpeg FFmpeg is a complete, cross-platform solution to record, convert and stream audio and video. It includes libavcodec - the leading audio/video codec library, and also libavformat, libavutils and diff --git a/CMakeLists.txt b/CMakeLists.txt index c7651086ec..2d30ecd818 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -143,7 +143,6 @@ OCV_OPTION(BUILD_OPENJPEG "Build OpenJPEG from source" (WIN32 OCV_OPTION(BUILD_JASPER "Build libjasper from source" (WIN32 OR ANDROID OR APPLE OR OPENCV_FORCE_3RDPARTY_BUILD) ) OCV_OPTION(BUILD_JPEG "Build libjpeg from source" (WIN32 OR ANDROID OR APPLE OR OPENCV_FORCE_3RDPARTY_BUILD) ) OCV_OPTION(BUILD_PNG "Build libpng from source" (WIN32 OR ANDROID OR APPLE OR OPENCV_FORCE_3RDPARTY_BUILD) ) -OCV_OPTION(BUILD_OPENEXR "Build openexr from source" (OPENCV_FORCE_3RDPARTY_BUILD) ) OCV_OPTION(BUILD_WEBP "Build WebP from source" (((WIN32 OR ANDROID OR APPLE) AND NOT WINRT) OR OPENCV_FORCE_3RDPARTY_BUILD) ) OCV_OPTION(BUILD_TBB "Download and build TBB from source" (ANDROID OR OPENCV_FORCE_3RDPARTY_BUILD) ) OCV_OPTION(BUILD_IPP_IW "Build IPP IW from source" (NOT MINGW OR OPENCV_FORCE_3RDPARTY_BUILD) IF (X86_64 OR X86) AND NOT WINRT ) @@ -250,7 +249,7 @@ OCV_OPTION(WITH_JPEGXL "Include JPEG XL support" OFF OCV_OPTION(WITH_WEBP "Include WebP support" ON VISIBLE_IF NOT WINRT VERIFY HAVE_WEBP) -OCV_OPTION(WITH_OPENEXR "Include ILM support via OpenEXR" ((WIN32 OR ANDROID OR APPLE) OR BUILD_OPENEXR) OR NOT CMAKE_CROSSCOMPILING +OCV_OPTION(WITH_OPENEXR "Include ILM support via OpenEXR" (WIN32 OR ANDROID OR APPLE) OR NOT CMAKE_CROSSCOMPILING VISIBLE_IF NOT APPLE_FRAMEWORK AND NOT WINRT VERIFY HAVE_OPENEXR) OCV_OPTION(WITH_OPENGL "Include OpenGL support" OFF @@ -1486,7 +1485,7 @@ endif() if(WITH_OPENEXR OR HAVE_OPENEXR) if(HAVE_OPENEXR) - status(" OpenEXR:" OPENEXR_FOUND THEN "${OPENEXR_LIBRARIES} (ver ${OPENEXR_VERSION})" ELSE "build (ver ${OPENEXR_VERSION})") + status(" OpenEXR:" OPENEXR_FOUND THEN "${OPENEXR_LIBRARIES} (ver ${OPENEXR_VERSION})" ELSE "NO") else() status(" OpenEXR:" "NO") endif() diff --git a/cmake/OpenCVFindLibsGrfmt.cmake b/cmake/OpenCVFindLibsGrfmt.cmake index 5fb60c7fae..60eeb99e14 100644 --- a/cmake/OpenCVFindLibsGrfmt.cmake +++ b/cmake/OpenCVFindLibsGrfmt.cmake @@ -345,23 +345,13 @@ endif() # --- OpenEXR (optional) --- if(WITH_OPENEXR) ocv_clear_vars(HAVE_OPENEXR) - if(NOT BUILD_OPENEXR) - ocv_clear_internal_cache_vars(OPENEXR_INCLUDE_PATHS OPENEXR_LIBRARIES OPENEXR_ILMIMF_LIBRARY OPENEXR_VERSION) - include("${OpenCV_SOURCE_DIR}/cmake/OpenCVFindOpenEXR.cmake") - endif() + ocv_clear_internal_cache_vars(OPENEXR_INCLUDE_PATHS OPENEXR_LIBRARIES OPENEXR_ILMIMF_LIBRARY OPENEXR_VERSION) + include("${OpenCV_SOURCE_DIR}/cmake/OpenCVFindOpenEXR.cmake") if(OPENEXR_FOUND) set(HAVE_OPENEXR YES) else() - ocv_clear_vars(OPENEXR_INCLUDE_PATHS OPENEXR_LIBRARIES OPENEXR_ILMIMF_LIBRARY OPENEXR_VERSION) - - set(OPENEXR_LIBRARIES IlmImf) - add_subdirectory("${OpenCV_SOURCE_DIR}/3rdparty/openexr") - if(OPENEXR_VERSION) # check via TARGET doesn't work - set(BUILD_OPENEXR ON) - set(HAVE_OPENEXR YES) - set(BUILD_OPENEXR ON) - endif() + set(HAVE_OPENEXR NO) endif() endif() diff --git a/doc/tutorials/introduction/config_reference/config_reference.markdown b/doc/tutorials/introduction/config_reference/config_reference.markdown index 8cc4712ec6..d2a1ab1adb 100644 --- a/doc/tutorials/introduction/config_reference/config_reference.markdown +++ b/doc/tutorials/introduction/config_reference/config_reference.markdown @@ -309,13 +309,14 @@ Following formats can be read by OpenCV without help of any third-party library: | [WEBP](https://en.wikipedia.org/wiki/WebP) | `WITH_WEBP` | _ON_ | `BUILD_WEBP` | | [JPEG2000 with OpenJPEG](https://en.wikipedia.org/wiki/OpenJPEG) | `WITH_OPENJPEG` | _ON_ | `BUILD_OPENJPEG` | | [JPEG2000 with JasPer](https://en.wikipedia.org/wiki/JasPer) | `WITH_JASPER` | _ON_ (see note) | `BUILD_JASPER` | -| [EXR](https://en.wikipedia.org/wiki/OpenEXR) | `WITH_OPENEXR` | _ON_ | `BUILD_OPENEXR` | +| [EXR](https://en.wikipedia.org/wiki/OpenEXR) | `WITH_OPENEXR` | _ON_ | Not Supported (see note) | | [JPEG XL](https://en.wikipedia.org/wiki/JPEG_XL) | `WITH_JPEGXL` | _ON_ | Not supported. (see note) | All libraries required to read images in these formats are included into OpenCV and will be built automatically if not found at the configuration stage. Corresponding `BUILD_*` options will force building and using own libraries, they are enabled by default on some platforms, e.g. Windows. @note OpenJPEG have higher priority than JasPer which is deprecated. In order to use JasPer, OpenJPEG must be disabled. @note (JPEG XL) OpenCV doesn't contain libjxl source code, so `BUILD_JPEGXL` is not supported. +@note (EXR) OpenCV 5 doesn't contain OpenEXR source code, so `BUILD_OPENEXR` is not supported. ### GDAL integration diff --git a/doc/tutorials/introduction/env_reference/env_reference.markdown b/doc/tutorials/introduction/env_reference/env_reference.markdown index c902a95c46..831b3eab23 100644 --- a/doc/tutorials/introduction/env_reference/env_reference.markdown +++ b/doc/tutorials/introduction/env_reference/env_reference.markdown @@ -327,5 +327,6 @@ Some external dependencies can be detached into a dynamic library, which will be | OPENCV_IO_MAX_IMAGE_WIDTH | num | 1 << 20, limit input image size to avoid large memory allocations | | | OPENCV_IO_MAX_IMAGE_HEIGHT | num | 1 << 20 | | | OPENCV_IO_MAX_IMAGE_PIXELS | num | 1 << 30 | | -| OPENCV_IO_ENABLE_OPENEXR | bool | true (set build option OPENCV_IO_FORCE_OPENEXR or use external OpenEXR), false (otherwise) | enable OpenEXR backend | | OPENCV_IO_ENABLE_JASPER | bool | true (set build option OPENCV_IO_FORCE_JASPER), false (otherwise) | enable Jasper backend | + +@note OPENCV_IO_ENABLE_OPENEXR is deprecated because bundled OpenEXR library had been removed. diff --git a/modules/imgcodecs/CMakeLists.txt b/modules/imgcodecs/CMakeLists.txt index 7f97dde391..a061cf1889 100644 --- a/modules/imgcodecs/CMakeLists.txt +++ b/modules/imgcodecs/CMakeLists.txt @@ -80,13 +80,6 @@ endif() if(HAVE_OPENEXR) include_directories(SYSTEM ${OPENEXR_INCLUDE_PATHS}) list(APPEND GRFMT_LIBS ${OPENEXR_LIBRARIES}) - if(OPENCV_IO_FORCE_OPENEXR - OR NOT BUILD_OPENEXR # external OpenEXR versions are not disabled - ) - add_definitions(-DOPENCV_IMGCODECS_USE_OPENEXR=1) - else() - message(STATUS "imgcodecs: OpenEXR codec is disabled in runtime. Details: https://github.com/opencv/opencv/issues/21326") - endif() endif() if(HAVE_PNG OR HAVE_TIFF OR HAVE_OPENEXR OR HAVE_SPNG OR HAVE_JPEGXL) @@ -202,9 +195,6 @@ ocv_add_accuracy_tests() if(TARGET opencv_test_imgcodecs AND HAVE_JASPER AND "$ENV{OPENCV_IO_ENABLE_JASPER}") ocv_target_compile_definitions(opencv_test_imgcodecs PRIVATE OPENCV_IMGCODECS_ENABLE_JASPER_TESTS=1) endif() -if(TARGET opencv_test_imgcodecs AND HAVE_OPENEXR AND "$ENV{OPENCV_IO_ENABLE_OPENEXR}") - ocv_target_compile_definitions(opencv_test_imgcodecs PRIVATE OPENCV_IMGCODECS_ENABLE_OPENEXR_TESTS=1) -endif() if(TARGET opencv_test_imgcodecs AND ((HAVE_PNG AND NOT (PNG_VERSION_STRING VERSION_LESS "1.6.31")) OR HAVE_SPNG)) # details: https://github.com/glennrp/libpng/commit/68cb0aaee3de6371b81a4613476d9b33e43e95b1 ocv_target_compile_definitions(opencv_test_imgcodecs PRIVATE OPENCV_IMGCODECS_PNG_WITH_EXIF=1) diff --git a/modules/imgcodecs/src/grfmt_exr.cpp b/modules/imgcodecs/src/grfmt_exr.cpp index 0ffd0d2618..dc13988f68 100644 --- a/modules/imgcodecs/src/grfmt_exr.cpp +++ b/modules/imgcodecs/src/grfmt_exr.cpp @@ -83,27 +83,6 @@ namespace cv { -static bool isOpenEXREnabled() -{ - static const bool PARAM_ENABLE_OPENEXR = utils::getConfigurationParameterBool("OPENCV_IO_ENABLE_OPENEXR", -#ifdef OPENCV_IMGCODECS_USE_OPENEXR - true -#else - false -#endif - ); - return PARAM_ENABLE_OPENEXR; -} -static void initOpenEXR() -{ - if (!isOpenEXREnabled()) - { - const char* message = "imgcodecs: OpenEXR codec is disabled. You can enable it via 'OPENCV_IO_ENABLE_OPENEXR' option. Refer for details and cautions here: https://github.com/opencv/opencv/issues/21326"; - CV_LOG_WARNING(NULL, message); - CV_Error(Error::StsNotImplemented, message); - } -} - /////////////////////// ExrDecoder /////////////////// ExrDecoder::ExrDecoder() @@ -692,7 +671,6 @@ void ExrDecoder::RGBToGray( float *in, float *out ) ImageDecoder ExrDecoder::newDecoder() const { - initOpenEXR(); return makePtr(); } @@ -869,7 +847,6 @@ bool ExrEncoder::write( const Mat& img, const std::vector& params ) ImageEncoder ExrEncoder::newEncoder() const { - initOpenEXR(); return makePtr(); } diff --git a/modules/imgcodecs/test/test_exr.impl.hpp b/modules/imgcodecs/test/test_exr.cpp similarity index 99% rename from modules/imgcodecs/test/test_exr.impl.hpp rename to modules/imgcodecs/test/test_exr.cpp index 6b4ac0b8d1..e441d3c4ff 100644 --- a/modules/imgcodecs/test/test_exr.impl.hpp +++ b/modules/imgcodecs/test/test_exr.cpp @@ -1,11 +1,14 @@ // This file is part of OpenCV project. // It is subject to the license terms in the LICENSE file found in the top-level directory // of this distribution and at http://opencv.org/license.html +#include "test_precomp.hpp" //#define GENERATE_DATA namespace opencv_test { namespace { +#ifdef HAVE_OPENEXR + size_t getFileSize(const string& filename) { std::ifstream ifs(filename.c_str(), std::ios::in | std::ios::binary); @@ -341,5 +344,6 @@ TEST(Imgcodecs_EXR, imwrite_regression_26207_extra) remove(filename.c_str()); } +#endif // HAVE_OPENEXR }} // namespace diff --git a/modules/imgcodecs/test/test_grfmt.cpp b/modules/imgcodecs/test/test_grfmt.cpp index 947e560c81..996ad4a6be 100644 --- a/modules/imgcodecs/test/test_grfmt.cpp +++ b/modules/imgcodecs/test/test_grfmt.cpp @@ -507,7 +507,3 @@ TEST(Imgcodecs, imdecode_user_buffer) } }} // namespace - -#if defined(HAVE_OPENEXR) && defined(OPENCV_IMGCODECS_ENABLE_OPENEXR_TESTS) -#include "test_exr.impl.hpp" -#endif