Color Management, Stage 1: Initial OpenColorIO library integration
authorSergey Sharybin <sergey.vfx@gmail.com>
Sat, 15 Sep 2012 10:03:17 +0000 (10:03 +0000)
committerSergey Sharybin <sergey.vfx@gmail.com>
Sat, 15 Sep 2012 10:03:17 +0000 (10:03 +0000)
This commit integrates support of OpenColorIO library into build systems.

It also contains C-API for OpenColorIO library which could be used by Blender.

CMake has got find rules familiar to OpenImageIO's one which makes it easier
for build system to find needed libraries and includes. Scons only could use
explicitly defined paths to libraries and includes.

C-API would be compiled and Blender would be linked against C-API and OpenColorIO
but it wouldn't affect on Blender behavior at all.

OpenColorIO could be disabled by setting up WITH_OCIO to Off in CMake and
setting WITH_BF_OCIO in Scons.

38 files changed:
CMakeLists.txt
SConstruct
build_files/cmake/Modules/FindOpenColorIO.cmake [new file with mode: 0644]
build_files/cmake/macros.cmake
build_files/scons/config/darwin-config.py
build_files/scons/config/linux-config.py
build_files/scons/config/win32-mingw-config.py
build_files/scons/config/win32-vc-config.py
build_files/scons/config/win64-mingw-config.py
build_files/scons/config/win64-vc-config.py
build_files/scons/tools/Blender.py
build_files/scons/tools/btools.py
intern/CMakeLists.txt
intern/SConscript
intern/opencolorio/CMakeLists.txt [new file with mode: 0644]
intern/opencolorio/SConscript [new file with mode: 0644]
intern/opencolorio/ocio_capi.cpp [new file with mode: 0644]
intern/opencolorio/ocio_capi.h [new file with mode: 0644]
intern/opencolorio/ocio_capi_stub.cpp [new file with mode: 0644]
release/datafiles/colormanagement/config.ocio [new file with mode: 0644]
release/datafiles/colormanagement/luts/aces_to_xyz.spimtx [new file with mode: 0644]
release/datafiles/colormanagement/luts/adx_adx10_to_cdd.spimtx [new file with mode: 0644]
release/datafiles/colormanagement/luts/adx_cdd_to_cid.spimtx [new file with mode: 0644]
release/datafiles/colormanagement/luts/adx_cid_to_rle.spi1d [new file with mode: 0644]
release/datafiles/colormanagement/luts/adx_exp_to_aces.spimtx [new file with mode: 0644]
release/datafiles/colormanagement/luts/colorworks_filmlg_to_p3.3dl [new file with mode: 0644]
release/datafiles/colormanagement/luts/dci_xyz.spi1d [new file with mode: 0644]
release/datafiles/colormanagement/luts/lg10.spi1d [new file with mode: 0644]
release/datafiles/colormanagement/luts/rec709.spi1d [new file with mode: 0644]
release/datafiles/colormanagement/luts/rec709_to_aces.spimtx [new file with mode: 0644]
release/datafiles/colormanagement/luts/rrt_ut33_dcdm.spi3d [new file with mode: 0644]
release/datafiles/colormanagement/luts/rrt_ut33_p3dci.spi3d [new file with mode: 0644]
release/datafiles/colormanagement/luts/rrt_ut33_rec709.spi3d [new file with mode: 0644]
release/datafiles/colormanagement/luts/rrt_ut33_sRGB.spi3d [new file with mode: 0644]
release/datafiles/colormanagement/luts/spi_ocio_srgb_test.spi3d [new file with mode: 0644]
release/datafiles/colormanagement/luts/srgb.spi1d [new file with mode: 0644]
release/datafiles/colormanagement/luts/srgb_to_xyz.spimtx [new file with mode: 0644]
release/datafiles/colormanagement/luts/vd16.spi1d [new file with mode: 0644]

index 07d08c79f9ff1d563fa08474200ee90746f247bd..83e094b437532a4a5176f7e2315adbf3bbc10133 100644 (file)
@@ -131,6 +131,7 @@ option(WITH_FFTW3         "Enable FFTW3 support (Used for smoke and audio effect
 option(WITH_BULLET        "Enable Bullet (Physics Engine)" ON)
 option(WITH_GAMEENGINE    "Enable Game Engine" ON)
 option(WITH_PLAYER        "Build Player" OFF)
+option(WITH_OPENCOLORIO   "Enable OpenColorIO color management" ON)
 option(WITH_COMPOSITOR    "Enable the tile based nodal compositor" ON)
 option(WITH_COMPOSITOR_LEGACY "Enable legacy compositor" OFF)
 
@@ -672,6 +673,24 @@ if(UNIX AND NOT APPLE)
                endif()
        endif()
 
+       if(WITH_OPENCOLORIO)
+               # use lib dir if available and nothing else specified
+               if(LIBDIR AND NOT OPENCOLORIO_ROOT_DIR)
+                       set(OPENCOLORIO_ROOT_DIR ${LIBDIR}/ocio)
+               endif()
+
+               find_package(OpenColorIO)
+
+               set(OPENCOLORIO_LIBRARIES ${OPENCOLORIO_LIBRARIES})
+               set(OPENCOLORIO_LIBPATH)  # TODO, remove and reference the absolute path everywhere
+               set(OPENCOLORIO_DEFINITIONS)
+
+               if(NOT OPENCOLORIO_FOUND)
+                       set(WITH_OPENCOLORIO OFF)
+                       message(STATUS "OpenColorIO not found")
+               endif()
+       endif()
+
        if(WITH_CYCLES_OSL)
                set(CYCLES_OSL ${LIBDIR}/osl CACHE PATH "Path to OpenShadingLanguage installation")
        
@@ -1065,6 +1084,14 @@ elseif(WIN32)
                        set(OPENIMAGEIO_DEFINITIONS)
                endif()
 
+               if(WITH_OPENCOLORIO)
+                       set(OPENCOLORIO ${LIBDIR}/opencolorio)
+                       set(OPENCOLORIO_INCLUDE_DIRS ${OPENCOLORIO}/include)
+                       set(OPENCOLORIO_LIBRARIES OpenColorIO)
+                       set_lib_path(OPENCOLORIO_LIBPATH "opencolorio/lib")
+                       set(OPENCOLORIO_DEFINITIONS)
+               endif()
+
                set(PLATFORM_LINKFLAGS "/SUBSYSTEM:CONSOLE /STACK:2097152 /INCREMENTAL:NO /NODEFAULTLIB:msvcrt.lib /NODEFAULTLIB:msvcmrt.lib /NODEFAULTLIB:msvcurt.lib /NODEFAULTLIB:msvcrtd.lib")
 
                # MSVC only, Mingw doesnt need
@@ -1236,6 +1263,14 @@ elseif(WIN32)
                        set(OPENIMAGEIO_DEFINITIONS)
                endif()
                
+               if(WITH_OPENCOLORIO)
+                       set(OPENCOLORIO ${LIBDIR}/opencolorio)
+                       set(OPENCOLORIO_INCLUDE_DIRS ${OPENCOLORIO}/include)
+                       set(OPENCOLORIO_LIBRARIES OpenColorIO)
+                       set(OPENCOLORIO_LIBPATH ${OPENCOLORIO}/lib)
+                       set(OPENCOLORIO_DEFINITIONS)
+               endif()
+
                set(PLATFORM_LINKFLAGS "-Xlinker --stack=2097152")
 
                ## DISABLE - causes linking errors 
@@ -1482,6 +1517,14 @@ elseif(APPLE)
                set(OPENIMAGEIO_DEFINITIONS "-DOIIO_STATIC_BUILD")
        endif()
 
+       if(WITH_OPENCOLORIO)
+               set(OPENCOLORIO ${LIBDIR}/opencolorio)
+               set(OPENCOLORIO_INCLUDE_DIRS ${OPENCOLORIO}/include)
+               set(OPENCOLORIO_LIBRARIES OpenColorIO tinyxml yaml-cpp)
+               set(OPENCOLORIO_LIBPATH ${OPENCOLORIO}/lib)
+               set(OPENCOLORIO_DEFINITIONS "-DOCIO_STATIC_BUILD")
+       endif()
+
        if(WITH_CYCLES_OSL)
                set(CYCLES_OSL ${LIBDIR}/osl CACHE PATH "Path to OpenShadingLanguage installation")
        
@@ -1885,6 +1928,7 @@ if(FIRST_RUN)
        info_cfg_option(WITH_INTERNATIONAL)
        info_cfg_option(WITH_INPUT_NDOF)
        info_cfg_option(WITH_CYCLES)
+       info_cfg_option(WITH_OPENCOLORIO)
 
        info_cfg_text("Compiler Options:")
        info_cfg_option(WITH_BUILDINFO)
index 7e6bcdf8747b33dfb730a38f594af17141f8b373..517f507ec61275efa40da7491b725e06082083fe 100644 (file)
@@ -719,6 +719,26 @@ if env['OURPLATFORM']!='darwin':
                     cubin_file = os.path.join(kernel_build_dir, "kernel_%s.cubin" % arch)
                     scriptinstall.append(env.Install(dir=dir,source=cubin_file))
 
+    if env['WITH_BF_OCIO']:
+        colormanagement = os.path.join('release', 'datafiles', 'colormanagement')
+
+        for dp, dn, df in os.walk(colormanagement):
+            if '.svn' in dn:
+                dn.remove('.svn')
+            if '_svn' in dn:
+                dn.remove('_svn')
+
+            dir = os.path.join(env['BF_INSTALLDIR'], VERSION, 'datafiles')
+            dir += os.sep + os.path.basename(colormanagement) + dp[len(colormanagement):]
+
+            source = [os.path.join(dp, f) for f in df if not f.endswith(".pyc")]
+
+            # To ensure empty dirs are created too
+            if len(source) == 0:
+                env.Execute(Mkdir(dir))
+
+            scriptinstall.append(env.Install(dir=dir,source=source))
+
     if env['WITH_BF_INTERNATIONAL']:
         internationalpaths=['release' + os.sep + 'datafiles']
 
@@ -851,6 +871,9 @@ if env['OURPLATFORM'] in ('win32-vc', 'win32-mingw', 'win64-vc', 'linuxcross'):
     if env['WITH_BF_OIIO'] and env['OURPLATFORM'] != 'win32-mingw':
         dllsources.append('${LCGDIR}/openimageio/bin/OpenImageIO.dll')
 
+    if env['WITH_BF_OCIO'] and env['OURPLATFORM'] != 'win32-mingw':
+        dllsources.append('${LCGDIR}/opencolorio/bin/OpenColorIO.dll')
+
     dllsources.append('#source/icons/blender.exe.manifest')
 
     windlls = env.Install(dir=env['BF_INSTALLDIR'], source = dllsources)
diff --git a/build_files/cmake/Modules/FindOpenColorIO.cmake b/build_files/cmake/Modules/FindOpenColorIO.cmake
new file mode 100644 (file)
index 0000000..79bc012
--- /dev/null
@@ -0,0 +1,85 @@
+# - Find OpenColorIO library
+# Find the native OpenColorIO includes and library
+# This module defines
+#  OPENCOLORIO_INCLUDE_DIRS, where to find OpenColorIO.h, Set when
+#                            OPENCOLORIO_INCLUDE_DIR is found.
+#  OPENCOLORIO_LIBRARIES, libraries to link against to use OpenColorIO.
+#  OPENCOLORIO_ROOT_DIR, The base directory to search for OpenColorIO.
+#                        This can also be an environment variable.
+#  OPENCOLORIO_FOUND, If false, do not try to use OpenColorIO.
+#
+# also defined, but not for general use are
+#  OPENCOLORIO_LIBRARY, where to find the OpenColorIO library.
+
+#=============================================================================
+# Copyright 2012 Blender Foundation.
+#
+# Distributed under the OSI-approved BSD License (the "License");
+# see accompanying file Copyright.txt for details.
+#
+# This software is distributed WITHOUT ANY WARRANTY; without even the
+# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# See the License for more information.
+#=============================================================================
+
+# If OPENCOLORIO_ROOT_DIR was defined in the environment, use it.
+IF(NOT OPENCOLORIO_ROOT_DIR AND NOT $ENV{OPENCOLORIO_ROOT_DIR} STREQUAL "")
+  SET(OPENCOLORIO_ROOT_DIR $ENV{OPENCOLORIO_ROOT_DIR})
+ENDIF()
+
+SET(_opencolorio_FIND_COMPONENTS
+  OpenColorIO
+  yaml-cpp
+  tinyxml
+)
+
+SET(_opencolorio_SEARCH_DIRS
+  ${OPENCOLORIO_ROOT_DIR}
+  /usr/local
+  /sw # Fink
+  /opt/local # DarwinPorts
+  /opt/csw # Blastwave
+)
+
+FIND_PATH(OPENCOLORIO_INCLUDE_DIR
+  NAMES
+    OpenColorIO/OpenColorIO.h
+  HINTS
+    ${_opencolorio_SEARCH_DIRS}
+  PATH_SUFFIXES
+    include
+)
+
+SET(_opencolorio_LIBRARIES)
+FOREACH(COMPONENT ${_opencolorio_FIND_COMPONENTS})
+  STRING(TOUPPER ${COMPONENT} UPPERCOMPONENT)
+
+  FIND_LIBRARY(OPENCOLORIO_${UPPERCOMPONENT}_LIBRARY
+    NAMES
+      ${COMPONENT}
+    HINTS
+      ${_opencolorio_SEARCH_DIRS}
+    PATH_SUFFIXES
+      lib64 lib
+    )
+  if(OPENCOLORIO_${UPPERCOMPONENT}_LIBRARY)
+    LIST(APPEND _opencolorio_LIBRARIES "${OPENCOLORIO_${UPPERCOMPONENT}_LIBRARY}")
+  endif()
+ENDFOREACH()
+
+# handle the QUIETLY and REQUIRED arguments and set OPENCOLORIO_FOUND to TRUE if 
+# all listed variables are TRUE
+INCLUDE(FindPackageHandleStandardArgs)
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(OpenColorIO DEFAULT_MSG
+    _opencolorio_LIBRARIES OPENCOLORIO_INCLUDE_DIR)
+
+IF(OPENCOLORIO_FOUND)
+  SET(OPENCOLORIO_LIBRARIES ${_opencolorio_LIBRARIES})
+  SET(OPENCOLORIO_INCLUDE_DIRS ${OPENCOLORIO_INCLUDE_DIR})
+ENDIF(OPENCOLORIO_FOUND)
+
+MARK_AS_ADVANCED(
+  OPENCOLORIO_INCLUDE_DIR
+  OPENCOLORIO_LIBRARY
+)
+
index 0d4a19705a21d1ab16116bf518601dc71443b987..43cfb31c03c48732af1dbc14499d954396667bd6 100644 (file)
@@ -218,6 +218,9 @@ macro(SETUP_LIBDIRS)
        if(WITH_OPENIMAGEIO)
                link_directories(${OPENIMAGEIO_LIBPATH})
        endif()
+       if(WITH_OPENCOLORIO)
+               link_directories(${OPENCOLORIO_LIBPATH})
+       endif()
        if(WITH_IMAGE_OPENJPEG AND WITH_SYSTEM_OPENJPEG)
                link_directories(${OPENJPEG_LIBPATH})
        endif()
@@ -313,6 +316,9 @@ macro(setup_liblinks
        if(WITH_OPENIMAGEIO)
                target_link_libraries(${target} ${OPENIMAGEIO_LIBRARIES})
        endif()
+       if(WITH_OPENCOLORIO)
+               target_link_libraries(${target} ${OPENCOLORIO_LIBRARIES})
+       endif()
        if(WITH_BOOST)
                target_link_libraries(${target} ${BOOST_LIBRARIES})
        endif()
index 1ce9416d5c403148956aaeae0ad2d26f23098220..afab4131de841053cad1ec39875f968b99ebf5f6 100644 (file)
@@ -287,6 +287,12 @@ BF_OIIO_INC = BF_OIIO + '/include'
 BF_OIIO_LIB = 'OpenImageIO'
 BF_OIIO_LIBPATH = BF_OIIO + '/lib'
 
+WITH_BF_OCIO = True
+BF_OCIO = LIBDIR + '/opencolorio'
+BF_OCIO_INC = BF_OCIO + '/include'
+BF_OCIO_LIB = 'OpenColorIO tinyxml yaml-cpp'
+BF_OCIO_LIBPATH = BF_OCIO + '/lib'
+
 WITH_BF_BOOST = True
 BF_BOOST = LIBDIR + '/boost'
 BF_BOOST_INC = BF_BOOST + '/include'
index e97c3b8b9d7825cb41221c80537161fa56b077b7..5c16baa2ee8d87f6abb54682e5e653fd7eef4c2d 100644 (file)
@@ -215,6 +215,16 @@ BF_OIIO_INC = BF_OIIO + '/include'
 BF_OIIO_LIB = 'OpenImageIO'
 BF_OIIO_LIBPATH = BF_OIIO + '/lib'
 
+WITH_BF_OCIO = True
+WITH_BF_STATICOCIO = False
+BF_OCIO = LIBDIR + '/ocio'
+if not os.path.exists(LCGDIR + '/ocio'):
+    WITH_BF_OCIO = False
+    BF_OCIO = '/usr'
+BF_OCIO_INC = BF_OCIO + '/include'
+BF_OCIO_LIB = 'OpenColorIO yaml-cpp tinyxml'
+BF_OCIO_LIBPATH = BF_OCIO + '/lib'
+
 WITH_BF_BOOST = True
 WITH_BF_STATICBOOST = False
 BF_BOOST = LIBDIR + '/boost'
index d46aaca5a07e4a99407c3ba3ebcf35b3073e2543..95b2329f4266c09a7c0f5f8aa580a7d8d669ea73 100644 (file)
@@ -159,6 +159,12 @@ BF_OIIO_INC = BF_OIIO + '/include'
 BF_OIIO_LIB = 'OpenImageIO'
 BF_OIIO_LIBPATH = BF_OIIO + '/lib'
 
+WITH_BF_OCIO = False
+BF_OCIO = LIBDIR + '/opencolorio'
+BF_OCIO_INC = BF_OCIO + '/include'
+BF_OCIO_LIB = 'OpenColorIO'
+BF_OCIO_LIBPATH = BF_OCIO + '/lib'
+
 WITH_BF_BOOST = True
 BF_BOOST = LIBDIR + '/boost'
 BF_BOOST_INC = BF_BOOST + '/include'
index 452bbaaf54f9613e49c603f9616c291256b65b83..b77ff8e70e075def7a55cb746cebce91d182d5bb 100644 (file)
@@ -161,6 +161,12 @@ BF_OIIO_INC = '${BF_OIIO}/include'
 BF_OIIO_LIB = 'OpenImageIO'
 BF_OIIO_LIBPATH = '${BF_OIIO}/lib'
 
+WITH_BF_OCIO = True
+BF_OCIO = '${LIBDIR}/opencolorio'
+BF_OCIO_INC = '${BF_OCIO}/include'
+BF_OCIO_LIB = 'OpenColorIO'
+BF_OCIO_LIBPATH = '${BF_OCIO}/lib'
+
 WITH_BF_BOOST = True
 BF_BOOST = '${LIBDIR}/boost'
 BF_BOOST_INC = '${BF_BOOST}/include'
index 66ec65bb6ca9e7b5bff9df2cd5e1407e614a3d31..c2bf2df6d00836e5b14725ecafbdabdd306ea398 100644 (file)
@@ -159,6 +159,12 @@ BF_OIIO_INC = '${BF_OIIO}/include'
 BF_OIIO_LIB = 'OpenImageIO'
 BF_OIIO_LIBPATH = '${BF_OIIO}/lib'
 
+WITH_BF_OCIO = False
+BF_OCIO = LIBDIR + '/opencolorio'
+BF_OCIO_INC = '${BF_OCIO}/include'
+BF_OCIO_LIB = 'OpenColorIO'
+BF_OCIO_LIBPATH = '${BF_OCIO}/lib'
+
 WITH_BF_BOOST = True
 BF_BOOST = LIBDIR + '/boost'
 BF_BOOST_INC = BF_BOOST + '/include'
index b6a3c108cdb86736c8db4bf13a407d1d53735d12..4b719469c392a8e0e718807d38a4770df9bc65ed 100644 (file)
@@ -158,6 +158,13 @@ BF_OIIO_LIB = 'OpenImageIO'
 BF_OIIO_LIBPATH = '${BF_OIIO}/lib'
 BF_OIIO_LIBPATH = '${BF_OIIO}/lib'
 
+WITH_BF_OCIO = True
+BF_OCIO = '${LIBDIR}/opencolorio'
+BF_OCIO_INC = '${BF_OCIO}/include'
+BF_OCIO_LIB = 'OpenColorIO'
+BF_OCIO_LIBPATH = '${BF_OCIO}/lib'
+BF_OCIO_LIBPATH = '${BF_OCIO}/lib'
+
 WITH_BF_BOOST = True
 BF_BOOST = '${LIBDIR}/boost'
 BF_BOOST_INC = '${BF_BOOST}/include'
index 4ab020dc26a36bb11418f80c7bbc9fe23584937d..1e114a43ae0aff0381a2d5e4617df6f5ca0ad1d7 100644 (file)
@@ -204,6 +204,11 @@ def setup_staticlibs(lenv):
         if lenv['WITH_BF_STATICOIIO']:
             statlibs += Split(lenv['BF_OIIO_LIB_STATIC'])
 
+    if lenv['WITH_BF_OCIO']:
+        libincs += Split(lenv['BF_OCIO_LIBPATH'])
+        if lenv['WITH_BF_STATICOCIO']:
+            statlibs += Split(lenv['BF_OCIO_LIB_STATIC'])
+
     if lenv['WITH_BF_BOOST']:
         libincs += Split(lenv['BF_BOOST_LIBPATH'])
         if lenv['WITH_BF_STATICBOOST']:
@@ -252,6 +257,10 @@ def setup_syslibs(lenv):
         if not lenv['WITH_BF_STATICOIIO']:
             syslibs += Split(lenv['BF_OIIO_LIB'])
 
+    if lenv['WITH_BF_OCIO']:
+        if not lenv['WITH_BF_STATICOCIO']:
+            syslibs += Split(lenv['BF_OCIO_LIB'])
+
     if lenv['WITH_BF_OPENEXR'] and not lenv['WITH_BF_STATICOPENEXR']:
         syslibs += Split(lenv['BF_OPENEXR_LIB'])
     if lenv['WITH_BF_TIFF'] and not lenv['WITH_BF_STATICTIFF']:
@@ -584,6 +593,9 @@ def AppIt(target=None, source=None, env=None):
         commands.getoutput(cmd)
         cmd = 'cp -R %s/release/datafiles/fonts %s/%s.app/Contents/MacOS/%s/datafiles/'%(bldroot,installdir,binary,VERSION)
         commands.getoutput(cmd)
+        if env['WITH_BF_OCIO']:
+            cmd = 'cp -R %s/release/datafiles/colormanagement %s/%s.app/Contents/MacOS/%s/datafiles/'%(bldroot,installdir,binary,VERSION)
+            commands.getoutput(cmd)
         cmd = 'cp -R %s/release/scripts %s/%s.app/Contents/MacOS/%s/'%(bldroot,installdir,binary,VERSION)
         commands.getoutput(cmd)
 
index 2fa503f3f2622fcdfd555aa08b9f03d2a11b020d..633492ba0eeb6db871fa134946bf4590af0980e5 100644 (file)
@@ -163,6 +163,7 @@ def validate_arguments(args, bc):
             'WITH_BF_3DMOUSE', 'WITH_BF_STATIC3DMOUSE', 'BF_3DMOUSE', 'BF_3DMOUSE_INC', 'BF_3DMOUSE_LIB', 'BF_3DMOUSE_LIBPATH', 'BF_3DMOUSE_LIB_STATIC',
             'WITH_BF_CYCLES', 'WITH_BF_CYCLES_CUDA_BINARIES', 'BF_CYCLES_CUDA_NVCC', 'BF_CYCLES_CUDA_NVCC', 'WITH_BF_CYCLES_CUDA_THREADED_COMPILE',
             'WITH_BF_OIIO', 'WITH_BF_STATICOIIO', 'BF_OIIO', 'BF_OIIO_INC', 'BF_OIIO_LIB', 'BF_OIIO_LIB_STATIC', 'BF_OIIO_LIBPATH',
+            'WITH_BF_OCIO', 'WITH_BF_STATICOCIO', 'BF_OCIO', 'BF_OCIO_INC', 'BF_OCIO_LIB', 'BF_OCIO_LIB_STATIC', 'BF_OCIO_LIBPATH',
             'WITH_BF_BOOST', 'WITH_BF_STATICBOOST', 'BF_BOOST', 'BF_BOOST_INC', 'BF_BOOST_LIB', 'BF_BOOST_LIB_STATIC', 'BF_BOOST_LIBPATH',
             'WITH_BF_LIBMV'
             ]
@@ -575,6 +576,14 @@ def read_opts(env, cfg, args):
         ('BF_OIIO_LIBPATH', 'OIIO library path', ''),
         ('BF_OIIO_LIB_STATIC', 'OIIO static library', ''),
 
+        (BoolVariable('WITH_BF_OCIO', 'Build with OpenColorIO', False)),
+        (BoolVariable('WITH_BF_STATICOCIO', 'Staticly link to OpenColorIO', False)),
+        ('BF_OCIO', 'OCIO root path', ''),
+        ('BF_OCIO_INC', 'OCIO include path', ''),
+        ('BF_OCIO_LIB', 'OCIO library', ''),
+        ('BF_OCIO_LIBPATH', 'OCIO library path', ''),
+        ('BF_OCIO_LIB_STATIC', 'OCIO static library', ''),
+
         (BoolVariable('WITH_BF_BOOST', 'Build with Boost', False)),
         (BoolVariable('WITH_BF_STATICBOOST', 'Staticly link to boost', False)),
         ('BF_BOOST', 'Boost root path', ''),
index d520ffc87b4ec3fa9880232a22ca6b83f0717004..2551df6ba762ef3dd870c299a53814dbf89ce0f8 100644 (file)
@@ -28,6 +28,7 @@ add_subdirectory(ghost)
 add_subdirectory(guardedalloc)
 add_subdirectory(moto)
 add_subdirectory(memutil)
+add_subdirectory(opencolorio)
 add_subdirectory(opennl)
 add_subdirectory(mikktspace)
 add_subdirectory(raskter)
@@ -73,3 +74,4 @@ endif()
 if(WIN32)
        add_subdirectory(utfconv)
 endif()
+
index 53fc80b0317988560caabcd310f84287df410b80..3e40ef3870588a46d82ca6c8758f39336b747c12 100644 (file)
@@ -11,6 +11,7 @@ SConscript(['audaspace/SConscript',
             'decimation/SConscript',
             'iksolver/SConscript',
             'itasc/SConscript',
+            'opencolorio/SConscript',
             'opennl/SConscript',
             'mikktspace/SConscript',
             'smoke/SConscript',
@@ -30,3 +31,4 @@ if env['WITH_BF_BOOLEAN']:
 
 if env['OURPLATFORM'] in ('win32-vc', 'win32-mingw', 'win64-mingw', 'linuxcross', 'win64-vc'):
     SConscript(['utfconv/SConscript'])
+
diff --git a/intern/opencolorio/CMakeLists.txt b/intern/opencolorio/CMakeLists.txt
new file mode 100644 (file)
index 0000000..479bbd3
--- /dev/null
@@ -0,0 +1,62 @@
+# ***** BEGIN GPL LICENSE BLOCK *****
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# The Original Code is Copyright (C) 2012, Blender Foundation
+# All rights reserved.
+#
+# The Original Code is: all of this file.
+#
+# Contributor(s): Sergey Sharybin.
+#
+# ***** END GPL LICENSE BLOCK *****
+
+if(WITH_OPENCOLORIO)
+       set(INC
+               .
+               ${OPENCOLORIO_INCLUDE_DIRS}
+       )
+
+       set(SRC
+               ocio_capi.cpp
+               ocio_capi.h
+       )
+
+       if(WIN32 AND NOT MINGW)
+               list(APPEND INC
+                       ${BOOST_INCLUDE_DIR}
+               )
+       endif()
+else()
+       set(INC
+               .
+               ../../source/blender/blenlib
+       )
+
+       set(SRC
+               ocio_capi_stub.cpp
+               ocio_capi.h
+       )
+endif()
+
+set(INC_SYS
+       ../guardedalloc
+)
+
+add_definitions(
+)
+
+blender_add_lib(bf_intern_opencolorio "${SRC}" "${INC}" "${INC_SYS}")
+
diff --git a/intern/opencolorio/SConscript b/intern/opencolorio/SConscript
new file mode 100644 (file)
index 0000000..fec0766
--- /dev/null
@@ -0,0 +1,19 @@
+#!/usr/bin/python
+
+Import('env')
+
+sources = env.Glob('*.cpp')
+
+incs = '. ../guardedalloc ../../source/blender/blenlib'
+
+if env['WITH_BF_OCIO']:
+    sources.remove('ocio_capi_stub.cpp')
+
+    incs += ' ' + env['BF_OCIO_INC']
+
+    if env['OURPLATFORM'] in ('win32-vc', 'win64-vc'):
+        incs += ' ' + env['BF_BOOST_INC']
+else:
+    sources.remove('ocio_capi.cpp')
+
+env.BlenderLib( 'bf_intern_opencolorio', sources, Split(incs), [], libtype=['extern','player'], priority=[10, 185])
diff --git a/intern/opencolorio/ocio_capi.cpp b/intern/opencolorio/ocio_capi.cpp
new file mode 100644 (file)
index 0000000..ec8012c
--- /dev/null
@@ -0,0 +1,525 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * The Original Code is Copyright (C) 2012 Blender Foundation.
+ * All rights reserved.
+ *
+ * Contributor(s): Xavier Thomas
+ *                 Lukas Toene,
+ *                 Sergey Sharybin
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+#include <iostream>
+#include <string.h>
+
+#include <OpenColorIO/OpenColorIO.h>
+
+#include "MEM_guardedalloc.h"
+
+#define OCIO_CAPI_IMPLEMENTATION
+#include "ocio_capi.h"
+
+#ifdef NDEBUG
+#  define OCIO_abort()
+#else
+#  include <stdlib.h>
+#  define OCIO_abort() abort()
+#endif
+
+#if defined(_MSC_VER)
+#  define __func__ __FUNCTION__
+#endif
+
+#define MEM_NEW(type) new(MEM_mallocN(sizeof(type), __func__)) type()
+#define MEM_DELETE(what, type) { what->~type(); MEM_freeN(what); } (void)0
+
+static void OCIO_reportError(const char *err)
+{
+       std::cerr << "OpenColorIO Error: " << err << std::endl;
+
+       OCIO_abort();
+}
+
+static void OCIO_reportException(Exception &exception)
+{
+       OCIO_reportError(exception.what());
+}
+
+ConstConfigRcPtr *OCIO_getCurrentConfig(void)
+{
+       ConstConfigRcPtr *config = MEM_NEW(ConstConfigRcPtr);
+
+       try {
+               *config = GetCurrentConfig();
+
+               if(*config)
+                       return config;
+       }
+       catch (Exception &exception) {
+               OCIO_reportException(exception);
+       }
+
+       return NULL;
+}
+
+void OCIO_setCurrentConfig(const ConstConfigRcPtr *config)
+{
+       try {
+               SetCurrentConfig(*config);
+       }
+       catch (Exception &exception) {
+               OCIO_reportException(exception);
+       }
+}
+
+ConstConfigRcPtr *OCIO_configCreateFromEnv(void)
+{
+       ConstConfigRcPtr *config = MEM_NEW(ConstConfigRcPtr);
+
+       try {
+               *config = Config::CreateFromEnv();
+
+               if (*config)
+                       return config;
+       }
+       catch (Exception &exception) {
+               OCIO_reportException(exception);
+       }
+
+       return NULL;
+}
+
+
+ConstConfigRcPtr *OCIO_configCreateFromFile(const char *filename)
+{
+       ConstConfigRcPtr *config = MEM_NEW(ConstConfigRcPtr);
+
+       try {
+               *config = Config::CreateFromFile(filename);
+
+               if (*config)
+                       return config;
+       }
+       catch (Exception &exception) {
+               OCIO_reportException(exception);
+       }
+
+       return NULL;
+}
+
+void OCIO_configRelease(ConstConfigRcPtr *config)
+{
+       MEM_DELETE(config, ConstConfigRcPtr);
+}
+
+int OCIO_configGetNumColorSpaces(ConstConfigRcPtr *config)
+{
+       try {
+               return (*config)->getNumColorSpaces();
+       }
+       catch (Exception &exception) {
+               OCIO_reportException(exception);
+       }
+
+       return 0;
+}
+
+const char *OCIO_configGetColorSpaceNameByIndex(ConstConfigRcPtr *config, int index)
+{
+       try {
+               return (*config)->getColorSpaceNameByIndex(index);
+       }
+       catch (Exception &exception) {
+               OCIO_reportException(exception);
+       }
+
+       return NULL;
+}
+
+ConstColorSpaceRcPtr *OCIO_configGetColorSpace(ConstConfigRcPtr *config, const char *name)
+{
+       ConstColorSpaceRcPtr *cs = MEM_NEW(ConstColorSpaceRcPtr);
+
+       try {
+               *cs = (*config)->getColorSpace(name);
+
+               if (*cs)
+                       return cs;
+       }
+       catch (Exception &exception) {
+               OCIO_reportException(exception);
+               MEM_DELETE(cs, ConstColorSpaceRcPtr);
+       }
+
+       return NULL;
+}
+
+int OCIO_configGetIndexForColorSpace(ConstConfigRcPtr *config, const char *name)
+{
+       try {
+               return (*config)->getIndexForColorSpace(name);
+       }
+       catch (Exception &exception) {
+               OCIO_reportException(exception);
+       }
+
+       return -1;
+}
+
+const char *OCIO_configGetDefaultDisplay(ConstConfigRcPtr *config)
+{
+       try {
+               return (*config)->getDefaultDisplay();
+       }
+       catch (Exception &exception) {
+               OCIO_reportException(exception);
+       }
+
+       return NULL;
+}
+
+int OCIO_configGetNumDisplays(ConstConfigRcPtr* config)
+{
+       try {
+               return (*config)->getNumDisplays();
+       }
+       catch (Exception &exception) {
+               OCIO_reportException(exception);
+       }
+
+       return 0;
+}
+
+const char *OCIO_configGetDisplay(ConstConfigRcPtr *config, int index)
+{
+       try {
+               return (*config)->getDisplay(index);
+       }
+       catch (Exception &exception) {
+               OCIO_reportException(exception);
+       }
+
+       return NULL;
+}
+
+const char *OCIO_configGetDefaultView(ConstConfigRcPtr *config, const char *display)
+{
+       try {
+               return (*config)->getDefaultView(display);
+       }
+       catch (Exception &exception) {
+               OCIO_reportException(exception);
+       }
+
+       return NULL;
+}
+
+int OCIO_configGetNumViews(ConstConfigRcPtr *config, const char *display)
+{
+       try {
+               return (*config)->getNumViews(display);
+       }
+       catch (Exception &exception) {
+               OCIO_reportException(exception);
+       }
+
+       return 0;
+}
+
+const char *OCIO_configGetView(ConstConfigRcPtr *config, const char *display, int index)
+{
+       try {
+               return (*config)->getView(display, index);
+       }
+       catch (Exception &exception) {
+               OCIO_reportException(exception);
+       }
+
+       return NULL;
+}
+
+const char *OCIO_configGetDisplayColorSpaceName(ConstConfigRcPtr *config, const char *display, const char *view)
+{
+       try {
+               return (*config)->getDisplayColorSpaceName(display, view);
+       }
+       catch (Exception &exception) {
+               OCIO_reportException(exception);
+       }
+
+       return NULL;
+}
+
+int OCIO_colorSpaceIsInvertible(ConstColorSpaceRcPtr *cs)
+{
+       const char *family = (*cs)->getFamily();
+
+       if (!strcmp(family, "rrt") || !strcmp(family, "display")) {
+               /* assume display and rrt transformations are not invertible
+                * in fact some of them could be, but it doesn't make much sense to allow use them as invertible
+                */
+               return false;
+       }
+
+       if ((*cs)->isData()) {
+               /* data color spaces don't have transformation at all */
+               return true;
+       }
+
+       if ((*cs)->getTransform(COLORSPACE_DIR_TO_REFERENCE)) {
+               /* if there's defined transform to reference space, color space could be converted to scene linear */
+               return true;
+       }
+
+       return true;
+}
+
+void OCIO_colorSpaceRelease(ConstColorSpaceRcPtr *cs)
+{
+       MEM_DELETE(cs, ConstColorSpaceRcPtr);
+}
+
+ConstProcessorRcPtr *OCIO_configGetProcessorWithNames(ConstConfigRcPtr *config, const char *srcName, const char *dstName)
+{
+       ConstProcessorRcPtr *p = MEM_NEW(ConstProcessorRcPtr);
+
+       try {
+               *p = (*config)->getProcessor(srcName, dstName);
+
+               if (*p)
+                       return p;
+       }
+       catch (Exception &exception) {
+               OCIO_reportException(exception);
+       }
+
+       return 0;
+}
+
+ConstProcessorRcPtr *OCIO_configGetProcessor(ConstConfigRcPtr *config, ConstTransformRcPtr *transform)
+{
+       ConstProcessorRcPtr *p = MEM_NEW(ConstProcessorRcPtr);
+
+       try {
+               *p = (*config)->getProcessor(*transform);
+
+               if (*p)
+                       return p;
+       }
+       catch (Exception &exception) {
+               OCIO_reportException(exception);
+       }
+
+       return NULL;
+}
+
+void OCIO_processorApply(ConstProcessorRcPtr *processor, PackedImageDesc *img)
+{
+       try {
+               (*processor)->apply(*img);
+       }
+       catch (Exception &exception) {
+               OCIO_reportException(exception);
+       }
+}
+
+void OCIO_processorApply_predivide(ConstProcessorRcPtr *processor, PackedImageDesc *img)
+{
+       try {
+               int channels = img->getNumChannels();
+
+               if (channels == 4) {
+                       float *pixels = img->getData();
+
+                       int width = img->getWidth();
+                       int height = img->getHeight();
+
+                       for (int y = 0; y < height; y++) {
+                               for (int x = 0; x < width; x++) {
+                                       float *pixel = pixels + 4 * (y * width + x);
+
+                                       OCIO_processorApplyRGBA_predivide(processor, pixel);
+                               }
+                       }
+               }
+               else {
+                       (*processor)->apply(*img);
+               }
+       }
+       catch (Exception &exception) {
+               OCIO_reportException(exception);
+       }
+}
+
+void OCIO_processorApplyRGB(ConstProcessorRcPtr *processor, float *pixel)
+{
+       (*processor)->applyRGB(pixel);
+}
+
+void OCIO_processorApplyRGBA(ConstProcessorRcPtr *processor, float *pixel)
+{
+       (*processor)->applyRGBA(pixel);
+}
+
+void OCIO_processorApplyRGBA_predivide(ConstProcessorRcPtr *processor, float *pixel)
+{
+       if (pixel[3] == 1.0f || pixel[3] == 0.0f) {
+               (*processor)->applyRGBA(pixel);
+       }
+       else {
+               float alpha, inv_alpha;
+
+               alpha = pixel[3];
+               inv_alpha = 1.0f / alpha;
+
+               pixel[0] *= inv_alpha;
+               pixel[1] *= inv_alpha;
+               pixel[2] *= inv_alpha;
+
+               (*processor)->applyRGBA(pixel);
+
+               pixel[0] *= alpha;
+               pixel[1] *= alpha;
+               pixel[2] *= alpha;
+       }
+}
+
+void OCIO_processorRelease(ConstProcessorRcPtr *p)
+{
+       p->~ConstProcessorRcPtr();
+       MEM_freeN(p);
+}
+
+const char *OCIO_colorSpaceGetName(ConstColorSpaceRcPtr *cs)
+{
+       return (*cs)->getName();
+}
+
+const char *OCIO_colorSpaceGetDescription(ConstColorSpaceRcPtr *cs)
+{
+       return (*cs)->getDescription();
+}
+
+const char *OCIO_colorSpaceGetFamily(ConstColorSpaceRcPtr *cs)
+{
+       return (*cs)->getFamily();
+}
+
+DisplayTransformRcPtr *OCIO_createDisplayTransform(void)
+{
+       DisplayTransformRcPtr *dt = MEM_NEW(DisplayTransformRcPtr);
+
+       *dt = DisplayTransform::Create();
+
+       return dt;
+}
+
+void OCIO_displayTransformSetInputColorSpaceName(DisplayTransformRcPtr *dt, const char *name)
+{
+       (*dt)->setInputColorSpaceName(name);
+}
+
+void OCIO_displayTransformSetDisplay(DisplayTransformRcPtr *dt, const char *name)
+{
+       (*dt)->setDisplay(name);
+}
+
+void OCIO_displayTransformSetView(DisplayTransformRcPtr *dt, const char *name)
+{
+       (*dt)->setView(name);
+}
+
+void OCIO_displayTransformSetDisplayCC(DisplayTransformRcPtr *dt, ConstTransformRcPtr *t)
+{
+       (*dt)->setDisplayCC(*t);
+}
+
+void OCIO_displayTransformSetLinearCC(DisplayTransformRcPtr *dt, ConstTransformRcPtr *t)
+{
+       (*dt)->setLinearCC(*t);
+}
+
+void OCIO_displayTransformRelease(DisplayTransformRcPtr *dt)
+{
+       MEM_DELETE(dt, DisplayTransformRcPtr);
+}
+
+PackedImageDesc *OCIO_createPackedImageDesc(float *data, long width, long height, long numChannels,
+                                            long chanStrideBytes, long xStrideBytes, long yStrideBytes)
+{
+       try {
+               void *mem = MEM_mallocN(sizeof(PackedImageDesc), __func__);
+               PackedImageDesc *id = new(mem) PackedImageDesc(data, width, height, numChannels, chanStrideBytes, xStrideBytes, yStrideBytes);
+
+               return id;
+       }
+       catch (Exception &exception) {
+               OCIO_reportException(exception);
+       }
+
+       return NULL;
+}
+
+void OCIO_packedImageDescRelease(PackedImageDesc* id)
+{
+       MEM_DELETE(id, PackedImageDesc);
+}
+
+ExponentTransformRcPtr *OCIO_createExponentTransform(void)
+{
+       ExponentTransformRcPtr *et = MEM_NEW(ExponentTransformRcPtr);
+
+       *et = ExponentTransform::Create();
+
+       return et;
+}
+
+void OCIO_exponentTransformSetValue(ExponentTransformRcPtr *et, const float *exponent)
+{
+       (*et)->setValue(exponent);
+}
+
+void OCIO_exponentTransformRelease(ExponentTransformRcPtr *et)
+{
+       MEM_DELETE(et, ExponentTransformRcPtr);
+}
+
+MatrixTransformRcPtr *OCIO_createMatrixTransform(void)
+{
+       MatrixTransformRcPtr *mt = MEM_NEW(MatrixTransformRcPtr);
+
+       *mt = MatrixTransform::Create();
+
+       return mt;
+}
+
+void OCIO_matrixTransformSetValue(MatrixTransformRcPtr *mt, const float *m44, const float *offset4)
+{
+       (*mt)->setValue(m44, offset4);
+}
+
+void OCIO_matrixTransformRelease(MatrixTransformRcPtr *mt)
+{
+       MEM_DELETE(mt, MatrixTransformRcPtr);
+}
+
+void OCIO_matrixTransformScale(float * m44, float * offset4, const float *scale4f)
+{
+       MatrixTransform::Scale(m44, offset4, scale4f);
+}
diff --git a/intern/opencolorio/ocio_capi.h b/intern/opencolorio/ocio_capi.h
new file mode 100644 (file)
index 0000000..f0edd25
--- /dev/null
@@ -0,0 +1,128 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * The Original Code is Copyright (C) 2012 Blender Foundation.
+ * All rights reserved.
+ *
+ * Contributor(s): Xavier Thomas
+ *                 Lukas Toene
+ *                 Sergey Sharybin
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+#ifndef __OCIO_CAPI_H__
+#define __OCIO_CAPI_H__
+
+
+
+#ifdef __cplusplus
+using namespace OCIO_NAMESPACE;
+extern "C" {
+#endif
+
+#define OCIO_DECLARE_HANDLE(name) typedef struct name##__ { int unused; } *name
+
+
+#ifndef OCIO_CAPI_IMPLEMENTATION
+       #define OCIO_ROLE_SCENE_LINEAR       "scene_linear"
+       #define OCIO_ROLE_COLOR_PICKING      "color_picking"
+       #define OCIO_ROLE_TEXTURE_PAINT      "texture_paint"
+       #define OCIO_ROLE_DEFAULT_BYTE       "default_byte"
+       #define OCIO_ROLE_DEFAULT_FLOAT      "default_float"
+       #define OCIO_ROLE_DEFAULT_SEQUENCER  "default_sequencer"
+
+       OCIO_DECLARE_HANDLE(ConstConfigRcPtr);
+       OCIO_DECLARE_HANDLE(ConstColorSpaceRcPtr);
+       OCIO_DECLARE_HANDLE(ConstProcessorRcPtr);
+       OCIO_DECLARE_HANDLE(ConstContextRcPtr);
+       OCIO_DECLARE_HANDLE(PackedImageDesc);
+       OCIO_DECLARE_HANDLE(DisplayTransformRcPtr);
+       OCIO_DECLARE_HANDLE(ConstTransformRcPtr);
+       OCIO_DECLARE_HANDLE(ExponentTransformRcPtr);
+       OCIO_DECLARE_HANDLE(MatrixTransformRcPtr);
+#endif
+
+
+ConstConfigRcPtr *OCIO_getCurrentConfig(void);
+void OCIO_setCurrentConfig(const ConstConfigRcPtr *config);
+
+ConstConfigRcPtr *OCIO_configCreateFromEnv(void);
+ConstConfigRcPtr *OCIO_configCreateFromFile(const char* filename);
+
+void OCIO_configRelease(ConstConfigRcPtr *config);
+
+int OCIO_configGetNumColorSpaces(ConstConfigRcPtr *config);
+const char *OCIO_configGetColorSpaceNameByIndex(ConstConfigRcPtr *config, int index);
+ConstColorSpaceRcPtr *OCIO_configGetColorSpace(ConstConfigRcPtr *config, const char *name);
+int OCIO_configGetIndexForColorSpace(ConstConfigRcPtr *config, const char *name);
+
+int OCIO_colorSpaceIsInvertible(ConstColorSpaceRcPtr *cs);
+
+void OCIO_colorSpaceRelease(ConstColorSpaceRcPtr *cs);
+
+const char *OCIO_configGetDefaultDisplay(ConstConfigRcPtr *config);
+int         OCIO_configGetNumDisplays(ConstConfigRcPtr *config);
+const char *OCIO_configGetDisplay(ConstConfigRcPtr *config, int index);
+const char *OCIO_configGetDefaultView(ConstConfigRcPtr *config, const char *display);
+int         OCIO_configGetNumViews(ConstConfigRcPtr *config, const char *display);
+const char *OCIO_configGetView(ConstConfigRcPtr *config, const char *display, int index);
+const char *OCIO_configGetDisplayColorSpaceName(ConstConfigRcPtr *config, const char *display, const char *view);
+
+ConstProcessorRcPtr *OCIO_configGetProcessorWithNames(ConstConfigRcPtr *config, const char *srcName, const char *dstName);
+ConstProcessorRcPtr *OCIO_configGetProcessor(ConstConfigRcPtr *config, ConstTransformRcPtr *transform);
+
+void OCIO_processorApply(ConstProcessorRcPtr *processor, PackedImageDesc *img);
+void OCIO_processorApply_predivide(ConstProcessorRcPtr *processor, PackedImageDesc *img);
+void OCIO_processorApplyRGB(ConstProcessorRcPtr *processor, float *pixel);
+void OCIO_processorApplyRGBA(ConstProcessorRcPtr *processor, float *pixel);
+void OCIO_processorApplyRGBA_predivide(ConstProcessorRcPtr *processor, float *pixel);
+
+void OCIO_processorRelease(ConstProcessorRcPtr *p);
+
+const char *OCIO_colorSpaceGetName(ConstColorSpaceRcPtr *cs);
+const char *OCIO_colorSpaceGetDescription(ConstColorSpaceRcPtr *cs);
+const char *OCIO_colorSpaceGetFamily(ConstColorSpaceRcPtr *cs);
+
+DisplayTransformRcPtr *OCIO_createDisplayTransform(void);
+void OCIO_displayTransformSetInputColorSpaceName(DisplayTransformRcPtr *dt, const char *name);
+void OCIO_displayTransformSetDisplay(DisplayTransformRcPtr *dt, const char *name);
+void OCIO_displayTransformSetView(DisplayTransformRcPtr *dt, const char *name);
+void OCIO_displayTransformSetDisplayCC(DisplayTransformRcPtr *dt, ConstTransformRcPtr *et);
+void OCIO_displayTransformSetLinearCC(DisplayTransformRcPtr *dt, ConstTransformRcPtr *et);
+void OCIO_displayTransformRelease(DisplayTransformRcPtr *dt);
+
+PackedImageDesc *OCIO_createPackedImageDesc(float *data, long width, long height, long numChannels,
+                                            long chanStrideBytes, long xStrideBytes, long yStrideBytes);
+
+void OCIO_packedImageDescRelease(PackedImageDesc *p);
+
+ExponentTransformRcPtr *OCIO_createExponentTransform(void);
+void OCIO_exponentTransformSetValue(ExponentTransformRcPtr *et, const float *exponent);
+void OCIO_exponentTransformRelease(ExponentTransformRcPtr *et);
+
+MatrixTransformRcPtr *OCIO_createMatrixTransform(void);
+void OCIO_matrixTransformSetValue(MatrixTransformRcPtr *et, const float *m44, const float *offset4);
+void OCIO_matrixTransformRelease(MatrixTransformRcPtr *mt);
+
+void OCIO_matrixTransformScale(float * m44, float * offset4, const float * scale4);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif //OCIO_CAPI_H
diff --git a/intern/opencolorio/ocio_capi_stub.cpp b/intern/opencolorio/ocio_capi_stub.cpp
new file mode 100644 (file)
index 0000000..a601cd3
--- /dev/null
@@ -0,0 +1,380 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * The Original Code is Copyright (C) 2012 Blender Foundation.
+ * All rights reserved.
+ *
+ * Contributor(s): Brecht van Lommel
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+#include <string.h>
+
+#include "MEM_guardedalloc.h"
+#include "BLI_math_color.h"
+
+namespace OCIO_NAMESPACE {};
+
+#include "ocio_capi.h"
+
+#define CONFIG_DEFAULT           ((ConstConfigRcPtr*)1)
+
+#define PROCESSOR_LINEAR_TO_SRGB ((ConstProcessorRcPtr*)1)
+#define PROCESSOR_SRGB_TO_LINEAR ((ConstProcessorRcPtr*)2)
+#define PROCESSOR_UNKNOWN        ((ConstProcessorRcPtr*)3)
+
+#define COLORSPACE_LINEAR        ((ConstColorSpaceRcPtr*)1)
+#define COLORSPACE_SRGB          ((ConstColorSpaceRcPtr*)2)
+
+typedef struct PackedImageDescription {
+       float *data;
+       long width;
+       long height;
+       long numChannels;
+       long chanStrideBytes;
+       long xStrideBytes;
+       long yStrideBytes;
+} PackedImageDescription;
+
+ConstConfigRcPtr *OCIO_getCurrentConfig(void)
+{
+       return CONFIG_DEFAULT;
+}
+
+void OCIO_setCurrentConfig(const ConstConfigRcPtr *)
+{
+}
+
+ConstConfigRcPtr *OCIO_configCreateFromEnv(void)
+{
+       return CONFIG_DEFAULT;
+}
+
+ConstConfigRcPtr *OCIO_configCreateFromFile(const char *)
+{
+       return CONFIG_DEFAULT;
+}
+
+void OCIO_configRelease(ConstConfigRcPtr *)
+{
+}
+
+int OCIO_configGetNumColorSpaces(ConstConfigRcPtr *)
+{
+       return 2;
+}
+
+const char *OCIO_configGetColorSpaceNameByIndex(ConstConfigRcPtr *, int index)
+{
+       if (index == 0)
+               return "Linear";
+       else if (index == 1)
+               return "sRGB";
+       
+       return NULL;
+}
+
+ConstColorSpaceRcPtr *OCIO_configGetColorSpace(ConstConfigRcPtr *, const char *name)
+{
+       if (strcmp(name, "scene_linear") == 0)
+               return COLORSPACE_LINEAR;
+       else if (strcmp(name, "color_picking") == 0)
+               return COLORSPACE_SRGB;
+       else if (strcmp(name, "texture_paint") == 0)
+               return COLORSPACE_LINEAR;
+       else if (strcmp(name, "default_byte") == 0)
+               return COLORSPACE_SRGB;
+       else if (strcmp(name, "default_float") == 0)
+               return COLORSPACE_LINEAR;
+       else if (strcmp(name, "default_sequencer") == 0)
+               return COLORSPACE_SRGB;
+       else if (strcmp(name, "Linear") == 0)
+               return COLORSPACE_LINEAR;
+       else if (strcmp(name, "sRGB") == 0)
+               return COLORSPACE_SRGB;
+
+       return NULL;
+}
+
+int OCIO_configGetIndexForColorSpace(ConstConfigRcPtr *config, const char *name)
+{
+       ConstColorSpaceRcPtr *cs = OCIO_configGetColorSpace(config, name);
+
+       if (cs == COLORSPACE_LINEAR)
+               return 0;
+       else if (cs == COLORSPACE_SRGB)
+               return 1;
+
+       return -1;
+}
+
+const char *OCIO_configGetDefaultDisplay(ConstConfigRcPtr *)
+{
+       return "sRGB";
+}
+
+int OCIO_configGetNumDisplays(ConstConfigRcPtr* config)
+{
+       return 1;
+}
+
+const char *OCIO_configGetDisplay(ConstConfigRcPtr *, int index)
+{
+       if (index == 0)
+               return "sRGB";
+       
+       return NULL;
+}
+
+const char *OCIO_configGetDefaultView(ConstConfigRcPtr *, const char *)
+{
+       return "Default";
+}
+
+int OCIO_configGetNumViews(ConstConfigRcPtr *, const char *)
+{
+       return 1;
+}
+
+const char *OCIO_configGetView(ConstConfigRcPtr *, const char *, int index)
+{
+       if (index == 0)
+               return "Default";
+
+       return NULL;
+}
+
+const char *OCIO_configGetDisplayColorSpaceName(ConstConfigRcPtr *, const char *, const char *)
+{
+       return "sRGB";
+}
+
+int OCIO_colorSpaceIsInvertible(ConstColorSpaceRcPtr *cs)
+{
+       return 1;
+}
+
+void OCIO_colorSpaceRelease(ConstColorSpaceRcPtr *cs)
+{
+}
+
+ConstProcessorRcPtr *OCIO_configGetProcessorWithNames(ConstConfigRcPtr *config, const char *srcName, const char *dstName)
+{
+       ConstColorSpaceRcPtr *cs_src = OCIO_configGetColorSpace(config, srcName);
+       ConstColorSpaceRcPtr *cs_dst = OCIO_configGetColorSpace(config, dstName);
+
+       if (cs_src == COLORSPACE_LINEAR && cs_dst == COLORSPACE_SRGB)
+               return PROCESSOR_LINEAR_TO_SRGB;
+       else if (cs_src == COLORSPACE_SRGB && cs_dst == COLORSPACE_LINEAR)
+               return PROCESSOR_SRGB_TO_LINEAR;
+
+       return 0;
+}
+
+ConstProcessorRcPtr *OCIO_configGetProcessor(ConstConfigRcPtr *, ConstTransformRcPtr *tfm)
+{
+       return (ConstProcessorRcPtr*)tfm;
+}
+
+void OCIO_processorApply(ConstProcessorRcPtr *processor, PackedImageDesc *img)
+{
+       /* OCIO_TODO stride not respected, channels must be 3 or 4 */
+       PackedImageDescription *desc = (PackedImageDescription*)img;
+       int channels = desc->numChannels;
+       float *pixels = desc->data;
+       int width = desc->width;
+       int height = desc->height;
+       int x, y;
+
+       for (y = 0; y < height; y++) {
+               for (x = 0; x < width; x++) {
+                       float *pixel = pixels + channels * (y * width + x);
+
+                       if (channels == 4)
+                               OCIO_processorApplyRGBA(processor, pixel);
+                       else if (channels == 3)
+                               OCIO_processorApplyRGB(processor, pixel);
+               }
+       }
+}
+
+void OCIO_processorApply_predivide(ConstProcessorRcPtr *processor, PackedImageDesc *img)
+{
+       /* OCIO_TODO stride not respected, channels must be 3 or 4 */
+       PackedImageDescription *desc = (PackedImageDescription*)img;
+       int channels = desc->numChannels;
+       float *pixels = desc->data;
+       int width = desc->width;
+       int height = desc->height;
+       int x, y;
+
+       for (y = 0; y < height; y++) {
+               for (x = 0; x < width; x++) {
+                       float *pixel = pixels + channels * (y * width + x);
+
+                       if (channels == 4)
+                               OCIO_processorApplyRGBA_predivide(processor, pixel);
+                       else if (channels == 3)
+                               OCIO_processorApplyRGB(processor, pixel);
+               }
+       }
+}
+
+void OCIO_processorApplyRGB(ConstProcessorRcPtr *processor, float *pixel)
+{
+       if (processor == PROCESSOR_LINEAR_TO_SRGB)
+               linearrgb_to_srgb_v3_v3(pixel, pixel);
+       else if (processor == PROCESSOR_SRGB_TO_LINEAR)
+               srgb_to_linearrgb_v3_v3(pixel, pixel);
+}
+
+void OCIO_processorApplyRGBA(ConstProcessorRcPtr *processor, float *pixel)
+{
+       if (processor == PROCESSOR_LINEAR_TO_SRGB)
+               linearrgb_to_srgb_v4(pixel, pixel);
+       else if (processor == PROCESSOR_SRGB_TO_LINEAR)
+               srgb_to_linearrgb_v4(pixel, pixel);
+}
+
+void OCIO_processorApplyRGBA_predivide(ConstProcessorRcPtr *processor, float *pixel)
+{
+       if (pixel[3] == 1.0f || pixel[3] == 0.0f) {
+               OCIO_processorApplyRGBA(processor, pixel);
+       }
+       else {
+               float alpha, inv_alpha;
+
+               alpha = pixel[3];
+               inv_alpha = 1.0f / alpha;
+
+               pixel[0] *= inv_alpha;
+               pixel[1] *= inv_alpha;
+               pixel[2] *= inv_alpha;
+
+               OCIO_processorApplyRGBA(processor, pixel);
+
+               pixel[0] *= alpha;
+               pixel[1] *= alpha;
+               pixel[2] *= alpha;
+       }
+}
+
+void OCIO_processorRelease(ConstProcessorRcPtr *)
+{
+}
+
+const char *OCIO_colorSpaceGetName(ConstColorSpaceRcPtr *cs)
+{
+       if (cs == COLORSPACE_LINEAR)
+               return "Linear";
+       else if (cs == COLORSPACE_SRGB)
+               return "sRGB";
+       
+       return NULL;
+}
+
+const char *OCIO_colorSpaceGetDescription(ConstColorSpaceRcPtr *)
+{
+       return "";
+}
+
+const char *OCIO_colorSpaceGetFamily(ConstColorSpaceRcPtr *)
+{
+       return "";
+}
+
+DisplayTransformRcPtr *OCIO_createDisplayTransform(void)
+{
+       return (DisplayTransformRcPtr*)PROCESSOR_LINEAR_TO_SRGB;
+}
+
+void OCIO_displayTransformSetInputColorSpaceName(DisplayTransformRcPtr *, const char *)
+{
+}
+
+void OCIO_displayTransformSetDisplay(DisplayTransformRcPtr *, const char *)
+{
+}
+
+void OCIO_displayTransformSetView(DisplayTransformRcPtr *, const char *)
+{
+}
+
+void OCIO_displayTransformSetDisplayCC(DisplayTransformRcPtr *, ConstTransformRcPtr *)
+{
+}
+
+void OCIO_displayTransformSetLinearCC(DisplayTransformRcPtr *, ConstTransformRcPtr *)
+{
+}
+
+void OCIO_displayTransformRelease(DisplayTransformRcPtr *)
+{
+}
+
+PackedImageDesc *OCIO_createPackedImageDesc(float *data, long width, long height, long numChannels,
+                                            long chanStrideBytes, long xStrideBytes, long yStrideBytes)
+{
+       PackedImageDescription *desc = (PackedImageDescription*)MEM_callocN(sizeof(PackedImageDescription), "PackedImageDescription");
+
+       desc->data = data;
+       desc->width = width;
+       desc->height = height;
+       desc->numChannels = numChannels;
+       desc->chanStrideBytes = chanStrideBytes;
+       desc->xStrideBytes = xStrideBytes;
+       desc->yStrideBytes = yStrideBytes;
+
+       return (PackedImageDesc*)desc;
+}
+
+void OCIO_packedImageDescRelease(PackedImageDesc* id)
+{
+       MEM_freeN(id);
+}
+
+ExponentTransformRcPtr *OCIO_createExponentTransform(void)
+{
+       return (ExponentTransformRcPtr*)PROCESSOR_UNKNOWN;
+}
+
+void OCIO_exponentTransformSetValue(ExponentTransformRcPtr *, const float *)
+{
+}
+
+void OCIO_exponentTransformRelease(ExponentTransformRcPtr *)
+{
+}
+
+MatrixTransformRcPtr *OCIO_createMatrixTransform(void)
+{
+       return (MatrixTransformRcPtr*)PROCESSOR_UNKNOWN;
+}
+
+void OCIO_matrixTransformSetValue(MatrixTransformRcPtr *, const float *, const float *)
+{
+}
+
+void OCIO_matrixTransformRelease(MatrixTransformRcPtr *)
+{
+}
+
+void OCIO_matrixTransformScale(float * , float * , const float *)
+{
+}
+
diff --git a/release/datafiles/colormanagement/config.ocio b/release/datafiles/colormanagement/config.ocio
new file mode 100644 (file)
index 0000000..121c5b2
--- /dev/null
@@ -0,0 +1,284 @@
+# OpenCOlorIO configuration file for Blender
+#
+# Based on aces, nuke-default and spi configurations from OpenColorIO-Config
+
+ocio_profile_version: 1
+
+search_path: luts
+strictparsing: true
+luma: [0.2126, 0.7152, 0.0722]
+
+description: RRT version ut33
+
+roles:
+  reference: Linear ACES
+
+  # Internal scene linear space
+  scene_linear: Linear
+
+  # Default color space for byte image
+  default_byte: sRGB
+
+  # Default color space for float images
+  default_float: Linear
+
+  # Default color space sequencer is working in
+  default_sequencer: sRGB
+
+  # Color spaces for color picking and exture painting (not internally supported yet)
+  color_picking: Raw
+  texture_paint: Raw
+
+displays:
+  sRGB:
+    - !<View> {name: Default, colorspace: sRGB}
+    - !<View> {name: RRT, colorspace: rrt_srgb}
+    - !<View> {name: Film, colorspace: srgb8}
+    - !<View> {name: Raw, colorspace: Raw}
+    - !<View> {name: Log, colorspace: lg10}
+  DCI-P3:
+    - !<View> {name: RRT, colorspace: rrt_p3dci}
+    - !<View> {name: Film, colorspace: p3dci8}
+    - !<View> {name: Raw, colorspace: Raw}
+    - !<View> {name: Log, colorspace: adx10}
+  Rec709:
+    - !<View> {name: Default, colorspace: nuke_rec709}
+    - !<View> {name: RRT, colorspace: rrt_rec709}
+  XYZ:
+    - !<View> {name: Default, colorspace: XYZ}
+    - !<View> {name: RRT, colorspace: rrt_xyz}
+    - !<View> {name: DCI, colorspace: dci_xyz}
+    - !<View> {name: Raw, colorspace: Raw}
+    - !<View> {name: Log, colorspace: adx10}
+  None:
+    - !<View> {name: Default, colorspace: raw}
+
+active_displays: [sRGB, DCIP3, Rec709, XYZ, None]
+active_views: [Default, RRT, Raw, Log]
+
+colorspaces:
+  - !<ColorSpace>
+    name: Linear ACES
+    family: aces
+    equalitygroup:
+    bitdepth: 32f
+    isdata: false
+    allocation: lg2
+    allocationvars: [-8.5, 5]
+
+  - !<ColorSpace>
+    name: Raw
+    family: raw
+    equalitygroup:
+    bitdepth: 32f
+    isdata: true
+    allocation: uniform
+    allocationvars: [0, 1]
+
+  - !<ColorSpace>
+    name: adx10
+    family: display
+    equalitygroup:
+    bitdepth: 10ui
+    description: |
+      Film Scan, using the 10-bit Academy Density Encoding
+
+    isdata: false
+    allocation: uniform
+    allocationvars: [0, 1]
+    to_reference: !<GroupTransform>
+      children:
+        - !<FileTransform> {src: adx_adx10_to_cdd.spimtx}
+        - !<FileTransform> {src: adx_cdd_to_cid.spimtx}
+        - !<FileTransform> {src: adx_cid_to_rle.spi1d, interpolation: linear}
+        - !<LogTransform> {base: 10, direction: inverse}
+        - !<FileTransform> {src: adx_exp_to_aces.spimtx}
+
+  - !<ColorSpace>
+    name: Linear
+    family:
+    equalitygroup:
+    bitdepth: 32f
+    description: |
+      Rec. 709 (Full Range), Blender native linear space
+    isdata: false
+    allocation: uniform
+    allocationvars: [-0.125, 1.125]
+    to_reference: !<FileTransform> {src: rec709_to_aces.spimtx, interpolation: nearest}
+
+  - !<ColorSpace>
+    name: rrt_srgb
+    family: rrt
+    equalitygroup:
+    bitdepth: 32f
+    isdata: false
+    allocation: uniform
+    allocationvars: [0, 1]
+    from_reference: !<GroupTransform>
+      children:
+        - !<AllocationTransform> {allocation: lg2, vars: [-8.5, 5]}
+        - !<FileTransform> {src: rrt_ut33_sRGB.spi3d, interpolation: tetrahedral}
+
+  - !<ColorSpace>
+    name: nuke_rec709
+    family: display
+    equalitygroup:
+    bitdepth: 32f
+    description: |
+      Rec. 709 (Full Range) Display Space
+    isdata: false
+    allocation: uniform
+    allocationvars: [-0.125, 1.125]
+    to_reference: !<GroupTransform>
+      children:
+        - !<FileTransform> {src: rec709.spi1d, interpolation: linear}
+        - !<FileTransform> {src: rec709_to_aces.spimtx, interpolation: nearest}
+
+  - !<ColorSpace>
+    name: rrt_rec709
+    family: rrt
+    equalitygroup:
+    bitdepth: 32f
+    isdata: false
+    allocation: uniform
+    allocationvars: [0, 1]
+    from_reference: !<GroupTransform>
+      children:
+        - !<AllocationTransform> {allocation: lg2, vars: [-8.5, 5]}
+        - !<FileTransform> {src: rrt_ut33_rec709.spi3d, interpolation: tetrahedral}
+
+  - !<ColorSpace>
+    name: rrt_p3dci
+    family: rrt
+    equalitygroup:
+    bitdepth: 32f
+    isdata: false
+    allocation: uniform
+    allocationvars: [0, 1]
+    from_reference: !<GroupTransform>
+      children:
+        - !<AllocationTransform> {allocation: lg2, vars: [-8.5, 5]}
+        - !<FileTransform> {src: rrt_ut33_p3dci.spi3d, interpolation: tetrahedral}
+
+  - !<ColorSpace>
+    name: XYZ
+    family:
+    equalitygroup:
+    bitdepth: 32f
+    isdata: false
+    allocation: uniform
+    allocationvars: [0, 1]
+    from_reference: !<GroupTransform>
+      children:
+        - !<FileTransform> {src: aces_to_xyz.spimtx, interpolation: linear}
+
+  - !<ColorSpace>
+    name: rrt_xyz
+    family: rrt
+    equalitygroup:
+    bitdepth: 32f
+    isdata: false
+    allocation: uniform
+    allocationvars: [0, 1]
+    from_reference: !<GroupTransform>
+      children:
+        - !<AllocationTransform> {allocation: lg2, vars: [-8.5, 5]}
+        - !<FileTransform> {src: rrt_ut33_dcdm.spi3d, interpolation: tetrahedral}
+
+  - !<ColorSpace>
+    name: dci_xyz
+    family: display
+    equalitygroup:
+    bitdepth: 16f
+    description: |
+      OpenDCP output LUT with DCI reference white and Gamma 2.6
+    isdata: false
+    allocation: uniform
+    allocationvars: [0, 1]
+    from_reference: !<GroupTransform>
+      children:
+        - !<FileTransform> {src: rec709_to_aces.spimtx, interpolation: linear, direction: inverse}
+        - !<FileTransform> {src: srgb_to_xyz.spimtx, interpolation: linear}
+        - !<FileTransform> {src: dci_xyz.spi1d, interpolation: linear}
+
+  - !<ColorSpace>
+    name: lg10
+    family: display
+    equalitygroup:
+    bitdepth: 10ui
+    description: |
+      conversion from film log
+    isdata: false
+    allocation: uniform
+    to_reference: !<GroupTransform>
+      children:
+        - !<FileTransform> {src: lg10.spi1d, interpolation: nearest}
+        - !<FileTransform> {src: rec709_to_aces.spimtx, interpolation: nearest}
+
+  - !<ColorSpace>
+    name: srgb8
+    family: display
+    equalitygroup:
+    bitdepth: 8ui
+    description: |
+      RGB display space for the sRGB standard.
+    isdata: false
+    allocation: uniform
+    from_reference: !<GroupTransform>
+      children:
+        - !<ColorSpaceTransform> {src: Linear ACES, dst: lg10}
+        - !<FileTransform> {src: spi_ocio_srgb_test.spi3d, interpolation: linear}
+
+  - !<ColorSpace>
+    name: sRGB
+    family:
+    equalitygroup:
+    bitdepth: 32f
+    description: |
+      Standard RGB Display Space
+    isdata: false
+    allocation: uniform
+    allocationvars: [-0.125, 1.125]
+    to_reference: !<GroupTransform>
+      children:
+        - !<FileTransform> {src: srgb.spi1d, interpolation: linear}
+        - !<FileTransform> {src: rec709_to_aces.spimtx, interpolation: nearest}
+
+  - !<ColorSpace>
+    name: VD16
+    family: vd
+    equalitygroup:
+    bitdepth: 16ui
+    description: |
+      The simple video conversion from a gamma 2.2 sRGB space
+    isdata: false
+    allocation: uniform
+    to_reference: !<GroupTransform>
+      children:
+        - !<FileTransform> {src: vd16.spi1d, interpolation: nearest}
+        - !<FileTransform> {src: rec709_to_aces.spimtx, interpolation: linear}
+
+  - !<ColorSpace>
+    name: Non-Color
+    family: raw
+    description: |
+        Color space used for images which contains non-color data (i,e, normal maps)
+    equalitygroup:
+    bitdepth: 32f
+    isdata: true
+    allocation: uniform
+    allocationvars: [0, 1]
+
+  - !<ColorSpace>
+    name: p3dci8
+    family: display
+    equalitygroup:
+    bitdepth: 8ui
+    description: |
+      p3dci8 :rgb display space for gamma 2.6 P3 projection.
+    isdata: false
+    allocation: uniform
+    from_reference: !<GroupTransform>
+      children:
+        - !<ColorSpaceTransform> {src: Linear ACES, dst: lg10}
+        - !<FileTransform> {src: colorworks_filmlg_to_p3.3dl, interpolation: linear}
diff --git a/release/datafiles/colormanagement/luts/aces_to_xyz.spimtx b/release/datafiles/colormanagement/luts/aces_to_xyz.spimtx
new file mode 100644 (file)
index 0000000..fbf52e6
--- /dev/null
@@ -0,0 +1,3 @@
+0.9525523959 0.0000000000 0.0000936786 0
+0.3439664498 0.7281660966 -0.072132546 0
+0.0000000000 0.0000000000 1.0088251844 0
diff --git a/release/datafiles/colormanagement/luts/adx_adx10_to_cdd.spimtx b/release/datafiles/colormanagement/luts/adx_adx10_to_cdd.spimtx
new file mode 100644 (file)
index 0000000..b1c5c9e
--- /dev/null
@@ -0,0 +1,4 @@
+2.046 0.0 0.0 -12451.65
+0.0 2.046 0.0 -12451.65
+0.0 0.0 2.046 -12451.65
+
diff --git a/release/datafiles/colormanagement/luts/adx_cdd_to_cid.spimtx b/release/datafiles/colormanagement/luts/adx_cdd_to_cid.spimtx
new file mode 100644 (file)
index 0000000..21eff95
--- /dev/null
@@ -0,0 +1,4 @@
+0.75573 0.22197 0.02230 0
+0.05901 0.96928 -0.02829 0
+0.16134 0.07406 0.76460 0
+
diff --git a/release/datafiles/colormanagement/luts/adx_cid_to_rle.spi1d b/release/datafiles/colormanagement/luts/adx_cid_to_rle.spi1d
new file mode 100644 (file)
index 0000000..26b5ae9
--- /dev/null
@@ -0,0 +1,4102 @@
+Version 1
+From -0.19 3.0
+Length 4096
+Components 1
+{
+        -6.0
+        -5.98723111414
+        -5.97446222827
+        -5.96169334241
+        -5.94892445654
+        -5.93615557068
+        -5.92338668482
+        -5.91061779895
+        -5.89784891309
+        -5.88508002723
+        -5.87231114136
+        -5.8595422555
+        -5.84677336963
+        -5.83400448377
+        -5.82123559791
+        -5.80846671204
+        -5.79569782618
+        -5.78292894032
+        -5.77016005445
+        -5.75739116859
+        -5.74462228272
+        -5.73185339686
+        -5.719084511
+        -5.70631562513
+        -5.69354673927
+        -5.68077785341
+        -5.66800896754
+        -5.65524008168
+        -5.64247119581
+        -5.62970230995
+        -5.61693342409
+        -5.60416453822
+        -5.59139565236
+        -5.57862676649
+        -5.56585788063
+        -5.55308899477
+        -5.5403201089
+        -5.52755122304
+        -5.51478233718
+        -5.50201345131
+        -5.48924456545
+        -5.47647567958
+        -5.46370679372
+        -5.45093790786
+        -5.43816902199
+        -5.42540013613
+        -5.41263125027
+        -5.3998623644
+        -5.38709347854
+        -5.37432459267
+        -5.36155570681
+        -5.34878682095
+        -5.33601793508
+        -5.32324904922
+        -5.31048016335
+        -5.29771127749
+        -5.28494239163
+        -5.27217350576
+        -5.2594046199
+        -5.24663573404
+        -5.23386684817
+        -5.22109796231
+        -5.20832907644
+        -5.19556019058
+        -5.18279130472
+        -5.17002241885
+        -5.15725353299
+        -5.14448464713
+        -5.13171576126
+        -5.1189468754
+        -5.10617798953
+        -5.09340910367
+        -5.08064021781
+        -5.06787133194
+        -5.05510244608
+        -5.04233356022
+        -5.02956467435
+        -5.01679578849
+        -5.00402690262
+        -4.99125801676
+        -4.9784891309
+        -4.96572024503
+        -4.95295135917
+        -4.9401824733
+        -4.92741358744
+        -4.91464470158
+        -4.90187581571
+        -4.88910692985
+        -4.87633804399
+        -4.86356915812
+        -4.85080027226
+        -4.83803138639
+        -4.82526250053
+        -4.81249361467
+        -4.7997247288
+        -4.78695584294
+        -4.77418695708
+        -4.76141807121
+        -4.74864918535
+        -4.73588029948
+        -4.72311141362
+        -4.71034252776
+        -4.69757364189
+        -4.68480475603
+        -4.67203587017
+        -4.6592669843
+        -4.64649809844
+        -4.63372921257
+        -4.62096032671
+        -4.60819144085
+        -4.59542255498
+        -4.58265366912
+        -4.56988478325
+        -4.55711589739
+        -4.54434701153
+        -4.53157812566
+        -4.5188092398
+        -4.50604035394
+        -4.49327146807
+        -4.48050258221
+        -4.46773369634
+        -4.45496481048
+        -4.44219592462
+        -4.42942703875
+        -4.41665815289
+        -4.40388926703
+        -4.39112038116
+        -4.3783514953
+        -4.36558260943
+        -4.35281372357
+        -4.34004483771
+        -4.32727595184
+        -4.31450706598
+        -4.30173818011
+        -4.28896929425
+        -4.27620040839
+        -4.26343152252
+        -4.25066263666
+        -4.2378937508
+        -4.22512486493
+        -4.21235597907
+        -4.1995870932
+        -4.18681820734
+        -4.17404932148
+        -4.16128043561
+        -4.14851154975
+        -4.13574266389
+        -4.12297377802
+        -4.11020489216
+        -4.09743600629
+        -4.08466712043
+        -4.07189823457
+        -4.0591293487
+        -4.04636046284
+        -4.03359157698
+        -4.02082269111
+        -4.00805380525
+        -3.99528491938
+        -3.98251603352
+        -3.96974714766
+        -3.95697826179
+        -3.94420937593
+        -3.93144049006
+        -3.9186716042
+        -3.90590271834
+        -3.89313383247
+        -3.88036494661
+        -3.86759606075
+        -3.85482717488
+        -3.84205828902
+        -3.82928940315
+        -3.81652051729
+        -3.80375163143
+        -3.79098274556
+        -3.7782138597
+        -3.76544497384
+        -3.75267608797
+        -3.73990720211
+        -3.72713831624
+        -3.71436943038
+        -3.70160054452
+        -3.68883165865
+        -3.67606277279
+        -3.66329388693
+        -3.65052500106
+        -3.6377561152
+        -3.62498722933
+        -3.61221834347
+        -3.59944945761
+        -3.58668057174
+        -3.57391168588
+        -3.56114280001
+        -3.54837391415
+        -3.53560502829
+        -3.52283614242
+        -3.51006725656
+        -3.4972983707
+        -3.48452948483
+        -3.47176059897
+        -3.4589917131
+        -3.44622282724
+        -3.43345394138
+        -3.42068505551
+        -3.40791616965
+        -3.39514728379
+        -3.38237839792
+        -3.36960951206
+        -3.35684062619
+        -3.34407174033
+        -3.33130285447
+        -3.3185339686
+        -3.30576508274
+        -3.29299619687
+        -3.28022731101
+        -3.26745842515
+        -3.25468953928
+        -3.24192065342
+        -3.22915176756
+        -3.21638288169
+        -3.20361399583
+        -3.19084510996
+        -3.1780762241
+        -3.16530733824
+        -3.15253845237
+        -3.13976956651
+        -3.12700068065
+        -3.11423179478
+        -3.10146290892
+        -3.08869402305
+        -3.07592513719
+        -3.06315625133
+        -3.05038736546
+        -3.0376184796
+        -3.02484959374
+        -3.01208070787
+        -2.99931182201
+        -2.98654293614
+        -2.97377405028
+        -2.96100516442
+        -2.94823627855
+        -2.93546739269
+        -2.92269850682
+        -2.90992962096
+        -2.8971607351
+        -2.88439184923
+        -2.87162296337
+        -2.85885407751
+        -2.84608519164
+        -2.83331630578
+        -2.82054741991
+        -2.80777853405
+        -2.79500964819
+        -2.78224076232
+        -2.76947187646
+        -2.7567029906
+        -2.74393410473
+        -2.73116521887
+        -2.71946657608
+        -2.71081103409
+        -2.7021554921
+        -2.69349995011
+        -2.68484440813
+        -2.67618886614
+        -2.66753332415
+        -2.65887778216
+        -2.65022224017
+        -2.64156669818
+        -2.63291115619
+        -2.6242556142
+        -2.61560007221
+        -2.60694453023
+        -2.59828898824
+        -2.58963344625
+        -2.58097790426
+        -2.57232236227
+        -2.56366682028
+        -2.55501127829
+        -2.5463557363
+        -2.53770019431
+        -2.52904465233
+        -2.52079819793
+        -2.51480589963
+        -2.50881360133
+        -2.50282130303
+        -2.49682900473
+        -2.49083670643
+        -2.48484440813
+        -2.47885210983
+        -2.47285981153
+        -2.46686751323
+        -2.46087521493
+        -2.45488291663
+        -2.44889061833
+        -2.44289832003
+        -2.43690602173
+        -2.43091372343
+        -2.42492142513
+        -2.41892912683
+        -2.41293682853
+        -2.40694453023
+        -2.40095223193
+        -2.39495993363
+        -2.38896763533
+        -2.38297533703
+        -2.37698303873
+        -2.37099074043
+        -2.36499844213
+        -2.35900614383
+        -2.35301384553
+        -2.34702154723
+        -2.34102924893
+        -2.33503695063
+        -2.32904465233
+        -2.32305235403
+        -2.31876441766
+        -2.31496442361
+        -2.31116442957
+        -2.30736443552
+        -2.30356444148
+        -2.29976444744
+        -2.29596445339
+        -2.29216445935
+        -2.2883644653
+        -2.28456447126
+        -2.28076447722
+        -2.27696448317
+        -2.27316448913
+        -2.26936449508
+        -2.26556450104
+        -2.261764507
+        -2.25796451295
+        -2.25416451891
+        -2.25036452487
+        -2.24656453082
+        -2.24276453678
+        -2.23896454273
+        -2.23516454869
+        -2.23136455465
+        -2.2275645606
+        -2.22376456656
+        -2.21996457251
+        -2.21616457847
+        -2.21236458443
+        -2.20856459038
+        -2.20476459634
+        -2.20096460229
+        -2.19716460825
+        -2.19336461421
+        -2.18956462016
+        -2.18576462612
+        -2.18196463208
+        -2.17816463803
+        -2.17436464399
+        -2.17056464994
+        -2.1667646559
+        -2.16296466186
+        -2.15916466781
+        -2.15536467377
+        -2.15156467972
+        -2.14776468568
+        -2.14396469164
+        -2.14016469759
+        -2.13636470355
+        -2.1325647095
+        -2.12876471546
+        -2.12496472142
+        -2.12126443255
+        -2.11814843743
+        -2.11503244231
+        -2.1119164472
+        -2.10880045208
+        -2.10568445697
+        -2.10256846185
+        -2.09945246673
+        -2.09633647162
+        -2.0932204765
+        -2.09010448139
+        -2.08698848627
+        -2.08387249115
+        -2.08075649604
+        -2.07764050092
+        -2.07452450581
+        -2.07140851069
+        -2.06829251557
+        -2.06517652046
+        -2.06206052534
+        -2.05894453023
+        -2.05582853511
+        -2.05271253999
+        -2.04959654488
+        -2.04648054976
+        -2.04336455465
+        -2.04024855953
+        -2.03713256441
+        -2.0340165693
+        -2.03090057418
+        -2.02778457907
+        -2.02466858395
+        -2.02155258883
+        -2.01843659372
+        -2.0153205986
+        -2.01220460349
+        -2.00908860837
+        -2.00597261325
+        -2.00285661814
+        -1.99974062302
+        -1.99662462791
+        -1.99350863279
+        -1.99039263767
+        -1.98727664256
+        -1.98416064744
+        -1.98104465233
+        -1.97792865721
+        -1.97481266209
+        -1.97169666698
+        -1.96858067186
+        -1.96546467675
+        -1.96234868163
+        -1.95923268651
+        -1.9561166914
+        -1.95300069628
+        -1.94988470117
+        -1.94676870605
+        -1.94365271093
+        -1.94053671582
+        -1.9374207207
+        -1.93430472559
+        -1.93118873047
+        -1.92807273535
+        -1.92495674024
+        -1.92184074512
+        -1.919722715
+        -1.91764538493
+        -1.91556805485
+        -1.91349072477
+        -1.91141339469
+        -1.90933606462
+        -1.90725873454
+        -1.90518140446
+        -1.90310407439
+        -1.90102674431
+        -1.89894941423
+        -1.89687208415
+        -1.89479475408
+        -1.892717424
+        -1.89064009392
+        -1.88856276384
+        -1.88648543377
+        -1.88440810369
+        -1.88233077361
+        -1.88025344353
+        -1.87817611346
+        -1.87609878338
+        -1.8740214533
+        -1.87194412323
+        -1.86986679315
+        -1.86778946307
+        -1.86571213299
+        -1.86363480292
+        -1.86155747284
+        -1.85948014276
+        -1.85740281268
+        -1.85532548261
+        -1.85324815253
+        -1.85117082245
+        -1.84909349237
+        -1.8470161623
+        -1.84493883222
+        -1.84286150214
+        -1.84078417207
+        -1.83870684199
+        -1.83662951191
+        -1.83455218183
+        -1.83247485176
+        -1.83039752168
+        -1.8283201916
+        -1.82624286152
+        -1.82416553145
+        -1.82208820137
+        -1.82001087129
+        -1.81793354121
+        -1.81585621114
+        -1.81377888106
+        -1.81170155098
+        -1.80962422091
+        -1.80754689083
+        -1.80546956075
+        -1.80339223067
+        -1.8013149006
+        -1.79923757052
+        -1.79716024044
+        -1.79508291036
+        -1.79300558029
+        -1.79092825021
+        -1.78885092013
+        -1.78677359005
+        -1.78469625998
+        -1.7826189299
+        -1.78054159982
+        -1.77846426975
+        -1.77638693967
+        -1.77430960959
+        -1.77223227951
+        -1.77015494944
+        -1.76807761936
+        -1.76600028928
+        -1.7639229592
+        -1.76184562913
+        -1.75976829905
+        -1.75769096897
+        -1.75561363889
+        -1.75353630882
+        -1.75145897874
+        -1.74938164866
+        -1.74730431859
+        -1.74522698851
+        -1.74314965843
+        -1.74107232835
+        -1.73899499828
+        -1.7369176682
+        -1.73484033812
+        -1.73276300804
+        -1.73068567797
+        -1.72860834789
+        -1.72653101781
+        -1.72445368774
+        -1.72237635766
+        -1.72038775367
+        -1.71844025672
+        -1.71649275977
+        -1.71454526283
+        -1.71259776588
+        -1.71065026893
+        -1.70870277198
+        -1.70675527504
+        -1.70480777809
+        -1.70286028114
+        -1.70091278419
+        -1.69896528725
+        -1.6970177903
+        -1.69507029335
+        -1.6931227964
+        -1.69117529946
+        -1.68922780251
+        -1.68728030556
+        -1.68533280861
+        -1.68338531167
+        -1.68143781472
+        -1.67949031777
+        -1.67754282082
+        -1.67559532388
+        -1.67364782693
+        -1.67170032998
+        -1.66975283303
+        -1.66780533609
+        -1.66585783914
+        -1.66391034219
+        -1.66196284524
+        -1.6600153483
+        -1.65806785135
+        -1.6561203544
+        -1.65417285745
+        -1.65222536051
+        -1.65027786356
+        -1.64833036661
+        -1.64638286966
+        -1.64443537272
+        -1.64248787577
+        -1.64054037882
+        -1.63859288187
+        -1.63664538493
+        -1.63469788798
+        -1.63275039103
+        -1.63080289408
+        -1.62885539714
+        -1.62690790019
+        -1.62496040324
+        -1.62301290629
+        -1.62106540935
+        -1.6191179124
+        -1.61717041545
+        -1.6152229185
+        -1.61327542156
+        -1.61132792461
+        -1.60938042766
+        -1.60743293071
+        -1.60548543377
+        -1.60353793682
+        -1.60159043987
+        -1.59964294292
+        -1.59769544598
+        -1.59574794903
+        -1.59380045208
+        -1.59185295513
+        -1.58990545819
+        -1.58795796124
+        -1.58601046429
+        -1.58406296734
+        -1.5821154704
+        -1.58016797345
+        -1.5782204765
+        -1.57627297955
+        -1.57432548261
+        -1.57237798566
+        -1.57043048871
+        -1.56848299176
+        -1.56653549482
+        -1.56458799787
+        -1.56264050092
+        -1.56069300397
+        -1.55874550703
+        -1.55679801008
+        -1.55485051313
+        -1.55290301618
+        -1.55095551924
+        -1.54900802229
+        -1.54706052534
+        -1.54511302839
+        -1.54316553145
+        -1.5412180345
+        -1.53927053755
+        -1.5373230406
+        -1.53537554366
+        -1.53342804671
+        -1.53148054976
+        -1.52953305281
+        -1.52758555587
+        -1.52563805892
+        -1.52369056197
+        -1.52174306502
+        -1.52018018346
+        -1.5186221859
+        -1.51706418835
+        -1.51550619079
+        -1.51394819323
+        -1.51239019567
+        -1.51083219811
+        -1.50927420056
+        -1.507716203
+        -1.50615820544
+        -1.50460020788
+        -1.50304221032
+        -1.50148421277
+        -1.49992621521
+        -1.49836821765
+        -1.49681022009
+        -1.49525222253
+        -1.49369422498
+        -1.49213622742
+        -1.49057822986
+        -1.4890202323
+        -1.48746223474
+        -1.48590423719
+        -1.48434623963
+        -1.48278824207
+        -1.48123024451
+        -1.47967224695
+        -1.4781142494
+        -1.47655625184
+        -1.47499825428
+        -1.47344025672
+        -1.47188225916
+        -1.47032426161
+        -1.46876626405
+        -1.46720826649
+        -1.46565026893
+        -1.46409227137
+        -1.46253427382
+        -1.46097627626
+        -1.4594182787
+        -1.45786028114
+        -1.45630228358
+        -1.45474428603
+        -1.45318628847
+        -1.45162829091
+        -1.45007029335
+        -1.44851229579
+        -1.44695429824
+        -1.44539630068
+        -1.44383830312
+        -1.44228030556
+        -1.440722308
+        -1.43916431045
+        -1.43760631289
+        -1.43604831533
+        -1.43449031777
+        -1.43293232021
+        -1.43137432266
+        -1.4298163251
+        -1.42825832754
+        -1.42670032998
+        -1.42514233242
+        -1.42358433487
+        -1.42202633731
+        -1.42046833975
+        -1.41891034219
+        -1.41735234463
+        -1.41579434708
+        -1.41423634952
+        -1.41267835196
+        -1.4111203544
+        -1.40956235684
+        -1.40800435929
+        -1.40644636173
+        -1.40488836417
+        -1.40333036661
+        -1.40177236905
+        -1.4002143715
+        -1.39865637394
+        -1.39709837638
+        -1.39554037882
+        -1.39398238126
+        -1.39242438371
+        -1.39086638615
+        -1.38930838859
+        -1.38775039103
+        -1.38619239347
+        -1.38463439592
+        -1.38307639836
+        -1.3815184008
+        -1.37996040324
+        -1.37840240568
+        -1.37684440813
+        -1.37528641057
+        -1.37372841301
+        -1.37217041545
+        -1.37061241789
+        -1.36905442034
+        -1.36749642278
+        -1.36593842522
+        -1.36438042766
+        -1.3628224301
+        -1.36126443255
+        -1.35970643499
+        -1.35814843743
+        -1.35659043987
+        -1.35503244231
+        -1.35347444476
+        -1.3519164472
+        -1.35035844964
+        -1.34880045208
+        -1.34724245452
+        -1.34568445697
+        -1.34412645941
+        -1.34256846185
+        -1.34101046429
+        -1.33945246673
+        -1.33789446918
+        -1.33633647162
+        -1.33477847406
+        -1.3332204765
+        -1.33166247894
+        -1.33010448139
+        -1.32854648383
+        -1.32698848627
+        -1.32543048871
+        -1.32387249115
+        -1.3223144936
+        -1.32075649604
+        -1.31919849848
+        -1.31764050092
+        -1.31608250336
+        -1.31452450581
+        -1.31296650825
+        -1.31140851069
+        -1.30985051313
+        -1.30829251557
+        -1.30673451802
+        -1.30517652046
+        -1.3036185229
+        -1.30206052534
+        -1.30050252778
+        -1.29894453023
+        -1.29738653267
+        -1.29582853511
+        -1.29427053755
+        -1.29271253999
+        -1.29115454244
+        -1.28959654488
+        -1.28803854732
+        -1.28648054976
+        -1.2849225522
+        -1.28336455465
+        -1.28180655709
+        -1.28024855953
+        -1.27869056197
+        -1.27713256441
+        -1.27557456686
+        -1.2740165693
+        -1.27245857174
+        -1.27090057418
+        -1.26934257662
+        -1.26778457907
+        -1.26622658151
+        -1.26466858395
+        -1.26311058639
+        -1.26155258883
+        -1.25999459128
+        -1.25843659372
+        -1.25687859616
+        -1.2553205986
+        -1.25376260104
+        -1.25220460349
+        -1.25064660593
+        -1.24908860837
+        -1.24753061081
+        -1.24597261325
+        -1.2444146157
+        -1.24285661814
+        -1.24129862058
+        -1.23974062302
+        -1.23818262546
+        -1.23662462791
+        -1.23506663035
+        -1.23350863279
+        -1.23195063523
+        -1.23039263767
+        -1.22883464012
+        -1.22727664256
+        -1.225718645
+        -1.22416064744
+        -1.22260264988
+        -1.22104465233
+        -1.21948665477
+        -1.21792865721
+        -1.21637065965
+        -1.21481266209
+        -1.21325466454
+        -1.21169666698
+        -1.21013866942
+        -1.20858067186
+        -1.2070226743
+        -1.20546467675
+        -1.20390667919
+        -1.20234868163
+        -1.20079068407
+        -1.19923268651
+        -1.19767468896
+        -1.1961166914
+        -1.19455869384
+        -1.19300069628
+        -1.19144269872
+        -1.18988470117
+        -1.18832670361
+        -1.18676870605
+        -1.18521070849
+        -1.18365271093
+        -1.18209471338
+        -1.18053671582
+        -1.17897871826
+        -1.1774207207
+        -1.17586272314
+        -1.17430472559
+        -1.17274672803
+        -1.17118873047
+        -1.16963073291
+        -1.16807273535
+        -1.1665147378
+        -1.16495674024
+        -1.16339874268
+        -1.16184074512
+        -1.16028274756
+        -1.15872475001
+        -1.15716675245
+        -1.15560875489
+        -1.15405075733
+        -1.15249275977
+        -1.15093476222
+        -1.14937676466
+        -1.1478187671
+        -1.14626076954
+        -1.14470277198
+        -1.14314477443
+        -1.14158677687
+        -1.14002877931
+        -1.13847078175
+        -1.13691278419
+        -1.13535478664
+        -1.13379678908
+        -1.13223879152
+        -1.13068079396
+        -1.1291227964
+        -1.12756479885
+        -1.12600680129
+        -1.12444880373
+        -1.12289080617
+        -1.12134212084
+        -1.1198217258
+        -1.11830133076
+        -1.11678093572
+        -1.11526054068
+        -1.11374014564
+        -1.1122197506
+        -1.11069935556
+        -1.10917896052
+        -1.10765856548
+        -1.10613817044
+        -1.1046177754
+        -1.10309738036
+        -1.10157698532
+        -1.10005659028
+        -1.09853619524
+        -1.0970158002
+        -1.09549540516
+        -1.09397501012
+        -1.09245461508
+        -1.09093422004
+        -1.089413825
+        -1.08789342996
+        -1.08637303492
+        -1.08485263988
+        -1.08333224484
+        -1.0818118498
+        -1.08029145476
+        -1.07877105972
+        -1.07725066468
+        -1.07573026964
+        -1.0742098746
+        -1.07268947956
+        -1.07116908452
+        -1.06964868948
+        -1.06812829444
+        -1.0666078994
+        -1.06508750436
+        -1.06356710932
+        -1.06204671428
+        -1.06052631924
+        -1.0590059242
+        -1.05748552916
+        -1.05596513412
+        -1.05444473908
+        -1.05292434404
+        -1.051403949
+        -1.04988355396
+        -1.04836315892
+        -1.04684276388
+        -1.04532236884
+        -1.0438019738
+        -1.04228157876
+        -1.04076118372
+        -1.03924078868
+        -1.03772039364
+        -1.0361999986
+        -1.03467960356
+        -1.03315920852
+        -1.03163881348
+        -1.03011841844
+        -1.0285980234
+        -1.02707762836
+        -1.02555723332
+        -1.02403683828
+        -1.02251644324
+        -1.0209960482
+        -1.01947565316
+        -1.01795525812
+        -1.01643486309
+        -1.01491446805
+        -1.01339407301
+        -1.01187367797
+        -1.01035328293
+        -1.00883288789
+        -1.00731249285
+        -1.00579209781
+        -1.00427170277
+        -1.00275130773
+        -1.00123091269
+        -0.999710517646
+        -0.998190122606
+        -0.996669727567
+        -0.995149332527
+        -0.993628937487
+        -0.992108542447
+        -0.990588147407
+        -0.989067752367
+        -0.987547357327
+        -0.986026962287
+        -0.984506567248
+        -0.982986172208
+        -0.981465777168
+        -0.979945382128
+        -0.978424987088
+        -0.976904592048
+        -0.975384197008
+        -0.973863801968
+        -0.972343406929
+        -0.970823011889
+        -0.969302616849
+        -0.967782221809
+        -0.966261826769
+        -0.964741431729
+        -0.963221036689
+        -0.961700641649
+        -0.96018024661
+        -0.95865985157
+        -0.95713945653
+        -0.95561906149
+        -0.95409866645
+        -0.95257827141
+        -0.95105787637
+        -0.94953748133
+        -0.948017086291
+        -0.946496691251
+        -0.944976296211
+        -0.943455901171
+        -0.941935506131
+        -0.940415111091
+        -0.938894716051
+        -0.937374321011
+        -0.935853925972
+        -0.934333530932
+        -0.932813135892
+        -0.931292740852
+        -0.929772345812
+        -0.928251950772
+        -0.926731555732
+        -0.925302475472
+        -0.923886114055
+        -0.922469752639
+        -0.921053391223
+        -0.919637029806
+        -0.91822066839
+        -0.916804306974
+        -0.915387945557
+        -0.913971584141
+        -0.912555222724
+        -0.911138861308
+        -0.909722499892
+        -0.908306138475
+        -0.906889777059
+        -0.905473415643
+        -0.904057054226
+        -0.90264069281
+        -0.901224331394
+        -0.899807969977
+        -0.898391608561
+        -0.896975247144
+        -0.895558885728
+        -0.894142524312
+        -0.892726162895
+        -0.891309801479
+        -0.889893440063
+        -0.888477078646
+        -0.88706071723
+        -0.885644355814
+        -0.884227994397
+        -0.882811632981
+        -0.881395271564
+        -0.879978910148
+        -0.878562548732
+        -0.877146187315
+        -0.875729825899
+        -0.874313464483
+        -0.872897103066
+        -0.87148074165
+        -0.870064380234
+        -0.868648018817
+        -0.867231657401
+        -0.865815295984
+        -0.864398934568
+        -0.862982573152
+        -0.861566211735
+        -0.860149850319
+        -0.858733488903
+        -0.857317127486
+        -0.85590076607
+        -0.854484404654
+        -0.853068043237
+        -0.851651681821
+        -0.850235320405
+        -0.848818958988
+        -0.847402597572
+        -0.845986236155
+        -0.844569874739
+        -0.843153513323
+        -0.841737151906
+        -0.84032079049
+        -0.838904429074
+        -0.837488067657
+        -0.836071706241
+        -0.834655344825
+        -0.833238983408
+        -0.831822621992
+        -0.830406260575
+        -0.828989899159
+        -0.827573537743
+        -0.826157176326
+        -0.82474081491
+        -0.823324453494
+        -0.821908092077
+        -0.820491730661
+        -0.819075369245
+        -0.817659007828
+        -0.816242646412
+        -0.814826284995
+        -0.813409923579
+        -0.811993562163
+        -0.810577200746
+        -0.80916083933
+        -0.807744477914
+        -0.806328116497
+        -0.804911755081
+        -0.803495393665
+        -0.802079032248
+        -0.800662670832
+        -0.799246309416
+        -0.797829947999
+        -0.796413586583
+        -0.794997225166
+        -0.79358086375
+        -0.792164502334
+        -0.790748140917
+        -0.789331779501
+        -0.787915418085
+        -0.786499056668
+        -0.785082695252
+        -0.783666333836
+        -0.782249972419
+        -0.780833611003
+        -0.779417249586
+        -0.77800088817
+        -0.776584526754
+        -0.775168165337
+        -0.773751803921
+        -0.772335442505
+        -0.770919081088
+        -0.769502719672
+        -0.768086358256
+        -0.766669996839
+        -0.765253635423
+        -0.763837274006
+        -0.76242091259
+        -0.761004551174
+        -0.759588189757
+        -0.758171828341
+        -0.756755466925
+        -0.755339105508
+        -0.753922744092
+        -0.752506382676
+        -0.751090021259
+        -0.749673659843
+        -0.748257298426
+        -0.74684093701
+        -0.745424575594
+        -0.744008214177
+        -0.742591852761
+        -0.741175491345
+        -0.739759129928
+        -0.738342768512
+        -0.736926407096
+        -0.735510045679
+        -0.734093684263
+        -0.732677322847
+        -0.73126096143
+        -0.729844600014
+        -0.728428238597
+        -0.727011877181
+        -0.725595515765
+        -0.724179154348
+        -0.722762792932
+        -0.721346431516
+        -0.719930070099
+        -0.718513708683
+        -0.717097347267
+        -0.71568098585
+        -0.714264624434
+        -0.712848263017
+        -0.711431901601
+        -0.710015540185
+        -0.708599178768
+        -0.707182817352
+        -0.705766455936
+        -0.704350094519
+        -0.702933733103
+        -0.701517371687
+        -0.70010101027
+        -0.698684648854
+        -0.697268287437
+        -0.695851926021
+        -0.694435564605
+        -0.693019203188
+        -0.691602841772
+        -0.690186480356
+        -0.688770118939
+        -0.687353757523
+        -0.685937396107
+        -0.68452103469
+        -0.683104673274
+        -0.681688311858
+        -0.680271950441
+        -0.678855589025
+        -0.677439227608
+        -0.676022866192
+        -0.674606504776
+        -0.673190143359
+        -0.671773781943
+        -0.670357420527
+        -0.66894105911
+        -0.667524697694
+        -0.666108336278
+        -0.664691974861
+        -0.663275613445
+        -0.661859252028
+        -0.660442890612
+        -0.659026529196
+        -0.657610167779
+        -0.656193806363
+        -0.654777444947
+        -0.65336108353
+        -0.651944722114
+        -0.650528360698
+        -0.649111999281
+        -0.647695637865
+        -0.646279276448
+        -0.644862915032
+        -0.643446553616
+        -0.642030192199
+        -0.640613830783
+        -0.639197469367
+        -0.63778110795
+        -0.636364746534
+        -0.634948385118
+        -0.633532023701
+        -0.632115662285
+        -0.630699300868
+        -0.629282939452
+        -0.627866578036
+        -0.626450216619
+        -0.625033855203
+        -0.623617493787
+        -0.62220113237
+        -0.620784770954
+        -0.619368409538
+        -0.617952048121
+        -0.616535686705
+        -0.615119325289
+        -0.613702963872
+        -0.612286602456
+        -0.610870241039
+        -0.609453879623
+        -0.608037518207
+        -0.60662115679
+        -0.605204795374
+        -0.603788433958
+        -0.602372072541
+        -0.600955711125
+        -0.599539349709
+        -0.598122988292
+        -0.596706626876
+        -0.595290265459
+        -0.593873904043
+        -0.592457542627
+        -0.59104118121
+        -0.589624819794
+        -0.588208458378
+        -0.586792096961
+        -0.585375735545
+        -0.583959374129
+        -0.582543012712
+        -0.581126651296
+        -0.579710289879
+        -0.578293928463
+        -0.576877567047
+        -0.57546120563
+        -0.574044844214
+        -0.572628482798
+        -0.571212121381
+        -0.569795759965
+        -0.568379398549
+        -0.566963037132
+        -0.565546675716
+        -0.5641303143
+        -0.562713952883
+        -0.561297591467
+        -0.55988123005
+        -0.558464868634
+        -0.557048507218
+        -0.555632145801
+        -0.554215784385
+        -0.552799422969
+        -0.551383061552
+        -0.549966700136
+        -0.54855033872
+        -0.547133977303
+        -0.545717615887
+        -0.54430125447
+        -0.542884893054
+        -0.541468531638
+        -0.540052170221
+        -0.538635808805
+        -0.537219447389
+        -0.535803085972
+        -0.534386724556
+        -0.53297036314
+        -0.531554001723
+        -0.530137640307
+        -0.52872127889
+        -0.527304917474
+        -0.525888556058
+        -0.524472194641
+        -0.523055833225
+        -0.521639471809
+        -0.520223110392
+        -0.518806748976
+        -0.51739038756
+        -0.515974026143
+        -0.514557664727
+        -0.513141303311
+        -0.511724941894
+        -0.510308580478
+        -0.508892219061
+        -0.507475857645
+        -0.506059496229
+        -0.504643134812
+        -0.503226773396
+        -0.50181041198
+        -0.500394050563
+        -0.498977689147
+        -0.497561327731
+        -0.496144966314
+        -0.494728604898
+        -0.493312243481
+        -0.491895882065
+        -0.490479520649
+        -0.489063159232
+        -0.487646797816
+        -0.4862304364
+        -0.484814074983
+        -0.483397713567
+        -0.481981352151
+        -0.480564990734
+        -0.479148629318
+        -0.477732267901
+        -0.476315906485
+        -0.474899545069
+        -0.473483183652
+        -0.472066822236
+        -0.47065046082
+        -0.469234099403
+        -0.467817737987
+        -0.466401376571
+        -0.464985015154
+        -0.463568653738
+        -0.462152292321
+        -0.460735930905
+        -0.459319569489
+        -0.457903208072
+        -0.456486846656
+        -0.45507048524
+        -0.453654123823
+        -0.452237762407
+        -0.450821400991
+        -0.449405039574
+        -0.447988678158
+        -0.446572316742
+        -0.445155955325
+        -0.443739593909
+        -0.442323232492
+        -0.440906871076
+        -0.43949050966
+        -0.438074148243
+        -0.436657786827
+        -0.435241425411
+        -0.433825063994
+        -0.432408702578
+        -0.430992341162
+        -0.429575979745
+        -0.428159618329
+        -0.426743256912
+        -0.425326895496
+        -0.42391053408
+        -0.422494172663
+        -0.421077811247
+        -0.419661449831
+        -0.418245088414
+        -0.416828726998
+        -0.415412365582
+        -0.413996004165
+        -0.412579642749
+        -0.411163281332
+        -0.409746919916
+        -0.4083305585
+        -0.406914197083
+        -0.405497835667
+        -0.404081474251
+        -0.402665112834
+        -0.401248751418
+        -0.399832390002
+        -0.398416028585
+        -0.396999667169
+        -0.395583305753
+        -0.394166944336
+        -0.39275058292
+        -0.391334221503
+        -0.389917860087
+        -0.388501498671
+        -0.387085137254
+        -0.385668775838
+        -0.384252414422
+        -0.382836053005
+        -0.381419691589
+        -0.380003330173
+        -0.378586968756
+        -0.37717060734
+        -0.375754245923
+        -0.374337884507
+        -0.372921523091
+        -0.371505161674
+        -0.370088800258
+        -0.368672438842
+        -0.367256077425
+        -0.365839716009
+        -0.364423354593
+        -0.363006993176
+        -0.36159063176
+        -0.360174270343
+        -0.358757908927
+        -0.357341547511
+        -0.355925186094
+        -0.354508824678
+        -0.353092463262
+        -0.351676101845
+        -0.350259740429
+        -0.348843379013
+        -0.347427017596
+        -0.34601065618
+        -0.344594294763
+        -0.343177933347
+        -0.341761571931
+        -0.340345210514
+        -0.338928849098
+        -0.337512487682
+        -0.336096126265
+        -0.334679764849
+        -0.333263403433
+        -0.331847042016
+        -0.3304306806
+        -0.329014319184
+        -0.327597957767
+        -0.326181596351
+        -0.324765234934
+        -0.323348873518
+        -0.321932512102
+        -0.320516150685
+        -0.319099789269
+        -0.317683427853
+        -0.316267066436
+        -0.31485070502
+        -0.313434343604
+        -0.312017982187
+        -0.310601620771
+        -0.309185259354
+        -0.307768897938
+        -0.306352536522
+        -0.304936175105
+        -0.303519813689
+        -0.302103452273
+        -0.300687090856
+        -0.29927072944
+        -0.297854368024
+        -0.296438006607
+        -0.295021645191
+        -0.293605283774
+        -0.292188922358
+        -0.290772560942
+        -0.289356199525
+        -0.287939838109
+        -0.286523476693
+        -0.285107115276
+        -0.28369075386
+        -0.282274392444
+        -0.280858031027
+        -0.279441669611
+        -0.278025308195
+        -0.276608946778
+        -0.275192585362
+        -0.273776223945
+        -0.272359862529
+        -0.270943501113
+        -0.269527139696
+        -0.26811077828
+        -0.266694416864
+        -0.265278055447
+        -0.263861694031
+        -0.262445332615
+        -0.261028971198
+        -0.259612609782
+        -0.258196248365
+        -0.256779886949
+        -0.255363525533
+        -0.253947164116
+        -0.2525308027
+        -0.251114441284
+        -0.249698079867
+        -0.248281718451
+        -0.246865357035
+        -0.245448995618
+        -0.244032634202
+        -0.242616272785
+        -0.241199911369
+        -0.239783549953
+        -0.238367188536
+        -0.23695082712
+        -0.235534465704
+        -0.234118104287
+        -0.232701742871
+        -0.231285381455
+        -0.229869020038
+        -0.228452658622
+        -0.227036297205
+        -0.225619935789
+        -0.224203574373
+        -0.222787212956
+        -0.22137085154
+        -0.219954490124
+        -0.218538128707
+        -0.217121767291
+        -0.215705405875
+        -0.214289044458
+        -0.212872683042
+        -0.211456321626
+        -0.210039960209
+        -0.208623598793
+        -0.207207237376
+        -0.20579087596
+        -0.204374514544
+        -0.202958153127
+        -0.201541791711
+        -0.200125430295
+        -0.198709068878
+        -0.197292707462
+        -0.195876346046
+        -0.194459984629
+        -0.193043623213
+        -0.191627261796
+        -0.19021090038
+        -0.188794538964
+        -0.187378177547
+        -0.185961816131
+        -0.184545454715
+        -0.183129093298
+        -0.181712731882
+        -0.180296370466
+        -0.178880009049
+        -0.177463647633
+        -0.176047286216
+        -0.1746309248
+        -0.173214563384
+        -0.171798201967
+        -0.170381840551
+        -0.168965479135
+        -0.167549117718
+        -0.166132756302
+        -0.164716394886
+        -0.163300033469
+        -0.161883672053
+        -0.160467310637
+        -0.15905094922
+        -0.157634587804
+        -0.156218226387
+        -0.154801864971
+        -0.153385503555
+        -0.151969142138
+        -0.150552780722
+        -0.149136419306
+        -0.147720057889
+        -0.146303696473
+        -0.144887335057
+        -0.14347097364
+        -0.142054612224
+        -0.140638250807
+        -0.139221889391
+        -0.137805527975
+        -0.136389166558
+        -0.134972805142
+        -0.133556443726
+        -0.132140082309
+        -0.130723720893
+        -0.129307359477
+        -0.12789099806
+        -0.126474636644
+        -0.125058275227
+        -0.123641913811
+        -0.122225552395
+        -0.120809190978
+        -0.119392829562
+        -0.117976468146
+        -0.116560106729
+        -0.115143745313
+        -0.113727383897
+        -0.11231102248
+        -0.110894661064
+        -0.109478299647
+        -0.108061938231
+        -0.106645576815
+        -0.105229215398
+        -0.103812853982
+        -0.102396492566
+        -0.100980131149
+        -0.099563769733
+        -0.0981474083166
+        -0.0967310469002
+        -0.0953146854839
+        -0.0938983240675
+        -0.0924819626512
+        -0.0910656012348
+        -0.0896492398184
+        -0.0882328784021
+        -0.0868165169857
+        -0.0854001555694
+        -0.083983794153
+        -0.0825674327366
+        -0.0811510713203
+        -0.0797347099039
+        -0.0783183484875
+        -0.0769019870712
+        -0.0754856256548
+        -0.0740692642385
+        -0.0726529028221
+        -0.0712365414057
+        -0.0698201799894
+        -0.068403818573
+        -0.0669874571567
+        -0.0655710957403
+        -0.0641547343239
+        -0.0627383729076
+        -0.0613220114912
+        -0.0599056500748
+        -0.0584892886585
+        -0.0570729272421
+        -0.0556565658258
+        -0.0542402044094
+        -0.052823842993
+        -0.0514074815767
+        -0.0499911201603
+        -0.048574758744
+        -0.0471583973276
+        -0.0457420359112
+        -0.0443256744949
+        -0.0429093130785
+        -0.0414929516622
+        -0.0400765902458
+        -0.0386602288294
+        -0.0372438674131
+        -0.0358275059967
+        -0.0344111445803
+        -0.032994783164
+        -0.0315784217476
+        -0.0301620603313
+        -0.0287456989149
+        -0.0273293374985
+        -0.0259129760822
+        -0.0244966146658
+        -0.0230802532495
+        -0.0216638918331
+        -0.0202475304167
+        -0.0188311690004
+        -0.017414807584
+        -0.0159984461676
+        -0.0145820847513
+        -0.0131657233349
+        -0.0117493619186
+        -0.0103330005022
+        -0.00891663908584
+        -0.00750027766948
+        -0.00608391625311
+        -0.00466755483675
+        -0.00325119342039
+        -0.00183483200403
+        -0.00041847058767
+        0.000997890828692
+        0.00241425224505
+        0.00383061366141
+        0.00524697507778
+        0.00666333649414
+        0.0080796979105
+        0.00949605932686
+        0.0109124207432
+        0.0123287821596
+        0.0137451435759
+        0.0151615049923
+        0.0165778664087
+        0.017994227825
+        0.0194105892414
+        0.0208269506578
+        0.0222433120741
+        0.0236596734905
+        0.0250760349068
+        0.0264923963232
+        0.0279087577396
+        0.0293251191559
+        0.0307414805723
+        0.0321578419886
+        0.033574203405
+        0.0349905648214
+        0.0364069262377
+        0.0378232876541
+        0.0392396490705
+        0.0406560104868
+        0.0420723719032
+        0.0434887333195
+        0.0449050947359
+        0.0463214561523
+        0.0477378175686
+        0.049154178985
+        0.0505705404013
+        0.0519869018177
+        0.0534032632341
+        0.0548196246504
+        0.0562359860668
+        0.0576523474831
+        0.0590687088995
+        0.0604850703159
+        0.0619014317322
+        0.0633177931486
+        0.064734154565
+        0.0661505159813
+        0.0675668773977
+        0.068983238814
+        0.0703996002304
+        0.0718159616468
+        0.0732323230631
+        0.0746486844795
+        0.0760650458958
+        0.0774814073122
+        0.0788977687286
+        0.0803141301449
+        0.0817304915613
+        0.0831468529777
+        0.084563214394
+        0.0859795758104
+        0.0873959372267
+        0.0888122986431
+        0.0902286600595
+        0.0916450214758
+        0.0930613828922
+        0.0944777443085
+        0.0958941057249
+        0.0973104671413
+        0.0987268285576
+        0.100143189974
+        0.10155955139
+        0.102975912807
+        0.104392274223
+        0.105808635639
+        0.107224997056
+        0.108641358472
+        0.110057719889
+        0.111474081305
+        0.112890442721
+        0.114306804138
+        0.115723165554
+        0.11713952697
+        0.118555888387
+        0.119972249803
+        0.121388611219
+        0.122804972636
+        0.124221334052
+        0.125637695468
+        0.127054056885
+        0.128470418301
+        0.129886779718
+        0.131303141134
+        0.13271950255
+        0.134135863967
+        0.135552225383
+        0.136968586799
+        0.138384948216
+        0.139801309632
+        0.141217671048
+        0.142634032465
+        0.144050393881
+        0.145466755298
+        0.146883116714
+        0.14829947813
+        0.149715839547
+        0.151132200963
+        0.152548562379
+        0.153964923796
+        0.155381285212
+        0.156797646628
+        0.158214008045
+        0.159630369461
+        0.161046730878
+        0.162463092294
+        0.16387945371
+        0.165295815127
+        0.166712176543
+        0.168128537959
+        0.169544899376
+        0.170961260792
+        0.172377622208
+        0.173793983625
+        0.175210345041
+        0.176626706458
+        0.178043067874
+        0.17945942929
+        0.180875790707
+        0.182292152123
+        0.183708513539
+        0.185124874956
+        0.186541236372
+        0.187957597788
+        0.189373959205
+        0.190790320621
+        0.192206682037
+        0.193623043454
+        0.19503940487
+        0.196455766287
+        0.197872127703
+        0.199288489119
+        0.200704850536
+        0.202121211952
+        0.203537573368
+        0.204953934785
+        0.206370296201
+        0.207786657617
+        0.209203019034
+        0.21061938045
+        0.212035741867
+        0.213452103283
+        0.214868464699
+        0.216284826116
+        0.217701187532
+        0.219117548948
+        0.220533910365
+        0.221950271781
+        0.223366633197
+        0.224782994614
+        0.22619935603
+        0.227615717447
+        0.229032078863
+        0.230448440279
+        0.231864801696
+        0.233281163112
+        0.234697524528
+        0.236113885945
+        0.237530247361
+        0.238946608777
+        0.240362970194
+        0.24177933161
+        0.243195693026
+        0.244612054443
+        0.246028415859
+        0.247444777276
+        0.248861138692
+        0.250277500108
+        0.251693861525
+        0.253110222941
+        0.254526584357
+        0.255942945774
+        0.25735930719
+        0.258775668606
+        0.260192030023
+        0.261608391439
+        0.263024752856
+        0.264441114272
+        0.265857475688
+        0.267273837105
+        0.268690198521
+        0.270106559937
+        0.271522921354
+        0.27293928277
+        0.274355644186
+        0.275772005603
+        0.277188367019
+        0.278604728436
+        0.280021089852
+        0.281437451268
+        0.282853812685
+        0.284270174101
+        0.285686535517
+        0.287102896934
+        0.28851925835
+        0.289935619766
+        0.291351981183
+        0.292768342599
+        0.294184704016
+        0.295601065432
+        0.297017426848
+        0.298433788265
+        0.299850149681
+        0.301266511097
+        0.302682872514
+        0.30409923393
+        0.305515595346
+        0.306931956763
+        0.308348318179
+        0.309764679595
+        0.311181041012
+        0.312597402428
+        0.314013763845
+        0.315430125261
+        0.316846486677
+        0.318262848094
+        0.31967920951
+        0.321095570926
+        0.322511932343
+        0.323928293759
+        0.325344655175
+        0.326761016592
+        0.328177378008
+        0.329593739425
+        0.331010100841
+        0.332426462257
+        0.333842823674
+        0.33525918509
+        0.336675546506
+        0.338091907923
+        0.339508269339
+        0.340924630755
+        0.342340992172
+        0.343757353588
+        0.345173715005
+        0.346590076421
+        0.348006437837
+        0.349422799254
+        0.35083916067
+        0.352255522086
+        0.353671883503
+        0.355088244919
+        0.356504606335
+        0.357920967752
+        0.359337329168
+        0.360753690584
+        0.362170052001
+        0.363586413417
+        0.365002774834
+        0.36641913625
+        0.367835497666
+        0.369251859083
+        0.370668220499
+        0.372084581915
+        0.373500943332
+        0.374917304748
+        0.376333666164
+        0.377750027581
+        0.379166388997
+        0.380582750414
+        0.38199911183
+        0.383415473246
+        0.384831834663
+        0.386248196079
+        0.387664557495
+        0.389080918912
+        0.390497280328
+        0.391913641744
+        0.393330003161
+        0.394746364577
+        0.396162725994
+        0.39757908741
+        0.398995448826
+        0.400411810243
+        0.401828171659
+        0.403244533075
+        0.404660894492
+        0.406077255908
+        0.407493617324
+        0.408909978741
+        0.410326340157
+        0.411742701574
+        0.41315906299
+        0.414575424406
+        0.415991785823
+        0.417408147239
+        0.418824508655
+        0.420240870072
+        0.421657231488
+        0.423073592904
+        0.424489954321
+        0.425906315737
+        0.427322677153
+        0.42873903857
+        0.430155399986
+        0.431571761403
+        0.432988122819
+        0.434404484235
+        0.435820845652
+        0.437237207068
+        0.438653568484
+        0.440069929901
+        0.441486291317
+        0.442902652733
+        0.44431901415
+        0.445735375566
+        0.447151736983
+        0.448568098399
+        0.449984459815
+        0.451400821232
+        0.452817182648
+        0.454233544064
+        0.455649905481
+        0.457066266897
+        0.458482628313
+        0.45989898973
+        0.461315351146
+        0.462731712563
+        0.464148073979
+        0.465564435395
+        0.466980796812
+        0.468397158228
+        0.469813519644
+        0.471229881061
+        0.472646242477
+        0.474062603893
+        0.47547896531
+        0.476895326726
+        0.478311688142
+        0.479728049559
+        0.481144410975
+        0.482560772392
+        0.483977133808
+        0.485393495224
+        0.486809856641
+        0.488226218057
+        0.489642579473
+        0.49105894089
+        0.492475302306
+        0.493891663722
+        0.495308025139
+        0.496724386555
+        0.498140747972
+        0.499557109388
+        0.500973470804
+        0.502389832221
+        0.503806193637
+        0.505222555053
+        0.50663891647
+        0.508055277886
+        0.509471639302
+        0.510888000719
+        0.512304362135
+        0.513720723552
+        0.515137084968
+        0.516553446384
+        0.517969807801
+        0.519386169217
+        0.520802530633
+        0.52221889205
+        0.523635253466
+        0.525051614882
+        0.526467976299
+        0.527884337715
+        0.529300699132
+        0.530717060548
+        0.532133421964
+        0.533549783381
+        0.534966144797
+        0.536382506213
+        0.53779886763
+        0.539215229046
+        0.540631590462
+        0.542047951879
+        0.543464313295
+        0.544880674711
+        0.546297036128
+        0.547713397544
+        0.549129758961
+        0.550546120377
+        0.551962481793
+        0.55337884321
+        0.554795204626
+        0.556211566042
+        0.557627927459
+        0.559044288875
+        0.560460650291
+        0.561877011708
+        0.563293373124
+        0.564709734541
+        0.566126095957
+        0.567542457373
+        0.56895881879
+        0.570375180206
+        0.571791541622
+        0.573207903039
+        0.574624264455
+        0.576040625871
+        0.577456987288
+        0.578873348704
+        0.580289710121
+        0.581706071537
+        0.583122432953
+        0.58453879437
+        0.585955155786
+        0.587371517202
+        0.588787878619
+        0.590204240035
+        0.591620601451
+        0.593036962868
+        0.594453324284
+        0.5958696857
+        0.597286047117
+        0.598702408533
+        0.60011876995
+        0.601535131366
+        0.602951492782
+        0.604367854199
+        0.605784215615
+        0.607200577031
+        0.608616938448
+        0.610033299864
+        0.61144966128
+        0.612866022697
+        0.614282384113
+        0.61569874553
+        0.617115106946
+        0.618531468362
+        0.619947829779
+        0.621364191195
+        0.622780552611
+        0.624196914028
+        0.625613275444
+        0.62702963686
+        0.628445998277
+        0.629862359693
+        0.63127872111
+        0.632695082526
+        0.634111443942
+        0.635527805359
+        0.636944166775
+        0.638360528191
+        0.639776889608
+        0.641193251024
+        0.64260961244
+        0.644025973857
+        0.645442335273
+        0.646858696689
+        0.648275058106
+        0.649691419522
+        0.651107780939
+        0.652524142355
+        0.653940503771
+        0.655356865188
+        0.656773226604
+        0.65818958802
+        0.659605949437
+        0.661022310853
+        0.662438672269
+        0.663855033686
+        0.665271395102
+        0.666687756519
+        0.668104117935
+        0.669520479351
+        0.670936840768
+        0.672353202184
+        0.6737695636
+        0.675185925017
+        0.676602286433
+        0.678018647849
+        0.679435009266
+        0.680851370682
+        0.682267732099
+        0.683684093515
+        0.685100454931
+        0.686516816348
+        0.687933177764
+        0.68934953918
+        0.690765900597
+        0.692182262013
+        0.693598623429
+        0.695014984846
+        0.696431346262
+        0.697847707679
+        0.699264069095
+        0.700680430511
+        0.702096791928
+        0.703513153344
+        0.70492951476
+        0.706345876177
+        0.707762237593
+        0.709178599009
+        0.710594960426
+        0.712011321842
+        0.713427683258
+        0.714844044675
+        0.716260406091
+        0.717676767508
+        0.719093128924
+        0.72050949034
+        0.721925851757
+        0.723342213173
+        0.724758574589
+        0.726174936006
+        0.727591297422
+        0.729007658838
+        0.730424020255
+        0.731840381671
+        0.733256743088
+        0.734673104504
+        0.73608946592
+        0.737505827337
+        0.738922188753
+        0.740338550169
+        0.741754911586
+        0.743171273002
+        0.744587634418
+        0.746003995835
+        0.747420357251
+        0.748836718668
+        0.750253080084
+        0.7516694415
+        0.753085802917
+        0.754502164333
+        0.755918525749
+        0.757334887166
+        0.758751248582
+        0.760167609998
+        0.761583971415
+        0.763000332831
+        0.764416694247
+        0.765833055664
+        0.76724941708
+        0.768665778497
+        0.770082139913
+        0.771498501329
+        0.772914862746
+        0.774331224162
+        0.775747585578
+        0.777163946995
+        0.778580308411
+        0.779996669827
+        0.781413031244
+        0.78282939266
+        0.784245754077
+        0.785662115493
+        0.787078476909
+        0.788494838326
+        0.789911199742
+        0.791327561158
+        0.792743922575
+        0.794160283991
+        0.795576645407
+        0.796993006824
+        0.79840936824
+        0.799825729657
+        0.801242091073
+        0.802658452489
+        0.804074813906
+        0.805491175322
+        0.806907536738
+        0.808323898155
+        0.809740259571
+        0.811156620987
+        0.812572982404
+        0.81398934382
+        0.815405705237
+        0.816822066653
+        0.818238428069
+        0.819654789486
+        0.821071150902
+        0.822487512318
+        0.823903873735
+        0.825320235151
+        0.826736596567
+        0.828152957984
+        0.8295693194
+        0.830985680816
+        0.832402042233
+        0.833818403649
+        0.835234765066
+        0.836651126482
+        0.838067487898
+        0.839483849315
+        0.840900210731
+        0.842316572147
+        0.843732933564
+        0.84514929498
+        0.846565656396
+        0.847982017813
+        0.849398379229
+        0.850814740646
+        0.852231102062
+        0.853647463478
+        0.855063824895
+        0.856480186311
+        0.857896547727
+        0.859312909144
+        0.86072927056
+        0.862145631976
+        0.863561993393
+        0.864978354809
+        0.866394716226
+        0.867811077642
+        0.869227439058
+        0.870643800475
+        0.872060161891
+        0.873476523307
+        0.874892884724
+        0.87630924614
+        0.877725607556
+        0.879141968973
+        0.880558330389
+        0.881974691805
+        0.883391053222
+        0.884807414638
+        0.886223776055
+        0.887640137471
+        0.889056498887
+        0.890472860304
+        0.89188922172
+        0.893305583136
+        0.894721944553
+        0.896138305969
+        0.897554667385
+        0.898971028802
+        0.900387390218
+        0.901803751635
+        0.903220113051
+        0.904636474467
+        0.906052835884
+        0.9074691973
+        0.908885558716
+        0.910301920133
+        0.911718281549
+        0.913134642965
+        0.914551004382
+        0.915967365798
+        0.917383727215
+        0.918800088631
+        0.920216450047
+        0.921632811464
+        0.92304917288
+        0.924465534296
+        0.925881895713
+        0.927298257129
+        0.928714618545
+        0.930130979962
+        0.931547341378
+        0.932963702795
+        0.934380064211
+        0.935796425627
+        0.937212787044
+        0.93862914846
+        0.940045509876
+        0.941461871293
+        0.942878232709
+        0.944294594125
+        0.945710955542
+        0.947127316958
+        0.948543678374
+        0.949960039791
+        0.951376401207
+        0.952792762624
+        0.95420912404
+        0.955625485456
+        0.957041846873
+        0.958458208289
+        0.959874569705
+        0.961290931122
+        0.962707292538
+        0.964123653954
+        0.965540015371
+        0.966956376787
+        0.968372738204
+        0.96978909962
+        0.971205461036
+        0.972621822453
+        0.974038183869
+        0.975454545285
+        0.976870906702
+        0.978287268118
+        0.979703629534
+        0.981119990951
+        0.982536352367
+        0.983952713784
+        0.9853690752
+        0.986785436616
+        0.988201798033
+        0.989618159449
+        0.991034520865
+        0.992450882282
+        0.993867243698
+        0.995283605114
+        0.996699966531
+        0.998116327947
+        0.999532689363
+        1.00094905078
+        1.0023654122
+        1.00378177361
+        1.00519813503
+        1.00661449645
+        1.00803085786
+        1.00944721928
+        1.01086358069
+        1.01227994211
+        1.01369630353
+        1.01511266494
+        1.01652902636
+        1.01794538778
+        1.01936174919
+        1.02077811061
+        1.02219447203
+        1.02361083344
+        1.02502719486
+        1.02644355627
+        1.02785991769
+        1.02927627911
+        1.03069264052
+        1.03210900194
+        1.03352536336
+        1.03494172477
+        1.03635808619
+        1.03777444761
+        1.03919080902
+        1.04060717044
+        1.04202353185
+        1.04343989327
+        1.04485625469
+        1.0462726161
+        1.04768897752
+        1.04910533894
+        1.05052170035
+        1.05193806177
+        1.05335442319
+        1.0547707846
+        1.05618714602
+        1.05760350743
+        1.05901986885
+        1.06043623027
+        1.06185259168
+        1.0632689531
+        1.06468531452
+        1.06610167593
+        1.06751803735
+        1.06893439877
+        1.07035076018
+        1.0717671216
+        1.07318348301
+        1.07459984443
+        1.07601620585
+        1.07743256726
+        1.07884892868
+        1.0802652901
+        1.08168165151
+        1.08309801293
+        1.08451437435
+        1.08593073576
+        1.08734709718
+        1.08876345859
+        1.09017982001
+        1.09159618143
+        1.09301254284
+        1.09442890426
+        1.09584526568
+        1.09726162709
+        1.09867798851
+        1.10009434993
+        1.10151071134
+        1.10292707276
+        1.10434343417
+        1.10575979559
+        1.10717615701
+        1.10859251842
+        1.11000887984
+        1.11142524126
+        1.11284160267
+        1.11425796409
+        1.11567432551
+        1.11709068692
+        1.11850704834
+        1.11992340975
+        1.12133977117
+        1.12275613259
+        1.124172494
+        1.12558885542
+        1.12700521684
+        1.12842157825
+        1.12983793967
+        1.13125430109
+        1.1326706625
+        1.13408702392
+        1.13550338533
+        1.13691974675
+        1.13833610817
+        1.13975246958
+        1.141168831
+        1.14258519242
+        1.14400155383
+        1.14541791525
+        1.14683427667
+        1.14825063808
+        1.1496669995
+        1.15108336091
+        1.15249972233
+        1.15391608375
+        1.15533244516
+        1.15674880658
+        1.158165168
+        1.15958152941
+        1.16099789083
+        1.16241425225
+        1.16383061366
+        1.16524697508
+        1.16666333649
+        1.16807969791
+        1.16949605933
+        1.17091242074
+        1.17232878216
+        1.17374514358
+        1.17516150499
+        1.17657786641
+        1.17799422783
+        1.17941058924
+        1.18082695066
+        1.18224331207
+        1.18365967349
+        1.18507603491
+        1.18649239632
+        1.18790875774
+        1.18932511916
+        1.19074148057
+        1.19215784199
+        1.19357420341
+        1.19499056482
+        1.19640692624
+        1.19782328765
+        1.19923964907
+        1.20065601049
+        1.2020723719
+        1.20348873332
+        1.20490509474
+        1.20632145615
+        1.20773781757
+        1.20915417898
+        1.2105705404
+        1.21198690182
+        1.21340326323
+        1.21481962465
+        1.21623598607
+        1.21765234748
+        1.2190687089
+        1.22048507032
+        1.22190143173
+        1.22331779315
+        1.22473415456
+        1.22615051598
+        1.2275668774
+        1.22898323881
+        1.23039960023
+        1.23181596165
+        1.23323232306
+        1.23464868448
+        1.2360650459
+        1.23748140731
+        1.23889776873
+        1.24031413014
+        1.24173049156
+        1.24314685298
+        1.24456321439
+        1.24597957581
+        1.24739593723
+        1.24881229864
+        1.25022866006
+        1.25164502148
+        1.25306138289
+        1.25447774431
+        1.25589410572
+        1.25731046714
+        1.25872682856
+        1.26014318997
+        1.26155955139
+        1.26297591281
+        1.26439227422
+        1.26580863564
+        1.26722499706
+        1.26864135847
+        1.27005771989
+        1.2714740813
+        1.27289044272
+        1.27430680414
+        1.27572316555
+        1.27713952697
+        1.27855588839
+        1.2799722498
+        1.28138861122
+        1.28280497264
+        1.28422133405
+        1.28563769547
+        1.28705405688
+        1.2884704183
+        1.28988677972
+        1.29130314113
+        1.29271950255
+        1.29413586397
+        1.29555222538
+        1.2969685868
+        1.29838494822
+        1.29980130963
+        1.30121767105
+        1.30263403246
+        1.30405039388
+        1.3054667553
+        1.30688311671
+        1.30829947813
+        1.30971583955
+        1.31113220096
+        1.31254856238
+        1.3139649238
+        1.31538128521
+        1.31679764663
+        1.31821400804
+        1.31963036946
+        1.32104673088
+        1.32246309229
+        1.32387945371
+        1.32529581513
+        1.32671217654
+        1.32812853796
+        1.32954489938
+        1.33096126079
+        1.33237762221
+        1.33379398362
+        1.33521034504
+        1.33662670646
+        1.33804306787
+        1.33945942929
+        1.34087579071
+        1.34229215212
+        1.34370851354
+        1.34512487496
+        1.34654123637
+        1.34795759779
+        1.3493739592
+        1.35079032062
+        1.35220668204
+        1.35362304345
+        1.35503940487
+        1.35645576629
+        1.3578721277
+        1.35928848912
+        1.36070485054
+        1.36212121195
+        1.36353757337
+        1.36495393478
+        1.3663702962
+        1.36778665762
+        1.36920301903
+        1.37061938045
+        1.37203574187
+        1.37345210328
+        1.3748684647
+        1.37628482612
+        1.37770118753
+        1.37911754895
+        1.38053391036
+        1.38195027178
+        1.3833666332
+        1.38478299461
+        1.38619935603
+        1.38761571745
+        1.38903207886
+        1.39044844028
+        1.3918648017
+        1.39328116311
+        1.39469752453
+        1.39611388594
+        1.39753024736
+        1.39894660878
+        1.40036297019
+        1.40177933161
+        1.40319569303
+        1.40461205444
+        1.40602841586
+        1.40744477728
+        1.40886113869
+        1.41027750011
+        1.41169386152
+        1.41311022294
+        1.41452658436
+        1.41594294577
+        1.41735930719
+        1.41877566861
+        1.42019203002
+        1.42160839144
+        1.42302475286
+        1.42444111427
+        1.42585747569
+        1.4272738371
+        1.42869019852
+        1.43010655994
+        1.43152292135
+        1.43293928277
+        1.43435564419
+        1.4357720056
+        1.43718836702
+        1.43860472844
+        1.44002108985
+        1.44143745127
+        1.44285381268
+        1.4442701741
+        1.44568653552
+        1.44710289693
+        1.44851925835
+        1.44993561977
+        1.45135198118
+        1.4527683426
+        1.45418470402
+        1.45560106543
+        1.45701742685
+        1.45843378826
+        1.45985014968
+        1.4612665111
+        1.46268287251
+        1.46409923393
+        1.46551559535
+        1.46693195676
+        1.46834831818
+        1.4697646796
+        1.47118104101
+        1.47259740243
+        1.47401376384
+        1.47543012526
+        1.47684648668
+        1.47826284809
+        1.47967920951
+        1.48109557093
+        1.48251193234
+        1.48392829376
+        1.48534465518
+        1.48676101659
+        1.48817737801
+        1.48959373942
+        1.49101010084
+        1.49242646226
+        1.49384282367
+        1.49525918509
+        1.49667554651
+        1.49809190792
+        1.49950826934
+        1.50092463076
+        1.50234099217
+        1.50375735359
+        1.505173715
+        1.50659007642
+        1.50800643784
+        1.50942279925
+        1.51083916067
+        1.51225552209
+        1.5136718835
+        1.51508824492
+        1.51650460634
+        1.51792096775
+        1.51933732917
+        1.52075369058
+        1.522170052
+        1.52358641342
+        1.52500277483
+        1.52641913625
+        1.52783549767
+        1.52925185908
+        1.5306682205
+        1.53208458192
+        1.53350094333
+        1.53491730475
+        1.53633366616
+        1.53775002758
+        1.539166389
+        1.54058275041
+        1.54199911183
+        1.54341547325
+        1.54483183466
+        1.54624819608
+        1.5476645575
+        1.54908091891
+        1.55049728033
+        1.55191364174
+        1.55333000316
+        1.55474636458
+        1.55616272599
+        1.55757908741
+        1.55899544883
+        1.56041181024
+        1.56182817166
+        1.56324453308
+        1.56466089449
+        1.56607725591
+        1.56749361732
+        1.56890997874
+        1.57032634016
+        1.57174270157
+        1.57315906299
+        1.57457542441
+        1.57599178582
+        1.57740814724
+        1.57882450866
+        1.58024087007
+        1.58165723149
+        1.5830735929
+        1.58448995432
+        1.58590631574
+        1.58732267715
+        1.58873903857
+        1.59015539999
+        1.5915717614
+        1.59298812282
+        1.59440448424
+        1.59582084565
+        1.59723720707
+        1.59865356848
+        1.6000699299
+        1.60148629132
+        1.60290265273
+        1.60431901415
+        1.60573537557
+        1.60715173698
+        1.6085680984
+        1.60998445982
+        1.61140082123
+        1.61281718265
+        1.61423354406
+        1.61564990548
+        1.6170662669
+        1.61848262831
+        1.61989898973
+        1.62131535115
+        1.62273171256
+        1.62414807398
+        1.6255644354
+        1.62698079681
+        1.62839715823
+        1.62981351964
+        1.63122988106
+        1.63264624248
+        1.63406260389
+        1.63547896531
+        1.63689532673
+        1.63831168814
+        1.63972804956
+        1.64114441098
+        1.64256077239
+        1.64397713381
+        1.64539349522
+        1.64680985664
+        1.64822621806
+        1.64964257947
+        1.65105894089
+        1.65247530231
+        1.65389166372
+        1.65530802514
+        1.65672438656
+        1.65814074797
+        1.65955710939
+        1.6609734708
+        1.66238983222
+        1.66380619364
+        1.66522255505
+        1.66663891647
+        1.66805527789
+        1.6694716393
+        1.67088800072
+        1.67230436214
+        1.67372072355
+        1.67513708497
+        1.67655344638
+        1.6779698078
+        1.67938616922
+        1.68080253063
+        1.68221889205
+        1.68363525347
+        1.68505161488
+        1.6864679763
+        1.68788433772
+        1.68930069913
+        1.69071706055
+        1.69213342196
+        1.69354978338
+        1.6949661448
+        1.69638250621
+        1.69779886763
+        1.69921522905
+        1.70063159046
+        1.70204795188
+        1.7034643133
+        1.70488067471
+        1.70629703613
+        1.70771339754
+        1.70912975896
+        1.71054612038
+        1.71196248179
+        1.71337884321
+        1.71479520463
+        1.71621156604
+        1.71762792746
+        1.71904428888
+        1.72046065029
+        1.72187701171
+        1.72329337312
+        1.72470973454
+        1.72612609596
+        1.72754245737
+        1.72895881879
+        1.73037518021
+        1.73179154162
+        1.73320790304
+        1.73462426446
+        1.73604062587
+        1.73745698729
+        1.7388733487
+        1.74028971012
+        1.74170607154
+        1.74312243295
+        1.74453879437
+        1.74595515579
+        1.7473715172
+        1.74878787862
+        1.75020424004
+        1.75162060145
+        1.75303696287
+        1.75445332428
+        1.7558696857
+        1.75728604712
+        1.75870240853
+        1.76011876995
+        1.76153513137
+        1.76295149278
+        1.7643678542
+        1.76578421562
+        1.76720057703
+        1.76861693845
+        1.77003329986
+        1.77144966128
+        1.7728660227
+        1.77428238411
+        1.77569874553
+        1.77711510695
+        1.77853146836
+        1.77994782978
+        1.78136419119
+        1.78278055261
+        1.78419691403
+        1.78561327544
+        1.78702963686
+        1.78844599828
+        1.78986235969
+        1.79127872111
+        1.79269508253
+        1.79411144394
+        1.79552780536
+        1.79694416677
+        1.79836052819
+        1.79977688961
+        1.80119325102
+        1.80260961244
+        1.80402597386
+        1.80544233527
+        1.80685869669
+        1.80827505811
+        1.80969141952
+        1.81110778094
+        1.81252414235
+        1.81394050377
+        1.81535686519
+        1.8167732266
+        1.81818958802
+        1.81960594944
+        1.82102231085
+        1.82243867227
+        1.82385503369
+        1.8252713951
+        1.82668775652
+        1.82810411793
+        1.82952047935
+        1.83093684077
+        1.83235320218
+        1.8337695636
+        1.83518592502
+        1.83660228643
+        1.83801864785
+        1.83943500927
+        1.84085137068
+        1.8422677321
+        1.84368409351
+        1.84510045493
+        1.84651681635
+        1.84793317776
+        1.84934953918
+        1.8507659006
+        1.85218226201
+        1.85359862343
+        1.85501498485
+        1.85643134626
+        1.85784770768
+        1.85926406909
+        1.86068043051
+        1.86209679193
+        1.86351315334
+        1.86492951476
+        1.86634587618
+        1.86776223759
+        1.86917859901
+        1.87059496043
+        1.87201132184
+        1.87342768326
+        1.87484404467
+        1.87626040609
+        1.87767676751
+        1.87909312892
+        1.88050949034
+        1.88192585176
+        1.88334221317
+        1.88475857459
+        1.88617493601
+        1.88759129742
+        1.88900765884
+        1.89042402025
+        1.89184038167
+        1.89325674309
+        1.8946731045
+        1.89608946592
+        1.89750582734
+        1.89892218875
+        1.90033855017
+        1.90175491159
+        1.903171273
+        1.90458763442
+        1.90600399583
+        1.90742035725
+        1.90883671867
+        1.91025308008
+        1.9116694415
+        1.91308580292
+        1.91450216433
+        1.91591852575
+        1.91733488717
+        1.91875124858
+        1.92016761
+        1.92158397141
+        1.92300033283
+        1.92441669425
+        1.92583305566
+        1.92724941708
+        1.9286657785
+        1.93008213991
+        1.93149850133
+        1.93291486275
+        1.93433122416
+        1.93574758558
+        1.93716394699
+        1.93858030841
+        1.93999666983
+        1.94141303124
+        1.94282939266
+        1.94424575408
+        1.94566211549
+        1.94707847691
+        1.94849483833
+        1.94991119974
+        1.95132756116
+        1.95274392257
+        1.95416028399
+        1.95557664541
+        1.95699300682
+        1.95840936824
+        1.95982572966
+        1.96124209107
+        1.96265845249
+        1.96407481391
+        1.96549117532
+        1.96690753674
+        1.96832389815
+        1.96974025957
+        1.97115662099
+        1.9725729824
+        1.97398934382
+        1.97540570524
+        1.97682206665
+        1.97823842807
+        1.97965478949
+        1.9810711509
+        1.98248751232
+        1.98390387373
+        1.98532023515
+        1.98673659657
+        1.98815295798
+        1.9895693194
+        1.99098568082
+        1.99240204223
+        1.99381840365
+        1.99523476507
+        1.99665112648
+        1.9980674879
+        1.99948384931
+        2.00090021073
+        2.00231657215
+        2.00373293356
+        2.00514929498
+        2.0065656564
+        2.00798201781
+        2.00939837923
+        2.01081474065
+        2.01223110206
+        2.01364746348
+        2.01506382489
+        2.01648018631
+        2.01789654773
+        2.01931290914
+        2.02072927056
+        2.02214563198
+        2.02356199339
+        2.02497835481
+        2.02639471623
+        2.02781107764
+        2.02922743906
+        2.03064380047
+        2.03206016189
+        2.03347652331
+        2.03489288472
+        2.03630924614
+        2.03772560756
+        2.03914196897
+        2.04055833039
+        2.04197469181
+        2.04339105322
+        2.04480741464
+        2.04622377605
+        2.04764013747
+        2.04905649889
+        2.0504728603
+        2.05188922172
+        2.05330558314
+        2.05472194455
+        2.05613830597
+        2.05755466739
+        2.0589710288
+        2.06038739022
+        2.06180375163
+        2.06322011305
+        2.06463647447
+        2.06605283588
+        2.0674691973
+        2.06888555872
+        2.07030192013
+        2.07171828155
+        2.07313464297
+        2.07455100438
+        2.0759673658
+        2.07738372721
+        2.07880008863
+        2.08021645005
+        2.08163281146
+        2.08304917288
+        2.0844655343
+        2.08588189571
+        2.08729825713
+        2.08871461855
+        2.09013097996
+        2.09154734138
+        2.09296370279
+        2.09438006421
+        2.09579642563
+        2.09721278704
+        2.09862914846
+        2.10004550988
+        2.10146187129
+        2.10287823271
+        2.10429459413
+        2.10571095554
+        2.10712731696
+        2.10854367837
+        2.10996003979
+        2.11137640121
+        2.11279276262
+        2.11420912404
+        2.11562548546
+        2.11704184687
+        2.11845820829
+        2.11987456971
+        2.12129093112
+        2.12270729254
+        2.12412365395
+        2.12554001537
+        2.12695637679
+        2.1283727382
+        2.12978909962
+        2.13120546104
+        2.13262182245
+        2.13403818387
+        2.13545454529
+        2.1368709067
+        2.13828726812
+        2.13970362953
+        2.14111999095
+        2.14253635237
+        2.14395271378
+        2.1453690752
+        2.14678543662
+        2.14820179803
+        2.14961815945
+        2.15103452087
+        2.15245088228
+        2.1538672437
+        2.15528360511
+        2.15669996653
+        2.15811632795
+        2.15953268936
+        2.16094905078
+        2.1623654122
+        2.16378177361
+        2.16519813503
+        2.16661449645
+        2.16803085786
+        2.16944721928
+        2.17086358069
+        2.17227994211
+        2.17369630353
+        2.17511266494
+        2.17652902636
+        2.17794538778
+        2.17936174919
+        2.18077811061
+        2.18219447203
+        2.18361083344
+        2.18502719486
+        2.18644355627
+        2.18785991769
+        2.18927627911
+        2.19069264052
+        2.19210900194
+        2.19352536336
+        2.19494172477
+        2.19635808619
+        2.19777444761
+        2.19919080902
+        2.20060717044
+        2.20202353185
+        2.20343989327
+        2.20485625469
+        2.2062726161
+        2.20768897752
+        2.20910533894
+        2.21052170035
+        2.21193806177
+        2.21335442319
+        2.2147707846
+        2.21618714602
+        2.21760350743
+        2.21901986885
+        2.22043623027
+        2.22185259168
+        2.2232689531
+        2.22468531452
+        2.22610167593
+        2.22751803735
+        2.22893439877
+        2.23035076018
+        2.2317671216
+        2.23318348301
+        2.23459984443
+        2.23601620585
+        2.23743256726
+        2.23884892868
+        2.2402652901
+        2.24168165151
+        2.24309801293
+        2.24451437435
+        2.24593073576
+        2.24734709718
+        2.24876345859
+        2.25017982001
+        2.25159618143
+        2.25301254284
+        2.25442890426
+        2.25584526568
+        2.25726162709
+        2.25867798851
+        2.26009434993
+        2.26151071134
+        2.26292707276
+        2.26434343417
+        2.26575979559
+        2.26717615701
+        2.26859251842
+        2.27000887984
+        2.27142524126
+        2.27284160267
+        2.27425796409
+        2.27567432551
+        2.27709068692
+        2.27850704834
+        2.27992340975
+        2.28133977117
+        2.28275613259
+        2.284172494
+        2.28558885542
+        2.28700521684
+        2.28842157825
+        2.28983793967
+        2.29125430109
+        2.2926706625
+        2.29408702392
+        2.29550338533
+        2.29691974675
+        2.29833610817
+        2.29975246958
+        2.301168831
+        2.30258519242
+        2.30400155383
+        2.30541791525
+        2.30683427667
+        2.30825063808
+        2.3096669995
+        2.31108336091
+        2.31249972233
+        2.31391608375
+        2.31533244516
+        2.31674880658
+        2.318165168
+        2.31958152941
+        2.32099789083
+        2.32241425225
+        2.32383061366
+        2.32524697508
+        2.32666333649
+        2.32807969791
+        2.32949605933
+        2.33091242074
+        2.33232878216
+        2.33374514358
+        2.33516150499
+        2.33657786641
+        2.33799422783
+        2.33941058924
+        2.34082695066
+        2.34224331207
+        2.34365967349
+        2.34507603491
+        2.34649239632
+        2.34790875774
+        2.34932511916
+        2.35074148057
+        2.35215784199
+        2.35357420341
+        2.35499056482
+        2.35640692624
+        2.35782328765
+        2.35923964907
+        2.36065601049
+        2.3620723719
+        2.36348873332
+        2.36490509474
+        2.36632145615
+        2.36773781757
+        2.36915417898
+        2.3705705404
+        2.37198690182
+        2.37340326323
+        2.37481962465
+        2.37623598607
+        2.37765234748
+        2.3790687089
+        2.38048507032
+        2.38190143173
+        2.38331779315
+        2.38473415456
+        2.38615051598
+        2.3875668774
+        2.38898323881
+        2.39039960023
+        2.39181596165
+        2.39323232306
+        2.39464868448
+        2.3960650459
+        2.39748140731
+        2.39889776873
+        2.40031413014
+        2.40173049156
+        2.40314685298
+        2.40456321439
+        2.40597957581
+        2.40739593723
+        2.40881229864
+        2.41022866006
+        2.41164502148
+        2.41306138289
+        2.41447774431
+        2.41589410572
+        2.41731046714
+        2.41872682856
+        2.42014318997
+        2.42155955139
+        2.42297591281
+        2.42439227422
+        2.42580863564
+        2.42722499706
+        2.42864135847
+        2.43005771989
+        2.4314740813
+        2.43289044272
+        2.43430680414
+        2.43572316555
+        2.43713952697
+        2.43855588839
+        2.4399722498
+        2.44138861122
+        2.44280497264
+        2.44422133405
+        2.44563769547
+        2.44705405688
+        2.4484704183
+        2.44988677972
+        2.45130314113
+        2.45271950255
+        2.45413586397
+        2.45555222538
+        2.4569685868
+        2.45838494822
+        2.45980130963
+        2.46121767105
+        2.46263403246
+        2.46405039388
+        2.4654667553
+        2.46688311671
+        2.46829947813
+        2.46971583955
+        2.47113220096
+        2.47254856238
+        2.4739649238
+        2.47538128521
+        2.47679764663
+        2.47821400804
+        2.47963036946
+        2.48104673088
+        2.48246309229
+        2.48387945371
+        2.48529581513
+        2.48671217654
+        2.48812853796
+        2.48954489938
+        2.49096126079
+        2.49237762221
+        2.49379398362
+        2.49521034504
+        2.49662670646
+        2.49804306787
+        2.49945942929
+        2.50087579071
+        2.50229215212
+        2.50370851354
+        2.50512487496
+        2.50654123637
+        2.50795759779
+        2.5093739592
+        2.51079032062
+        2.51220668204
+        2.51362304345
+        2.51503940487
+        2.51645576629
+        2.5178721277
+        2.51928848912
+        2.52070485054
+        2.52212121195
+        2.52353757337
+        2.52495393478
+        2.5263702962
+        2.52778665762
+        2.52920301903
+        2.53061938045
+        2.53203574187
+        2.53345210328
+        2.5348684647
+        2.53628482612
+        2.53770118753
+        2.53911754895
+        2.54053391036
+        2.54195027178
+        2.5433666332
+        2.54478299461
+        2.54619935603
+        2.54761571745
+        2.54903207886
+        2.55044844028
+        2.5518648017
+        2.55328116311
+        2.55469752453
+        2.55611388594
+        2.55753024736
+        2.55894660878
+        2.56036297019
+        2.56177933161
+        2.56319569303
+        2.56461205444
+        2.56602841586
+        2.56744477728
+        2.56886113869
+        2.57027750011
+        2.57169386152
+        2.57311022294
+        2.57452658436
+        2.57594294577
+        2.57735930719
+        2.57877566861
+        2.58019203002
+        2.58160839144
+        2.58302475286
+        2.58444111427
+        2.58585747569
+        2.5872738371
+        2.58869019852
+        2.59010655994
+        2.59152292135
+        2.59293928277
+        2.59435564419
+        2.5957720056
+        2.59718836702
+        2.59860472844
+        2.60002108985
+        2.60143745127
+        2.60285381268
+        2.6042701741
+        2.60568653552
+        2.60710289693
+        2.60851925835
+        2.60993561977
+        2.61135198118
+        2.6127683426
+        2.61418470402
+        2.61560106543
+        2.61701742685
+        2.61843378826
+        2.61985014968
+        2.6212665111
+        2.62268287251
+        2.62409923393
+        2.62551559535
+        2.62693195676
+        2.62834831818
+        2.6297646796
+        2.63118104101
+        2.63259740243
+        2.63401376384
+        2.63543012526
+        2.63684648668
+        2.63826284809
+        2.63967920951
+        2.64109557093
+        2.64251193234
+        2.64392829376
+        2.64534465518
+        2.64676101659
+        2.64817737801
+        2.64959373942
+        2.65101010084
+        2.65242646226
+        2.65384282367
+        2.65525918509
+        2.65667554651
+        2.65809190792
+        2.65950826934
+        2.66092463076
+        2.66234099217
+        2.66375735359
+        2.665173715
+        2.66659007642
+        2.66800643784
+        2.66942279925
+        2.67083916067
+        2.67225552209
+        2.6736718835
+        2.67508824492
+        2.67650460634
+        2.67792096775
+        2.67933732917
+        2.68075369058
+        2.682170052
+        2.68358641342
+        2.68500277483
+        2.68641913625
+        2.68783549767
+        2.68925185908
+        2.6906682205
+        2.69208458192
+        2.69350094333
+        2.69491730475
+        2.69633366616
+        2.69775002758
+        2.699166389
+        2.70058275041
+        2.70199911183
+        2.70341547325
+        2.70483183466
+        2.70624819608
+        2.7076645575
+        2.70908091891
+        2.71049728033
+        2.71191364174
+        2.71333000316
+        2.71474636458
+        2.71616272599
+        2.71757908741
+        2.71899544883
+        2.72041181024
+        2.72182817166
+        2.72324453308
+        2.72466089449
+        2.72607725591
+        2.72749361732
+        2.72890997874
+        2.73032634016
+        2.73174270157
+        2.73315906299
+        2.73457542441
+        2.73599178582
+        2.73740814724
+        2.73882450866
+        2.74024087007
+        2.74165723149
+        2.7430735929
+        2.74448995432
+        2.74590631574
+        2.74732267715
+        2.74873903857
+        2.75015539999
+        2.7515717614
+        2.75298812282
+        2.75440448424
+        2.75582084565
+        2.75723720707
+        2.75865356848
+        2.7600699299
+        2.76148629132
+        2.76290265273
+        2.76431901415
+        2.76573537557
+        2.76715173698
+        2.7685680984
+        2.76998445982
+        2.77140082123
+        2.77281718265
+        2.77423354406
+        2.77564990548
+        2.7770662669
+        2.77848262831
+        2.77989898973
+        2.78131535115
+        2.78273171256
+        2.78414807398
+        2.7855644354
+        2.78698079681
+        2.78839715823
+        2.78981351964
+        2.79122988106
+        2.79264624248
+        2.79406260389
+        2.79547896531
+        2.79689532673
+        2.79831168814
+        2.79972804956
+        2.80114441098
+        2.80256077239
+        2.80397713381
+        2.80539349522
+        2.80680985664
+        2.80822621806
+        2.80964257947
+        2.81105894089
+        2.81247530231
+        2.81389166372
+        2.81530802514
+        2.81672438656
+        2.81814074797
+        2.81955710939
+        2.8209734708
+        2.82238983222
+        2.82380619364
+        2.82522255505
+        2.82663891647
+        2.82805527789
+        2.8294716393
+        2.83088800072
+        2.83230436214
+        2.83372072355
+        2.83513708497
+        2.83655344638
+        2.8379698078
+        2.83938616922
+        2.84080253063
+        2.84221889205
+        2.84363525347
+        2.84505161488
+        2.8464679763
+        2.84788433772
+        2.84930069913
+        2.85071706055
+        2.85213342196
+        2.85354978338
+        2.8549661448
+        2.85638250621
+        2.85779886763
+        2.85921522905
+        2.86063159046
+        2.86204795188
+        2.8634643133
+        2.86488067471
+        2.86629703613
+        2.86771339754
+        2.86912975896
+        2.87054612038
+        2.87196248179
+        2.87337884321
+        2.87479520463
+        2.87621156604
+        2.87762792746
+        2.87904428888
+        2.88046065029
+        2.88187701171
+        2.88329337312
+        2.88470973454
+        2.88612609596
+        2.88754245737
+        2.88895881879
+        2.89037518021
+        2.89179154162
+        2.89320790304
+        2.89462426446
+        2.89604062587
+        2.89745698729
+        2.8988733487
+        2.90028971012
+        2.90170607154
+        2.90312243295
+        2.90453879437
+        2.90595515579
+        2.9073715172
+        2.90878787862
+        2.91020424004
+        2.91162060145
+        2.91303696287
+        2.91445332428
+        2.9158696857
+        2.91728604712
+        2.91870240853
+        2.92011876995
+        2.92153513137
+        2.92295149278
+        2.9243678542
+        2.92578421562
+        2.92720057703
+        2.92861693845
+        2.93003329986
+        2.93144966128
+        2.9328660227
+        2.93428238411
+        2.93569874553
+        2.93711510695
+        2.93853146836
+        2.93994782978
+        2.94136419119
+        2.94278055261
+        2.94419691403
+        2.94561327544
+        2.94702963686
+        2.94844599828
+        2.94986235969
+        2.95127872111
+        2.95269508253
+        2.95411144394
+        2.95552780536
+        2.95694416677
+        2.95836052819
+        2.95977688961
+        2.96119325102
+        2.96260961244
+        2.96402597386
+        2.96544233527
+        2.96685869669
+        2.96827505811
+        2.96969141952
+        2.97110778094
+        2.97252414235
+        2.97394050377
+        2.97535686519
+        2.9767732266
+        2.97818958802
+        2.97960594944
+        2.98102231085
+        2.98243867227
+        2.98385503369
+        2.9852713951
+        2.98668775652
+        2.98810411793
+        2.98952047935
+        2.99093684077
+        2.99235320218
+        2.9937695636
+        2.99518592502
+        2.99660228643
+        2.99801864785
+        2.99943500927
+        3.00085137068
+        3.0022677321
+        3.00368409351
+        3.00510045493
+        3.00651681635
+        3.00793317776
+        3.00934953918
+        3.0107659006
+        3.01218226201
+        3.01359862343
+        3.01501498485
+        3.01643134626
+        3.01784770768
+        3.01926406909
+        3.02068043051
+        3.02209679193
+        3.02351315334
+        3.02492951476
+        3.02634587618
+        3.02776223759
+        3.02917859901
+        3.03059496043
+        3.03201132184
+        3.03342768326
+        3.03484404467
+        3.03626040609
+        3.03767676751
+        3.03909312892
+        3.04050949034
+        3.04192585176
+        3.04334221317
+        3.04475857459
+        3.04617493601
+        3.04759129742
+        3.04900765884
+        3.05042402025
+        3.05184038167
+        3.05325674309
+        3.0546731045
+        3.05608946592
+        3.05750582734
+        3.05892218875
+        3.06033855017
+        3.06175491159
+        3.063171273
+        3.06458763442
+        3.06600399583
+        3.06742035725
+        3.06883671867
+        3.07025308008
+        3.0716694415
+        3.07308580292
+        3.07450216433
+        3.07591852575
+        3.07733488717
+        3.07875124858
+        3.08016761
+        3.08158397141
+        3.08300033283
+        3.08441669425
+        3.08583305566
+        3.08724941708
+        3.0886657785
+        3.09008213991
+        3.09149850133
+        3.09291486275
+        3.09433122416
+        3.09574758558
+        3.09716394699
+        3.09858030841
+        3.09999666983
+        3.10141303124
+        3.10282939266
+        3.10424575408
+        3.10566211549
+        3.10707847691
+        3.10849483833
+        3.10991119974
+        3.11132756116
+        3.11274392257
+        3.11416028399
+        3.11557664541
+        3.11699300682
+        3.11840936824
+        3.11982572966
+        3.12124209107
+        3.12265845249
+        3.12407481391
+        3.12549117532
+        3.12690753674
+        3.12832389815
+        3.12974025957
+        3.13115662099
+        3.1325729824
+        3.13398934382
+        3.13540570524
+        3.13682206665
+        3.13823842807
+        3.13965478949
+        3.1410711509
+        3.14248751232
+        3.14390387373
+        3.14532023515
+        3.14673659657
+        3.14815295798
+        3.1495693194
+        3.15098568082
+        3.15240204223
+        3.15381840365
+        3.15523476507
+        3.15665112648
+        3.1580674879
+        3.15948384931
+        3.16090021073
+        3.16231657215
+        3.16373293356
+        3.16514929498
+        3.1665656564
+        3.16798201781
+        3.16939837923
+        3.17081474065
+        3.17223110206
+        3.17364746348
+        3.17506382489
+        3.17648018631
+        3.17789654773
+        3.17931290914
+        3.18072927056
+        3.18214563198
+        3.18356199339
+        3.18497835481
+        3.18639471623
+        3.18781107764
+        3.18922743906
+        3.19064380047
+        3.19206016189
+        3.19347652331
+        3.19489288472
+        3.19630924614
+        3.19772560756
+        3.19914196897
+        3.20055833039
+        3.20197469181
+        3.20339105322
+        3.20480741464
+        3.20622377605
+        3.20764013747
+        3.20905649889
+        3.2104728603
+        3.21188922172
+        3.21330558314
+        3.21472194455
+        3.21613830597
+        3.21755466739
+        3.2189710288
+        3.22038739022
+        3.22180375163
+        3.22322011305
+        3.22463647447
+        3.22605283588
+        3.2274691973
+        3.22888555872
+        3.23030192013
+        3.23171828155
+        3.23313464297
+        3.23455100438
+        3.2359673658
+        3.23738372721
+        3.23880008863
+        3.24021645005
+        3.24163281146
+        3.24304917288
+        3.2444655343
+        3.24588189571
+        3.24729825713
+        3.24871461855
+        3.25013097996
+        3.25154734138
+        3.25296370279
+        3.25438006421
+        3.25579642563
+        3.25721278704
+        3.25862914846
+        3.26004550988
+        3.26146187129
+        3.26287823271
+        3.26429459413
+        3.26571095554
+        3.26712731696
+        3.26854367837
+        3.26996003979
+        3.27137640121
+        3.27279276262
+        3.27420912404
+        3.27562548546
+        3.27704184687
+        3.27845820829
+        3.27987456971
+        3.28129093112
+        3.28270729254
+        3.28412365395
+        3.28554001537
+        3.28695637679
+        3.2883727382
+        3.28978909962
+        3.29120546104
+        3.29262182245
+        3.29403818387
+        3.29545454529
+        3.2968709067
+        3.29828726812
+        3.29970362953
+        3.30111999095
+        3.30253635237
+        3.30395271378
+        3.3053690752
+        3.30678543662
+        3.30820179803
+        3.30961815945
+        3.31103452087
+        3.31245088228
+        3.3138672437
+        3.31528360511
+        3.31669996653
+        3.31811632795
+        3.31953268936
+        3.32094905078
+        3.3223654122
+        3.32378177361
+        3.32519813503
+        3.32661449645
+        3.32803085786
+        3.32944721928
+        3.33086358069
+        3.33227994211
+        3.33369630353
+        3.33511266494
+        3.33652902636
+        3.33794538778
+        3.33936174919
+        3.34077811061
+        3.34219447203
+        3.34361083344
+        3.34502719486
+        3.34644355627
+        3.34785991769
+        3.34927627911
+        3.35069264052
+        3.35210900194
+        3.35352536336
+        3.35494172477
+        3.35635808619
+        3.35777444761
+        3.35919080902
+        3.36060717044
+        3.36202353185
+        3.36343989327
+        3.36485625469
+        3.3662726161
+        3.36768897752
+        3.36910533894
+        3.37052170035
+        3.37193806177
+        3.37335442319
+        3.3747707846
+        3.37618714602
+        3.37760350743
+        3.37901986885
+        3.38043623027
+        3.38185259168
+        3.3832689531
+        3.38468531452
+        3.38610167593
+        3.38751803735
+        3.38893439877
+        3.39035076018
+        3.3917671216
+        3.39318348301
+        3.39459984443
+        3.39601620585
+        3.39743256726
+        3.39884892868
+        3.4002652901
+        3.40168165151
+        3.40309801293
+        3.40451437435
+        3.40593073576
+        3.40734709718
+        3.40876345859
+        3.41017982001
+        3.41159618143
+        3.41301254284
+        3.41442890426
+        3.41584526568
+        3.41726162709
+        3.41867798851
+        3.42009434993
+        3.42151071134
+        3.42292707276
+        3.42434343417
+        3.42575979559
+        3.42717615701
+        3.42859251842
+        3.43000887984
+        3.43142524126
+        3.43284160267
+        3.43425796409
+        3.43567432551
+        3.43709068692
+}
diff --git a/release/datafiles/colormanagement/luts/adx_exp_to_aces.spimtx b/release/datafiles/colormanagement/luts/adx_exp_to_aces.spimtx
new file mode 100644 (file)
index 0000000..0c56159
--- /dev/null
@@ -0,0 +1,4 @@
+0.72286 0.12630 0.15084 0
+0.11923 0.76418 0.11659 0
+0.01427 0.08213 0.90359 0
+
diff --git a/release/datafiles/colormanagement/luts/colorworks_filmlg_to_p3.3dl b/release/datafiles/colormanagement/luts/colorworks_filmlg_to_p3.3dl
new file mode 100644 (file)
index 0000000..db936eb
--- /dev/null
@@ -0,0 +1,4916 @@
+# Autodesk 3D Export from Truelight v3.0
+    0   64  128  192  256  320  384  448  512  576  640  704  768  832  896  960 1023
+    0    0    0
+    0    0    0
+    0    0    0
+    0    0    0
+    0    0  100
+    0    0  274
+    0    0  608
+    0    0  785
+    0    0 1010
+    0    0 1183
+    0    0 1349
+    0    0 1471
+    0    0 1638
+    0    0 1854
+    0   65 1989
+    0  451 2073
+    0  722 2132
+    0    0    0
+    0    0    0
+    0    0    0
+    0    0    0
+    0    0  303
+    0    0  419
+    0    0  656
+    0    0  846
+    0    0 1071
+    0    0 1250
+    0    0 1419
+    0    0 1549
+    0    0 1714
+    0    0 1920
+    0  146 2048
+    0  543 2129
+    0  820 2186
+    0    0    0
+    0    0    0
+    0    0    0
+    0    0  187
+    0   15  337
+    0   64  462
+    0  110  709
+    0  137  910
+    0   54 1141
+    0  140 1323
+    0    0 1500
+    0   21 1637
+    0  200 1797
+    0  470 1986
+    0  658 2106
+    0  813 2183
+    0  922 2238
+    0   13    0
+    0   82    0
+    0  134    0
+    0  132  235
+    0  199  382
+    0  224  503
+    0  275  764
+    0  306  981
+    0  304 1215
+    0  336 1407
+    0  293 1596
+    0  297 1733
+    0  478 1887
+    0  698 2060
+    0  847 2172
+    0  953 2246
+    0 1026 2297
+    0  209    0
+    0  250    0
+    0  277  194
+    0  283  274
+    0  314  420
+    0  353  552
+    0  396  822
+    0  438 1050
+    0  458 1290
+    0  491 1488
+    0  493 1691
+    0  519 1824
+    0  631 1965
+    0  837 2125
+    0  974 2234
+    0 1060 2301
+    0 1120 2349
+    0  283    0
+    0  349  133
+    0  381  230
+    0  374  307
+    0  423  467
+    0  444  600
+    0  513  884
+    0  560 1135
+    0  597 1382
+    0  635 1589
+    0  663 1806
+    0  695 1940
+    0  794 2067
+    0  985 2214
+    0 1105 2307
+    0 1180 2364
+    0 1232 2405
+    0  541    0
+    0  567  211
+    0  599  297
+    0  612  366
+    0  657  537
+    0  692  692
+    0  741  972
+    0  789 1230
+    0  827 1487
+    0  871 1702
+    0  913 1916
+    0  946 2055
+    0 1029 2178
+    0 1178 2303
+    0 1271 2382
+    0 1329 2431
+    0 1370 2465
+    0  688    0
+    0  718  268
+    0  746  339
+    0  764  408
+    0  816  589
+    0  865  753
+    0  935 1052
+    0  995 1324
+    0 1046 1595
+    0 1094 1814
+    0 1142 2037
+    0 1172 2173
+    0 1238 2283
+    0 1354 2387
+    0 1434 2455
+    0 1484 2497
+    0 1519 2527
+    0  934    0
+    0  955  310
+    0  985  400
+    0 1018  469
+    0 1064  643
+    0 1117  831
+    0 1200 1141
+    0 1267 1425
+    0 1334 1721
+    0 1379 1936
+    0 1437 2154
+    0 1454 2293
+    0 1504 2395
+    0 1577 2473
+    0 1631 2527
+    0 1670 2565
+    0 1698 2592
+    0 1117    0
+    0 1142  341
+    0 1173  435
+    0 1210  510
+    0 1256  689
+    0 1311  885
+    0 1393 1206
+    0 1470 1498
+    0 1545 1799
+    0 1594 2023
+    0 1649 2233
+    0 1673 2377
+    0 1710 2480
+    0 1767 2556
+    0 1803 2603
+    0 1825 2632
+    0 1845 2654
+    0 1309  125
+    0 1326  356
+    0 1357  457
+    0 1397  541
+    0 1443  720
+    0 1503  922
+    0 1593 1264
+    0 1677 1570
+    0 1760 1877
+    0 1804 2104
+    0 1850 2318
+    0 1875 2459
+    0 1903 2558
+    0 1938 2626
+    0 1960 2668
+    0 1973 2694
+    0 1987 2714
+    0 1399  171
+    0 1421  375
+    0 1450  478
+    0 1487  570
+    0 1540  771
+    0 1603  976
+    0 1692 1312
+    0 1776 1619
+    0 1849 1918
+    0 1897 2144
+    0 1943 2359
+    0 1969 2493
+    0 1995 2592
+    0 2027 2659
+    0 2048 2701
+    0 2061 2728
+    0 2071 2746
+    0 1496  237
+    0 1525  435
+    0 1558  553
+    0 1595  666
+    0 1657  898
+    0 1715 1099
+    0 1804 1426
+    0 1882 1722
+    0 1949 2011
+    0 1993 2226
+    0 2035 2428
+    0 2062 2551
+    0 2087 2636
+    0 2118 2701
+    0 2138 2744
+    0 2151 2770
+    0 2159 2788
+    0 1593  308
+    0 1628  505
+    0 1670  650
+    0 1711  789
+    0 1778 1055
+    0 1835 1260
+    0 1918 1572
+    0 1989 1851
+    0 2049 2127
+    0 2090 2329
+    0 2124 2509
+    0 2152 2617
+    0 2177 2702
+    0 2205 2749
+    0 2224 2790
+    0 2237 2816
+    0 2246 2835
+    0 1653  352
+    0 1693  549
+    0 1740  711
+    0 1784  866
+    0 1851 1140
+    0 1912 1367
+    0 1991 1667
+    0 2058 1939
+    0 2111 2199
+    0 2150 2394
+    0 2180 2560
+    0 2208 2664
+    0 2234 2743
+    0 2261 2790
+    0 2278 2819
+    0 2291 2846
+    0 2300 2864
+    0 1692  380
+    0 1734  577
+    0 1784  750
+    0 1831  915
+    0 1898 1195
+    0 1961 1435
+    0 2038 1727
+    0 2102 1996
+    0 2153 2249
+    0 2189 2435
+    0 2216 2594
+    0 2244 2697
+    0 2270 2769
+    0 2297 2816
+    0 2315 2846
+    0 2325 2864
+    0 2334 2883
+    0 1720  400
+    0 1763  597
+    0 1816  778
+    0 1864  950
+    0 1932 1234
+    0 1996 1484
+    0 2071 1771
+    0 2134 2037
+    0 2184 2287
+    0 2217 2468
+    0 2244 2623
+    0 2269 2720
+    0 2296 2788
+    0 2323 2835
+    0 2341 2865
+    0 2351 2883
+    0 2359 2896
+    0    0    0
+    0    0    0
+    0    0    0
+    0    0    0
+    0    0  262
+    0    0  380
+    0    0  627
+    0    0  807
+    0    0 1028
+    0    0 1205
+    0    0 1371
+    0    0 1498
+    0    0 1670
+    0    0 1892
+    0   83 2030
+    0  473 2117
+    0  745 2176
+    0    0    0
+    0    0    0
+    0    0    0
+    0    0  144
+    0    0  330
+    0    0  455
+    0    0  665
+    0    0  864
+    0    0 1085
+    0    0 1272
+    0    0 1439
+    0    0 1577
+    0    0 1748
+    0    0 1956
+    0  158 2086
+    0  557 2170
+    0  835 2227
+    0    0    0
+    0    0    0
+    0    0    0
+    0   11  223
+    0   68  364
+    0  110  499
+    0  130  711
+    0  145  928
+    0  104 1155
+    0   93 1348
+    0    0 1520
+    0    0 1665
+    0   23 1832
+    0  296 2025
+    0  530 2147
+    0  789 2226
+    0  933 2281
+    0  101    0
+    0  130    0
+    0  155  118
+    0  180  265
+    0  223  405
+    0  251  546
+    0  288  771
+    0  313 1004
+    0  328 1235
+    0  337 1436
+    0  334 1617
+    0  343 1760
+    0  484 1920
+    0  709 2098
+    0  861 2213
+    0  968 2288
+    0 1042 2341
+    0  265    0
+    0  285    0
+    0  296  205
+    0  318  305
+    0  342  442
+    0  382  596
+    0  415  833
+    0  454 1074
+    0  478 1312
+    0  502 1522
+    0  514 1712
+    0  538 1854
+    0  647 2000
+    0  854 2164
+    0  995 2275
+    0 1083 2344
+    0 1144 2392
+    0  368    0
+    0  406  134
+    0  431  255
+    0  441  343
+    0  479  493
+    0  507  645
+    0  561  901
+    0  602 1159
+    0  638 1406
+    0  671 1627
+    0  701 1827
+    0  732 1970
+    0  832 2104
+    0 1022 2256
+    0 1140 2350
+    0 1214 2409
+    0 1266 2450
+    0  584    0
+    0  598  210
+    0  613  305
+    0  636  394
+    0  670  548
+    0  710  722
+    0  759  985
+    0  811 1253
+    0  857 1511
+    0  900 1744
+    0  940 1941
+    0  971 2087
+    0 1055 2215
+    0 1210 2344
+    0 1307 2425
+    0 1368 2475
+    0 1409 2510
+    0  737    0
+    0  763  266
+    0  790  354
+    0  812  441
+    0  861  609
+    0  910  787
+    0  979 1069
+    0 1041 1351
+    0 1095 1621
+    0 1142 1854
+    0 1185 2061
+    0 1218 2207
+    0 1288 2322
+    0 1407 2430
+    0 1489 2501
+    0 1539 2545
+    0 1575 2576
+    0  982    0
+    0  997  304
+    0 1021  399
+    0 1054  493
+    0 1102  660
+    0 1158  861
+    0 1233 1154
+    0 1302 1446
+    0 1366 1736
+    0 1416 1969
+    0 1467 2173
+    0 1491 2324
+    0 1546 2435
+    0 1627 2521
+    0 1684 2578
+    0 1725 2616
+    0 1754 2643
+    0 1177    0
+    0 1199  333
+    0 1227  430
+    0 1262  530
+    0 1311  705
+    0 1369  916
+    0 1447 1220
+    0 1527 1525
+    0 1597 1817
+    0 1654 2063
+    0 1700 2262
+    0 1729 2416
+    0 1770 2526
+    0 1827 2605
+    0 1864 2654
+    0 1886 2684
+    0 1907 2707
+    0 1367  109
+    0 1378  347
+    0 1402  454
+    0 1442  560
+    0 1493  744
+    0 1556  962
+    0 1640 1279
+    0 1722 1592
+    0 1796 1889
+    0 1846 2133
+    0 1888 2341
+    0 1917 2490
+    0 1951 2596
+    0 1995 2669
+    0 2022 2715
+    0 2039 2743
+    0 2054 2764
+    0 1475  156
+    0 1495  364
+    0 1521  474
+    0 1557  590
+    0 1613  790
+    0 1679 1013
+    0 1760 1332
+    0 1841 1648
+    0 1911 1940
+    0 1968 2183
+    0 2009 2391
+    0 2038 2539
+    0 2066 2642
+    0 2097 2709
+    0 2119 2752
+    0 2136 2780
+    0 2147 2799
+    0 1581  222
+    0 1609  424
+    0 1641  549
+    0 1679  688
+    0 1740  910
+    0 1802 1138
+    0 1883 1447
+    0 1957 1753
+    0 2024 2039
+    0 2078 2270
+    0 2117 2466
+    0 2144 2600
+    0 2171 2693
+    0 2202 2758
+    0 2221 2799
+    0 2234 2825
+    0 2242 2843
+    0 1683  292
+    0 1715  495
+    0 1753  648
+    0 1798  810
+    0 1865 1066
+    0 1925 1298
+    0 2001 1598
+    0 2067 1883
+    0 2129 2157
+    0 2179 2373
+    0 2214 2551
+    0 2240 2665
+    0 2267 2757
+    0 2294 2806
+    0 2313 2847
+    0 2326 2873
+    0 2334 2891
+    0 1746  336
+    0 1781  539
+    0 1824  710
+    0 1873  887
+    0 1941 1156
+    0 2004 1400
+    0 2076 1696
+    0 2139 1972
+    0 2195 2231
+    0 2242 2438
+    0 2275 2604
+    0 2301 2713
+    0 2327 2798
+    0 2354 2846
+    0 2371 2877
+    0 2383 2902
+    0 2392 2921
+    0 1787  364
+    0 1823  567
+    0 1869  750
+    0 1921  936
+    0 1991 1213
+    0 2054 1465
+    0 2125 1759
+    0 2185 2030
+    0 2238 2282
+    0 2282 2480
+    0 2315 2640
+    0 2340 2747
+    0 2366 2823
+    0 2393 2872
+    0 2409 2902
+    0 2420 2921
+    0 2428 2940
+    0 1815  384
+    0 1853  587
+    0 1901  778
+    0 1955  972
+    0 2025 1253
+    0 2089 1513
+    0 2159 1803
+    0 2218 2072
+    0 2270 2320
+    0 2311 2513
+    0 2343 2669
+    0 2367 2771
+    0 2392 2842
+    0 2419 2891
+    0 2436 2921
+    0 2447 2940
+    0 2454 2953
+    0    0    0
+    0    0    0
+    0    0    0
+    0    0    0
+    0    0  289
+    0    0  409
+    0    0  649
+    0    0  830
+    0    0 1052
+    0    0 1228
+    0    0 1396
+    0    0 1525
+    0    0 1703
+    0    0 1932
+    0  113 2074
+    0  506 2162
+    0  781 2223
+    0    0    0
+    0    0    0
+    0    0    0
+    0    0  201
+    0    0  344
+    0    0  476
+    0    0  679
+    0    0  885
+    0    0 1108
+    0    0 1298
+    0    0 1466
+    0    0 1609
+    0    0 1786
+    0    0 2002
+    0  184 2135
+    0  587 2219
+    0  868 2278
+    0    0    0
+    0    0    0
+    0   12    0
+    0   60  242
+    0   81  369
+    0  131  525
+    0  131  711
+    0  137  949
+    0   77 1174
+    0    0 1374
+    0    0 1545
+    0    0 1696
+    0    0 1870
+    0    0 2071
+    0  263 2196
+    0  676 2276
+    0  964 2333
+    0  163    0
+    0  170    0
+    0  170   75
+    0  210  281
+    0  235  410
+    0  265  577
+    0  296  776
+    0  313 1030
+    0  338 1259
+    0  334 1466
+    0  345 1644
+    0  365 1791
+    0  489 1959
+    0  728 2144
+    0  887 2261
+    0  997 2338
+    0 1075 2392
+  152  295    0
+    0  309    0
+    0  297  200
+    0  334  320
+    0  345  440
+    0  400  631
+    0  417  843
+    0  462 1100
+    0  486 1341
+    0  506 1557
+    0  524 1740
+    0  551 1887
+    0  661 2038
+    0  880 2210
+    0 1027 2324
+    0 1119 2394
+    0 1183 2444
+  194  400    0
+  132  437  142
+    0  469  260
+    0  479  360
+    0  514  502
+    0  548  676
+    0  597  920
+    0  636 1187
+    0  671 1436
+    0  706 1668
+    0  732 1858
+    0  764 2005
+    0  869 2146
+    0 1067 2303
+    0 1188 2400
+    0 1263 2461
+    0 1315 2503
+  228  627    0
+  144  633  212
+    0  625  305
+    0  658  411
+    0  680  546
+    0  730  749
+    0  775  999
+    0  837 1278
+    0  886 1540
+    0  930 1787
+    0  968 1976
+    0  999 2123
+    0 1087 2258
+    0 1253 2392
+    0 1355 2475
+    0 1419 2526
+    0 1464 2562
+  274  784    0
+  150  810  265
+    0  838  355
+    0  861  461
+    0  909  622
+    0  958  816
+    0 1025 1087
+    0 1091 1383
+    0 1145 1654
+    0 1193 1898
+    0 1232 2095
+    0 1266 2250
+    0 1342 2371
+    0 1469 2482
+    0 1553 2556
+    0 1606 2601
+    0 1642 2634
+  233 1034    0
+    0 1047  301
+    0 1064  393
+    0 1102  508
+    0 1149  664
+    0 1208  888
+    0 1277 1170
+    0 1346 1472
+    0 1419 1766
+    0 1465 2009
+    0 1513 2207
+    0 1540 2362
+    0 1599 2485
+    0 1687 2577
+    0 1748 2636
+    0 1792 2675
+    0 1823 2702
+    0 1236    5
+    0 1258  326
+    0 1282  421
+    0 1320  544
+    0 1368  716
+    0 1433  946
+    0 1507 1236
+    0 1590 1558
+    0 1657 1844
+    0 1718 2106
+    0 1757 2301
+    0 1789 2459
+    0 1835 2577
+    0 1900 2659
+    0 1939 2709
+    0 1963 2741
+    0 1987 2765
+    0 1435   29
+    0 1445  340
+    0 1459  447
+    0 1507  572
+    0 1554  757
+    0 1622  995
+    0 1703 1301
+    0 1781 1620
+    0 1844 1904
+    0 1896 2161
+    0 1952 2381
+    0 1978 2533
+    0 2017 2646
+    0 2068 2722
+    0 2100 2769
+    0 2120 2799
+    0 2136 2820
+    0 1554  116
+    0 1576  352
+    0 1599  467
+    0 1638  602
+    0 1689  801
+    0 1759 1046
+    0 1834 1354
+    0 1922 1681
+    0 1984 1970
+    0 2043 2226
+    0 2081 2432
+    0 2114 2591
+    0 2143 2698
+    0 2176 2763
+    0 2200 2805
+    0 2220 2835
+    0 2233 2856
+    0 1668  191
+    0 1699  415
+    0 1733  545
+    0 1773  707
+    0 1828  917
+    0 1893 1175
+    0 1970 1473
+    0 2046 1787
+    0 2112 2072
+    0 2168 2315
+    0 2205 2512
+    0 2233 2653
+    0 2260 2754
+    0 2293 2817
+    0 2312 2858
+    0 2324 2883
+    0 2332 2901
+    0 1776  275
+    0 1810  489
+    0 1851  651
+    0 1899  834
+    0 1959 1078
+    0 2021 1340
+    0 2095 1630
+    0 2163 1916
+    0 2226 2192
+    0 2276 2416
+    0 2312 2602
+    0 2337 2717
+    0 2364 2818
+    0 2389 2867
+    0 2408 2906
+    0 2420 2932
+    0 2428 2949
+    0 1842  321
+    0 1878  535
+    0 1924  716
+    0 1977  911
+    0 2039 1176
+    0 2102 1440
+    0 2173 1733
+    0 2238 2008
+    0 2295 2267
+    0 2342 2479
+    0 2377 2658
+    0 2401 2766
+    0 2427 2857
+    0 2451 2906
+    0 2468 2937
+    0 2479 2962
+    0 2488 2980
+  258 1884  350
+    0 1921  564
+    0 1971  757
+    0 2026  961
+    0 2091 1238
+    0 2153 1505
+    0 2222 1798
+    0 2286 2069
+    0 2341 2318
+    0 2384 2520
+    0 2419 2694
+    0 2442 2802
+    0 2467 2882
+    0 2491 2931
+    0 2507 2962
+    0 2518 2981
+    0 2526 2999
+  494 1914  371
+    0 1952  585
+    0 2004  787
+    0 2062  996
+    0 2128 1283
+    0 2190 1551
+    0 2258 1845
+    0 2321 2112
+    0 2374 2355
+    0 2416 2554
+    0 2449 2723
+    0 2472 2827
+    0 2495 2900
+    0 2520 2949
+    0 2536 2980
+    0 2546 2999
+    0 2554 3013
+    0    0    0
+    0    0    0
+    0    0    0
+    0    0    0
+    0    0  277
+    0    0  392
+    0    0  662
+    0    0  851
+    0    0 1078
+    0    0 1257
+    0    0 1428
+    0    0 1560
+    0    0 1742
+    0    0 1978
+    0  138 2124
+    0  536 2214
+    0  814 2278
+    0    0    0
+    0    0    0
+   25    0    0
+    0    0  208
+    0    0  360
+    0    0  483
+    0    0  702
+    0    0  914
+    0    0 1141
+    0    0 1334
+    0    0 1505
+    0    0 1650
+    0    0 1831
+    0    0 2054
+    0  213 2191
+    0  620 2279
+    0  905 2340
+   83   12    0
+  198   59    0
+  208   80    0
+  143  113  250
+   85  140  396
+    0  167  535
+    0  173  746
+    0  179  983
+    0  146 1211
+    0   89 1413
+    0    0 1589
+    0    0 1740
+    0    0 1918
+    0    0 2125
+    0  296 2253
+    0  714 2336
+    0 1006 2395
+  181  179    0
+  246  211    0
+  245  222  169
+  196  245  290
+  148  277  437
+    0  292  586
+    0  328  810
+    0  340 1063
+    0  363 1296
+    0  363 1509
+    0  363 1690
+    0  379 1839
+    0  516 2008
+    0  764 2197
+    0  928 2318
+    0 1043 2397
+    0 1124 2453
+  289  320    0
+  290  345    0
+  287  352  218
+  241  376  330
+  178  396  470
+    0  436  644
+    0  460  877
+    0  499 1134
+    0  523 1381
+    0  542 1602
+    0  553 1788
+    0  579 1937
+    0  698 2089
+    0  926 2264
+    0 1077 2381
+    0 1171 2454
+    0 1238 2506
+  310  411    0
+  317  463  158
+  308  502  271
+  217  502  363
+   61  548  526
+    0  569  687
+    0  627  954
+    0  662 1225
+    0  700 1479
+    0  735 1714
+    0  760 1905
+    0  790 2054
+    0  902 2198
+    0 1111 2359
+    0 1239 2458
+    0 1319 2521
+    0 1375 2564
+  357  659    0
+  366  671  218
+  353  674  316
+  269  704  419
+    0  735  577
+    0  779  769
+    0  833 1038
+    0  888 1322
+    0  939 1587
+    0  980 1834
+    0 1017 2030
+    0 1047 2178
+    0 1143 2313
+    0 1319 2452
+    0 1425 2537
+    0 1490 2590
+    0 1536 2628
+  359  834    0
+  381  865  267
+  359  893  361
+    0  912  460
+    0  970  644
+    0 1012  832
+    0 1085 1125
+    0 1148 1426
+    0 1203 1702
+    0 1251 1947
+    0 1289 2149
+    0 1324 2309
+    0 1403 2432
+    0 1537 2545
+    0 1626 2620
+    0 1683 2667
+    0 1722 2700
+  424 1098    0
+  384 1117  299
+  196 1142  400
+    0 1177  512
+    0 1231  689
+    0 1283  909
+    0 1359 1210
+    0 1428 1518
+    0 1501 1814
+    0 1547 2062
+    0 1595 2269
+    0 1620 2422
+    0 1683 2546
+    0 1772 2641
+    0 1833 2701
+    0 1878 2742
+    0 1910 2770
+  417 1310    0
+  334 1338  320
+    0 1370  424
+    0 1404  546
+    0 1462  741
+    0 1523  968
+    0 1604 1278
+    0 1682 1603
+    0 1749 1892
+    0 1807 2156
+    0 1845 2363
+    0 1876 2524
+    0 1925 2640
+    0 1993 2722
+    0 2035 2774
+    0 2061 2807
+    0 2084 2832
+  399 1526    0
+    0 1540  329
+    0 1563  446
+    0 1607  573
+    0 1660  779
+    0 1721 1012
+    0 1805 1342
+    0 1880 1667
+    0 1938 1946
+    0 1995 2205
+    0 2056 2444
+    0 2080 2601
+    0 2119 2712
+    0 2171 2788
+    0 2202 2835
+    0 2221 2864
+    0 2238 2886
+  449 1652    0
+   60 1677  337
+    0 1705  465
+    0 1739  601
+    0 1795  825
+    0 1862 1068
+    0 1944 1395
+    0 2026 1726
+    0 2083 2015
+    0 2139 2275
+    0 2184 2491
+    0 2221 2657
+    0 2250 2763
+    0 2285 2829
+    0 2310 2872
+    0 2329 2901
+    0 2342 2922
+  543 1770    0
+  373 1804  400
+    0 1842  546
+    0 1875  711
+    0 1939  946
+    0 1999 1200
+    0 2081 1517
+    0 2155 1833
+    0 2219 2121
+    0 2272 2371
+    0 2309 2572
+    0 2338 2717
+    0 2365 2816
+    0 2399 2880
+    0 2421 2921
+    0 2435 2947
+    0 2445 2965
+  649 1879    0
+  499 1918  479
+    0 1963  656
+    0 2004  844
+    0 2073 1110
+    0 2131 1367
+    0 2209 1675
+    0 2275 1964
+    0 2336 2242
+    0 2385 2472
+    0 2420 2663
+    0 2444 2780
+    0 2471 2879
+    0 2495 2927
+    0 2517 2968
+    0 2531 2994
+    0 2541 3012
+  727 1948   96
+  601 1988  527
+    0 2038  723
+    0 2085  925
+    0 2154 1208
+    0 2214 1473
+    0 2289 1778
+    0 2353 2057
+    0 2409 2316
+    0 2454 2535
+    0 2489 2719
+    0 2512 2831
+    0 2538 2920
+    0 2562 2968
+    0 2578 2998
+    0 2591 3024
+    0 2601 3042
+  777 1992  235
+  666 2034  558
+  276 2085  766
+    0 2136  977
+    0 2206 1270
+    0 2267 1541
+    0 2341 1844
+    0 2404 2118
+    0 2456 2368
+    0 2498 2576
+    0 2533 2756
+    0 2556 2867
+    0 2580 2946
+    0 2605 2994
+    0 2620 3024
+    0 2630 3043
+    0 2640 3061
+  813 2024  336
+  713 2066  580
+  509 2120  797
+    0 2173 1015
+    0 2244 1315
+    0 2306 1590
+    0 2378 1892
+    0 2440 2163
+    0 2490 2405
+    0 2531 2610
+    0 2565 2785
+    0 2588 2893
+    0 2611 2965
+    0 2635 3013
+    0 2651 3043
+    0 2661 3062
+    0 2667 3075
+  134    0    0
+  257    0    0
+  281    0    0
+  226    0    0
+  173    0  304
+  146    0  426
+    0    0  685
+    0    0  882
+    0    0 1113
+    0    0 1296
+    0    0 1476
+    0    0 1612
+    0    0 1802
+    0    0 2049
+    0  182 2203
+    0  584 2295
+    0  865 2361
+  328    0    0
+  340    0    0
+  346    0    0
+  331    0  223
+  317   23  371
+  309   17  507
+  291    0  727
+   18    0  950
+    0    0 1180
+    0    0 1377
+    0    0 1555
+    0    0 1704
+    0    0 1891
+    0    0 2123
+    0  256 2268
+    0  667 2357
+    0  955 2420
+  374  119    0
+  387  138    0
+  381  135    0
+  373  167  265
+  351  179  401
+  345  207  563
+  136  207  771
+  245  221 1021
+    0  169 1255
+    0   54 1463
+    0    0 1646
+    0    0 1797
+    0    0 1979
+    0   16 2193
+    0  344 2327
+    0  765 2413
+    0 1060 2472
+  419  257    0
+  426  264    0
+  417  264  178
+  407  289  304
+  383  310  441
+  361  330  615
+  235  359  838
+  141  373 1102
+    0  385 1342
+    0  377 1561
+    0  382 1749
+    0  403 1904
+    0  536 2075
+    0  800 2266
+    0  978 2391
+    0 1100 2472
+    0 1185 2529
+  452  363    0
+  463  385    0
+  452  384  223
+  437  410  342
+  402  423  474
+  381  469  673
+    0  486  907
+    0  530 1176
+    0  546 1430
+    0  563 1657
+    0  577 1849
+    0  607 2002
+    0  730 2159
+    0  971 2338
+    0 1136 2457
+    0 1234 2531
+    0 1303 2583
+  497  469    0
+  508  514  165
+  505  551  277
+  475  556  378
+  443  597  536
+  392  625  720
+    0  674  990
+    0  712 1269
+    0  750 1535
+    0  785 1775
+    0  807 1972
+    0  840 2122
+    0  957 2270
+    0 1176 2435
+    0 1313 2538
+    0 1394 2601
+    0 1452 2645
+  596  712    0
+  586  725  218
+  553  726  320
+  530  761  433
+  471  792  586
+  390  843  801
+    0  894 1074
+    0  951 1368
+    0  999 1650
+    0 1042 1897
+    0 1080 2100
+    0 1109 2253
+    0 1207 2390
+    0 1396 2532
+    0 1514 2620
+    0 1584 2675
+    0 1633 2713
+  634  915    0
+  625  947  260
+  607  976  363
+  555 1001  475
+  485 1055  656
+    0 1102  867
+    0 1171 1166
+    0 1233 1476
+    0 1289 1765
+    0 1339 2017
+    0 1378 2223
+    0 1412 2385
+    0 1492 2513
+    0 1633 2629
+    0 1732 2706
+    0 1790 2753
+    0 1831 2787
+  696 1205    0
+  675 1222  281
+  633 1242  394
+  581 1284  520
+  416 1332  701
+    0 1391  943
+    0 1467 1253
+    0 1539 1573
+    0 1612 1877
+    0 1656 2130
+    0 1704 2348
+    0 1726 2502
+    0 1791 2630
+    0 1888 2724
+    0 1956 2786
+    0 2003 2827
+    0 2035 2855
+  748 1428    0
+  715 1456  293
+  661 1486  412
+  580 1527  552
+    0 1581  750
+    0 1648 1002
+    0 1725 1320
+    0 1803 1656
+    0 1867 1962
+    0 1926 2226
+    0 1965 2441
+    0 1996 2607
+    0 2045 2726
+    0 2115 2808
+    0 2158 2860
+    0 2186 2892
+    0 2211 2918
+  796 1672    0
+  756 1679  289
+  690 1695  430
+  569 1742  575
+    0 1791  787
+    0 1856 1047
+    0 1938 1384
+    0 2018 1722
+    0 2101 2049
+    0 2143 2302
+    0 2184 2519
+    0 2208 2681
+    0 2248 2796
+    0 2305 2873
+    0 2341 2920
+    0 2362 2950
+    0 2380 2972
+  847 1790    0
+  796 1811  290
+  715 1832  447
+  574 1872  601
+    0 1931  831
+    0 2004 1103
+    0 2080 1439
+    0 2162 1775
+    0 2230 2084
+    0 2288 2353
+    0 2328 2567
+    0 2363 2734
+    0 2390 2844
+    0 2422 2910
+    0 2446 2953
+    0 2467 2983
+    0 2482 3004
+  931 1907    0
+  871 1937  357
+  769 1969  533
+   95 2009  713
+    0 2071  951
+    0 2139 1233
+    0 2221 1561
+    0 2295 1885
+    0 2363 2188
+    0 2417 2447
+    0 2453 2647
+    0 2482 2792
+    0 2510 2895
+    0 2540 2959
+    0 2559 3001
+    0 2573 3026
+    0 2583 3044
+ 1030 2014    0
+  967 2048  450
+  863 2090  650
+  181 2139  853
+    1 2204 1122
+    0 2269 1402
+    0 2347 1720
+    0 2414 2021
+    0 2479 2314
+    0 2527 2551
+    0 2561 2733
+    0 2582 2852
+    0 2610 2954
+    0 2631 3001
+    0 2651 3042
+    0 2664 3067
+    0 2674 3085
+ 1092 2080    0
+ 1027 2118  508
+  922 2165  724
+  263 2220  940
+   69 2287 1227
+    0 2351 1509
+    0 2426 1823
+    0 2492 2115
+    0 2551 2392
+    0 2596 2616
+    0 2628 2787
+    0 2648 2899
+    0 2673 2992
+    0 2694 3038
+    0 2708 3068
+    0 2721 3093
+    0 2731 3111
+ 1130 2124   31
+ 1067 2163  541
+  973 2214  768
+  613 2272  994
+  249 2341 1293
+    0 2406 1577
+    0 2478 1889
+    0 2543 2177
+    0 2599 2444
+    0 2641 2656
+    0 2673 2824
+    0 2693 2935
+    0 2715 3017
+    0 2737 3063
+    0 2750 3093
+    0 2760 3111
+    0 2769 3129
+ 1156 2156  260
+ 1096 2196  564
+ 1009 2250  800
+  865 2309 1032
+  379 2379 1340
+    0 2446 1625
+    0 2515 1936
+    0 2580 2221
+    0 2634 2482
+    0 2675 2690
+    0 2706 2853
+    0 2725 2961
+    0 2746 3035
+    0 2767 3081
+    0 2781 3111
+    0 2790 3129
+    0 2797 3143
+  451    0    0
+  490    0    0
+  512    0    0
+  479    0   43
+  489    0  325
+  437    0  442
+  474    0  707
+    0    0  916
+  373    0 1151
+    0    0 1341
+    0    0 1527
+    0    0 1671
+    0    0 1868
+    0    0 2124
+    0  220 2283
+    0  628 2379
+    0  914 2447
+  549   99    0
+  545   86    0
+  541   82    0
+  533  108  235
+  529  117  387
+  513  120  526
+  512   89  754
+  456   36  988
+  384    0 1221
+    0    0 1427
+    0    0 1612
+    0    0 1764
+    0    0 1958
+    0    0 2199
+    0  301 2348
+    0  719 2441
+    0 1011 2505
+  598  224    0
+  585  214    0
+  563  198  105
+  568  224  276
+  557  233  417
+  541  252  585
+  529  259  801
+  495  259 1063
+  387  228 1301
+    0   97 1518
+    0    0 1706
+    0    0 1863
+    0    0 2050
+    0   53 2270
+    0  393 2409
+    0  822 2497
+    0 1122 2558
+  635  337    0
+  630  330    0
+  618  314  188
+  614  341  314
+  606  360  456
+  586  378  639
+  576  403  873
+  525  412 1147
+  368  421 1393
+    0  408 1624
+    0  410 1811
+    0  428 1978
+    0  572 2153
+    0  851 2351
+    0 1040 2479
+    0 1166 2562
+    0 1255 2620
+  671  439    0
+  673  448    0
+  664  436  229
+  657  465  353
+  643  474  490
+  632  521  697
+  602  538  943
+  553  576 1223
+  357  589 1482
+    0  603 1721
+    0  618 1916
+    0  649 2077
+    0  780 2241
+    0 1036 2424
+    0 1209 2547
+    0 1312 2622
+    0 1384 2674
+  714  543    0
+  722  577  162
+  724  609  281
+  705  615  388
+  699  653  553
+  668  680  745
+  645  731 1026
+  543  768 1318
+    0  807 1591
+    0  842 1841
+    0  863 2044
+    0  896 2203
+    0 1022 2353
+    0 1254 2522
+    0 1398 2628
+    0 1484 2692
+    0 1544 2738
+  824  785    0
+  816  799  211
+  795  802  319
+  786  837  442
+  763  870  602
+  729  921  828
+  658  970 1112
+  303 1024 1419
+    0 1074 1708
+    0 1114 1971
+    0 1153 2174
+    0 1184 2340
+    0 1286 2482
+    0 1487 2624
+    0 1613 2713
+    0 1686 2768
+    0 1738 2806
+  899 1011    0
+  894 1044  244
+  881 1076  359
+  853 1100  478
+  830 1154  672
+  757 1202  894
+  688 1273 1206
+    0 1335 1531
+    0 1393 1825
+    0 1446 2097
+    0 1481 2308
+    0 1513 2475
+    0 1595 2605
+    0 1742 2721
+    0 1843 2800
+    0 1905 2848
+    0 1948 2881
+ 1006 1319    0
+  991 1335  248
+  966 1357  382
+  943 1402  520
+  886 1454  715
+  816 1516  971
+   68 1593 1293
+    0 1662 1628
+    0 1731 1940
+    0 1777 2207
+    0 1822 2431
+    0 1845 2595
+    0 1911 2724
+    0 2011 2820
+    0 2081 2882
+    0 2129 2924
+    0 2163 2953
+ 1088 1568    0
+ 1063 1599  239
+ 1027 1633  392
+  995 1674  548
+  929 1728  761
+  806 1793 1029
+   67 1869 1361
+    0 1952 1714
+    0 2018 2028
+    0 2078 2311
+    0 2111 2524
+    0 2140 2702
+    0 2190 2823
+    0 2264 2905
+    0 2310 2957
+    0 2338 2989
+    0 2364 3015
+ 1161 1818    0
+ 1133 1826  169
+ 1093 1840  401
+ 1049 1887  567
+  971 1943  797
+  821 2012 1072
+   72 2092 1424
+    0 2171 1777
+    0 2259 2112
+    0 2306 2388
+    0 2346 2606
+    0 2369 2771
+    0 2407 2889
+    0 2460 2967
+    0 2493 3015
+    0 2516 3045
+    0 2534 3067
+ 1221 1947    0
+ 1184 1972    0
+ 1132 1998  410
+ 1079 2035  589
+  994 2092  839
+  816 2170 1128
+   72 2252 1480
+    0 2339 1835
+    0 2405 2149
+    0 2465 2442
+    0 2499 2657
+    0 2532 2826
+    0 2558 2937
+    0 2587 3003
+    0 2609 3046
+    0 2632 3076
+    0 2647 3097
+ 1299 2060    0
+ 1262 2096    0
+ 1205 2132  502
+ 1146 2170  707
+ 1048 2233  960
+  874 2305 1260
+  146 2392 1603
+    0 2466 1945
+    0 2532 2250
+    0 2588 2526
+    0 2622 2731
+    0 2650 2881
+    0 2676 2985
+    0 2703 3048
+    0 2721 3089
+    0 2734 3115
+    0 2742 3133
+ 1387 2164    0
+ 1351 2204    0
+ 1300 2250  634
+ 1234 2298  855
+ 1133 2363 1137
+  971 2431 1431
+  260 2512 1761
+   57 2578 2080
+    0 2641 2377
+    0 2690 2627
+    0 2722 2813
+    0 2743 2935
+    0 2769 3039
+    0 2787 3086
+    0 2805 3126
+    0 2817 3152
+    0 2826 3170
+ 1443 2229    0
+ 1407 2273  472
+ 1359 2324  714
+ 1289 2377  947
+ 1191 2445 1247
+ 1024 2512 1540
+  321 2588 1865
+  207 2652 2174
+   63 2709 2457
+    0 2754 2690
+    0 2786 2865
+    0 2805 2981
+    0 2827 3073
+    0 2846 3120
+    0 2858 3150
+    0 2870 3176
+    0 2878 3194
+ 1482 2271    0
+ 1445 2317  509
+ 1397 2372  761
+ 1324 2429 1003
+ 1226 2498 1315
+ 1073 2565 1609
+  321 2639 1931
+  207 2702 2235
+   63 2757 2510
+    0 2798 2731
+    0 2829 2901
+    0 2848 3015
+    0 2868 3097
+    0 2886 3144
+    0 2898 3174
+    0 2906 3192
+    0 2915 3210
+ 1511 2302    0
+ 1473 2349  536
+ 1424 2406  795
+ 1349 2467 1043
+ 1251 2537 1363
+ 1108 2603 1658
+  321 2675 1979
+  207 2738 2279
+   63 2791 2549
+    0 2831 2766
+    0 2860 2931
+    0 2879 3040
+    0 2896 3114
+    0 2915 3161
+    0 2927 3191
+    0 2935 3209
+    0 2941 3222
+  710    0    0
+  718    0    0
+  726    0    0
+  710    0  149
+  710    0  334
+  706    0  457
+  700    0  732
+  681    0  954
+  661    0 1200
+  670    0 1394
+  657    0 1588
+  669    0 1739
+  720    0 1945
+  811    0 2209
+  869  255 2374
+  878  672 2475
+  869  963 2545
+  768  141    0
+  762  173    0
+  758  186   55
+  753  181  244
+  750  190  398
+  747  191  544
+  748  189  782
+  741  147 1026
+  731    0 1272
+  736    0 1484
+  731    0 1678
+  735    0 1833
+  774    0 2034
+  853    0 2286
+  902  343 2443
+  907  772 2540
+  895 1069 2607
+  832  270    0
+  817  295    0
+  793  302  142
+  801  309  283
+  793  316  429
+  796  332  605
+  792  324  835
+  804  307 1103
+  790  265 1355
+  795   78 1578
+  782    0 1778
+  789    0 1942
+  809    0 2135
+  873   94 2363
+  914  449 2508
+  917  890 2601
+  904 1196 2665
+  887  381    0
+  874  389    0
+  853  388  194
+  859  402  322
+  855  415  469
+  860  431  661
+  857  449  908
+  859  459 1189
+  845  459 1450
+  842  437 1686
+  827  437 1885
+  824  453 2056
+  836  608 2239
+  886  902 2445
+  920 1104 2579
+  879 1243 2666
+  812 1337 2727
+  941  487    0
+  937  503    0
+  923  501  232
+  924  520  358
+  919  533  502
+  930  574  717
+  916  589  979
+  921  624 1267
+  889  638 1542
+  884  649 1784
+  854  663 1993
+  850  694 2161
+  843  833 2331
+  883 1104 2520
+  914 1288 2649
+  735 1400 2727
+  498 1476 2781
+ 1009  612    0
+ 1015  645  140
+ 1016  675  282
+ 1007  678  390
+ 1013  719  565
+ 1009  748  766
+ 1006  798 1063
+  991  835 1364
+  953  872 1654
+  937  906 1905
+  888  923 2125
+  871  957 2295
+  853 1089 2451
+  883 1338 2623
+  902 1493 2731
+  726 1587 2797
+  496 1650 2844
+ 1127  866    0
+ 1128  886  192
+ 1117  895  318
+ 1119  929  445
+ 1116  962  615
+ 1114 1014  853
+ 1088 1064 1154
+ 1069 1116 1470
+ 1020 1163 1775
+  983 1204 2045
+  928 1243 2262
+  878 1272 2432
+  463 1379 2583
+  488 1590 2729
+  504 1721 2820
+  508 1802 2876
+  508 1857 2915
+ 1233 1111    0
+ 1238 1150  211
+ 1240 1186  350
+ 1227 1208  475
+ 1227 1268  682
+ 1204 1320  919
+ 1184 1391 1247
+ 1132 1453 1585
+ 1078 1507 1894
+ 1015 1560 2171
+  813 1594 2402
+  468 1625 2575
+  470 1709 2709
+  488 1863 2829
+  496 1971 2909
+  498 2036 2959
+  498 2081 2993
+ 1371 1460    0
+ 1367 1477    2
+ 1356 1500  360
+ 1348 1546  510
+ 1323 1601  721
+ 1305 1663  993
+ 1243 1740 1336
+ 1200 1805 1682
+ 1097 1880 2013
+  812 1926 2288
+  522 1971 2528
+  467 1991 2698
+  459 2058 2832
+  481 2164 2931
+  496 2238 2995
+  500 2289 3037
+  500 2323 3066
+ 1476 1726    0
+ 1468 1754    0
+ 1455 1787  353
+ 1442 1828  532
+ 1413 1885  764
+ 1372 1955 1049
+ 1307 2035 1401
+ 1224 2114 1765
+ 1121 2176 2097
+  800 2236 2391
+  524 2271 2622
+  439 2301 2801
+  431 2352 2928
+  463 2427 3013
+  484 2474 3067
+  490 2503 3100
+  490 2530 3126
+ 1574 1997    0
+ 1557 2002    0
+ 1534 2017  346
+ 1514 2069  541
+ 1483 2126  796
+ 1438 2197 1091
+ 1354 2283 1466
+ 1265 2365 1831
+ 1128 2448 2173
+  635 2492 2462
+  493 2538 2708
+  427 2557 2876
+  423 2594 2996
+  453 2646 3074
+  473 2679 3123
+  478 2699 3153
+  478 2718 3175
+ 1641 2126    0
+ 1623 2147    0
+ 1595 2173  345
+ 1565 2215  562
+ 1527 2283  840
+ 1475 2366 1147
+ 1392 2446 1521
+ 1277 2534 1890
+ 1145 2601 2222
+  628 2661 2519
+  507 2695 2753
+  416 2726 2929
+  415 2749 3043
+  455 2774 3110
+  478 2795 3154
+  484 2816 3184
+  484 2830 3205
+ 1719 2238    0
+ 1699 2273    0
+ 1668 2312  444
+ 1635 2354  683
+ 1586 2424  962
+ 1539 2499 1281
+ 1443 2587 1643
+ 1345 2662 2000
+  774 2731 2324
+  699 2784 2603
+  597 2817 2825
+  527 2843 2980
+  509 2865 3088
+  547 2889 3153
+  572 2905 3195
+  579 2915 3221
+  579 2923 3239
+ 1798 2337    0
+ 1778 2377    0
+ 1750 2427  596
+ 1716 2479  842
+ 1659 2548 1144
+ 1612 2616 1456
+ 1518 2698 1803
+ 1437 2765 2136
+  866 2829 2448
+  810 2877 2702
+  731 2909 2906
+  695 2930 3030
+  676 2952 3138
+  693 2965 3188
+  717 2980 3229
+  724 2991 3255
+  724 2998 3273
+ 1848 2398    0
+ 1828 2443    0
+ 1801 2499  691
+ 1767 2557  942
+ 1710 2626 1259
+ 1655 2692 1568
+ 1567 2768 1908
+ 1484 2833 2230
+  923 2891 2526
+  879 2935 2763
+  815 2966 2956
+  787 2986 3073
+  781 3006 3170
+  798 3019 3220
+  808 3027 3251
+  815 3038 3276
+  815 3045 3294
+ 1881 2439    0
+ 1862 2486  240
+ 1837 2545  747
+ 1802 2608 1003
+ 1745 2678 1331
+ 1686 2743 1639
+ 1606 2815 1975
+ 1523 2879 2291
+ 1173 2934 2579
+ 1104 2974 2803
+  896 3005 2990
+  810 3024 3106
+  810 3042 3191
+  826 3055 3241
+  837 3063 3272
+  840 3070 3291
+  840 3077 3308
+ 1907 2468    0
+ 1887 2517  488
+ 1864 2579  784
+ 1827 2644 1046
+ 1771 2715 1383
+ 1709 2780 1690
+ 1639 2850 2023
+ 1556 2913 2335
+ 1467 2966 2618
+ 1378 3005 2839
+ 1153 3034 3019
+  810 3053 3130
+  810 3068 3206
+  826 3082 3256
+  837 3090 3287
+  840 3096 3306
+  840 3101 3319
+  941    0    0
+  949   39    0
+  953  103    0
+  942    0  154
+  949    0  346
+  954    0  469
+  967    0  757
+  971    0  992
+  980    0 1244
+  998    0 1449
+ 1008    0 1651
+ 1029    0 1806
+ 1119    0 2021
+ 1247    0 2294
+ 1328  293 2464
+ 1378  720 2571
+ 1413 1019 2645
+ 1018  246    0
+ 1020  259    0
+ 1024  268   81
+ 1021  264  251
+ 1031  267  412
+ 1038  247  559
+ 1061  213  809
+ 1072   91 1066
+ 1089    0 1320
+ 1099    0 1543
+ 1113    0 1744
+ 1128    0 1909
+ 1209    0 2118
+ 1320    0 2376
+ 1389  384 2536
+ 1434  823 2639
+ 1466 1130 2711
+ 1099  300    0
+ 1100  318    0
+ 1103  335  148
+ 1104  334  290
+ 1119  347  445
+ 1127  348  621
+ 1150  345  866
+ 1166  323 1144
+ 1178  274 1404
+ 1189    8 1642
+ 1195    0 1843
+ 1210    0 2019
+ 1283    0 2222
+ 1375  134 2456
+ 1434  497 2604
+ 1474  950 2701
+ 1502 1267 2769
+ 1185  405    0
+ 1189  419    0
+ 1194  432  197
+ 1194  438  328
+ 1211  461  486
+ 1219  469  679
+ 1243  490  940
+ 1256  492 1233
+ 1268  492 1501
+ 1277  471 1756
+ 1279  464 1961
+ 1290  476 2138
+ 1352  649 2328
+ 1424  957 2539
+ 1474 1167 2676
+ 1510 1315 2767
+ 1535 1419 2831
+ 1265  521    0
+ 1276  547    0
+ 1284  561  233
+ 1284  571  364
+ 1301  595  521
+ 1316  627  735
+ 1330  648 1013
+ 1345  677 1313
+ 1349  688 1595
+ 1358  701 1857
+ 1353  710 2071
+ 1362  740 2249
+ 1408  886 2423
+ 1471 1171 2616
+ 1516 1364 2747
+ 1544 1484 2829
+ 1564 1568 2887
+ 1358  673    0
+ 1377  709  111
+ 1394  743  278
+ 1386  743  391
+ 1411  789  580
+ 1419  815  784
+ 1441  868 1095
+ 1441  905 1411
+ 1437  939 1709
+ 1441  972 1979
+ 1425  984 2204
+ 1428 1016 2385
+ 1470 1157 2550
+ 1523 1419 2725
+ 1556 1582 2834
+ 1576 1684 2903
+ 1591 1755 2951
+ 1496  954    0
+ 1512  977  138
+ 1528  991  305
+ 1531 1023  443
+ 1552 1061  628
+ 1563 1112  872
+ 1573 1161 1189
+ 1570 1216 1521
+ 1563 1263 1833
+ 1558 1302 2122
+ 1541 1335 2348
+ 1526 1364 2528
+ 1547 1473 2681
+ 1588 1689 2831
+ 1614 1824 2925
+ 1630 1908 2983
+ 1642 1967 3024
+ 1625 1216    0
+ 1651 1259  133
+ 1675 1302  328
+ 1667 1325  464
+ 1689 1389  692
+ 1690 1440  937
+ 1699 1513 1283
+ 1682 1575 1641
+ 1668 1628 1962
+ 1656 1681 2254
+ 1625 1709 2491
+ 1603 1739 2678
+ 1616 1826 2814
+ 1641 1985 2935
+ 1659 2096 3017
+ 1669 2165 3068
+ 1677 2213 3103
+ 1794 1597    0
+ 1808 1614    0
+ 1825 1641  320
+ 1822 1687  491
+ 1829 1743  726
+ 1826 1806 1009
+ 1818 1886 1371
+ 1800 1957 1734
+ 1770 2026 2077
+ 1750 2067 2373
+ 1698 2106 2619
+ 1674 2124 2798
+ 1677 2192 2938
+ 1700 2301 3037
+ 1714 2377 3103
+ 1722 2432 3146
+ 1728 2469 3176
+ 1917 1879    0
+ 1932 1911    0
+ 1948 1951  276
+ 1943 1996  501
+ 1948 2059  764
+ 1935 2129 1064
+ 1921 2205 1438
+ 1891 2292 1821
+ 1861 2356 2158
+ 1825 2414 2474
+ 1771 2443 2715
+ 1736 2475 2907
+ 1731 2521 3038
+ 1746 2596 3124
+ 1755 2642 3178
+ 1760 2672 3211
+ 1766 2702 3239
+ 2031 2165    0
+ 2036 2173    0
+ 2041 2192  107
+ 2031 2245  498
+ 2034 2313  791
+ 2016 2391 1102
+ 1991 2476 1501
+ 1951 2558 1886
+ 1914 2639 2237
+ 1872 2683 2541
+ 1792 2727 2798
+ 1762 2746 2979
+ 1757 2779 3106
+ 1770 2827 3187
+ 1779 2856 3238
+ 1784 2875 3270
+ 1788 2893 3293
+ 2100 2308    0
+ 2110 2340    0
+ 2117 2374   67
+ 2097 2416  512
+ 2098 2487  834
+ 2081 2576 1158
+ 2052 2656 1555
+ 2000 2746 1944
+ 1959 2805 2288
+ 1914 2866 2605
+ 1839 2897 2844
+ 1805 2931 3033
+ 1795 2946 3153
+ 1798 2968 3225
+ 1803 2986 3271
+ 1808 3005 3303
+ 1812 3017 3326
+ 2170 2423    0
+ 2179 2465    0
+ 2188 2513  304
+ 2161 2553  647
+ 2156 2628  960
+ 2133 2702 1296
+ 2107 2794 1679
+ 2056 2866 2053
+ 2008 2930 2390
+ 1963 2983 2687
+ 1897 3014 2914
+ 1866 3041 3080
+ 1855 3061 3193
+ 1859 3082 3262
+ 1861 3095 3306
+ 1862 3103 3334
+ 1863 3109 3354
+ 2241 2517    0
+ 2249 2566    0
+ 2253 2621  504
+ 2229 2672  819
+ 2211 2744 1148
+ 2184 2812 1474
+ 2159 2898 1840
+ 2112 2961 2190
+ 2067 3023 2514
+ 2025 3069 2783
+ 1973 3099 2992
+ 1945 3119 3129
+ 1933 3139 3241
+ 1939 3150 3291
+ 1941 3163 3335
+ 1942 3172 3363
+ 1943 3178 3382
+ 2286 2576    0
+ 2292 2628    0
+ 2293 2688  628
+ 2272 2746  927
+ 2247 2818 1267
+ 2217 2884 1591
+ 2190 2963 1947
+ 2146 3025 2284
+ 2104 3081 2591
+ 2063 3122 2843
+ 2021 3152 3042
+ 1993 3170 3171
+ 1982 3188 3272
+ 1988 3199 3322
+ 1991 3206 3353
+ 1993 3214 3380
+ 1994 3220 3400
+ 2314 2614    0
+ 2320 2669  180
+ 2319 2731  708
+ 2299 2794  996
+ 2271 2864 1344
+ 2238 2930 1665
+ 2210 3004 2015
+ 2168 3066 2346
+ 2127 3118 2645
+ 2088 3156 2881
+ 2050 3185 3074
+ 2023 3204 3202
+ 2014 3220 3292
+ 2019 3231 3341
+ 2022 3237 3372
+ 2025 3242 3392
+ 2026 3248 3411
+ 2335 2641    0
+ 2340 2698  417
+ 2338 2763  765
+ 2319 2828 1045
+ 2287 2898 1399
+ 2254 2964 1718
+ 2224 3034 2064
+ 2183 3096 2390
+ 2143 3145 2684
+ 2105 3182 2916
+ 2068 3210 3102
+ 2045 3229 3225
+ 2037 3242 3306
+ 2042 3253 3355
+ 2045 3260 3386
+ 2047 3264 3406
+ 2049 3267 3419
+ 1320    0    0
+ 1310    0    0
+ 1309   20    0
+ 1309    0  150
+ 1334    0  356
+ 1353    0  496
+ 1377    0  785
+ 1394    0 1030
+ 1421    0 1296
+ 1444    0 1507
+ 1463    0 1720
+ 1480    0 1879
+ 1588    0 2098
+ 1776    0 2384
+ 1879  331 2560
+ 1941  763 2669
+ 1983 1065 2746
+ 1397  244    0
+ 1382  238    0
+ 1375  235  107
+ 1383  239  259
+ 1405  239  420
+ 1425  223  581
+ 1450  182  835
+ 1471    0 1100
+ 1495    0 1365
+ 1512    0 1595
+ 1533    0 1805
+ 1555    0 1980
+ 1649    0 2196
+ 1816    0 2464
+ 1910  429 2628
+ 1968  872 2732
+ 2009 1182 2806
+ 1487  332    0
+ 1467  331    0
+ 1451  315  150
+ 1470  330  300
+ 1491  330  443
+ 1512  343  643
+ 1537  331  889
+ 1564  312 1174
+ 1584  244 1450
+ 1595    0 1693
+ 1620    0 1907
+ 1637    0 2085
+ 1715    0 2298
+ 1860  158 2544
+ 1946  544 2695
+ 2003 1002 2793
+ 2043 1322 2861
+ 1593  464    0
+ 1573  461    0
+ 1557  450  198
+ 1580  471  338
+ 1602  481  486
+ 1623  500  701
+ 1647  513  965
+ 1671  518 1264
+ 1689  516 1548
+ 1700  488 1806
+ 1721  479 2028
+ 1733  489 2211
+ 1799  660 2412
+ 1921  993 2630
+ 1997 1216 2768
+ 2049 1374 2860
+ 2085 1486 2925
+ 1690  581    0
+ 1675  597    0
+ 1665  592  226
+ 1687  614  367
+ 1711  628  517
+ 1734  669  757
+ 1753  680 1041
+ 1776  712 1346
+ 1791  718 1644
+ 1802  728 1911
+ 1821  738 2144
+ 1828  769 2327
+ 1880  919 2511
+ 1988 1224 2711
+ 2058 1427 2843
+ 2101 1553 2924
+ 2131 1641 2981
+ 1808  742    0
+ 1798  776    0
+ 1798  806  270
+ 1819  814  396
+ 1848  852  580
+ 1869  885  808
+ 1894  930 1124
+ 1906  966 1446
+ 1918  992 1759
+ 1925 1025 2037
+ 1939 1038 2277
+ 1940 1074 2462
+ 1985 1217 2636
+ 2079 1495 2819
+ 2132 1662 2930
+ 2163 1765 2999
+ 2185 1837 3047
+ 1968 1039    0
+ 1955 1057    0
+ 1948 1062  289
+ 1976 1102  442
+ 2000 1130  623
+ 2019 1185  890
+ 2039 1230 1215
+ 2047 1286 1556
+ 2058 1332 1886
+ 2058 1368 2181
+ 2064 1403 2426
+ 2051 1429 2613
+ 2080 1541 2775
+ 2163 1773 2929
+ 2208 1915 3022
+ 2235 2004 3079
+ 2254 2065 3119
+ 2127 1331    0
+ 2116 1366    0
+ 2117 1405  296
+ 2140 1436  456
+ 2163 1493  686
+ 2178 1541  954
+ 2198 1612 1309
+ 2199 1671 1670
+ 2209 1730 2016
+ 2199 1779 2313
+ 2197 1808 2565
+ 2176 1835 2756
+ 2195 1927 2907
+ 2256 2095 3033
+ 2291 2205 3114
+ 2311 2273 3164
+ 2325 2321 3199
+ 2328 1739    0
+ 2302 1746    0
+ 2296 1765  236
+ 2320 1814  463
+ 2340 1872  710
+ 2349 1936 1024
+ 2365 2020 1400
+ 2357 2078 1770
+ 2363 2157 2138
+ 2342 2194 2444
+ 2327 2237 2708
+ 2302 2252 2891
+ 2308 2321 3040
+ 2347 2431 3146
+ 2370 2507 3210
+ 2386 2561 3251
+ 2397 2598 3280
+ 2452 2033    0
+ 2432 2056    0
+ 2425 2089    0
+ 2444 2134  464
+ 2465 2200  743
+ 2467 2268 1077
+ 2474 2357 1466
+ 2459 2431 1855
+ 2454 2500 2215
+ 2427 2552 2537
+ 2405 2583 2796
+ 2378 2609 2991
+ 2381 2663 3135
+ 2412 2738 3232
+ 2426 2780 3286
+ 2434 2807 3319
+ 2443 2836 3346
+ 2588 2341    0
+ 2558 2339    0
+ 2545 2357    0
+ 2567 2419  437
+ 2591 2491  762
+ 2589 2563 1113
+ 2587 2655 1531
+ 2560 2723 1922
+ 2547 2805 2291
+ 2510 2841 2605
+ 2487 2895 2883
+ 2456 2905 3066
+ 2452 2940 3204
+ 2470 2989 3294
+ 2480 3018 3347
+ 2485 3037 3379
+ 2490 3053 3401
+ 2646 2488    0
+ 2628 2511    0
+ 2619 2543    0
+ 2631 2594  449
+ 2644 2666  804
+ 2643 2747 1167
+ 2634 2832 1577
+ 2606 2911 1977
+ 2589 2978 2346
+ 2553 3031 2670
+ 2523 3065 2926
+ 2494 3090 3117
+ 2487 3112 3250
+ 2498 3135 3330
+ 2503 3150 3377
+ 2508 3169 3409
+ 2512 3182 3432
+ 2707 2603    0
+ 2696 2642    0
+ 2696 2692    0
+ 2700 2739  589
+ 2703 2815  932
+ 2697 2885 1308
+ 2689 2981 1707
+ 2657 3043 2091
+ 2634 3114 2451
+ 2600 3164 2760
+ 2571 3196 3001
+ 2542 3215 3171
+ 2529 3236 3290
+ 2539 3257 3366
+ 2542 3266 3411
+ 2543 3270 3438
+ 2544 3273 3458
+ 2760 2692    0
+ 2753 2737    0
+ 2760 2797    0
+ 2762 2851  797
+ 2750 2923 1135
+ 2739 2988 1499
+ 2730 3078 1878
+ 2700 3133 2234
+ 2671 3201 2576
+ 2641 3246 2858
+ 2615 3278 3078
+ 2589 3292 3220
+ 2575 3314 3339
+ 2575 3322 3388
+ 2578 3330 3431
+ 2579 3334 3458
+ 2580 3337 3478
+ 2799 2750    0
+ 2793 2798    0
+ 2798 2860   94
+ 2800 2920  916
+ 2783 2990 1267
+ 2767 3054 1617
+ 2756 3136 1988
+ 2726 3192 2331
+ 2698 3253 2653
+ 2669 3293 2914
+ 2649 3326 3125
+ 2622 3339 3259
+ 2610 3357 3366
+ 2610 3365 3415
+ 2611 3371 3446
+ 2612 3375 3473
+ 2613 3378 3492
+ 2825 2788    0
+ 2818 2837   19
+ 2822 2899  470
+ 2825 2964  990
+ 2805 3033 1352
+ 2785 3096 1692
+ 2772 3172 2058
+ 2743 3230 2394
+ 2716 3285 2706
+ 2688 3322 2950
+ 2670 3356 3155
+ 2644 3370 3289
+ 2633 3385 3383
+ 2633 3393 3432
+ 2634 3398 3463
+ 2635 3402 3482
+ 2636 3405 3501
+ 2844 2815    0
+ 2837 2865  249
+ 2839 2928  740
+ 2843 2995 1043
+ 2820 3064 1413
+ 2798 3126 1746
+ 2783 3198 2108
+ 2755 3258 2440
+ 2729 3308 2745
+ 2701 3345 2984
+ 2683 3377 3181
+ 2660 3392 3311
+ 2650 3404 3395
+ 2649 3412 3444
+ 2651 3418 3475
+ 2652 3421 3494
+ 2652 3424 3508
+ 1603    0    0
+ 1596    0    0
+ 1590    0    0
+ 1595    0  187
+ 1624    0  378
+ 1656    0  509
+ 1679    0  799
+ 1703    0 1051
+ 1732    0 1322
+ 1757    0 1545
+ 1779    0 1761
+ 1801    0 1926
+ 1907    0 2149
+ 2095    0 2437
+ 2212  346 2616
+ 2286  784 2728
+ 2337 1090 2806
+ 1696  158    0
+ 1693  140    0
+ 1693  131  123
+ 1702  135  269
+ 1730  125  432
+ 1758   47  591
+ 1784    0  850
+ 1810    0 1125
+ 1832    0 1392
+ 1844    0 1632
+ 1867    0 1844
+ 1896    0 2029
+ 1995    0 2251
+ 2164    0 2519
+ 2270  447 2686
+ 2339  897 2793
+ 2386 1211 2868
+ 1789  308    0
+ 1790  305    0
+ 1796  297  161
+ 1810  306  308
+ 1837  308  459
+ 1862  316  652
+ 1890  298  904
+ 1921  274 1203
+ 1936    0 1477
+ 1939    0 1725
+ 1966    0 1943
+ 2000    0 2135
+ 2090    0 2353
+ 2234   27 2598
+ 2326  566 2753
+ 2387 1031 2854
+ 2431 1355 2925
+ 1897  464    0
+ 1899  457    0
+ 1906  446  196
+ 1924  466  342
+ 1954  479  498
+ 1984  491  711
+ 2011  505  981
+ 2039  503 1291
+ 2055  497 1578
+ 2069  446 1846
+ 2085  301 2068
+ 2108  279 2267
+ 2185  443 2469
+ 2308  791 2684
+ 2390 1105 2826
+ 2446 1397 2922
+ 2485 1523 2989
+ 2003  604    0
+ 2008  616    0
+ 2017  612  224
+ 2036  636  375
+ 2066  650  533
+ 2097  688  767
+ 2123  697 1056
+ 2150  727 1373
+ 2163  733 1673
+ 2181  740 1954
+ 2193  751 2185
+ 2212  777 2382
+ 2270  927 2569
+ 2378 1241 2768
+ 2455 1458 2902
+ 2503 1594 2986
+ 2536 1685 3046
+ 2136  777    0
+ 2144  810    0
+ 2159  842  263
+ 2178  851  399
+ 2209  894  592
+ 2240  921  817
+ 2265  966 1138
+ 2288  997 1473
+ 2299 1025 1788
+ 2315 1057 2082
+ 2324 1070 2323
+ 2339 1102 2522
+ 2385 1248 2696
+ 2479 1528 2877
+ 2538 1702 2991
+ 2575 1811 3061
+ 2601 1887 3111
+ 2300 1092    0
+ 2310 1109    0
+ 2325 1112  270
+ 2350 1153  439
+ 2384 1184  629
+ 2416 1237  896
+ 2441 1282 1225
+ 2460 1335 1583
+ 2468 1380 1914
+ 2479 1414 2224
+ 2478 1447 2469
+ 2483 1472 2673
+ 2515 1584 2840
+ 2586 1821 2990
+ 2630 1969 3083
+ 2658 2061 3141
+ 2680 2125 3183
+ 2481 1392    0
+ 2495 1430    0
+ 2516 1471  257
+ 2536 1501  444
+ 2565 1559  688
+ 2598 1606  957
+ 2616 1679 1320
+ 2632 1739 1699
+ 2635 1793 2045
+ 2640 1841 2365
+ 2630 1866 2614
+ 2628 1894 2820
+ 2641 1985 2971
+ 2688 2152 3095
+ 2723 2267 3179
+ 2745 2339 3232
+ 2763 2390 3268
+ 2686 1812    0
+ 2685 1822    0
+ 2695 1840    0
+ 2715 1892  444
+ 2744 1949  709
+ 2767 2014 1025
+ 2787 2088 1406
+ 2792 2152 1795
+ 2792 2221 2158
+ 2786 2261 2485
+ 2768 2300 2747
+ 2759 2320 2946
+ 2767 2388 3098
+ 2792 2499 3205
+ 2811 2578 3274
+ 2824 2635 3318
+ 2839 2676 3350
+ 2829 2125    0
+ 2841 2157    0
+ 2865 2195    0
+ 2877 2238  420
+ 2907 2309  729
+ 2927 2384 1074
+ 2937 2463 1474
+ 2942 2545 1887
+ 2929 2601 2247
+ 2923 2665 2594
+ 2892 2686 2846
+ 2885 2718 3058
+ 2884 2766 3203
+ 2892 2833 3296
+ 2897 2876 3354
+ 2900 2902 3390
+ 2911 2932 3419
+ 2977 2449    0
+ 2973 2454    0
+ 2979 2472    0
+ 2998 2529  382
+ 3025 2599  751
+ 3043 2678 1110
+ 3043 2760 1536
+ 3038 2836 1948
+ 3019 2902 2317
+ 3002 2948 2656
+ 2976 2994 2928
+ 2962 3013 3129
+ 2955 3044 3268
+ 2958 3089 3357
+ 2960 3117 3413
+ 2961 3134 3448
+ 2968 3153 3474
+ 3045 2609    0
+ 3057 2644    0
+ 3078 2685    0
+ 3087 2731  374
+ 3108 2801  781
+ 3128 2891 1160
+ 3120 2967 1585
+ 3113 3053 2005
+ 3088 3102 2376
+ 3074 3166 2729
+ 3039 3193 2982
+ 3028 3229 3193
+ 3014 3242 3324
+ 3002 3255 3398
+ 2998 3269 3447
+ 2999 3286 3482
+ 3003 3299 3507
+ 3101 2727    0
+ 3115 2774    0
+ 3141 2831    0
+ 3142 2874  522
+ 3158 2948  908
+ 3163 3022 1305
+ 3165 3112 1714
+ 3146 3179 2116
+ 3124 3236 2482
+ 3108 3294 2815
+ 3076 3320 3054
+ 3062 3346 3240
+ 3052 3364 3362
+ 3040 3376 3434
+ 3033 3383 3480
+ 3028 3388 3509
+ 3031 3394 3531
+ 3151 2817    0
+ 3163 2867    0
+ 3181 2926    0
+ 3187 2979  746
+ 3186 3049 1120
+ 3183 3117 1498
+ 3184 3203 1889
+ 3162 3262 2260
+ 3142 3320 2608
+ 3123 3368 2906
+ 3099 3395 3129
+ 3082 3413 3280
+ 3071 3431 3403
+ 3064 3437 3453
+ 3057 3444 3498
+ 3052 3449 3527
+ 3055 3455 3549
+ 3183 2874    0
+ 3193 2926    0
+ 3206 2985   73
+ 3214 3045  886
+ 3205 3113 1264
+ 3199 3180 1623
+ 3194 3259 2005
+ 3176 3319 2362
+ 3154 3373 2687
+ 3133 3414 2963
+ 3114 3442 3177
+ 3096 3459 3319
+ 3084 3473 3429
+ 3076 3479 3479
+ 3072 3482 3510
+ 3067 3487 3538
+ 3070 3493 3560
+ 3203 2910    0
+ 3212 2963    0
+ 3221 3024  443
+ 3232 3087  975
+ 3217 3154 1357
+ 3210 3220 1703
+ 3200 3294 2079
+ 3184 3356 2429
+ 3161 3406 2743
+ 3139 3443 3000
+ 3122 3473 3208
+ 3105 3489 3350
+ 3092 3500 3445
+ 3084 3505 3495
+ 3079 3509 3526
+ 3077 3511 3545
+ 3079 3517 3567
+ 3218 2935    0
+ 3228 2991    0
+ 3240 3054  712
+ 3250 3119 1035
+ 3234 3186 1417
+ 3222 3251 1760
+ 3212 3322 2131
+ 3196 3384 2476
+ 3173 3432 2784
+ 3149 3468 3034
+ 3134 3496 3236
+ 3118 3512 3372
+ 3105 3522 3459
+ 3097 3528 3509
+ 3093 3531 3540
+ 3090 3533 3560
+ 3090 3536 3573
+ 1900    0    0
+ 1888    0    0
+ 1883    0    0
+ 1892    0  183
+ 1924    0  371
+ 1957    0  504
+ 1979    0  808
+ 2002    0 1067
+ 2023    0 1344
+ 2048    0 1570
+ 2076    0 1797
+ 2101    0 1967
+ 2212    0 2193
+ 2406    0 2479
+ 2528  347 2658
+ 2604  785 2770
+ 2656 1091 2848
+ 1984    0    0
+ 1971    0    0
+ 1966    0  146
+ 1980    0  272
+ 2010    0  436
+ 2041    0  594
+ 2066    0  862
+ 2090    0 1139
+ 2109    0 1414
+ 2125    0 1658
+ 2150    0 1876
+ 2179    0 2063
+ 2284    0 2289
+ 2464    0 2559
+ 2576  452 2727
+ 2648  903 2835
+ 2697 1219 2910
+ 2082  239    0
+ 2068  244    0
+ 2060  233  179
+ 2081  242  311
+ 2109  236  466
+ 2136  246  656
+ 2162  165  920
+ 2187   88 1217
+ 2205    0 1497
+ 2212    0 1749
+ 2242    0 1976
+ 2274    0 2170
+ 2371    0 2390
+ 2531    0 2637
+ 2633  575 2794
+ 2701 1042 2897
+ 2747 1368 2968
+ 2191  439    0
+ 2177  441    0
+ 2170  436  209
+ 2193  450  345
+ 2226  467  506
+ 2257  475  713
+ 2286  489  995
+ 2312  485 1304
+ 2332  458 1598
+ 2345    0 1863
+ 2369    0 2098
+ 2390    0 2298
+ 2475    7 2505
+ 2611  363 2725
+ 2702  794 2869
+ 2764 1275 2965
+ 2806 1543 3032
+ 2306  602    0
+ 2295  620    0
+ 2290  618  232
+ 2316  639  373
+ 2347  653  540
+ 2381  690  768
+ 2408  697 1068
+ 2434  729 1386
+ 2455  732 1693
+ 2470  740 1970
+ 2491  743 2216
+ 2505  773 2413
+ 2570  930 2605
+ 2691 1253 2808
+ 2776 1475 2945
+ 2829 1614 3031
+ 2864 1710 3090
+ 2457  786    0
+ 2446  826    0
+ 2447  859  264
+ 2477  864  392
+ 2507  906  593
+ 2539  930  817
+ 2564  973 1148
+ 2585 1003 1484
+ 2605 1031 1809
+ 2617 1063 2099
+ 2635 1069 2358
+ 2642 1103 2556
+ 2693 1253 2733
+ 2800 1543 2918
+ 2867 1724 3034
+ 2909 1837 3106
+ 2937 1915 3156
+ 2628 1117    0
+ 2617 1137    0
+ 2612 1143  267
+ 2644 1181  430
+ 2678 1215  630
+ 2710 1265  895
+ 2734 1307 1234
+ 2753 1359 1592
+ 2769 1401 1935
+ 2776 1435 2237
+ 2785 1467 2500
+ 2784 1493 2702
+ 2823 1609 2874
+ 2907 1849 3029
+ 2960 1999 3126
+ 2994 2092 3187
+ 3015 2158 3228
+ 2812 1433    0
+ 2803 1471    0
+ 2805 1507  236
+ 2834 1532  425
+ 2867 1595  683
+ 2899 1637  952
+ 2919 1711 1328
+ 2933 1764 1706
+ 2945 1819 2063
+ 2946 1864 2378
+ 2948 1892 2647
+ 2940 1918 2850
+ 2960 2011 3005
+ 3018 2184 3137
+ 3061 2304 3225
+ 3088 2380 3280
+ 3106 2431 3318
+ 3026 1871    0
+ 3006 1880    0
+ 3003 1899    0
+ 3037 1953  413
+ 3069 2007  698
+ 3094 2068 1018
+ 3117 2143 1418
+ 3120 2205 1807
+ 3127 2272 2181
+ 3117 2308 2501
+ 3114 2353 2784
+ 3102 2370 2983
+ 3112 2438 3138
+ 3139 2549 3248
+ 3162 2630 3319
+ 3180 2689 3367
+ 3191 2729 3399
+ 3180 2192    0
+ 3171 2216    0
+ 3172 2253    0
+ 3199 2304  381
+ 3229 2370  721
+ 3252 2441 1066
+ 3264 2518 1482
+ 3268 2595 1894
+ 3261 2652 2266
+ 3250 2706 2605
+ 3238 2738 2879
+ 3227 2767 3089
+ 3230 2816 3238
+ 3245 2890 3337
+ 3254 2936 3399
+ 3260 2965 3438
+ 3267 2996 3467
+ 3354 2548    0
+ 3325 2543    0
+ 3316 2558    0
+ 3352 2627  268
+ 3374 2691  733
+ 3394 2766 1098
+ 3394 2846 1542
+ 3388 2917 1957
+ 3375 2981 2336
+ 3356 3020 2672
+ 3352 3080 2973
+ 3336 3095 3175
+ 3331 3125 3317
+ 3335 3169 3407
+ 3338 3196 3463
+ 3340 3213 3498
+ 3342 3231 3524
+ 3417 2712    0
+ 3403 2734    0
+ 3401 2764    0
+ 3427 2816  257
+ 3443 2886  767
+ 3465 2971 1150
+ 3460 3044 1592
+ 3454 3126 2015
+ 3438 3181 2398
+ 3419 3236 2743
+ 3403 3273 3018
+ 3388 3304 3230
+ 3379 3319 3367
+ 3376 3336 3447
+ 3376 3351 3498
+ 3378 3368 3533
+ 3379 3381 3558
+ 3465 2830    0
+ 3460 2868    0
+ 3465 2913    0
+ 3481 2959  415
+ 3493 3036  901
+ 3503 3108 1296
+ 3504 3193 1724
+ 3490 3258 2131
+ 3476 3320 2507
+ 3456 3371 2835
+ 3438 3403 3092
+ 3423 3426 3277
+ 3410 3443 3403
+ 3406 3458 3480
+ 3405 3468 3530
+ 3404 3475 3561
+ 3402 3478 3582
+ 3503 2918    0
+ 3501 2962    0
+ 3508 3014    0
+ 3525 3067  679
+ 3522 3142 1117
+ 3526 3210 1496
+ 3525 3290 1903
+ 3510 3348 2280
+ 3495 3407 2637
+ 3474 3450 2933
+ 3458 3480 3171
+ 3444 3498 3320
+ 3431 3514 3446
+ 3421 3519 3498
+ 3419 3528 3546
+ 3418 3535 3577
+ 3416 3539 3598
+ 3527 2973    0
+ 3527 3021    0
+ 3536 3076   54
+ 3552 3135  844
+ 3545 3209 1260
+ 3542 3276 1627
+ 3538 3350 2021
+ 3524 3408 2385
+ 3506 3461 2719
+ 3486 3500 2995
+ 3470 3529 3221
+ 3456 3545 3361
+ 3444 3559 3473
+ 3434 3563 3524
+ 3428 3566 3556
+ 3426 3573 3587
+ 3424 3576 3608
+ 3542 3008    0
+ 3544 3058    0
+ 3553 3117  421
+ 3569 3178  949
+ 3559 3251 1352
+ 3552 3318 1711
+ 3547 3389 2097
+ 3532 3447 2454
+ 3514 3497 2777
+ 3493 3531 3034
+ 3478 3560 3253
+ 3464 3576 3392
+ 3453 3587 3490
+ 3443 3592 3542
+ 3436 3595 3574
+ 3432 3597 3594
+ 3430 3601 3615
+ 3555 3033    0
+ 3556 3085    0
+ 3565 3145  686
+ 3582 3209 1019
+ 3568 3281 1418
+ 3560 3348 1770
+ 3552 3415 2151
+ 3538 3474 2502
+ 3520 3522 2819
+ 3498 3556 3070
+ 3483 3582 3281
+ 3470 3598 3415
+ 3459 3607 3502
+ 3448 3612 3554
+ 3442 3615 3586
+ 3438 3617 3606
+ 3436 3618 3620
+ 2079    0    0
+ 2074    0    0
+ 2070    0    0
+ 2078    0  211
+ 2107    0  392
+ 2138    0  520
+ 2158    0  816
+ 2181    0 1075
+ 2201    0 1346
+ 2226    0 1575
+ 2252    0 1806
+ 2286    0 1984
+ 2396    0 2211
+ 2586    0 2497
+ 2706  341 2676
+ 2782  779 2788
+ 2835 1086 2866
+ 2163    0    0
+ 2162    0    0
+ 2163    0  162
+ 2175    0  282
+ 2207    0  445
+ 2239    0  603
+ 2264    0  869
+ 2291    0 1150
+ 2310    0 1423
+ 2331    0 1675
+ 2353    0 1893
+ 2387    0 2084
+ 2489    0 2310
+ 2661    0 2580
+ 2770  448 2749
+ 2842  899 2856
+ 2892 1215 2932
+ 2262  168    0
+ 2266  144    0
+ 2273  107  186
+ 2288  126  319
+ 2317  114  473
+ 2348  114  663
+ 2372    0  924
+ 2402    0 1229
+ 2417    0 1509
+ 2436    0 1775
+ 2454    0 1997
+ 2489    0 2195
+ 2581    0 2414
+ 2734    0 2660
+ 2833  575 2817
+ 2901 1042 2919
+ 2949 1369 2991
+ 2379  427    0
+ 2383  416    0
+ 2389  396  209
+ 2408  420  349
+ 2437  433  510
+ 2468  438  719
+ 2493  450  997
+ 2522  437 1312
+ 2538  354 1607
+ 2557    0 1883
+ 2574    0 2113
+ 2604    0 2321
+ 2687    0 2528
+ 2818  288 2746
+ 2906  727 2890
+ 2969 1208 2986
+ 3012 1544 3054
+ 2488  605    0
+ 2494  615    0
+ 2502  605  231
+ 2522  633  379
+ 2552  643  544
+ 2586  679  774
+ 2610  685 1069
+ 2641  715 1394
+ 2655  722 1702
+ 2675  721 1988
+ 2689  732 2228
+ 2713  757 2434
+ 2778  912 2627
+ 2897 1244 2828
+ 2979 1475 2965
+ 3032 1614 3051
+ 3070 1711 3111
+ 2633  800    0
+ 2641  833    0
+ 2655  865  260
+ 2676  875  399
+ 2707  915  598
+ 2741  935  822
+ 2765  979 1149
+ 2790 1007 1492
+ 2803 1039 1817
+ 2820 1064 2115
+ 2830 1076 2368
+ 2849 1107 2576
+ 2898 1258 2754
+ 3004 1545 2938
+ 3071 1725 3054
+ 3113 1838 3126
+ 3142 1918 3177
+ 2805 1134    0
+ 2813 1150    0
+ 2823 1149  254
+ 2849 1194  432
+ 2883 1224  631
+ 2918 1271  897
+ 2941 1312 1234
+ 2965 1362 1601
+ 2976 1405 1941
+ 2989 1431 2253
+ 2994 1468 2510
+ 3005 1492 2723
+ 3040 1609 2896
+ 3119 1855 3051
+ 3169 2007 3149
+ 3202 2101 3209
+ 3225 2167 3252
+ 2995 1453    0
+ 3007 1489    0
+ 3023 1524    0
+ 3047 1555  423
+ 3081 1616  683
+ 3115 1655  953
+ 3134 1730 1328
+ 3155 1784 1716
+ 3159 1836 2068
+ 3170 1880 2396
+ 3166 1907 2659
+ 3171 1933 2874
+ 3186 2027 3029
+ 3236 2200 3160
+ 3275 2319 3248
+ 3302 2395 3303
+ 3320 2447 3341
+ 3208 1889    0
+ 3209 1902    0
+ 3218 1920    0
+ 3245 1973  409
+ 3277 2025  697
+ 3305 2084 1019
+ 3325 2156 1414
+ 3336 2222 1812
+ 3336 2283 2180
+ 3338 2322 2514
+ 3332 2364 2792
+ 3328 2382 3000
+ 3336 2452 3158
+ 3360 2568 3271
+ 3380 2650 3343
+ 3398 2709 3390
+ 3411 2750 3424
+ 3372 2216    0
+ 3387 2253    0
+ 3408 2297    0
+ 3427 2344  359
+ 3455 2408  710
+ 3483 2480 1064
+ 3492 2555 1480
+ 3502 2632 1903
+ 3489 2682 2271
+ 3487 2740 2626
+ 3472 2767 2894
+ 3470 2797 3117
+ 3469 2846 3267
+ 3475 2919 3364
+ 3480 2964 3425
+ 3486 2993 3464
+ 3494 3024 3494
+ 3541 2576    0
+ 3535 2580    0
+ 3538 2597    0
+ 3564 2659  234
+ 3586 2723  725
+ 3610 2799 1099
+ 3612 2874 1540
+ 3615 2949 1965
+ 3599 3008 2345
+ 3588 3051 2692
+ 3577 3098 2980
+ 3569 3118 3196
+ 3562 3150 3341
+ 3561 3198 3432
+ 3561 3227 3489
+ 3563 3244 3524
+ 3566 3262 3551
+ 3615 2755    0
+ 3624 2786    0
+ 3640 2826    0
+ 3660 2878    0
+ 3679 2945  746
+ 3704 3030 1147
+ 3698 3099 1592
+ 3701 3189 2027
+ 3678 3236 2409
+ 3668 3294 2766
+ 3648 3324 3036
+ 3645 3360 3263
+ 3630 3372 3400
+ 3615 3381 3477
+ 3609 3394 3528
+ 3611 3411 3563
+ 3612 3423 3588
+ 3662 2878    0
+ 3675 2921    0
+ 3695 2974    0
+ 3706 3020    0
+ 3724 3095  880
+ 3733 3166 1296
+ 3735 3248 1724
+ 3727 3318 2141
+ 3708 3373 2513
+ 3697 3427 2853
+ 3677 3455 3109
+ 3670 3482 3307
+ 3658 3498 3436
+ 3644 3507 3511
+ 3636 3514 3559
+ 3635 3520 3591
+ 3634 3525 3612
+ 3700 2972    0
+ 3712 3018    0
+ 3726 3072    0
+ 3739 3128  318
+ 3743 3201 1105
+ 3746 3266 1498
+ 3744 3344 1905
+ 3732 3401 2286
+ 3715 3456 2636
+ 3703 3503 2942
+ 3688 3533 3186
+ 3679 3552 3346
+ 3667 3568 3475
+ 3656 3572 3529
+ 3648 3578 3577
+ 3647 3585 3608
+ 3646 3589 3630
+ 3724 3029    0
+ 3735 3078    0
+ 3747 3134   30
+ 3762 3195  830
+ 3759 3267 1260
+ 3758 3332 1629
+ 3751 3403 2026
+ 3740 3460 2391
+ 3722 3509 2714
+ 3708 3550 2999
+ 3696 3581 3234
+ 3686 3599 3385
+ 3674 3612 3500
+ 3663 3616 3554
+ 3656 3618 3588
+ 3655 3625 3618
+ 3654 3629 3640
+ 3739 3064    0
+ 3752 3116    0
+ 3765 3174  397
+ 3779 3239  935
+ 3773 3310 1351
+ 3768 3375 1713
+ 3759 3442 2101
+ 3749 3499 2459
+ 3730 3545 2772
+ 3716 3582 3039
+ 3704 3612 3267
+ 3694 3630 3417
+ 3683 3641 3517
+ 3672 3644 3572
+ 3665 3647 3605
+ 3661 3649 3625
+ 3660 3653 3647
+ 3750 3090    0
+ 3764 3143    0
+ 3777 3203  661
+ 3792 3270 1011
+ 3783 3340 1417
+ 3776 3405 1773
+ 3766 3470 2156
+ 3755 3527 2508
+ 3735 3571 2815
+ 3721 3607 3075
+ 3709 3635 3295
+ 3700 3652 3440
+ 3689 3661 3530
+ 3678 3665 3584
+ 3671 3668 3617
+ 3667 3669 3637
+ 3664 3671 3651
+ 2221    0    0
+ 2222    0    0
+ 2218    0   96
+ 2226    0  231
+ 2254    0  411
+ 2283    0  543
+ 2302    0  837
+ 2324    0 1096
+ 2343    0 1368
+ 2368    0 1597
+ 2390    0 1826
+ 2424    0 2007
+ 2540    0 2241
+ 2731    0 2529
+ 2849  380 2707
+ 2924  817 2819
+ 2976 1123 2897
+ 2308    0    0
+ 2310    0    0
+ 2313    0  180
+ 2324    0  298
+ 2355    0  455
+ 2384    0  624
+ 2411    0  890
+ 2436    0 1170
+ 2455    0 1446
+ 2477    0 1699
+ 2498    0 1919
+ 2530    0 2109
+ 2638    0 2340
+ 2812    0 2611
+ 2919  489 2780
+ 2989  940 2887
+ 3038 1255 2963
+ 2403   36    0
+ 2412    0    0
+ 2425    0  199
+ 2436    0  336
+ 2470    0  475
+ 2495    0  688
+ 2524    0  943
+ 2549    0 1247
+ 2568    0 1534
+ 2588    0 1799
+ 2606    0 2028
+ 2637    0 2224
+ 2738    0 2444
+ 2892    0 2690
+ 2989  619 2846
+ 3052 1085 2949
+ 3097 1411 3020
+ 2519  416    0
+ 2528  411    0
+ 2541  384  222
+ 2555  410  367
+ 2589  414  514
+ 2614  435  743
+ 2644  429 1016
+ 2669  390 1332
+ 2689    0 1633
+ 2709    0 1909
+ 2725    0 2144
+ 2753    0 2348
+ 2841    0 2557
+ 2974  332 2776
+ 3061  771 2919
+ 3120 1252 3015
+ 3162 1588 3082
+ 2629  628    0
+ 2641  635    0
+ 2656  616  236
+ 2672  649  390
+ 2708  658  549
+ 2733  698  797
+ 2761  698 1089
+ 2787  731 1413
+ 2804  735 1725
+ 2824  734 2011
+ 2839  751 2257
+ 2861  778 2460
+ 2932  936 2655
+ 3052 1269 2857
+ 3134 1503 2993
+ 3185 1650 3078
+ 3221 1753 3138
+ 2770  834    0
+ 2785  872    0
+ 2805  903  264
+ 2819  915  413
+ 2857  952  604
+ 2882  977  845
+ 2912 1017 1169
+ 2932 1049 1509
+ 2949 1079 1840
+ 2965 1107 2136
+ 2974 1120 2395
+ 2991 1154 2598
+ 3048 1300 2782
+ 3155 1589 2966
+ 3221 1768 3081
+ 3263 1880 3153
+ 3292 1958 3203
+ 2944 1175    0
+ 2958 1190    0
+ 2976 1189  253
+ 2996 1234  441
+ 3035 1262  634
+ 3062 1313  917
+ 3091 1350 1251
+ 3111 1403 1617
+ 3125 1444 1964
+ 3138 1469 2273
+ 3144 1508 2536
+ 3154 1534 2744
+ 3197 1648 2922
+ 3276 1892 3078
+ 3325 2046 3175
+ 3356 2142 3236
+ 3378 2209 3278
+ 3133 1496    0
+ 3150 1537    0
+ 3173 1574    0
+ 3191 1604  434
+ 3230 1665  684
+ 3255 1707  974
+ 3282 1779 1345
+ 3296 1832 1726
+ 3306 1882 2087
+ 3315 1925 2409
+ 3314 1954 2679
+ 3317 1980 2887
+ 3342 2071 3052
+ 3393 2244 3184
+ 3431 2362 3271
+ 3454 2437 3326
+ 3471 2488 3365
+ 3350 1938    0
+ 3358 1952    0
+ 3375 1965    0
+ 3397 2019  413
+ 3434 2071  695
+ 3454 2135 1038
+ 3479 2205 1430
+ 3486 2272 1829
+ 3491 2332 2206
+ 3493 2371 2537
+ 3488 2412 2816
+ 3483 2429 3020
+ 3497 2491 3182
+ 3521 2605 3295
+ 3540 2687 3367
+ 3554 2747 3414
+ 3564 2790 3447
+ 3512 2263    0
+ 3530 2299    0
+ 3558 2343    0
+ 3571 2387  363
+ 3606 2453  702
+ 3622 2521 1082
+ 3642 2602 1494
+ 3644 2671 1914
+ 3638 2725 2293
+ 3636 2778 2641
+ 3624 2808 2914
+ 3621 2835 3130
+ 3627 2882 3288
+ 3635 2954 3386
+ 3639 3000 3447
+ 3641 3028 3485
+ 3648 3060 3516
+ 3673 2615    0
+ 3676 2625    0
+ 3688 2645    0
+ 3707 2703    0
+ 3736 2768  715
+ 3751 2842 1114
+ 3762 2920 1552
+ 3759 2988 1975
+ 3750 3049 2363
+ 3740 3090 2708
+ 3730 3138 2998
+ 3721 3156 3209
+ 3720 3184 3361
+ 3720 3230 3452
+ 3719 3260 3510
+ 3719 3278 3545
+ 3720 3297 3571
+ 3746 2787    0
+ 3760 2819    0
+ 3782 2858    0
+ 3795 2908    0
+ 3823 2977  738
+ 3835 3054 1164
+ 3842 3132 1602
+ 3838 3211 2033
+ 3823 3265 2424
+ 3814 3318 2777
+ 3797 3350 3050
+ 3791 3380 3269
+ 3786 3398 3417
+ 3772 3408 3495
+ 3766 3421 3546
+ 3765 3439 3582
+ 3765 3452 3607
+ 3798 2912    0
+ 3818 2960    0
+ 3849 3019    0
+ 3856 3064    0
+ 3880 3138  870
+ 3883 3205 1310
+ 3892 3289 1735
+ 3881 3355 2154
+ 3869 3414 2534
+ 3858 3466 2872
+ 3839 3492 3128
+ 3832 3517 3322
+ 3828 3536 3457
+ 3815 3545 3533
+ 3805 3550 3581
+ 3799 3554 3611
+ 3795 3556 3632
+ 3835 3006    0
+ 3855 3057    0
+ 3879 3117    0
+ 3889 3171    0
+ 3899 3244 1096
+ 3897 3306 1512
+ 3902 3385 1917
+ 3887 3438 2299
+ 3876 3498 2657
+ 3864 3541 2962
+ 3849 3569 3205
+ 3841 3587 3361
+ 3837 3606 3497
+ 3827 3610 3551
+ 3817 3615 3598
+ 3812 3619 3628
+ 3807 3621 3650
+ 3859 3064    0
+ 3878 3118    0
+ 3898 3178   42
+ 3909 3239  318
+ 3913 3310 1254
+ 3908 3372 1643
+ 3906 3444 2038
+ 3893 3497 2405
+ 3881 3550 2734
+ 3867 3588 3018
+ 3856 3618 3253
+ 3847 3634 3400
+ 3842 3649 3521
+ 3832 3653 3576
+ 3825 3656 3609
+ 3819 3659 3639
+ 3815 3662 3660
+ 3874 3102    0
+ 3893 3156    0
+ 3911 3217  404
+ 3923 3282  726
+ 3921 3352 1356
+ 3915 3414 1726
+ 3909 3482 2115
+ 3897 3536 2474
+ 3883 3583 2790
+ 3870 3619 3054
+ 3860 3649 3285
+ 3851 3665 3431
+ 3845 3677 3537
+ 3835 3681 3591
+ 3828 3684 3625
+ 3824 3685 3646
+ 3820 3688 3667
+ 3885 3129    0
+ 3903 3184    0
+ 3919 3245  665
+ 3932 3313 1020
+ 3927 3382 1429
+ 3920 3445 1787
+ 3912 3509 2171
+ 3900 3564 2523
+ 3884 3607 2832
+ 3872 3642 3088
+ 3862 3670 3310
+ 3854 3687 3453
+ 3848 3697 3548
+ 3838 3701 3603
+ 3831 3704 3636
+ 3826 3705 3657
+ 3823 3706 3672
+ 2332    0    0
+ 2334    0    0
+ 2333    0  116
+ 2338    0  240
+ 2366    0  427
+ 2396    0  562
+ 2415    0  859
+ 2438    0 1122
+ 2454    0 1396
+ 2477    0 1628
+ 2497    0 1851
+ 2530    0 2035
+ 2646    0 2270
+ 2839    0 2565
+ 2958  436 2744
+ 3033  873 2855
+ 3085 1179 2934
+ 2420    0    0
+ 2423    0    0
+ 2426    0  196
+ 2435    0  309
+ 2465    0  470
+ 2493    0  641
+ 2519    0  914
+ 2543    0 1194
+ 2561    0 1475
+ 2582    0 1726
+ 2601    0 1949
+ 2632    0 2138
+ 2740    0 2369
+ 2920    0 2645
+ 3028  550 2814
+ 3097 1001 2921
+ 3146 1316 2997
+ 2513   31    0
+ 2520    0    0
+ 2530    0  220
+ 2540    0  345
+ 2574    0  492
+ 2598    0  706
+ 2626    0  970
+ 2649    0 1269
+ 2669    0 1564
+ 2689    0 1823
+ 2705    0 2059
+ 2734    0 2254
+ 2835    0 2475
+ 2998    0 2721
+ 3096  683 2877
+ 3160 1149 2979
+ 3204 1475 3051
+ 2624  439    0
+ 2633  442    0
+ 2644  432  245
+ 2656  449  376
+ 2689  458  534
+ 2714  482  761
+ 2744  478 1042
+ 2768  446 1357
+ 2789    0 1664
+ 2808    0 1934
+ 2825    0 2176
+ 2851    0 2377
+ 2940   30 2585
+ 3080  396 2804
+ 3168  835 2947
+ 3228 1316 3044
+ 3269 1653 3111
+ 2733  656    0
+ 2746  669    0
+ 2758  661  257
+ 2773  687  397
+ 2808  701  570
+ 2834  740  815
+ 2862  745 1116
+ 2886  781 1439
+ 2904  783 1754
+ 2924  792 2036
+ 2940  808 2289
+ 2961  842 2490
+ 3033 1000 2684
+ 3159 1332 2885
+ 3241 1566 3022
+ 3292 1713 3107
+ 3328 1815 3167
+ 2873  870    0
+ 2889  910    0
+ 2906  940  280
+ 2920  952  417
+ 2958  992  622
+ 2983 1018  866
+ 3013 1059 1196
+ 3033 1089 1536
+ 3049 1118 1868
+ 3066 1149 2160
+ 3077 1169 2427
+ 3093 1204 2629
+ 3150 1350 2812
+ 3262 1648 2994
+ 3329 1828 3109
+ 3370 1940 3181
+ 3399 2019 3232
+ 3051 1222    0
+ 3065 1243    0
+ 3081 1253  270
+ 3100 1290  443
+ 3138 1322  651
+ 3165 1374  936
+ 3193 1414 1279
+ 3212 1470 1639
+ 3227 1510 1993
+ 3240 1541 2296
+ 3247 1577 2567
+ 3257 1608 2769
+ 3299 1722 2947
+ 3383 1952 3106
+ 3433 2105 3203
+ 3464 2201 3264
+ 3485 2268 3306
+ 3239 1550    0
+ 3256 1592    0
+ 3276 1630    0
+ 3292 1656  432
+ 3330 1717  698
+ 3353 1763  991
+ 3380 1834 1370
+ 3393 1882 1745
+ 3405 1936 2113
+ 3413 1978 2429
+ 3414 2009 2707
+ 3418 2036 2909
+ 3443 2127 3074
+ 3498 2298 3208
+ 3536 2417 3296
+ 3560 2491 3350
+ 3576 2543 3389
+ 3454 1998    0
+ 3463 2011    0
+ 3478 2026    0
+ 3498 2073  407
+ 3532 2129  709
+ 3552 2196 1053
+ 3577 2270 1455
+ 3584 2334 1851
+ 3590 2396 2238
+ 3592 2434 2561
+ 3589 2474 2842
+ 3584 2490 3040
+ 3598 2552 3202
+ 3624 2653 3315
+ 3643 2734 3388
+ 3657 2795 3434
+ 3667 2837 3467
+ 3615 2322    0
+ 3628 2353    0
+ 3648 2390    0
+ 3663 2433  355
+ 3695 2498  719
+ 3710 2566 1096
+ 3730 2650 1518
+ 3732 2715 1930
+ 3730 2773 2319
+ 3726 2820 2655
+ 3718 2855 2935
+ 3714 2877 3142
+ 3720 2925 3300
+ 3736 2993 3404
+ 3740 3038 3465
+ 3743 3067 3503
+ 3749 3098 3534
+ 3766 2657    0
+ 3769 2669    0
+ 3781 2694    0
+ 3799 2748    0
+ 3828 2814  729
+ 3843 2887 1126
+ 3853 2966 1571
+ 3851 3032 1991
+ 3843 3091 2385
+ 3834 3131 2722
+ 3827 3182 3018
+ 3817 3199 3223
+ 3816 3228 3375
+ 3821 3265 3468
+ 3821 3293 3526
+ 3821 3312 3561
+ 3822 3330 3587
+ 3838 2819    0
+ 3849 2849    0
+ 3864 2883    0
+ 3880 2935    0
+ 3906 3004  762
+ 3918 3078 1177
+ 3925 3156 1619
+ 3921 3230 2043
+ 3910 3289 2441
+ 3901 3338 2783
+ 3888 3375 3065
+ 3880 3399 3274
+ 3875 3417 3422
+ 3872 3433 3508
+ 3867 3446 3560
+ 3866 3465 3595
+ 3866 3478 3620
+ 3889 2944    0
+ 3908 2991    0
+ 3931 3044    0
+ 3940 3091    0
+ 3963 3165  893
+ 3966 3229 1324
+ 3975 3314 1753
+ 3964 3374 2165
+ 3956 3439 2551
+ 3944 3486 2878
+ 3930 3517 3142
+ 3921 3537 3327
+ 3917 3555 3462
+ 3915 3570 3546
+ 3906 3576 3594
+ 3900 3579 3625
+ 3896 3582 3646
+ 3927 3032    0
+ 3946 3085    0
+ 3970 3147    0
+ 3979 3201    0
+ 3991 3272 1116
+ 3989 3333 1531
+ 3996 3411 1936
+ 3983 3464 2319
+ 3974 3524 2681
+ 3963 3566 2981
+ 3949 3593 3221
+ 3942 3610 3373
+ 3938 3628 3509
+ 3933 3633 3564
+ 3924 3638 3611
+ 3919 3642 3641
+ 3914 3644 3663
+ 3950 3091    0
+ 3969 3146    0
+ 3990 3208   63
+ 4000 3268  335
+ 4004 3338 1274
+ 4001 3399 1662
+ 4000 3470 2056
+ 3989 3523 2424
+ 3979 3576 2757
+ 3967 3613 3037
+ 3956 3641 3270
+ 3948 3657 3412
+ 3943 3672 3534
+ 3939 3676 3589
+ 3932 3679 3622
+ 3926 3682 3652
+ 3922 3685 3673
+ 3966 3128    0
+ 3984 3184    0
+ 4002 3248  425
+ 4013 3311  743
+ 4013 3380 1376
+ 4008 3441 1746
+ 4003 3508 2134
+ 3993 3561 2493
+ 3981 3609 2814
+ 3969 3643 3072
+ 3960 3672 3301
+ 3952 3688 3443
+ 3947 3700 3549
+ 3942 3704 3604
+ 3935 3707 3638
+ 3931 3708 3659
+ 3927 3711 3680
+ 3976 3155    0
+ 3995 3212    0
+ 4011 3276  686
+ 4023 3342 1037
+ 4019 3410 1449
+ 4013 3471 1806
+ 4006 3535 2189
+ 3996 3589 2542
+ 3982 3633 2855
+ 3971 3667 3106
+ 3961 3694 3327
+ 3955 3710 3466
+ 3949 3720 3561
+ 3944 3724 3616
+ 3938 3727 3649
+ 3934 3728 3671
+ 3931 3729 3685
+ 2402    0    0
+ 2405    0    0
+ 2405    0  129
+ 2409    0  246
+ 2438    0  433
+ 2466    0  575
+ 2487    0  869
+ 2508    0 1138
+ 2523    0 1414
+ 2546    0 1647
+ 2563    0 1867
+ 2597    0 2052
+ 2713    0 2288
+ 2906    0 2582
+ 3027  470 2766
+ 3101  908 2878
+ 3153 1214 2956
+ 2491    0    0
+ 2494    0    0
+ 2496    0  206
+ 2505    0  315
+ 2534    0  482
+ 2562    0  649
+ 2587    0  928
+ 2610    0 1210
+ 2628    0 1493
+ 2648    0 1743
+ 2666    0 1968
+ 2697    0 2156
+ 2804    0 2387
+ 2984    0 2663
+ 3096  587 2835
+ 3165 1039 2943
+ 3214 1354 3018
+ 2582    0    0
+ 2589    0    0
+ 2596    0  233
+ 2606    0  351
+ 2639    0  512
+ 2664    0  711
+ 2691    0  988
+ 2713    0 1285
+ 2733    0 1583
+ 2752    0 1839
+ 2768    0 2079
+ 2797    0 2274
+ 2897    0 2494
+ 3060  225 2740
+ 3163  721 2897
+ 3227 1189 2999
+ 3272 1515 3071
+ 2692  445    0
+ 2700  455    0
+ 2709  457  260
+ 2720  468  382
+ 2752  485  554
+ 2779  505  768
+ 2807  511 1059
+ 2831  489 1373
+ 2852   30 1683
+ 2871    0 1950
+ 2888    0 2196
+ 2914    0 2396
+ 3002  227 2604
+ 3142  593 2823
+ 3235  885 2966
+ 3295 1356 3062
+ 3337 1693 3129
+ 2800  670    0
+ 2812  688    0
+ 2823  691  272
+ 2836  711  402
+ 2870  732  591
+ 2898  766  823
+ 2924  779 1132
+ 2949  811 1455
+ 2967  816 1773
+ 2987  834 2052
+ 3002  847 2309
+ 3024  884 2509
+ 3095 1046 2702
+ 3221 1378 2903
+ 3309 1607 3040
+ 3360 1753 3125
+ 3396 1856 3185
+ 2937  893    0
+ 2954  934    0
+ 2970  964  290
+ 2983  975  419
+ 3021 1016  635
+ 3048 1044  876
+ 3076 1085 1213
+ 3096 1116 1553
+ 3112 1143 1885
+ 3129 1176 2175
+ 3142 1200 2447
+ 3158 1235 2648
+ 3215 1382 2831
+ 3326 1680 3013
+ 3396 1866 3127
+ 3438 1978 3199
+ 3467 2057 3250
+ 3118 1252    0
+ 3133 1276    0
+ 3148 1293  281
+ 3166 1326  445
+ 3202 1362  668
+ 3230 1410  943
+ 3256 1455 1296
+ 3276 1510 1657
+ 3292 1551 2012
+ 3304 1585 2310
+ 3312 1621 2587
+ 3322 1653 2788
+ 3364 1769 2963
+ 3448 1999 3121
+ 3500 2142 3221
+ 3531 2238 3281
+ 3553 2305 3324
+ 3306 1584    0
+ 3323 1626    0
+ 3341 1663    0
+ 3357 1688  432
+ 3392 1748  710
+ 3417 1795  999
+ 3442 1867 1385
+ 3456 1916 1760
+ 3469 1970 2130
+ 3476 2009 2443
+ 3478 2043 2726
+ 3482 2070 2928
+ 3507 2160 3090
+ 3562 2332 3224
+ 3603 2453 3311
+ 3626 2527 3366
+ 3643 2579 3404
+ 3521 2033    0
+ 3529 2048    0
+ 3542 2066    0
+ 3561 2108  404
+ 3593 2166  724
+ 3614 2232 1058
+ 3637 2309 1470
+ 3645 2373 1867
+ 3652 2433 2256
+ 3653 2471 2573
+ 3651 2512 2857
+ 3647 2528 3054
+ 3661 2590 3213
+ 3687 2691 3327
+ 3708 2766 3401
+ 3722 2826 3448
+ 3732 2868 3480
+ 3679 2358    0
+ 3690 2387    0
+ 3705 2419    0
+ 3721 2462  350
+ 3749 2526  741
+ 3767 2595 1099
+ 3784 2678 1532
+ 3789 2746 1945
+ 3787 2802 2335
+ 3783 2846 2664
+ 3778 2884 2948
+ 3773 2906 3153
+ 3779 2951 3307
+ 3795 3020 3411
+ 3804 3063 3476
+ 3807 3091 3514
+ 3814 3123 3545
+ 3824 2683    0
+ 3828 2697    0
+ 3839 2725    0
+ 3857 2776    0
+ 3885 2844  745
+ 3901 2916 1129
+ 3910 2995 1582
+ 3909 3061 2002
+ 3901 3117 2399
+ 3894 3156 2731
+ 3888 3210 3031
+ 3878 3227 3235
+ 3877 3255 3384
+ 3882 3292 3477
+ 3885 3315 3536
+ 3885 3333 3571
+ 3886 3351 3598
+ 3896 2841    0
+ 3906 2872    0
+ 3919 2905    0
+ 3935 2956    0
+ 3958 3025  788
+ 3973 3099 1182
+ 3977 3175 1631
+ 3976 3251 2054
+ 3966 3309 2453
+ 3957 3355 2788
+ 3947 3396 3075
+ 3938 3418 3282
+ 3933 3435 3427
+ 3930 3450 3513
+ 3930 3464 3569
+ 3930 3482 3604
+ 3930 3495 3629
+ 3947 2964    0
+ 3964 3010    0
+ 3983 3060    0
+ 3994 3108    0
+ 4012 3181  924
+ 4020 3246 1329
+ 4025 3326 1766
+ 4017 3391 2174
+ 4010 3455 2562
+ 3999 3498 2882
+ 3988 3533 3151
+ 3978 3551 3334
+ 3974 3567 3466
+ 3971 3582 3549
+ 3969 3592 3603
+ 3963 3595 3633
+ 3959 3598 3654
+ 3984 3052    0
+ 4003 3104    0
+ 4022 3163    0
+ 4033 3218    0
+ 4041 3288 1147
+ 4043 3350 1537
+ 4046 3424 1948
+ 4036 3480 2329
+ 4029 3539 2691
+ 4017 3578 2984
+ 4007 3609 3230
+ 3999 3624 3380
+ 3994 3640 3512
+ 3989 3645 3567
+ 3988 3654 3620
+ 3982 3658 3650
+ 3978 3660 3671
+ 4008 3107    0
+ 4027 3163    0
+ 4047 3228   77
+ 4057 3287  345
+ 4062 3356 1287
+ 4059 3416 1675
+ 4059 3487 2068
+ 4048 3539 2436
+ 4041 3592 2772
+ 4029 3628 3048
+ 4018 3656 3280
+ 4011 3671 3422
+ 4007 3686 3541
+ 4002 3691 3596
+ 3999 3693 3631
+ 3994 3697 3660
+ 3989 3699 3682
+ 4023 3145    0
+ 4041 3202    0
+ 4059 3267  439
+ 4070 3330  753
+ 4070 3398 1388
+ 4066 3458 1759
+ 4062 3524 2146
+ 4052 3578 2505
+ 4043 3625 2828
+ 4031 3658 3084
+ 4022 3687 3312
+ 4015 3702 3453
+ 4010 3714 3557
+ 4006 3719 3612
+ 4003 3721 3646
+ 3999 3723 3667
+ 3994 3725 3688
+ 4034 3172    0
+ 4052 3230    0
+ 4068 3295  700
+ 4080 3361 1047
+ 4076 3428 1461
+ 4071 3489 1819
+ 4064 3552 2201
+ 4055 3606 2554
+ 4044 3649 2870
+ 4033 3682 3118
+ 4024 3708 3337
+ 4018 3725 3475
+ 4013 3734 3568
+ 4008 3739 3623
+ 4005 3741 3658
+ 4001 3743 3679
+ 3998 3744 3693
+ 2447    0    0
+ 2450    0    0
+ 2451    0  138
+ 2455    0  250
+ 2484    0  437
+ 2511    0  583
+ 2533    0  876
+ 2554    0 1149
+ 2569    0 1425
+ 2591    0 1659
+ 2606    0 1878
+ 2640    0 2062
+ 2756    0 2299
+ 2949    0 2594
+ 3070  470 2778
+ 3145  931 2893
+ 3197 1237 2971
+ 2536    0    0
+ 2539    0    0
+ 2542    0  211
+ 2550    0  319
+ 2580    0  488
+ 2607    0  655
+ 2632    0  935
+ 2655    0 1221
+ 2672    0 1503
+ 2691    0 1755
+ 2709    0 1980
+ 2739    0 2168
+ 2846    0 2398
+ 3026    0 2674
+ 3138  587 2847
+ 3209 1063 2957
+ 3258 1378 3032
+ 2628    0    0
+ 2634    0    0
+ 2640    0  242
+ 2650    0  355
+ 2681    0  524
+ 2708    0  715
+ 2733    0  999
+ 2756    0 1296
+ 2775    0 1593
+ 2793    0 1848
+ 2809    0 2091
+ 2838    0 2287
+ 2937    0 2506
+ 3100  225 2753
+ 3203  721 2909
+ 3271 1214 3013
+ 3315 1540 3084
+ 2736  444    0
+ 2744  458    0
+ 2751  469  268
+ 2762  477  385
+ 2794  500  566
+ 2821  517  772
+ 2849  530 1071
+ 2872  526 1384
+ 2892  327 1692
+ 2912  249 1960
+ 2928    0 2209
+ 2954    0 2409
+ 3041  478 2616
+ 3181  844 2835
+ 3275 1136 2979
+ 3338 1383 3075
+ 3380 1719 3142
+ 2842  679    0
+ 2855  701    0
+ 2864  711  281
+ 2877  727  406
+ 2910  751  604
+ 2938  782  828
+ 2965  800 1143
+ 2989  829 1466
+ 3007  839 1784
+ 3027  861 2062
+ 3042  873 2322
+ 3064  909 2522
+ 3135 1076 2714
+ 3261 1408 2915
+ 3348 1636 3051
+ 3403 1779 3137
+ 3439 1882 3196
+ 2979  907    0
+ 2996  949    0
+ 3011  979  296
+ 3024  990  421
+ 3061 1031  643
+ 3089 1060  882
+ 3116 1101 1224
+ 3137 1132 1565
+ 3153 1159 1896
+ 3170 1194 2184
+ 3183 1219 2459
+ 3200 1254 2661
+ 3256 1402 2843
+ 3368 1700 3025
+ 3437 1886 3139
+ 3481 2003 3211
+ 3510 2081 3261
+ 3162 1271    0
+ 3176 1298    0
+ 3190 1319  288
+ 3208 1348  445
+ 3243 1388  678
+ 3272 1434  947
+ 3297 1482 1307
+ 3318 1535 1668
+ 3333 1578 2022
+ 3345 1614 2319
+ 3353 1649 2599
+ 3364 1681 2800
+ 3405 1798 2973
+ 3489 2029 3132
+ 3542 2172 3231
+ 3575 2262 3293
+ 3596 2329 3335
+ 3348 1606    0
+ 3365 1648    0
+ 3383 1683    0
+ 3399 1709  431
+ 3433 1768  718
+ 3458 1816 1004
+ 3482 1887 1394
+ 3497 1939 1771
+ 3509 1990 2139
+ 3516 2029 2452
+ 3519 2065 2738
+ 3523 2091 2940
+ 3549 2182 3101
+ 3604 2353 3234
+ 3644 2474 3322
+ 3669 2549 3376
+ 3686 2601 3415
+ 3564 2055    0
+ 3571 2071    0
+ 3584 2092    0
+ 3602 2130  403
+ 3631 2190  736
+ 3653 2254 1061
+ 3675 2334 1480
+ 3684 2397 1877
+ 3690 2456 2262
+ 3691 2494 2578
+ 3691 2536 2866
+ 3686 2552 3063
+ 3700 2614 3220
+ 3726 2715 3333
+ 3747 2790 3407
+ 3764 2848 3457
+ 3774 2890 3489
+ 3721 2382    0
+ 3730 2409    0
+ 3742 2438    0
+ 3759 2481  347
+ 3784 2543  755
+ 3804 2613 1102
+ 3819 2695 1541
+ 3825 2766 1954
+ 3823 2820 2343
+ 3820 2864 2670
+ 3816 2903 2956
+ 3811 2925 3162
+ 3817 2969 3312
+ 3832 3037 3416
+ 3842 3080 3481
+ 3848 3107 3522
+ 3855 3139 3553
+ 3861 2700    0
+ 3865 2714    0
+ 3877 2745    0
+ 3895 2794    0
+ 3921 2863  756
+ 3938 2934 1131
+ 3947 3014 1589
+ 3946 3079 2010
+ 3938 3135 2406
+ 3932 3173 2736
+ 3927 3228 3039
+ 3917 3245 3243
+ 3916 3272 3389
+ 3921 3309 3483
+ 3924 3332 3541
+ 3926 3347 3578
+ 3927 3365 3604
+ 3933 2858    0
+ 3944 2889    0
+ 3956 2925    0
+ 3972 2974    0
+ 3995 3044  798
+ 4010 3117 1184
+ 4014 3194 1639
+ 4013 3270 2061
+ 4003 3326 2459
+ 3995 3372 2794
+ 3986 3413 3083
+ 3978 3436 3290
+ 3972 3452 3432
+ 3969 3468 3519
+ 3969 3482 3574
+ 3971 3496 3611
+ 3971 3509 3636
+ 3984 2976    0
+ 4000 3022    0
+ 4016 3070    0
+ 4028 3119    0
+ 4044 3191  944
+ 4054 3257 1332
+ 4057 3335 1774
+ 4052 3402 2181
+ 4044 3463 2566
+ 4034 3506 2885
+ 4024 3543 3156
+ 4015 3561 3339
+ 4010 3575 3468
+ 4007 3590 3551
+ 4005 3599 3605
+ 4004 3605 3639
+ 4000 3608 3660
+ 4021 3065    0
+ 4039 3117    0
+ 4055 3173    0
+ 4067 3229    0
+ 4072 3298 1166
+ 4077 3360 1540
+ 4078 3432 1956
+ 4070 3491 2335
+ 4063 3547 2696
+ 4053 3586 2987
+ 4043 3618 3236
+ 4036 3635 3386
+ 4030 3648 3514
+ 4025 3653 3569
+ 4024 3662 3622
+ 4023 3668 3655
+ 4019 3670 3677
+ 4045 3120    0
+ 4063 3176    0
+ 4080 3238   77
+ 4091 3298  345
+ 4093 3366 1307
+ 4093 3427 1678
+ 4091 3495 2076
+ 4083 3550 2443
+ 4074 3600 2777
+ 4064 3636 3051
+ 4055 3666 3285
+ 4048 3681 3428
+ 4043 3694 3543
+ 4038 3698 3598
+ 4035 3701 3633
+ 4034 3707 3666
+ 4030 3710 3687
+ 4060 3156    0
+ 4078 3213    0
+ 4095 3279  447
+ 4095 3342  760
+ 4095 3410 1396
+ 4095 3469 1767
+ 4095 3535 2153
+ 4090 3588 2512
+ 4082 3636 2837
+ 4071 3668 3091
+ 4062 3696 3318
+ 4056 3712 3459
+ 4051 3723 3562
+ 4046 3728 3617
+ 4044 3730 3651
+ 4042 3732 3673
+ 4038 3735 3694
+ 4071 3183    0
+ 4089 3241    0
+ 4095 3307  708
+ 4095 3373 1054
+ 4095 3440 1469
+ 4095 3500 1827
+ 4095 3562 2209
+ 4093 3616 2562
+ 4083 3660 2878
+ 4073 3692 3125
+ 4064 3718 3344
+ 4059 3734 3482
+ 4053 3743 3573
+ 4049 3748 3628
+ 4046 3750 3662
+ 4044 3752 3684
+ 4041 3753 3699
+ 2479    0    0
+ 2483    0    0
+ 2485    0  144
+ 2488    0  252
+ 2518    0  440
+ 2543    0  590
+ 2566    0  881
+ 2586    0 1156
+ 2602    0 1432
+ 2623    0 1668
+ 2639    0 1887
+ 2671    0 2070
+ 2787    0 2308
+ 2980    0 2602
+ 3101  470 2786
+ 3176  931 2901
+ 3229 1253 2982
+ 2569    0    0
+ 2572    0    0
+ 2575    0  215
+ 2583    0  322
+ 2613    0  492
+ 2640    0  659
+ 2665    0  941
+ 2687    0 1228
+ 2704    0 1511
+ 2723    0 1764
+ 2740    0 1989
+ 2770    0 2176
+ 2877    0 2407
+ 3056    0 2683
+ 3168  587 2855
+ 3240 1063 2965
+ 3290 1396 3043
+ 2661    0    0
+ 2667    0    0
+ 2672    0  249
+ 2681    0  358
+ 2712    0  533
+ 2739    0  717
+ 2764    0 1007
+ 2786    0 1303
+ 2805    0 1600
+ 2823    0 1857
+ 2839    0 2098
+ 2867    0 2296
+ 2965    0 2515
+ 3129  225 2761
+ 3232  721 2918
+ 3300 1214 3021
+ 3347 1559 3094
+ 2768  442    0
+ 2775  461    0
+ 2782  477  274
+ 2793  484  388
+ 2823  511  575
+ 2851  526  774
+ 2878  545 1079
+ 2902  553 1392
+ 2922  542 1699
+ 2941  456 1968
+ 2957   58 2216
+ 2983    0 2418
+ 3069  660 2625
+ 3210 1026 2844
+ 3303 1318 2987
+ 3367 1565 3084
+ 3411 1737 3151
+ 2873  685    0
+ 2885  709    0
+ 2895  725  288
+ 2907  738  409
+ 2939  765  614
+ 2968  794  831
+ 2994  816 1151
+ 3018  843 1474
+ 3036  855 1791
+ 3056  877 2070
+ 3071  892 2330
+ 3093  928 2532
+ 3163 1097 2722
+ 3290 1429 2923
+ 3377 1658 3060
+ 3432 1800 3145
+ 3471 1900 3205
+ 3009  918    0
+ 3026  961    0
+ 3041  990  301
+ 3053 1000  422
+ 3090 1042  649
+ 3119 1072  887
+ 3146 1113 1231
+ 3167 1145 1573
+ 3182 1171 1904
+ 3199 1205 2192
+ 3213 1232 2466
+ 3230 1269 2671
+ 3286 1416 2852
+ 3397 1715 3034
+ 3467 1901 3148
+ 3511 2017 3220
+ 3541 2099 3269
+ 3193 1285    0
+ 3207 1313    0
+ 3221 1338  293
+ 3239 1365  446
+ 3273 1407  686
+ 3302 1450  951
+ 3327 1501 1315
+ 3347 1553 1676
+ 3362 1598 2028
+ 3375 1633 2328
+ 3383 1670 2606
+ 3394 1701 2810
+ 3435 1820 2980
+ 3519 2050 3139
+ 3572 2194 3238
+ 3605 2284 3300
+ 3628 2347 3343
+ 3379 1622    0
+ 3396 1664    0
+ 3413 1698    0
+ 3429 1724  431
+ 3462 1783  724
+ 3488 1832 1008
+ 3511 1902 1401
+ 3526 1955 1778
+ 3538 2004 2145
+ 3546 2044 2460
+ 3549 2080 2744
+ 3553 2107 2949
+ 3579 2197 3108
+ 3634 2369 3242
+ 3674 2490 3329
+ 3699 2565 3384
+ 3717 2618 3422
+ 3595 2070    0
+ 3602 2087    0
+ 3613 2111    0
+ 3631 2146  402
+ 3658 2207  744
+ 3682 2271 1063
+ 3702 2352 1487
+ 3712 2414 1885
+ 3717 2472 2267
+ 3719 2510 2584
+ 3718 2552 2870
+ 3715 2569 3070
+ 3729 2632 3224
+ 3755 2732 3337
+ 3776 2808 3412
+ 3793 2865 3461
+ 3805 2906 3496
+ 3751 2399    0
+ 3761 2426    0
+ 3772 2456    0
+ 3788 2497  345
+ 3813 2560  761
+ 3833 2630 1104
+ 3847 2714 1548
+ 3854 2785 1962
+ 3852 2839 2350
+ 3849 2882 2679
+ 3845 2922 2963
+ 3840 2943 3169
+ 3846 2986 3318
+ 3862 3055 3422
+ 3872 3098 3487
+ 3878 3125 3528
+ 3885 3152 3558
+ 3891 2716    0
+ 3894 2730    0
+ 3903 2759    0
+ 3922 2807    0
+ 3947 2876  765
+ 3965 2947 1133
+ 3972 3026 1596
+ 3973 3094 2017
+ 3964 3148 2410
+ 3959 3186 2743
+ 3954 3240 3043
+ 3945 3258 3249
+ 3943 3285 3393
+ 3948 3322 3486
+ 3951 3345 3545
+ 3953 3359 3581
+ 3957 3376 3609
+ 3960 2870    0
+ 3971 2902    0
+ 3983 2939    0
+ 3999 2987    0
+ 4021 3057  806
+ 4037 3130 1186
+ 4041 3207 1644
+ 4039 3283 2067
+ 4030 3339 2464
+ 4023 3384 2800
+ 4014 3425 3087
+ 4006 3449 3296
+ 4000 3465 3437
+ 3997 3480 3523
+ 3997 3494 3578
+ 3999 3509 3615
+ 4001 3519 3641
+ 4011 2986    0
+ 4026 3031    0
+ 4040 3077    0
+ 4053 3127    0
+ 4068 3199  958
+ 4079 3265 1335
+ 4081 3341 1779
+ 4077 3410 2186
+ 4068 3469 2569
+ 4060 3513 2889
+ 4050 3548 3158
+ 4042 3569 3344
+ 4036 3581 3469
+ 4033 3595 3552
+ 4031 3605 3606
+ 4030 3611 3640
+ 4029 3615 3664
+ 4048 3074    0
+ 4065 3126    0
+ 4079 3181    0
+ 4092 3237    0
+ 4095 3306 1181
+ 4095 3368 1542
+ 4095 3438 1962
+ 4095 3500 2340
+ 4087 3553 2699
+ 4078 3593 2991
+ 4069 3624 3237
+ 4063 3642 3390
+ 4056 3654 3516
+ 4052 3658 3571
+ 4050 3668 3623
+ 4049 3674 3657
+ 4048 3678 3680
+ 4072 3130    0
+ 4089 3185    0
+ 4095 3245   77
+ 4095 3306  345
+ 4095 3374 1321
+ 4095 3435 1681
+ 4095 3501 2082
+ 4095 3559 2447
+ 4095 3606 2780
+ 4089 3643 3055
+ 4080 3671 3287
+ 4075 3689 3432
+ 4069 3700 3545
+ 4064 3704 3600
+ 4061 3707 3634
+ 4060 3713 3667
+ 4060 3717 3691
+ 4087 3165    0
+ 4095 3222    0
+ 4095 3286  447
+ 4095 3350  760
+ 4095 3417 1410
+ 4095 3477 1769
+ 4095 3541 2159
+ 4095 3597 2517
+ 4095 3641 2840
+ 4095 3675 3096
+ 4088 3702 3320
+ 4082 3719 3464
+ 4077 3729 3563
+ 4072 3733 3618
+ 4070 3736 3653
+ 4068 3738 3674
+ 4067 3742 3698
+ 4095 3191    0
+ 4095 3250    0
+ 4095 3316  714
+ 4095 3381 1059
+ 4095 3448 1475
+ 4095 3508 1833
+ 4095 3570 2214
+ 4095 3624 2568
+ 4095 3667 2884
+ 4095 3699 3132
+ 4093 3725 3350
+ 4088 3741 3486
+ 4083 3750 3577
+ 4078 3754 3632
+ 4076 3757 3666
+ 4074 3759 3687
+ 4072 3760 3703
+
diff --git a/release/datafiles/colormanagement/luts/dci_xyz.spi1d b/release/datafiles/colormanagement/luts/dci_xyz.spi1d
new file mode 100644 (file)
index 0000000..548956c
--- /dev/null
@@ -0,0 +1,65542 @@
+Version 1
+From 0.0 1.0910416666666667
+Length 65536
+Components 1
+{
+    0.000000
+    0.013916
+    0.018311
+    0.021240
+    0.023926
+    0.025879
+    0.027832
+    0.029541
+    0.031006
+    0.032471
+    0.033936
+    0.035156
+    0.036377
+    0.037598
+    0.038574
+    0.039551
+    0.040771
+    0.041748
+    0.042480
+    0.043457
+    0.044434
+    0.045166
+    0.045898
+    0.046875
+    0.047607
+    0.048340
+    0.049072
+    0.049805
+    0.050537
+    0.051270
+    0.051758
+    0.052490
+    0.053223
+    0.053711
+    0.054443
+    0.054932
+    0.055664
+    0.056152
+    0.056885
+    0.057373
+    0.057861
+    0.058350
+    0.059082
+    0.059570
+    0.060059
+    0.060547
+    0.061035
+    0.061523
+    0.062012
+    0.062500
+    0.062988
+    0.063477
+    0.063965
+    0.064453
+    0.064941
+    0.065430
+    0.065918
+    0.066406
+    0.066895
+    0.067139
+    0.067627
+    0.068115
+    0.068604
+    0.069092
+    0.069336
+    0.069824
+    0.070312
+    0.070557
+    0.071045
+    0.071533
+    0.071777
+    0.072266
+    0.072510
+    0.072998
+    0.073486
+    0.073730
+    0.074219
+    0.074463
+    0.074951
+    0.075195
+    0.075684
+    0.075928
+    0.076416
+    0.076660
+    0.077148
+    0.077393
+    0.077881
+    0.078125
+    0.078369
+    0.078857
+    0.079102
+    0.079590
+    0.079834
+    0.080078
+    0.080566
+    0.080811
+    0.081055
+    0.081543
+    0.081787
+    0.082031
+    0.082520
+    0.082764
+    0.083008
+    0.083252
+    0.083740
+    0.083984
+    0.084229
+    0.084473
+    0.084961
+    0.085205
+    0.085449
+    0.085693
+    0.086182
+    0.086426
+    0.086670
+    0.086914
+    0.087158
+    0.087646
+    0.087891
+    0.088135
+    0.088379
+    0.088623
+    0.088867
+    0.089355
+    0.089600
+    0.089844
+    0.090088
+    0.090332
+    0.090576
+    0.090820
+    0.091064
+    0.091553
+    0.091797
+    0.092041
+    0.092285
+    0.092529
+    0.092773
+    0.093018
+    0.093262
+    0.093506
+    0.093750
+    0.093994
+    0.094238
+    0.094482
+    0.094727
+    0.094971
+    0.095459
+    0.095703
+    0.095947
+    0.096191
+    0.096436
+    0.096680
+    0.096924
+    0.097168
+    0.097412
+    0.097656
+    0.097900
+    0.098145
+    0.098389
+    0.098633
+    0.098877
+    0.099121
+    0.099121
+    0.099365
+    0.099609
+    0.099854
+    0.100098
+    0.100342
+    0.100586
+    0.100830
+    0.101074
+    0.101318
+    0.101562
+    0.101807
+    0.102051
+    0.102295
+    0.102539
+    0.102783
+    0.102783
+    0.103027
+    0.103271
+    0.103516
+    0.103760
+    0.104004
+    0.104248
+    0.104492
+    0.104736
+    0.104980
+    0.104980
+    0.105225
+    0.105469
+    0.105713
+    0.105957
+    0.106201
+    0.106445
+    0.106689
+    0.106689
+    0.106934
+    0.107178
+    0.107422
+    0.107666
+    0.107910
+    0.108154
+    0.108154
+    0.108398
+    0.108643
+    0.108887
+    0.109131
+    0.109375
+    0.109375
+    0.109619
+    0.109863
+    0.110107
+    0.110352
+    0.110352
+    0.110596
+    0.110840
+    0.111084
+    0.111328
+    0.111572
+    0.111572
+    0.111816
+    0.112061
+    0.112305
+    0.112549
+    0.112549
+    0.112793
+    0.113037
+    0.113281
+    0.113281
+    0.113525
+    0.113770
+    0.114014
+    0.114258
+    0.114258
+    0.114502
+    0.114746
+    0.114990
+    0.114990
+    0.115234
+    0.115479
+    0.115723
+    0.115723
+    0.115967
+    0.116211
+    0.116455
+    0.116455
+    0.116699
+    0.116943
+    0.117188
+    0.117188
+    0.117432
+    0.117676
+    0.117920
+    0.117920
+    0.118164
+    0.118408
+    0.118652
+    0.118652
+    0.118896
+    0.119141
+    0.119141
+    0.119385
+    0.119629
+    0.119873
+    0.119873
+    0.120117
+    0.120361
+    0.120361
+    0.120605
+    0.120850
+    0.121094
+    0.121094
+    0.121338
+    0.121582
+    0.121582
+    0.121826
+    0.122070
+    0.122070
+    0.122314
+    0.122559
+    0.122803
+    0.122803
+    0.123047
+    0.123291
+    0.123291
+    0.123535
+    0.123779
+    0.123779
+    0.124023
+    0.124268
+    0.124268
+    0.124512
+    0.124756
+    0.124756
+    0.125000
+    0.125244
+    0.125244
+    0.125488
+    0.125732
+    0.125732
+    0.125977
+    0.126221
+    0.126221
+    0.126465
+    0.126709
+    0.126709
+    0.126953
+    0.127197
+    0.127197
+    0.127441
+    0.127686
+    0.127686
+    0.127930
+    0.127930
+    0.128174
+    0.128418
+    0.128418
+    0.128662
+    0.128906
+    0.128906
+    0.129150
+    0.129395
+    0.129395
+    0.129639
+    0.129639
+    0.129883
+    0.130127
+    0.130127
+    0.130371
+    0.130615
+    0.130615
+    0.130859
+    0.130859
+    0.131104
+    0.131348
+    0.131348
+    0.131592
+    0.131836
+    0.131836
+    0.132080
+    0.132080
+    0.132324
+    0.132568
+    0.132568
+    0.132812
+    0.132812
+    0.133057
+    0.133301
+    0.133301
+    0.133545
+    0.133545
+    0.133789
+    0.134033
+    0.134033
+    0.134277
+    0.134277
+    0.134521
+    0.134766
+    0.134766
+    0.135010
+    0.135010
+    0.135254
+    0.135498
+    0.135498
+    0.135742
+    0.135742
+    0.135986
+    0.135986
+    0.136230
+    0.136475
+    0.136475
+    0.136719
+    0.136719
+    0.136963
+    0.137207
+    0.137207
+    0.137451
+    0.137451
+    0.137695
+    0.137695
+    0.137939
+    0.138184
+    0.138184
+    0.138428
+    0.138428
+    0.138672
+    0.138672
+    0.138916
+    0.139160
+    0.139160
+    0.139404
+    0.139404
+    0.139648
+    0.139648
+    0.139893
+    0.139893
+    0.140137
+    0.140381
+    0.140381
+    0.140625
+    0.140625
+    0.140869
+    0.140869
+    0.141113
+    0.141113
+    0.141357
+    0.141602
+    0.141602
+    0.141846
+    0.141846
+    0.142090
+    0.142090
+    0.142334
+    0.142334
+    0.142578
+    0.142578
+    0.142822
+    0.143066
+    0.143066
+    0.143311
+    0.143311
+    0.143555
+    0.143555
+    0.143799
+    0.143799
+    0.144043
+    0.144043
+    0.144287
+    0.144287
+    0.144531
+    0.144531
+    0.144775
+    0.145020
+    0.145020
+    0.145264
+    0.145264
+    0.145508
+    0.145508
+    0.145752
+    0.145752
+    0.145996
+    0.145996
+    0.146240
+    0.146240
+    0.146484
+    0.146484
+    0.146729
+    0.146729
+    0.146973
+    0.146973
+    0.147217
+    0.147217
+    0.147461
+    0.147461
+    0.147705
+    0.147705
+    0.147949
+    0.147949
+    0.148193
+    0.148193
+    0.148438
+    0.148682
+    0.148682
+    0.148926
+    0.148926
+    0.149170
+    0.149170
+    0.149414
+    0.149414
+    0.149658
+    0.149658
+    0.149902
+    0.149902
+    0.150146
+    0.150146
+    0.150391
+    0.150391
+    0.150635
+    0.150635
+    0.150879
+    0.150879
+    0.151123
+    0.151123
+    0.151367
+    0.151367
+    0.151367
+    0.151611
+    0.151611
+    0.151855
+    0.151855
+    0.152100
+    0.152100
+    0.152344
+    0.152344
+    0.152588
+    0.152588
+    0.152832
+    0.152832
+    0.153076
+    0.153076
+    0.153320
+    0.153320
+    0.153564
+    0.153564
+    0.153809
+    0.153809
+    0.154053
+    0.154053
+    0.154297
+    0.154297
+    0.154541
+    0.154541
+    0.154785
+    0.154785
+    0.154785
+    0.155029
+    0.155029
+    0.155273
+    0.155273
+    0.155518
+    0.155518
+    0.155762
+    0.155762
+    0.156006
+    0.156006
+    0.156250
+    0.156250
+    0.156494
+    0.156494
+    0.156738
+    0.156738
+    0.156738
+    0.156982
+    0.156982
+    0.157227
+    0.157227
+    0.157471
+    0.157471
+    0.157715
+    0.157715
+    0.157959
+    0.157959
+    0.158203
+    0.158203
+    0.158203
+    0.158447
+    0.158447
+    0.158691
+    0.158691
+    0.158936
+    0.158936
+    0.159180
+    0.159180
+    0.159424
+    0.159424
+    0.159424
+    0.159668
+    0.159668
+    0.159912
+    0.159912
+    0.160156
+    0.160156
+    0.160400
+    0.160400
+    0.160645
+    0.160645
+    0.160645
+    0.160889
+    0.160889
+    0.161133
+    0.161133
+    0.161377
+    0.161377
+    0.161621
+    0.161621
+    0.161621
+    0.161865
+    0.161865
+    0.162109
+    0.162109
+    0.162354
+    0.162354
+    0.162598
+    0.162598
+    0.162598
+    0.162842
+    0.162842
+    0.163086
+    0.163086
+    0.163330
+    0.163330
+    0.163330
+    0.163574
+    0.163574
+    0.163818
+    0.163818
+    0.164062
+    0.164062
+    0.164062
+    0.164307
+    0.164307
+    0.164551
+    0.164551
+    0.164795
+    0.164795
+    0.164795
+    0.165039
+    0.165039
+    0.165283
+    0.165283
+    0.165527
+    0.165527
+    0.165527
+    0.165771
+    0.165771
+    0.166016
+    0.166016
+    0.166260
+    0.166260
+    0.166260
+    0.166504
+    0.166504
+    0.166748
+    0.166748
+    0.166992
+    0.166992
+    0.166992
+    0.167236
+    0.167236
+    0.167480
+    0.167480
+    0.167725
+    0.167725
+    0.167725
+    0.167969
+    0.167969
+    0.168213
+    0.168213
+    0.168213
+    0.168457
+    0.168457
+    0.168701
+    0.168701
+    0.168701
+    0.168945
+    0.168945
+    0.169189
+    0.169189
+    0.169434
+    0.169434
+    0.169434
+    0.169678
+    0.169678
+    0.169922
+    0.169922
+    0.169922
+    0.170166
+    0.170166
+    0.170410
+    0.170410
+    0.170410
+    0.170654
+    0.170654
+    0.170898
+    0.170898
+    0.170898
+    0.171143
+    0.171143
+    0.171387
+    0.171387
+    0.171631
+    0.171631
+    0.171631
+    0.171875
+    0.171875
+    0.172119
+    0.172119
+    0.172119
+    0.172363
+    0.172363
+    0.172607
+    0.172607
+    0.172607
+    0.172852
+    0.172852
+    0.173096
+    0.173096
+    0.173096
+    0.173340
+    0.173340
+    0.173584
+    0.173584
+    0.173584
+    0.173828
+    0.173828
+    0.173828
+    0.174072
+    0.174072
+    0.174316
+    0.174316
+    0.174316
+    0.174561
+    0.174561
+    0.174805
+    0.174805
+    0.174805
+    0.175049
+    0.175049
+    0.175293
+    0.175293
+    0.175293
+    0.175537
+    0.175537
+    0.175781
+    0.175781
+    0.175781
+    0.176025
+    0.176025
+    0.176025
+    0.176270
+    0.176270
+    0.176514
+    0.176514
+    0.176514
+    0.176758
+    0.176758
+    0.177002
+    0.177002
+    0.177002
+    0.177246
+    0.177246
+    0.177246
+    0.177490
+    0.177490
+    0.177734
+    0.177734
+    0.177734
+    0.177979
+    0.177979
+    0.177979
+    0.178223
+    0.178223
+    0.178467
+    0.178467
+    0.178467
+    0.178711
+    0.178711
+    0.178955
+    0.178955
+    0.178955
+    0.179199
+    0.179199
+    0.179199
+    0.179443
+    0.179443
+    0.179688
+    0.179688
+    0.179688
+    0.179932
+    0.179932
+    0.179932
+    0.180176
+    0.180176
+    0.180420
+    0.180420
+    0.180420
+    0.180664
+    0.180664
+    0.180664
+    0.180908
+    0.180908
+    0.180908
+    0.181152
+    0.181152
+    0.181396
+    0.181396
+    0.181396
+    0.181641
+    0.181641
+    0.181641
+    0.181885
+    0.181885
+    0.182129
+    0.182129
+    0.182129
+    0.182373
+    0.182373
+    0.182373
+    0.182617
+    0.182617
+    0.182617
+    0.182861
+    0.182861
+    0.183105
+    0.183105
+    0.183105
+    0.183350
+    0.183350
+    0.183350
+    0.183594
+    0.183594
+    0.183594
+    0.183838
+    0.183838
+    0.184082
+    0.184082
+    0.184082
+    0.184326
+    0.184326
+    0.184326
+    0.184570
+    0.184570
+    0.184570
+    0.184814
+    0.184814
+    0.184814
+    0.185059
+    0.185059
+    0.185303
+    0.185303
+    0.185303
+    0.185547
+    0.185547
+    0.185547
+    0.185791
+    0.185791
+    0.185791
+    0.186035
+    0.186035
+    0.186035
+    0.186279
+    0.186279
+    0.186279
+    0.186523
+    0.186523
+    0.186768
+    0.186768
+    0.186768
+    0.187012
+    0.187012
+    0.187012
+    0.187256
+    0.187256
+    0.187256
+    0.187500
+    0.187500
+    0.187500
+    0.187744
+    0.187744
+    0.187744
+    0.187988
+    0.187988
+    0.187988
+    0.188232
+    0.188232
+    0.188477
+    0.188477
+    0.188477
+    0.188721
+    0.188721
+    0.188721
+    0.188965
+    0.188965
+    0.188965
+    0.189209
+    0.189209
+    0.189209
+    0.189453
+    0.189453
+    0.189453
+    0.189697
+    0.189697
+    0.189697
+    0.189941
+    0.189941
+    0.189941
+    0.190186
+    0.190186
+    0.190186
+    0.190430
+    0.190430
+    0.190430
+    0.190674
+    0.190674
+    0.190674
+    0.190918
+    0.190918
+    0.191162
+    0.191162
+    0.191162
+    0.191406
+    0.191406
+    0.191406
+    0.191650
+    0.191650
+    0.191650
+    0.191895
+    0.191895
+    0.191895
+    0.192139
+    0.192139
+    0.192139
+    0.192383
+    0.192383
+    0.192383
+    0.192627
+    0.192627
+    0.192627
+    0.192871
+    0.192871
+    0.192871
+    0.193115
+    0.193115
+    0.193115
+    0.193359
+    0.193359
+    0.193359
+    0.193604
+    0.193604
+    0.193604
+    0.193848
+    0.193848
+    0.193848
+    0.194092
+    0.194092
+    0.194092
+    0.194336
+    0.194336
+    0.194336
+    0.194580
+    0.194580
+    0.194580
+    0.194824
+    0.194824
+    0.194824
+    0.195068
+    0.195068
+    0.195068
+    0.195312
+    0.195312
+    0.195312
+    0.195312
+    0.195557
+    0.195557
+    0.195557
+    0.195801
+    0.195801
+    0.195801
+    0.196045
+    0.196045
+    0.196045
+    0.196289
+    0.196289
+    0.196289
+    0.196533
+    0.196533
+    0.196533
+    0.196777
+    0.196777
+    0.196777
+    0.197021
+    0.197021
+    0.197021
+    0.197266
+    0.197266
+    0.197266
+    0.197510
+    0.197510
+    0.197510
+    0.197754
+    0.197754
+    0.197754
+    0.197998
+    0.197998
+    0.197998
+    0.197998
+    0.198242
+    0.198242
+    0.198242
+    0.198486
+    0.198486
+    0.198486
+    0.198730
+    0.198730
+    0.198730
+    0.198975
+    0.198975
+    0.198975
+    0.199219
+    0.199219
+    0.199219
+    0.199463
+    0.199463
+    0.199463
+    0.199707
+    0.199707
+    0.199707
+    0.199707
+    0.199951
+    0.199951
+    0.199951
+    0.200195
+    0.200195
+    0.200195
+    0.200439
+    0.200439
+    0.200439
+    0.200684
+    0.200684
+    0.200684
+    0.200928
+    0.200928
+    0.200928
+    0.201172
+    0.201172
+    0.201172
+    0.201172
+    0.201416
+    0.201416
+    0.201416
+    0.201660
+    0.201660
+    0.201660
+    0.201904
+    0.201904
+    0.201904
+    0.202148
+    0.202148
+    0.202148
+    0.202148
+    0.202393
+    0.202393
+    0.202393
+    0.202637
+    0.202637
+    0.202637
+    0.202881
+    0.202881
+    0.202881
+    0.203125
+    0.203125
+    0.203125
+    0.203125
+    0.203369
+    0.203369
+    0.203369
+    0.203613
+    0.203613
+    0.203613
+    0.203857
+    0.203857
+    0.203857
+    0.204102
+    0.204102
+    0.204102
+    0.204102
+    0.204346
+    0.204346
+    0.204346
+    0.204590
+    0.204590
+    0.204590
+    0.204834
+    0.204834
+    0.204834
+    0.205078
+    0.205078
+    0.205078
+    0.205078
+    0.205322
+    0.205322
+    0.205322
+    0.205566
+    0.205566
+    0.205566
+    0.205811
+    0.205811
+    0.205811
+    0.205811
+    0.206055
+    0.206055
+    0.206055
+    0.206299
+    0.206299
+    0.206299
+    0.206543
+    0.206543
+    0.206543
+    0.206543
+    0.206787
+    0.206787
+    0.206787
+    0.207031
+    0.207031
+    0.207031
+    0.207275
+    0.207275
+    0.207275
+    0.207275
+    0.207520
+    0.207520
+    0.207520
+    0.207764
+    0.207764
+    0.207764
+    0.207764
+    0.208008
+    0.208008
+    0.208008
+    0.208252
+    0.208252
+    0.208252
+    0.208496
+    0.208496
+    0.208496
+    0.208496
+    0.208740
+    0.208740
+    0.208740
+    0.208984
+    0.208984
+    0.208984
+    0.209229
+    0.209229
+    0.209229
+    0.209229
+    0.209473
+    0.209473
+    0.209473
+    0.209717
+    0.209717
+    0.209717
+    0.209717
+    0.209961
+    0.209961
+    0.209961
+    0.210205
+    0.210205
+    0.210205
+    0.210205
+    0.210449
+    0.210449
+    0.210449
+    0.210693
+    0.210693
+    0.210693
+    0.210938
+    0.210938
+    0.210938
+    0.210938
+    0.211182
+    0.211182
+    0.211182
+    0.211426
+    0.211426
+    0.211426
+    0.211426
+    0.211670
+    0.211670
+    0.211670
+    0.211914
+    0.211914
+    0.211914
+    0.211914
+    0.212158
+    0.212158
+    0.212158
+    0.212402
+    0.212402
+    0.212402
+    0.212402
+    0.212646
+    0.212646
+    0.212646
+    0.212891
+    0.212891
+    0.212891
+    0.212891
+    0.213135
+    0.213135
+    0.213135
+    0.213379
+    0.213379
+    0.213379
+    0.213379
+    0.213623
+    0.213623
+    0.213623
+    0.213867
+    0.213867
+    0.213867
+    0.213867
+    0.214111
+    0.214111
+    0.214111
+    0.214355
+    0.214355
+    0.214355
+    0.214355
+    0.214600
+    0.214600
+    0.214600
+    0.214600
+    0.214844
+    0.214844
+    0.214844
+    0.215088
+    0.215088
+    0.215088
+    0.215088
+    0.215332
+    0.215332
+    0.215332
+    0.215576
+    0.215576
+    0.215576
+    0.215576
+    0.215820
+    0.215820
+    0.215820
+    0.216064
+    0.216064
+    0.216064
+    0.216064
+    0.216309
+    0.216309
+    0.216309
+    0.216309
+    0.216553
+    0.216553
+    0.216553
+    0.216797
+    0.216797
+    0.216797
+    0.216797
+    0.217041
+    0.217041
+    0.217041
+    0.217285
+    0.217285
+    0.217285
+    0.217285
+    0.217529
+    0.217529
+    0.217529
+    0.217529
+    0.217773
+    0.217773
+    0.217773
+    0.218018
+    0.218018
+    0.218018
+    0.218018
+    0.218262
+    0.218262
+    0.218262
+    0.218262
+    0.218506
+    0.218506
+    0.218506
+    0.218750
+    0.218750
+    0.218750
+    0.218750
+    0.218994
+    0.218994
+    0.218994
+    0.218994
+    0.219238
+    0.219238
+    0.219238
+    0.219482
+    0.219482
+    0.219482
+    0.219482
+    0.219727
+    0.219727
+    0.219727
+    0.219727
+    0.219971
+    0.219971
+    0.219971
+    0.220215
+    0.220215
+    0.220215
+    0.220215
+    0.220459
+    0.220459
+    0.220459
+    0.220459
+    0.220703
+    0.220703
+    0.220703
+    0.220947
+    0.220947
+    0.220947
+    0.220947
+    0.221191
+    0.221191
+    0.221191
+    0.221191
+    0.221436
+    0.221436
+    0.221436
+    0.221436
+    0.221680
+    0.221680
+    0.221680
+    0.221924
+    0.221924
+    0.221924
+    0.221924
+    0.222168
+    0.222168
+    0.222168
+    0.222168
+    0.222412
+    0.222412
+    0.222412
+    0.222412
+    0.222656
+    0.222656
+    0.222656
+    0.222900
+    0.222900
+    0.222900
+    0.222900
+    0.223145
+    0.223145
+    0.223145
+    0.223145
+    0.223389
+    0.223389
+    0.223389
+    0.223389
+    0.223633
+    0.223633
+    0.223633
+    0.223877
+    0.223877
+    0.223877
+    0.223877
+    0.224121
+    0.224121
+    0.224121
+    0.224121
+    0.224365
+    0.224365
+    0.224365
+    0.224365
+    0.224609
+    0.224609
+    0.224609
+    0.224609
+    0.224854
+    0.224854
+    0.224854
+    0.224854
+    0.225098
+    0.225098
+    0.225098
+    0.225342
+    0.225342
+    0.225342
+    0.225342
+    0.225586
+    0.225586
+    0.225586
+    0.225586
+    0.225830
+    0.225830
+    0.225830
+    0.225830
+    0.226074
+    0.226074
+    0.226074
+    0.226074
+    0.226318
+    0.226318
+    0.226318
+    0.226318
+    0.226562
+    0.226562
+    0.226562
+    0.226562
+    0.226807
+    0.226807
+    0.226807
+    0.227051
+    0.227051
+    0.227051
+    0.227051
+    0.227295
+    0.227295
+    0.227295
+    0.227295
+    0.227539
+    0.227539
+    0.227539
+    0.227539
+    0.227783
+    0.227783
+    0.227783
+    0.227783
+    0.228027
+    0.228027
+    0.228027
+    0.228027